package controllers import ( "encoding/json" "github.com/rdlucklib/rdluck_tools/paging" "hongze/hongze_cygx/models" "hongze/hongze_cygx/services" "hongze/hongze_cygx/utils" "strconv" "strings" "time" ) //专项调研活动 type ActivitySpecialCoAntroller struct { BaseAuthController } // @Title 专项产业调研列表 // @Description 获取专项产业调研列表接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Success 200 {object} models.GetCygxActivitySpecialDetailListResp // @router /list [get] func (this *ActivitySpecialCoAntroller) SpecialList() { 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") if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } list, total, errList := services.GetActivitySpecialList(user, currentIndex, pageSize, "") if errList != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errList.Error() return } page := paging.GetPaging(currentIndex, pageSize, total) resp := new(models.GetCygxActivitySpecialDetailListResp) count, err := models.GetCygxUserFollowSpecial(user.UserId) if err != nil { br.Msg = "获取数据失败!" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if count == 1 && user.UserId > 0 { resp.IsFollow = true } if user.Mobile != "" { resp.IsBindingMobile = true } 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.CygxActivitySpecialResp // @router /detail [get] func (this *ActivitySpecialCoAntroller) SpecialDetail() { 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.CygxActivitySpecialResp) hasPermission := 0 activityInfo, err := models.GetCygxActivitySpecialDetailById(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 } //获取FICC销售信息 如果是FICC的客户类型,则默认他申请过 sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 1) 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 { if sellerItem != nil { hasPermission = 5 } else { //获取权益销售信息 如果是FICC的客户类型,则默认他申请过 sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "获取销售信息失败,Err:" + err.Error() return } if sellerItemQy != nil { hasPermission = 2 resp.SellerMobile = sellerItemQy.Mobile resp.SellerName = sellerItemQy.RealName } else { hasPermission = 3 } } } resp.HasPermission = hasPermission resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限" 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 } } userType, permissionStr, err := services.GetUserType(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } itemAct := new(models.ActivityDetail) itemAct.CustomerTypeIds = activityInfo.CustomerTypeIds noPower, err := services.GetShareNoPowe(itemAct, permissionStr, userType, user) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } //获取用户的产业规模,判断是否允许可见 companyProduct, err := models.GetCompanyProductDetail(user.CompanyId, 2) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "获取客户信息失败,Err:" + err.Error() return } if companyProduct != nil { if companyProduct.Scale != "" { if strings.Count(activityInfo.Scale, companyProduct.Scale) > 0 { noPower = false } } } if noPower { br.Msg = "您暂无查看该活动权限" br.ErrMsg = "被分享客户不可见,获取信息失败" br.IsSendEmail = false return } if userType == 1 && strings.Contains(activityInfo.ChartPermissionName, "研选") { br.Msg = "您暂无查看该活动权限" br.ErrMsg = "被分享客户不可见,永续客户无法查看研选行业" return } //判断是否已经申请过 if user.CompanyId > 1 { permissionStr, err := models.GetCompanyPermissionByUser(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() { if applyCount > 0 { hasPermission = 4 } else { if sellerItem != nil { hasPermission = 5 } else { //获取权益销售信息 如果是FICC的客户类型,则默认他申请过 sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "获取销售信息失败,Err:" + err.Error() return } if sellerItemQy != nil { hasPermission = 2 resp.SellerMobile = sellerItemQy.Mobile resp.SellerName = sellerItemQy.RealName } else { hasPermission = 3 } } } resp.HasPermission = hasPermission resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限" 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 strings.Contains(permissionStr, activityInfo.ActivityTypeName) { havePower = true } if havePower { hasPermission = 1 resp.HaqveJurisdiction = true } else { if permissionStr == "专家" { resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限" resp.MsgType = "Type" } else { resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限" resp.MsgType = "Industry" } if companyItem.ProductId == 2 { resp.SellerMobile = companyItem.Mobile resp.SellerName = companyItem.SellerName resp.OperationMode = "Call" hasPermission = 2 } else { hasPermission = 5 } } } else { //潜在客户 if applyCount > 0 { hasPermission = 4 } else { if sellerItem != nil { hasPermission = 5 } else { hasPermission = 3 } } resp.OperationMode = "Apply" resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限" } if hasPermission == 1 { count, err := models.GetCygxUserFollowSpecial(user.UserId) if err != nil { br.Msg = "获取数据失败!" br.ErrMsg = "获取客户详情失败,Err:" + err.Error() return } if count == 1 { resp.IsFollow = true } activityInfo, err := services.HandleActivitySpecialShow(activityInfo, user) if err != nil { br.Msg = "获取数据失败!" br.ErrMsg = "HandleActivitySpecialShow,Err:" + err.Error() return } activityInfo.ActivityTypeName = "专项调研" resp.Detail = activityInfo } resp.HasPermission = hasPermission 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.SignupSpecialStatus // @router /add [post] func (this *ActivitySpecialCoAntroller) SpecialTripAdd() { 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 resp := new(models.SignupSpecialStatus) err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } activityId := req.ActivityId hasPermission := 0 //判断是否已经申请过 applyCount, err := models.GetApplyRecordCount(uid) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error() return } //获取FICC销售信息 sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 1) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "申请失败" br.ErrMsg = "获取销售信息失败,Err:" + err.Error() return } activityInfo, errInfo := models.GetCygxActivitySpecialDetail(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 } //HasPermission "1:有该行业权限,正常展示,2:无该行业权限,3:潜在客户,未提交过申请,4:潜在客户,已提交过申请"` //var companyDetailStatus string if user.CompanyId > 1 { 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 { if sellerItem != nil { hasPermission = 5 } else { //获取权益销售信息 如果是FICC的客户类型,则默认他申请过 sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "获取销售信息失败,Err:" + err.Error() return } if sellerItemQy != nil { hasPermission = 2 resp.SellerMobile = sellerItemQy.Mobile resp.SellerName = sellerItemQy.RealName } else { hasPermission = 3 } } } resp.HasPermission = hasPermission resp.ActivityId = activityId resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限" 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 } } var userType int var permissionStr string userType, permissionStr, err = services.GetUserType(user.CompanyId) if err != nil { br.Msg = "获取信息失败!" br.ErrMsg = "获取失败,Err:" + err.Error() return } if userType == 1 && strings.Contains(activityInfo.ChartPermissionName, "研选") { br.Msg = "您暂无查看该活动权限" br.ErrMsg = "被分享客户不可见,永续客户无法查看研选行业" return } if user.CompanyId > 1 { companyItem, err := models.GetCompanyDetailById(user.CompanyId) //冻结客户 if err != nil { if err.Error() == utils.ErrNoRow() { if applyCount > 0 { hasPermission = 4 } else { if sellerItem != nil { hasPermission = 5 } else { hasPermission = 3 } } resp.ActivityId = activityId resp.HasPermission = hasPermission resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限" 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 strings.Contains(permissionStr, activityInfo.ActivityTypeName) { havePower = true } if havePower { hasPermission = 1 } else { if companyItem.ProductId == 2 { hasPermission = 2 resp.SellerMobile = companyItem.Mobile resp.SellerName = companyItem.SellerName if permissionStr == "专家" { resp.PopupMsg = "您暂无权限参加【" + activityInfo.ActivityTypeName + "】类型活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile } else { resp.PopupMsg = "您暂无权限参加【" + activityInfo.ChartPermissionName + "】行业活动,若想参加请联系对口销售--" + companyItem.SellerName + ":" + companyItem.Mobile } } else { hasPermission = 5 } } } else { //潜在客户 if applyCount > 0 { hasPermission = 4 } else { if sellerItem != nil { hasPermission = 5 } else { hasPermission = 3 } } resp.PopupMsg = "您暂无权限参加此活动,若想参加可以申请开通对应的试用权限" } resp.HasPermission = hasPermission resp.ActivityId = activityId if hasPermission == 1 { signupStatus, popupMsg, popupMsg2, err := services.SpecialTripPopupMsg(activityInfo, user) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "SpecialTripPopupMsg,Err:" + err.Error() return } total, err := models.GetUserActivitySpecialTripCount(user.UserId, activityId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error() return } resp.PopupMsg = popupMsg resp.PopupMsg2 = popupMsg2 resp.SignupStatus = signupStatus //判断是删除还是添加 if total == 0 { //获取销售信息 sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2) if err != nil { br.Msg = "操作失败" br.ErrMsg = "获取销售信息失败,Err:" + err.Error() return } item := new(models.CygxActivitySpecialTrip) item.UserId = uid item.RealName = user.RealName item.ActivityId = activityId item.CreateTime = time.Now() item.Mobile = user.Mobile item.Email = user.Email item.CompanyId = user.CompanyId item.CompanyName = user.CompanyName if sellerItem != nil { item.SellerName = sellerItem.RealName } err = models.AddCygxActivitySpecialTrip(item) if err != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + err.Error() return } //SignupStatus int `description:"返回状态:1:成功 、2 :人数已满 、3:调研次数已用完、 4:超时"` resp.Status = 1 resp.SignupStatus = 1 resp.PopupMsg = "感谢参与,本次报名会扣除一次贵司在弘则的调研点数。" resp.PopupMsg2 = "由于每场活动人数有限,如果不能参加请提前48小时取消,未及时取消导致影响其他客户报名将会维持扣点。" ////给所属销售发送消息 //if sellerItem.Mobile != "" { // openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile) // if openIpItem != nil && openIpItem.OpenId != "" { // if sellerItem != nil { // go services.SendSpecialTemplateMsg(user.RealName+"【"+user.CompanyName+"】", time.Now().Format(utils.FormatDateTime), user.Mobile, activityInfo.ResearchTheme, "sale", openIpItem) // } // } //} // 给芳姐发消息 //cnf, _ := models.GetConfigByCode("tpl_msg") //if cnf != nil { // openIpItem, _ := models.GetUserRecordByMobile(4, cnf.ConfigValue) // if openIpItem != nil && openIpItem.OpenId != "" { // actList, _ := models.GetActivityListSpecialAll(activityId) // if len(actList) == 5 { // var companyName string // for _, v := range actList { // companyName += "【" + v.CompanyName + "】" // } // go services.SendSpecialTemplateMsg(companyName, "", "", activityInfo.ResearchTheme, "", openIpItem) // } // } //} ////用户专项调研操作行为,模板消息推送 //go services.SpecialActivityUserRemind(user, activityInfo, 1) } } 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 /trip/cancel [post] func (this *ActivitySpecialCoAntroller) Tripcancel() { 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 activityInfo, errInfo := models.GetCygxActivitySpecialDetailById(uid, 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 } err = models.CancelActivitySpecialTrip(uid, activityInfo) if err != nil { br.Msg = "操作失败" br.ErrMsg = "CancelActivitySpecialTrip,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "会议提醒已取消" }