package controllers import ( "encoding/json" "fmt" "github.com/tealeg/xlsx" "hongze/hongze_cygx/models" "hongze/hongze_cygx/utils" "os" "path/filepath" "rdluck_tools/paging" "strconv" "strings" "time" ) //活动 type ActivityCoAntroller struct { BaseAuthController } type ActivityABaseController struct { BaseCommonController } // @Title 活动类型列表 // @Description活动类型列表接口 // @Success 200 {object} models.ActivityTypeListResp // @router /activityTypelist [get] func (this *ActivityCoAntroller) List() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } resp := new(models.ActivityTypeListResp) list, err := models.GetActivityTypeList() if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取数据失败,Err:" + err.Error() return } resp.List = list br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 活动列表 // @Description 获取活动列表接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param ChartPermissionIds query string false "行业id 多个用 , 隔开" // @Param ActivityTypeIds query string false "活动类型id 多个用 , 隔开" // @Param KeyWord query string false "搜索关键词 多个用 , 隔开" // @Param ActiveState query string false "活动进行状态 未开始:1、进行中2、已结束3" // @Param WhichDay query string false "哪一天 今天:1、明天:2,多个用 , 隔开" // @Param IsShowJurisdiction query int false "是否仅展示有权限的,1是,2否 默认为零" // @Param Label query string false "搜索主题 多个用 , 隔开" // @Success 200 {object} models.GetCygxActivityListRep // @router /list [get] func (this *ActivityCoAntroller) ActivityList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } uid := user.UserId pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") chartPermissionIds := this.GetString("ChartPermissionIds") activityTypeIds := this.GetString("ActivityTypeIds") whichDay := this.GetString("WhichDay") isShowJurisdiction, _ := this.GetInt("IsShowJurisdiction") keyWord := this.GetString("KeyWord") activeState := this.GetString("ActiveState") label := this.GetString("Label") itemSearch := new(models.CygxActivityUserSearchContent) itemSearch.UserId = uid itemSearch.CreateTime = time.Now() itemSearch.Mobile = user.Mobile itemSearch.Email = user.Email itemSearch.CompanyId = user.CompanyId itemSearch.CompanyName = user.CompanyName itemSearch.ModifyTime = time.Now() itemSearch.ChartPermissionids = chartPermissionIds itemSearch.ActivityTypeids = activityTypeIds itemSearch.ActiveState = activeState itemSearch.IsShowJurisdiction = isShowJurisdiction _, errSearch := models.AddUserSearchContent(itemSearch) if errSearch != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + errSearch.Error() return } var userType int var permissionStr string if user.CompanyId <= 1 { userType = 0 } else { total, err := models.GetCountCompanyDetailByIdGroup(user.CompanyId) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } if total == 0 { userType = 0 } else { companyDetail, err := models.GetCompanyDetailByIdGroup(user.CompanyId) if err != nil { br.Msg = "获取信息失败!" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if companyDetail == nil { br.Msg = "获取信息失败!" br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId) return } permissionStr, err = models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户 if companyDetail.Status == "永续" { userType = 1 } else if companyDetail.Status == "试用" { userType = 5 } else if companyDetail.Status == "正式" { if permissionStr == "专家" { userType = 4 } else if strings.Contains(permissionStr, "医药") && strings.Contains(permissionStr, "消费") && strings.Contains(permissionStr, "科技") && strings.Contains(permissionStr, "智造") { userType = 2 } else { userType = 3 } if userType == 3 { if !strings.Contains(permissionStr, "医药") && !strings.Contains(permissionStr, "消费") && !strings.Contains(permissionStr, "科技") && !strings.Contains(permissionStr, "智造") { userType = 4 } } } } } if isShowJurisdiction == 1 && chartPermissionIds == "" && userType == 4 { activityTypeIds = "1,3" } var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) var condition string var pars []interface{} //活动可见限制 var sqlExport string slicePer := strings.Split(permissionStr, ",") var permissionSqlStr string for _, v := range slicePer { permissionSqlStr += "'" + v + "'," } permissionSqlStr = strings.TrimRight(permissionSqlStr, ",") permissionSqlStr = ` AND art.chart_permission_name IN (` + permissionSqlStr + `)` sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' ` if userType == 2 { sqlExport += ` OR art.customer_type_ids LIKE '%3%' ` } if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") { sqlExport += ` OR art.customer_type_ids LIKE '%4%' ` } sqlExport += `) ` if keyWord != "" { var mirrorword string var mirrorwordSql string slicemirrorword := strings.Split(keyWord, ",") for _, v := range slicemirrorword { mirrorwordSql += "'" + v + "'" + "," } mirrorwordSql = strings.TrimRight(mirrorwordSql, ",") total, err := models.GetActivityMirrorWordCount(mirrorwordSql) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } if total > 0 { mirrorword, err = models.GetMirrorWord(mirrorwordSql) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "关系词映射获取失败,Err:" + err.Error() return } } keyWord = keyWord + "," + mirrorword slicekeyWord := strings.Split(keyWord, ",") var sqlKeyOr string if len(slicekeyWord) >= 2 { for _, v := range slicekeyWord { if v != "" { sqlKeyOr += ` OR art.activity_name LIKE '%` + v + `%' ` } } condition += ` AND (art.activity_name LIKE '%` + keyWord + `%' ` + sqlKeyOr + ` )` } else { condition += ` AND (art.activity_name LIKE '%` + keyWord + `%' )` } } //主题 if label != "" { sliceLabel := strings.Split(label, ",") var labelSqlStr string for _, v := range sliceLabel { labelSqlStr += "'" + v + "'," } labelSqlStr = strings.TrimRight(labelSqlStr, ",") condition = ` AND art.label IN (` + labelSqlStr + `)` } //行业名称 if len(chartPermissionIds) > 0 { condition += ` AND art.chart_permission_id IN (` + chartPermissionIds + `)` } if activityTypeIds != "" { condition += ` AND art.activity_type_id IN (` + activityTypeIds + `)` } if whichDay != "" { var startDate string var endDate string if whichDay == "1" { startDate = time.Now().Format(utils.FormatDate) endDate = startDate } else if whichDay == "2" { startDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate) endDate = startDate } else { startDate = time.Now().Format(utils.FormatDate) endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate) } condition += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'" condition += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'" } if activeState != "" { condition += ` AND art.active_state IN (` + activeState + `)` } condition += ` AND art.publish_status = 1 ` var conditionOr string //if strings.Contains(permissionStr, "专家") && (userType == 2 || userType == 3 || userType == 4) { //conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%' ` + permissionSqlStr + condition + `) ` //conditionOr += ` OR ( art.is_limit_people = 1 AND art.activity_type_id = 3 AND art.customer_type_ids LIKE '%4%' ` + condition + `) ` //} // 有专家权限的这几种用户,不做行业权限校验 if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") { conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%' ` + condition + `) ` } if (userType == 5) && strings.Contains(permissionStr, "专家") { conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%' ` + condition + `) ` } conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) ` condition += ` AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr total, err := models.GetActivityCount(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } condition += ` ORDER BY art.active_state ASC, art.activity_time ASC ` list, errList := models.GetActivityListAll(condition, pars, uid, startSize, pageSize) if errList != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errList.Error() return } for k, v := range list { if strings.Contains(v.ActivityName, "【") { list[k].IsBrackets = 1 } if v.SignupNum > v.LimitPeopleNum { list[k].SignupNum = v.LimitPeopleNum } } page := paging.GetPaging(currentIndex, pageSize, total) resp := new(models.GetCygxActivityListRep) resp.List = list resp.Paging = page br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 我的日程 // @Description 我的日程列表接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Success 200 {object} models.GetCygxActivityListRep // @router /scheduleList [get] func (this *ActivityCoAntroller) ScheduleList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } uid := user.UserId pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) var condition string var pars []interface{} //condition += ` AND art.publish_status = 1 AND art.active_state IN(1,2) AND s.is_cancel = 0 AND s.fail_type = 0 ` condition += ` AND art.publish_status = 1 AND art.active_state IN(1,2) ` total, err := models.GetScheduleCount(uid) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } list, errList := models.GetScheduleList(condition, pars, uid, startSize, pageSize) if errList != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errList.Error() return } for k, v := range list { if strings.Contains(v.ActivityName, "【") { list[k].IsBrackets = 1 } if v.SignupNum > v.LimitPeopleNum { list[k].SignupNum = v.LimitPeopleNum } } page := paging.GetPaging(currentIndex, pageSize, total) resp := new(models.GetCygxActivityListRep) resp.List = list resp.Paging = page br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 活动详情 // @Description 获取活动详情接口 // @Param ActivityId query int true "活动ID" // @Success Ret=200 {object} models.CygxActivityResp // @router /detail [get] func (this *ActivityCoAntroller) Detail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } uid := user.UserId activityId, _ := this.GetInt("ActivityId") if activityId < 1 { br.Msg = "请输入活动ID" return } resp := new(models.CygxActivityResp) hasPermission := 0 var companyDetailStatus string activityInfo, err := models.GetAddActivityInfoByIdShow(uid, activityId) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error() return } if activityInfo == nil { br.Msg = "活动不存在" br.ErrMsg = "活动ID错误,Err:" + "activityId:" + strconv.Itoa(activityId) return } applyCount, err := models.GetApplyRecordCount(uid) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error() return } if user.CompanyId <= 1 { companyDetailStatus = "" } else { companyPermission, err := models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if companyPermission == "" { if applyCount > 0 { hasPermission = 4 } else { hasPermission = 3 } resp.HasPermission = hasPermission resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦" br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp return } companyDetail, err := models.GetCompanyDetailById(user.CompanyId) if err != nil { br.Msg = "获取信息失败!" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if companyDetail == nil { br.Msg = "获取信息失败!" br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId) return } companyDetailStatus = companyDetail.Status } var userType int var permissionStr string if user.CompanyId <= 1 { userType = 0 } else { companyDetail, err := models.GetCompanyDetailById(user.CompanyId) if err != nil { br.Msg = "获取信息失败!" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if companyDetail == nil { br.Msg = "获取信息失败!" br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId) return } //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户 if companyDetail.Status == "永续" { userType = 1 } else if companyDetail.Status == "试用" { userType = 5 } else if companyDetail.Status == "正式" { permissionStr, err = models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } if permissionStr == "专家" { userType = 4 } else if strings.Contains(permissionStr, "医药") && strings.Contains(permissionStr, "消费") && strings.Contains(permissionStr, "科技") && strings.Contains(permissionStr, "智造") { userType = 2 } else { userType = 3 } } } if activityInfo.IsLimitPeople > 0 { var noPower bool if (userType == 1 || userType == 4 || userType == 5) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) { noPower = true } //带有专家权限的 2、大套餐客户(4个行业全开通的正式客户) 3、分行业套餐客户(开通对应行业的正式客户) if userType == 2 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) { noPower = true } if userType == 2 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(2)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) { noPower = true } if userType == 3 && strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(4)) { noPower = true } if userType == 3 && !strings.Contains(permissionStr, "专家") && !strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(3)) { noPower = true } if noPower { br.Msg = "您暂无查看该活动权限" br.ErrMsg = "被分享客户不可见,获取信息失败,Err:" return } } fmt.Println("权限可见校验") detail, errDetail := models.GetActivityTypeDetailById(activityInfo.ActivityTypeId) if errDetail != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取信息失败,Err:" + errDetail.Error() return } if activityInfo.IsSignup > 0 { detail, errDetail := models.GetActivitySignupDetail(activityId, uid) if errDetail != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取信息失败,Err:" + errDetail.Error() return } activityInfo.SignupType = detail.SignupType } activityInfo.ShowType = detail.ShowType //判断是否已经申请过 if user.CompanyId > 1 { permissionStr, err := models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户权限信息失败,Err:" + err.Error() return } companyItem, err := models.GetCompanyDetailById(user.CompanyId) //冻结客户 if err != nil { if err.Error() == utils.ErrNoRow() { resp.HasPermission = 4 resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动" br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp return } else { br.Msg = "获取信息失败" br.ErrMsg = "获取客户公司信息失败,Err:" + err.Error() return } } //1专家电话会、2分析师电话会、3公司调研电话会、4公司线下调研、5专家线下沙龙、6分析师线下沙龙 //OperationMode string `description:"操作方式 Apply:立即申请、Call:拨号 为空则为有权限"` var havePower bool if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3) && strings.Contains(permissionStr, "专家") && activityInfo.LimitPeopleNum == 0 { havePower = true } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "正式" && strings.Contains(activityInfo.CustomerTypeIds, "4") { havePower = true } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "试用" && strings.Contains(activityInfo.CustomerTypeIds, "5") { havePower = true } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) && strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) { havePower = true } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) { havePower = true } if havePower { hasPermission = 1 resp.HaqveJurisdiction = true } else { if permissionStr == "专家" { resp.PopupMsg = "您暂无权限参加【" + activityInfo.ActivityTypeName + "】类型活动" resp.MsgType = "Type" } else { resp.PopupMsg = "您暂无权限参加【" + activityInfo.ChartPermissionName + "】行业活动" resp.MsgType = "Industry" } resp.SellerMobile = companyItem.Mobile resp.SellerName = companyItem.SellerName resp.OperationMode = "Call" hasPermission = 2 } } else { //潜在客户 if applyCount > 0 { hasPermission = 4 } else { hasPermission = 3 } resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦" } if hasPermission == 1 { if activityInfo.SignupNum > activityInfo.LimitPeopleNum { activityInfo.SignupNum = activityInfo.LimitPeopleNum } if activityInfo.ChartPermissionNames != "" { activityInfo.ChartPermissionName = activityInfo.ChartPermissionNames } resp.Detail = activityInfo } resp.HasPermission = hasPermission br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 活动报名 // @Description 活动报名接口 // @Param request body models.ActivitySingnupRep true "type json string" // @Success Ret=200 {object} models.SignupStatus // @router /signup/add [post] func (this *ActivityCoAntroller) SignupAdd() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } uid := user.UserId signupStatus := "" var req models.ActivitySingnupRep resp := new(models.SignupStatus) var total int err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } activityId := req.ActivityId signupType := req.SignupType hasPermission := 0 if signupType == 1 && user.Mobile == "" && user.OutboundMobile == "" { resp.GoBindEmail = true } //判断是否已经申请过 applyCount, err := models.GetApplyRecordCount(uid) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error() return } activityInfo, errInfo := models.GetAddActivityInfoById(activityId) if activityInfo == nil { br.Msg = "操作失败" br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId) return } if errInfo != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + errInfo.Error() return } //SignupStatus "报名状态:人数已满:FullStarffed、单机构超过两人:TwoPeople、爽约次数过多:BreakPromise、超时:Overtime 、成功:Success"` //HasPermission "1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请"` var companyDetailStatus string if user.CompanyId <= 1 { companyDetailStatus = "" } else { companyPermission, err := models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if companyPermission == "" { if applyCount > 0 { hasPermission = 4 } else { hasPermission = 3 } resp.HasPermission = hasPermission resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦" br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp return } companyDetail, err := models.GetCompanyDetailById(user.CompanyId) if err != nil { br.Msg = "获取信息失败!" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if companyDetail == nil { br.Msg = "获取信息失败!" br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId) return } companyDetailStatus = companyDetail.Status } var userType int var permissionStr string if user.CompanyId <= 1 { userType = 0 } else { companyDetail, err := models.GetCompanyDetailById(user.CompanyId) if err != nil { br.Msg = "获取信息失败!" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if companyDetail == nil { br.Msg = "获取信息失败!" br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId) return } if companyDetail.Status == "永续" { userType = 1 } else if companyDetail.Status == "试用" { userType = 5 } else if companyDetail.Status == "正式" { permissionStr, err = models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } if permissionStr == "专家" { userType = 4 } else if strings.Contains(permissionStr, "医药") && strings.Contains(permissionStr, "消费") && strings.Contains(permissionStr, "科技") && strings.Contains(permissionStr, "智造") { userType = 2 } else { userType = 3 } } } item := new(models.CygxActivitySignup) if user.CompanyId > 1 { permissionStr, err := models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } companyItem, err := models.GetCompanyDetailById(user.CompanyId) //冻结客户 if err != nil { if err.Error() == utils.ErrNoRow() { resp.HasPermission = 4 resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦" br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp return } else { br.Msg = "获取信息失败" br.ErrMsg = "获取客户公司信息失败,Err:" + err.Error() return } } //1专家电话会、2分析师电话会、3公司调研电话会、4公司线下调研、5专家线下沙龙、6分析师线下沙龙 //OperationMode string `description:"操作方式 Apply:立即申请、Call:拨号 为空则为有权限"` var havePower bool if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3) && strings.Contains(permissionStr, "专家") && activityInfo.LimitPeopleNum == 0 { havePower = true } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "正式" && strings.Contains(activityInfo.CustomerTypeIds, "4") { havePower = true } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "试用" && strings.Contains(activityInfo.CustomerTypeIds, "5") { havePower = true } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) && strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) { havePower = true } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) { havePower = true } if havePower { hasPermission = 1 signupStatus = "Success" resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式 if time.Now().After(resultTime.Add(-time.Minute * 60)) { signupStatus = "Overtime" resp.SignupType = signupType resp.SignupStatus = signupStatus resp.HasPermission = hasPermission br.Ret = 200 br.Success = true br.Msg = "" br.Data = resp return } //人数已满:FullStarffed、单机构超过两人:TwoPeople、爽约次数过多:BreakPromise、超时:Overtime 、成功:Success"` //如果是下面几种情况则对报名信息做判断限制 (公司调研电话会(限制人数)、公司线下调研、专家/分析师线下沙龙) if (activityInfo.ActivityTypeId == 3 && activityInfo.IsLimitPeople == 1) || activityInfo.ActivityTypeId > 3 { //判断优先级:总人数限制→单机构2人限制→爽约3次限制 totalRestrict, err := models.GetUserRestrictCount(user.Mobile) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } if totalRestrict >= 1 { signupStatus = "BreakPromise" item.FailType = 3 } totalSignupCompany, err := models.GetActivitySignupCompanyCount(activityId, user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } if totalSignupCompany >= 2 { signupStatus = "TwoPeople" item.FailType = 2 } totaSignupPeopleNum, err := models.GetActivitySignupSuccessCount(activityId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } if totaSignupPeopleNum >= activityInfo.LimitPeopleNum { signupStatus = "FullStarffed" item.FailType = 1 } totalUserRestrictCount, err := models.GetActivitySignupByUserRestrictCount(uid, activityId) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } //解除报名限制之后二次报名相同活动 if totalUserRestrictCount > 0 && totalRestrict == 0 && resp.GoBindEmail != true { item.UserId = uid item.ActivityId = activityId item.CreateTime = time.Now() item.Mobile = user.Mobile item.Email = user.Email item.CompanyId = user.CompanyId item.CompanyName = user.CompanyName item.SignupType = signupType item.FailType = 0 item.DoFailType = 0 _, errSignup := models.AddActivitySignupByRestrict(item) if errSignup != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + errSignup.Error() return } resp.HaqveJurisdiction = true resp.SignupType = signupType resp.SignupStatus = "Success" resp.HasPermission = hasPermission resp.ActivityId = activityId total, err = models.GetUserMeetingReminderCount(user.UserId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error() return } if total == 0 { resp.GoFollow = true } br.Ret = 200 br.Success = true br.Msg = "操作成功" br.Data = resp return } totalMy, err := models.GetActivitySignupByUserCount(uid, activityId) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } if signupStatus != "Success" && totalMy == 0 && resp.GoBindEmail != true { item.UserId = uid item.ActivityId = activityId item.CreateTime = time.Now() item.Mobile = user.Mobile item.Email = user.Email item.CompanyId = user.CompanyId item.CompanyName = user.CompanyName item.SignupType = signupType item.DoFailType = item.FailType if user.OutboundMobile != "" { item.OutboundMobile = user.OutboundMobile if user.OutboundCountryCode == "" { item.CountryCode = "86" } else { item.CountryCode = user.OutboundCountryCode } } else { item.OutboundMobile = user.Mobile if user.CountryCode == "" { item.CountryCode = "86" } else { item.CountryCode = user.CountryCode } } //添加报名信息,但是不加入日程 _, errSignup := models.AddActivitySignupNoSchedule(item) if errSignup != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + errSignup.Error() return } } } totalMySuccess, err := models.GetActivitySignupCount(uid, activityId) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } if totalMySuccess > 0 { br.Msg = "您已报名这个活动" return } if signupStatus == "Success" && resp.GoBindEmail != true { item.UserId = uid item.ActivityId = activityId item.CreateTime = time.Now() item.Mobile = user.Mobile item.Email = user.Email item.CompanyId = user.CompanyId item.CompanyName = user.CompanyName item.SignupType = signupType item.FailType = 0 item.DoFailType = 0 item.OutboundMobile = user.Mobile if user.OutboundMobile != "" { item.OutboundMobile = user.OutboundMobile if user.OutboundCountryCode == "" { item.CountryCode = "86" } else { item.CountryCode = user.OutboundCountryCode } } else { item.OutboundMobile = user.Mobile if user.CountryCode == "" { item.CountryCode = "86" } else { item.CountryCode = user.CountryCode } } _, errSignup := models.AddActivitySignup(item) if errSignup != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + errSignup.Error() return } resp.HaqveJurisdiction = true } } else { hasPermission = 2 resp.SellerMobile = companyItem.Mobile resp.SellerName = companyItem.SellerName resp.MsgType = "Type" resp.OperationMode = "Call" if permissionStr == "专家" { resp.PopupMsg = "您暂无权限参加【" + activityInfo.ActivityTypeName + "】类型活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile resp.MsgType = "Type" } else { resp.PopupMsg = "您暂无权限参加【" + activityInfo.ChartPermissionName + "】行业活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile resp.MsgType = "Industry" } } } else { //潜在客户 if applyCount > 0 { hasPermission = 4 } else { hasPermission = 3 } resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦" } if signupType == 1 && user.IsMsgOutboundMobile == 0 { resp.GoOutboundMobile = true if user.Mobile != "" || user.OutboundMobile != "" { go models.ModifyWxUserIsMsgOutboundMobile(user.UserId) } } if user.OutboundMobile == "" { resp.Mobile = user.Mobile if user.CountryCode == "" && len(user.Mobile) == 11 { resp.CountryCode = "86" } else { resp.CountryCode = user.CountryCode } } else { resp.Mobile = user.OutboundMobile resp.CountryCode = user.OutboundCountryCode } //如果用户有绑定手机号,但是没有绑定外呼手机号 if signupType == 1 && user.Mobile != "" && user.OutboundMobile == "" { var countryCode string if len(user.Mobile) == 8 { countryCode = "852" } else if len(user.Mobile) == 9 { countryCode = "886" } else if len(user.Mobile) == 10 { countryCode = "1" } else if len(user.Mobile) >= 11 { countryCode = "86" } models.BindUserOutboundMobileByMobile(user.Mobile, countryCode, uid) } resp.SignupType = signupType resp.SignupStatus = signupStatus resp.HasPermission = hasPermission if signupStatus == "Success" { resp.ActivityId = activityId } total, err = models.GetUserSignupCount(user.UserId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error() return } if total <= 1 { resp.GoFollow = true } br.Ret = 200 br.Success = true br.Msg = "操作成功" br.Data = resp } // @Title 活动取消报名 // @Description 活动取消报名接口 // @Param request body models.ActivitySingnupRep true "type json string" // @Success Ret=200 {object} models.SignupStatus // @router /signup/cancel [post] func (this *ActivityCoAntroller) SignupCancel() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } uid := user.UserId var req models.ActivitySingnupRep err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } activityId := req.ActivityId signupType := req.SignupType item := new(models.CygxActivitySignup) activityInfo, errInfo := models.GetAddActivityInfoById(activityId) if activityInfo == nil { br.Msg = "操作失败" br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId) return } if errInfo != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + errInfo.Error() return } resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式 if time.Now().After(resultTime.Add(-time.Minute * 60)) { if signupType == 1 { br.Msg = "活动开始前1小时内无法取消预约外呼,请联系对口销售处理" } else { br.Msg = "活动开始前1小时内无法取消报名,请联系对口销售处理" } return } total, err := models.GetActivitySignupCount(uid, activityId) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } if total == 0 { br.Msg = "您暂未报名这个活动" return } item.UserId = uid item.ActivityId = activityId item.CreateTime = time.Now() item.Mobile = user.Mobile item.Email = user.Email item.CompanyId = user.CompanyId item.CompanyName = user.CompanyName resp := new(models.SignupStatus) resp.ActivityId = activityId _, errSignup := models.CancelActivitySignup(item) if errSignup != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + errSignup.Error() return } br.Ret = 200 br.Success = true br.Msg = "操作成功" br.Data = resp } // @Title 用户搜索详情 // @Description 获取用户搜索详情接口 // @Param IsShowJurisdiction query int true "是否仅展示有权限的,默认为0,1是,2否 " // @Success Ret=200 {object} models.ActivityUserSearchContentList // @router /getUserSearchContent [get] func (this *ActivityCoAntroller) GetUserSearchContent() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } uid := user.UserId detailSeearch := new(models.CygxActivityUserSearchContent) detailSeearch.IsShowJurisdiction = 0 detailSeearch.ChartPermissionids = "" detailSeearch.ActiveState = "" resp := new(models.ActivityUserSearchContentList) detail, _ := models.GetUserSearchContentByUid(uid) if detail == nil { detail = detailSeearch } isShowJurisdiction, _ := this.GetInt("IsShowJurisdiction") listActivityType, errActivityType := models.GetActivityTypeList() if errActivityType != nil { br.Msg = "获取失败" br.ErrMsg = "获取数据失败,Err:" + errActivityType.Error() return } var listChartPermissionid []*models.ActivityChartPermission var errChart error if isShowJurisdiction == 1 { listChartPermissionidAll, errChartAll := models.GetUserCompanyPermission(user.CompanyId) listChartPermissionid = listChartPermissionidAll errChart = errChartAll } else if isShowJurisdiction == 2 { listChartPermissionidAll, errChartAll := models.GetChartPermissionActivity() listChartPermissionid = listChartPermissionidAll errChart = errChartAll } else { if detail.IsShowJurisdiction == 1 { listChartPermissionidAll, errChartAll := models.GetUserCompanyPermission(user.CompanyId) listChartPermissionid = listChartPermissionidAll errChart = errChartAll } else { listChartPermissionidAll, errChartAll := models.GetChartPermissionActivity() listChartPermissionid = listChartPermissionidAll errChart = errChartAll } } if errChart != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取品种信息失败,Err:" + errChart.Error() return } if detail.IsShowJurisdiction == 1 { resp.IsShowJurisdiction = true } fmt.Println(isShowJurisdiction) if isShowJurisdiction == 1 || detail.IsShowJurisdiction == 1 { resp.IsShowJurisdiction = true for k, _ := range listChartPermissionid { listChartPermissionid[k].IsChoose = true } } if isShowJurisdiction == 2 { resp.IsShowJurisdiction = false } activeStateList := []models.ActivityStaus{models.ActivityStaus{Id: 1, StatusName: "未开始", IsChoose: true}, models.ActivityStaus{Id: 2, StatusName: "进行中"}, models.ActivityStaus{Id: 3, StatusName: "已结束"}} list2, err := models.GetChartPermissionActivity() if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取品种信息失败,Err:" + err.Error() return } resp.ListChartPermission2 = list2 if activeStateList[1].IsChoose == activeStateList[2].IsChoose == false { activeStateList[0].IsChoose = true } resp.ListActivityType = listActivityType resp.ListChartPermission = listChartPermissionid resp.ListActivityStaus = activeStateList br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 添加会议提醒 // @Description 添加会议提醒接口 // @Param request body models.ActivityIdRep true "type json string" // @Success Ret=200 {object} models.SignupStatus // @router /meetingReminder/add [post] func (this *ActivityCoAntroller) MeetingReminderAdd() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } uid := user.UserId //var signupStatus string signupStatus := "Success" var req models.ActivityIdRep err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } activityId := req.ActivityId activityInfo, errInfo := models.GetAddActivityInfoById(activityId) if activityInfo == nil { br.Msg = "操作失败" br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId) return } if errInfo != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + errInfo.Error() return } //判断是否已经申请过 applyCount, err := models.GetApplyRecordCount(uid) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error() return } //SignupStatus string `description:"报名状态:人数已满:FullStarffed、单机构超过两人:TwoPeople、爽约次数过多:BreakPromise、超时:Overtime 、成功:Success"` item := new(models.CygxActivityMeetingReminder) resp := new(models.SignupStatus) hasPermission := 0 var companyDetailStatus string if user.CompanyId <= 1 { companyDetailStatus = "" } else { companyPermission, err := models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if companyPermission == "" { if applyCount > 0 { hasPermission = 4 } else { hasPermission = 3 } resp.HasPermission = hasPermission resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦" br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp return } companyDetail, err := models.GetCompanyDetailById(user.CompanyId) if err != nil { br.Msg = "获取信息失败!" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if companyDetail == nil { br.Msg = "获取信息失败!" br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId) return } companyDetailStatus = companyDetail.Status } var userType int var permissionStr string if user.CompanyId <= 1 { userType = 0 } else { companyDetail, err := models.GetCompanyDetailById(user.CompanyId) if err != nil { br.Msg = "获取信息失败!" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if companyDetail == nil { br.Msg = "获取信息失败!" br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId) return } if companyDetail.Status == "永续" { userType = 1 } else if companyDetail.Status == "试用" { userType = 5 } else if companyDetail.Status == "正式" { permissionStr, err = models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } if permissionStr == "专家" { userType = 4 } else if strings.Contains(permissionStr, "医药") && strings.Contains(permissionStr, "消费") && strings.Contains(permissionStr, "科技") && strings.Contains(permissionStr, "智造") { userType = 2 } else { userType = 3 } } } resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式 if time.Now().After(resultTime.Add(-time.Minute * 15)) { br.Msg = "活动开始前15分钟无法设置会议提醒" return } if user.CompanyId > 1 { permissionStr, err := models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } companyItem, err := models.GetCompanyDetailById(user.CompanyId) //冻结客户 if err != nil { if err.Error() == utils.ErrNoRow() { resp.HasPermission = 4 resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦" br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp return } else { br.Msg = "获取信息失败" br.ErrMsg = "获取客户公司信息失败,Err:" + err.Error() return } } var havePower bool if (activityInfo.ActivityTypeId == 1 || activityInfo.ActivityTypeId == 3) && strings.Contains(permissionStr, "专家") && activityInfo.LimitPeopleNum == 0 { havePower = true } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "正式" && strings.Contains(activityInfo.CustomerTypeIds, "4") { havePower = true } else if activityInfo.ActivityTypeId == 3 && strings.Contains(permissionStr, "专家") && companyDetailStatus == "试用" && strings.Contains(activityInfo.CustomerTypeIds, "5") { havePower = true } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) && strings.Contains(activityInfo.CustomerTypeIds, strconv.Itoa(userType)) { havePower = true } else if strings.Contains(permissionStr, activityInfo.ChartPermissionName) { havePower = true } if havePower { hasPermission = 1 signupStatus = "Success" totalMeeting, errMeeting := models.GetActivityMeetingReminderCount(uid, activityId) if errMeeting != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errMeeting.Error() return } if totalMeeting > 0 { br.Msg = "您已预约,请勿重复预约" return } item.UserId = uid item.ActivityId = activityId item.CreateTime = time.Now() item.Mobile = user.Mobile item.Email = user.Email item.CompanyId = user.CompanyId item.CompanyName = user.CompanyName _, errSignup := models.AddActivityMeetingReminder(item) if errSignup != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + errSignup.Error() return } resp.HaqveJurisdiction = true } else { hasPermission = 2 resp.SellerMobile = companyItem.Mobile resp.SellerName = companyItem.SellerName resp.MsgType = "Type" resp.OperationMode = "Call" if permissionStr == "专家" { resp.PopupMsg = "您暂无权限参加【" + activityInfo.ActivityTypeName + "】类型活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile resp.MsgType = "Type" } else { resp.PopupMsg = "您暂无权限参加【" + activityInfo.ChartPermissionName + "】行业活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile resp.MsgType = "Industry" } } } else { //潜在客户 if applyCount > 0 { hasPermission = 4 } else { hasPermission = 3 } resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加 【" + activityInfo.ChartPermissionName + "】行业活动,若想参加可以申请开通哦" } resp.HasPermission = hasPermission resp.SignupStatus = signupStatus resp.ActivityId = activityId var total int total, err = models.GetUserActivityMeetingReminderCount(user.UserId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error() return } if total <= 1 { resp.GoFollow = true } br.Ret = 200 br.Success = true if hasPermission == 1 { br.Msg = "设置成功,会前15分钟会为您推送微信消息提醒" } br.Data = resp } // @Title 取消会议提醒 // @Description 取消会议提醒接口 // @Param request body models.ActivityIdRep true "type json string" // @Success Ret=200 {object} models.SignupStatus // @router /meetingReminder/cancel [post] func (this *ActivityCoAntroller) MeetingReminderCancel() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } uid := user.UserId var req models.ActivityIdRep err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } activityId := req.ActivityId signupStatus := "Success" item := new(models.CygxActivityMeetingReminder) activityInfo, errInfo := models.GetAddActivityInfoById(activityId) if activityInfo == nil { br.Msg = "操作失败" br.ErrMsg = "活动ID错误,不存在activityId:" + strconv.Itoa(activityId) return } if errInfo != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + errInfo.Error() return } //if signupStatus == "Success" { total, err := models.GetActivityMeetingReminderCount(uid, activityId) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } if total == 0 { br.Msg = "您暂未添加该活动会议提醒" return } resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式 if time.Now().After(resultTime.Add(-time.Minute * 15)) { br.Msg = "活动开始前15分钟无法取消会议提醒" return } item.UserId = uid item.ActivityId = activityId item.CreateTime = time.Now() item.Mobile = user.Mobile item.Email = user.Email item.CompanyId = user.CompanyId item.CompanyName = user.CompanyName _, errSignup := models.CancelActivityMeetingReminder(item) if errSignup != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + errSignup.Error() return } //} resp := new(models.SignupStatus) resp.SignupStatus = signupStatus resp.ActivityId = activityId br.Ret = 200 br.Success = true br.Msg = "会议提醒已取消" br.Data = resp } // @Title 敏捷搜索关键词的列表 // @Description 获取敏捷搜索关键词的列表接口 // @Success 200 {object} models.ActivityFastsearchKeywordsListResp // @router /fastSearchKeWord [get] func (this *ActivityABaseController) FastSearch() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() resp := new(models.ActivityFastsearchKeywordsListResp) list, err := models.GetActivityFastsearchKeywordsList() if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取数据失败,Err:" + err.Error() return } resp.List = list br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 主题列表 // @Description 获取活动主题列表接口 // @Param ChartPermissionIds query string false "行业id 多个用 , 隔开" // @Param ActivityTypeIds query string false "活动类型id 多个用 , 隔开" // @Param ActiveState query string false "活动进行状态 未开始:1、进行中2、已结束3" // @Param WhichDay query string false "哪一天 今天:1、明天:2,多个用 , 隔开" // @Param Label query string false "搜索主题 多个用 , 隔开 (空为活动主题,非空为更多主题)" // @Success 200 {object} models.GetCygxActivityLabelListRep // @router /labelList [get] func (this *ActivityCoAntroller) LabelList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } pageSize, _ := this.GetInt("PageSize") //currentIndex, _ := this.GetInt("CurrentIndex") chartPermissionIds := this.GetString("ChartPermissionIds") activityTypeIds := this.GetString("ActivityTypeIds") whichDay := this.GetString("WhichDay") isShowJurisdiction, _ := this.GetInt("IsShowJurisdiction") activeState := this.GetString("ActiveState") label := this.GetString("Label") var userType int var permissionStr string if user.CompanyId <= 1 { userType = 0 } else { total, err := models.GetCountCompanyDetailByIdGroup(user.CompanyId) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } if total == 0 { userType = 0 } else { companyDetail, err := models.GetCompanyDetailByIdGroup(user.CompanyId) if err != nil { br.Msg = "获取信息失败!" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if companyDetail == nil { br.Msg = "获取信息失败!" br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId) + "CompanyId:" + strconv.Itoa(user.CompanyId) return } permissionStr, err = models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户 if companyDetail.Status == "永续" { userType = 1 } else if companyDetail.Status == "试用" { userType = 5 } else if companyDetail.Status == "正式" { if permissionStr == "专家" { userType = 4 } else if strings.Contains(permissionStr, "医药") && strings.Contains(permissionStr, "消费") && strings.Contains(permissionStr, "科技") && strings.Contains(permissionStr, "智造") { userType = 2 } else { userType = 3 } if userType == 3 { if !strings.Contains(permissionStr, "医药") && !strings.Contains(permissionStr, "消费") && !strings.Contains(permissionStr, "科技") && !strings.Contains(permissionStr, "智造") { userType = 4 } } } } } if isShowJurisdiction == 1 && chartPermissionIds == "" && userType == 4 { activityTypeIds = "1,3" } var startSize int //if pageSize <= 0 { // pageSize = utils.PageSize20 //} //currentIndex = 1 pageSize = 16 //startSize = utils.StartIndex(currentIndex, pageSize) var condition string var sortTime string var pars []interface{} //活动可见限制 var sqlExport string slicePer := strings.Split(permissionStr, ",") var permissionSqlStr string for _, v := range slicePer { permissionSqlStr += "'" + v + "'," } permissionSqlStr = strings.TrimRight(permissionSqlStr, ",") permissionSqlStr = ` AND art.chart_permission_name IN (` + permissionSqlStr + `)` sqlExport = ` AND (art.customer_type_ids LIKE '%` + strconv.Itoa(userType) + `%' ` if userType == 2 { sqlExport += ` OR art.customer_type_ids LIKE '%3%' ` } if (userType == 2 || userType == 3) && strings.Contains(permissionStr, "专家") { sqlExport += ` OR art.customer_type_ids LIKE '%4%' ` } sqlExport += `) ` condition += ` AND art.publish_status = 1 AND art.label != '' ` //condition += ` AND art.active_state = 1 ` var conditionOr string if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") { conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%' ` + condition + `) ` } if (userType == 5) && strings.Contains(permissionStr, "专家") { conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%' ` + condition + `) ` } conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) ` condition += `AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr resp := new(models.GetCygxActivityLabelListRep) //conditionLaable := condition //主题 if label != "" { sortTime = ` timesort DESC ` listAll, errList := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, 32) if errList != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errList.Error() return } sortTime = ` mintimesort ASC ` condition += ` AND art.active_state = 1 ` list1, errList := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, 16) if errList != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errList.Error() return } for _, v := range listAll { var isHAve bool for _, v2 := range list1 { if v2.KeyWord == v.KeyWord { isHAve = true } } if !isHAve { resp.List = append(resp.List, v) } } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp return } else { //行业名称 condition = ` AND art.publish_status = 1 AND art.label != '' ` if len(chartPermissionIds) > 0 { condition += ` AND art.chart_permission_id IN (` + chartPermissionIds + `)` } if activityTypeIds != "" { condition += ` AND art.activity_type_id IN (` + activityTypeIds + `)` } var conditionOr string if whichDay != "" { var startDate string var endDate string if whichDay == "1" { startDate = time.Now().Format(utils.FormatDate) endDate = startDate } else if whichDay == "2" { startDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate) endDate = startDate } else { startDate = time.Now().Format(utils.FormatDate) endDate = time.Now().AddDate(0, 0, +1).Format(utils.FormatDate) } condition += ` AND art.activity_time >= ` + "'" + startDate + " 00:00:00'" condition += ` AND art.activity_time <= ` + "'" + endDate + " 23:59:59'" } if activeState != "" { condition += ` AND art.active_state IN (` + activeState + `)` } else { condition += ` AND art.active_state IN (1)` } if (userType == 2 || userType == 3 || userType == 4) && strings.Contains(permissionStr, "专家") { conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%4%' ` + condition + `) ` } if (userType == 5) && strings.Contains(permissionStr, "专家") { conditionOr += ` OR ( art.is_limit_people = 1 AND art.customer_type_ids LIKE '%5%' ` + condition + `) ` } conditionOr += ` OR ( art.is_limit_people = 0 ` + condition + `) ` condition += `AND art.is_limit_people = 1 ` + permissionSqlStr + sqlExport + conditionOr } sortTime = ` mintimesort ASC ` list, errList := models.GetActivityLabelListAll(condition, sortTime, pars, startSize, pageSize) if errList != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errList.Error() return } //resp := new(models.GetCygxActivityLabelListRep) resp.List = list br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 上传公司名称excel // @Description 上传参会表格数据 // @Param File query file true "文件" // @Success 200 Ret=200 导入成功 // @router /activityMeet/import [post] func (this *ActivityCoAntroller) Import() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.User if sysUser == nil { br.Msg = "请重新登录" return } file, h, err := this.GetFile("File") if err != nil { br.Msg = "获取文件失败" br.ErrMsg = "获取文件失败,Err:" + err.Error() return } uploadDir := "static/xls" err = os.MkdirAll(uploadDir, 766) if err != nil { br.Msg = "存储目录创建失败" br.ErrMsg = "存储目录创建失败,Err:" + err.Error() return } path := uploadDir + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + h.Filename defer file.Close() err = this.SaveToFile("File", path) if err != nil { br.Msg = "文件保存失败" br.ErrMsg = "文件保存失败,Err:" + err.Error() return } xlFile, err := xlsx.OpenFile(path) if err != nil { br.Msg = "文件导入失败" br.ErrMsg = "文件导入失败,Err:" + err.Error() return } //允许添加的联系人 needAddAttendanc := make([]*models.UserWhiteList, 0) // 遍历sheet页读取 for _, sheet := range xlFile.Sheets { //遍历行读取 maxRow := sheet.MaxRow for i := 0; i < maxRow; i++ { if i >= 1 { row := sheet.Row(i) cells := row.Cells var companyName, permission string for k, cell := range cells { if k == 0 { companyName = cell.String() } if k == 2 { permission = cell.String() } } //这些字段都没有的话,系统认为excel到底了 if companyName == "" { break } item := new(models.UserWhiteList) item.CompanyName = companyName item.Permission = permission needAddAttendanc = append(needAddAttendanc, item) } } } //var mobileStr string var permissionStr string for k, v := range needAddAttendanc { if k > 0 && v.CompanyName != needAddAttendanc[k-1].CompanyName { permissionStr, err = models.GetCompanyPermissionByName(v.CompanyName) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } } if k == 0 { permissionStr, err = models.GetCompanyPermissionByName(v.CompanyName) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } } needAddAttendanc[k].Permission = permissionStr fmt.Println(permissionStr) } defer func() { os.Remove(path) }() //创建excel dir, errFile := os.Executable() exPath := filepath.Dir(dir) downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx" xlsxFile := xlsx.NewFile() if errFile != nil { br.Msg = "生成文件失败Err:" + errFile.Error() return } style := xlsx.NewStyle() alignment := xlsx.Alignment{ Horizontal: "center", Vertical: "center", WrapText: true, } style.Alignment = alignment style.ApplyAlignment = true sheet, err := xlsxFile.AddSheet("白名单") if err != nil { br.Msg = "新增Sheet失败,Err:" + err.Error() return } //标头 rowTitle := sheet.AddRow() cellA := rowTitle.AddCell() cellA.Value = "" cellB := rowTitle.AddCell() cellB.Value = "公司" cellC := rowTitle.AddCell() cellC.Value = "权限" for _, item := range needAddAttendanc { row := sheet.AddRow() cellA := row.AddCell() cellA.Value = item.CompanyName cellB := row.AddCell() if item.Permission == "" { //item.Permission = "专家/医药/智造/消费/研选/科技/策略/路演服务" } cellB.Value = item.Permission } errFile = xlsxFile.Save(downLoadnFilePath) if errFile != nil { br.Msg = "保存文件失败Err:" + errFile.Error() return } br.Msg = "导入成功" br.Ret = 200 br.Success = true }