package cygx import ( "encoding/json" "github.com/rdlucklib/rdluck_tools/paging" "github.com/tealeg/xlsx" "hongze/hz_crm_api/controllers" "hongze/hz_crm_api/models" "hongze/hz_crm_api/models/cygx" "hongze/hz_crm_api/models/system" "hongze/hz_crm_api/services" cygxService "hongze/hz_crm_api/services/cygx" "hongze/hz_crm_api/services/elastic" "hongze/hz_crm_api/utils" "os" "path/filepath" "strconv" "strings" "time" ) // 专项调研 type ActivitySpecialCoAntroller struct { controllers.BaseAuthController } // @Title 专项调研内容的保存与发布 // @Description 专项调研内容的保存与发布接口 // @Param request body cygx.ActivitySpecialRep true "type json string" // @Success 200 操作成功 // @router /special/PreserveAndPublish [post] func (this *ActivitySpecialCoAntroller) PreserveAndPublish() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() AdminUser := this.SysUser if AdminUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } var req cygx.ActivitySpecialRep err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } activityId := req.ActivityId industrialManagementIdS := req.IndustrialManagementIdS industrialSubjectIdS := req.IndustrialSubjectIdS temporaryLabel := req.TemporaryLabel temporarySubject := req.TemporarySubject permissionName := req.PermissionName specialType := req.SpecialType city := req.City isShowSubjectName := req.IsShowSubjectName customerTypeIds := req.CustomerTypeIds if customerTypeIds != "" { condition := ` AND customer_type_id IN (` + customerTypeIds + `)` listValue, err := cygx.GetActivityCcustomerTypeList(condition) if err != nil { br.Msg = "活动可见套餐类型错误,请核实" return } req.CustomerTypeIds = "" for _, v := range listValue { req.CustomerTypeIds += v.PermissionValue + "," } req.CustomerTypeIds = strings.TrimRight(req.CustomerTypeIds, ",") } item := new(cygx.CygxActivitySpecial) var industrialActivityItems []*cygx.CygxIndustrialActivityGroupManagement var subjectActivityItems []*cygx.CygxIndustrialActivityGroupSubject var industrialNames string var industrialSubjectNames string if specialType != 1 && specialType != 2 { br.Msg = "请选择调研形式!" return } if specialType == 2 && city == "" { br.Msg = "请输入调研城市!" return } //如果临时标签是空的话,就去关联产业跟标的 if temporaryLabel == "" { if industrialManagementIdS == "" { br.Msg = "请选择产业" return } industrialManagementList := strings.Split(industrialManagementIdS, ",") for _, v := range industrialManagementList { industrialActivityItem := new(cygx.CygxIndustrialActivityGroupManagement) industrialManagementId, err := strconv.Atoi(v) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "产业ID不规范,Err:" + err.Error() + industrialManagementIdS return } industrialActivityItem.CreateTime = time.Now() industrialActivityItem.IndustrialManagementId = industrialManagementId industrialActivityItem.ActivityId = activityId industrialActivityItem.Source = 2 industrialActivityItems = append(industrialActivityItems, industrialActivityItem) } if industrialSubjectIdS != "" { industrialSubjectIdList := strings.Split(industrialSubjectIdS, ",") for _, v := range industrialSubjectIdList { subjectActivityItem := new(cygx.CygxIndustrialActivityGroupSubject) industrialSubjectId, err := strconv.Atoi(v) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "标的ID不规范,Err:" + err.Error() + industrialManagementIdS return } subjectActivityItem.CreateTime = time.Now() subjectActivityItem.IndustrialSubjectId = industrialSubjectId subjectActivityItem.ActivityId = activityId subjectActivityItem.Source = 2 subjectActivityItems = append(subjectActivityItems, subjectActivityItem) } } //产业名称 if industrialManagementIdS != "" { industrialNames, err = cygx.GetindustrialManagementNames(industrialManagementIdS) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "产业ID不规范,Err:" + err.Error() + industrialManagementIdS return } } //标的名称 if industrialSubjectIdS != "" { industrialSubjectNames, err = cygx.GetindustrialSubjectNames(industrialSubjectIdS) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "标的ID不规范,Err:" + err.Error() + industrialSubjectIdS return } if temporarySubject != "" { industrialSubjectNames += "/" + strings.Replace(temporarySubject, ",", "/", -1) } } else { industrialSubjectNames = "" if temporarySubject != "" { industrialSubjectNames = strings.Replace(temporarySubject, ",", "/", -1) } } } else { industrialActivityItems = make([]*cygx.CygxIndustrialActivityGroupManagement, 0) subjectActivityItems = make([]*cygx.CygxIndustrialActivityGroupSubject, 0) } //List := []*cygx.ChartPermissionRepMore{{PermissionName: "医药"}, {PermissionName: "消费"}, {PermissionName: "科技"}, {PermissionName: "智造"}, {PermissionName: "研选"}} //var haveCheck bool //for _, v := range List { // if permissionName == v.PermissionName { // haveCheck = true // } //} //if !haveCheck { // br.Msg = "行业名称:" + permissionName + "不存在" // return //} //if strings.Contains(permissionName, "研选") { // permissionName = utils.CHART_PERMISSION_NAME_MF_YANXUAN //} charInfo, errCategory := cygx.GetCategoryInfoByName(permissionName) if errCategory != nil { br.Msg = "请选择所属行业" br.ErrMsg = "获取所属行业信息失败,Err:" + errCategory.Error() return } item.ChartPermissionId = charInfo.ChartPermissionId item.ChartPermissionName = req.PermissionName item.CustomerTypeIds = req.CustomerTypeIds item.PublishStatus = req.DoType item.ResearchTheme = req.ResearchTheme item.ActivityTimeText = req.ActivityTimeText item.TemporaryLabel = req.TemporaryLabel item.TemporarySubject = req.TemporarySubject //item.Scale = req.Scale item.TripImgLink = req.TripImgLink item.IndustrialName = industrialNames item.IndustrialSubjectName = industrialSubjectNames item.SpecialType = specialType item.AdminId = AdminUser.AdminId item.AdminName = AdminUser.RealName if specialType == 1 { item.City = "" } else { item.City = city } item.IsShowSubjectName = isShowSubjectName item.PublishDate = time.Now().Format(utils.FormatDateTime) if req.TemporaryLabel != "" { item.Label = req.TemporaryLabel } else { if isShowSubjectName == 1 { item.Label = industrialSubjectNames if industrialSubjectNames == "" { br.Msg = "请选择关联标的" } } else { item.Label = industrialNames } } item.LastUpdatedTime = time.Now() item.CreateTime = time.Now() if req.ActivityId > 0 { activityInfo, errInfo := cygx.GetAddActivityInfoSpecialById(req.ActivityId) if errInfo != nil { br.Msg = "活动不存在" br.ErrMsg = "活动ID错误,ActivityId:" + strconv.Itoa(req.ActivityId) return } //校验活动后台管理员、销售是否有修改权限 havePower, popupMsg, err := cygxService.CheckActivitySpecialUpdatePower(AdminUser.AdminId, activityInfo) if err != nil { br.Msg = "获取管理员身份信息失败" br.ErrMsg = "获取管理员身份信息失败,Err:" + err.Error() return } if !havePower { br.Msg = popupMsg return } item.ActivityId = req.ActivityId //如果点发布PublishStatus = 1 如果点保存,PublishStatus则为之前的状态 发布人还是之前的发布人 if item.PublishStatus == 0 { item.PublishStatus = activityInfo.PublishStatus } updateParams := make(map[string]interface{}) updateParams["ChartPermissionId"] = item.ChartPermissionId updateParams["ChartPermissionName"] = item.ChartPermissionName updateParams["CustomerTypeIds"] = item.CustomerTypeIds updateParams["PublishStatus"] = item.PublishStatus updateParams["ResearchTheme"] = item.ResearchTheme updateParams["ActivityTimeText"] = item.ActivityTimeText updateParams["Label"] = item.Label updateParams["TemporaryLabel"] = item.TemporaryLabel updateParams["TemporarySubject"] = item.TemporarySubject //updateParams["Scale"] = item.Scale updateParams["TripImgLink"] = item.TripImgLink updateParams["IndustrialName"] = item.IndustrialName updateParams["IndustrialSubjectName"] = item.IndustrialSubjectName updateParams["LastUpdatedTime"] = time.Now() updateParams["SpecialType"] = item.SpecialType updateParams["City"] = item.City updateParams["IsShowSubjectName"] = item.IsShowSubjectName if req.DoType == 1 { updateParams["IsOffline"] = 0 updateParams["PublishDate"] = time.Now() } err = cygx.EditActivitySpecial(updateParams, item, industrialActivityItems, subjectActivityItems) if err != nil { br.Msg = "发布失败" br.ErrMsg = "发布失败,Err:" + err.Error() return } } else { newId, err := cygx.AddActivitySpecial(item, industrialActivityItems, subjectActivityItems) if err != nil { br.Msg = "发布失败" br.ErrMsg = "发布失败,Err:" + err.Error() return } activityId = int(newId) } //模板消息推送 if req.DoType == 1 { go services.SendWxMsgWithCygxActivitySpecial(activityId) //go cygxService.UpdateResourceData(activityId, "activityspecial", "add", time.Now().Format(utils.FormatDateTime)) } go cygxService.UpdateActivitySpecialResourceData(activityId) //写入首页最新 cygx_resource_data 表 go elastic.AddComprehensiveActivitySpecial(activityId) // Es添加活动 br.Ret = 200 br.Success = true br.Msg = "操作成功" br.IsAddLog = true } // @Title 活动列表 // @Description 获取活动列表接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param PublishStatus query int false "发布状态 ,0未发布,1已发布,传2查询所有,3已下线,4:已确定行程" // @Param ChartPermissionId query string false "行业id" // @Param KeyWord query string false "搜索关键词" // @Param IsTrip query bool false "是否是确定行程" // @Success 200 {object} cygx.GetCygxActivityListSpecialRep // @router /special/list [get] func (this *ActivitySpecialCoAntroller) ActivityList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") publishStatus, _ := this.GetInt("PublishStatus") chartPermissionId, _ := this.GetInt("ChartPermissionId") keyWord := this.GetString("KeyWord") isTrip, _ := this.GetBool("IsTrip", false) 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{} if keyWord != "" { condition += ` AND (art.research_theme LIKE '%` + keyWord + `%' ) ` } //行业名称 if chartPermissionId > 0 { condition += ` AND art.chart_permission_id = '` + strconv.Itoa(chartPermissionId) + `'` } if isTrip { if publishStatus == 0 || publishStatus == 1 { condition += ` AND art.publish_status = ` + strconv.Itoa(publishStatus) } } else { if publishStatus == 0 { condition += ` AND art.days = 0 AND art.publish_status = 0 AND art.is_offline =0 ` } if publishStatus == 1 { condition += ` AND art.days = 0 AND art.publish_status = 1 ` } } if publishStatus == 3 { condition += ` AND art.is_offline =1 ` } if publishStatus == 4 || isTrip { condition += ` AND art.days > 0 ` } total, err := cygx.GetActivitySpecialCount(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } if isTrip { condition += ` ORDER BY art.activity_time DESC ` } else { condition += ` ORDER BY art.last_updated_time DESC ` } list, errList := cygx.GetActivityListSpecialAll(condition, pars, startSize, pageSize) if errList != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errList.Error() return } list = cygxService.HandleActivityListSpecial(list, isTrip) page := paging.GetPaging(currentIndex, pageSize, total) resp := new(cygx.GetCygxActivityListSpecialRep) 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} cygx.ActivitySpecialDetail // @router /special/detail [get] func (this *ActivitySpecialCoAntroller) Detail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() AdminUser := this.SysUser if AdminUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } activityId, _ := this.GetInt("ActivityId") if activityId < 1 { br.Msg = "请输入活动ID" return } activityInfo, err := cygx.GetAddActivityInfoSpecialById(activityId) if err != nil { br.Msg = "活动不存在" br.ErrMsg = "活动ID错误,ActivityId:" + strconv.Itoa(activityId) return } industrialList, err := cygx.GetIndustrialActivityGroupManagementList(activityId, 2) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "获取活动关联的产业列表信息失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId) return } var subjectList []*cygx.SubjectActivityGroupManagementRep if len(industrialList) > 0 { subjectList, err = cygx.GetSubjectActivityGroupManagementList(activityId, 2) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "获取活动关联的标的列表信息失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId) return } } if activityInfo.CustomerTypeIds != "" { customerTypeIdslist := strings.Split(activityInfo.CustomerTypeIds, ",") var permissionValueStr string for _, v := range customerTypeIdslist { permissionValueStr += "'" + v + "'," } permissionValueStr = strings.TrimRight(permissionValueStr, ",") condition := ` AND permission_value IN (` + permissionValueStr + `)` listValue, err := cygx.GetActivityCcustomerTypeList(condition) if err != nil { br.Msg = "活动可见套餐类型错误,请核实" br.ErrMsg = "GetActivityCcustomerTypeList,Err:" + err.Error() return } activityInfo.CustomerTypeIds = "" for _, v := range listValue { activityInfo.CustomerTypeIds += strconv.Itoa(v.CustomerTypeId) + "," } activityInfo.CustomerTypeIds = strings.TrimRight(activityInfo.CustomerTypeIds, ",") nameStr, err := cygx.GetCustomerName(activityInfo.CustomerTypeIds) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取用户可见范围失败,Err:" + err.Error() return } activityInfo.CustomerName = nameStr } dateYmdList, err := cygxService.GetCygxActivitySpecialDay(activityId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = " 处理时间格式失败,GetCygxActivitySpecialDay,Err:" + err.Error() return } activityInfo.ListIndustrial = industrialList activityInfo.ListSubject = subjectList activityInfo.DateYmdList = dateYmdList br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = activityInfo } // @Title 活动的发布与取消发布 // @Description 活动的发布与取消发布接口 // @Param request body cygx.ActivityIdRep true "type json string" // @Success 200 操作成功 // @router /special/PublishAndCancel [post] func (this *ActivitySpecialCoAntroller) PublishAndCancel() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() AdminUser := this.SysUser if AdminUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } var req cygx.ActivityIdRep err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } activityId := req.ActivityId item := new(cygx.CygxActivitySpecial) activityInfo, errInfo := cygx.GetAddActivityInfoSpecialById(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 } //校验活动后台管理员、销售是否有修改权限 havePower, popupMsg, err := cygxService.CheckActivitySpecialUpdatePower(AdminUser.AdminId, activityInfo) if err != nil { br.Msg = "获取管理员身份信息失败" br.ErrMsg = "获取管理员身份信息失败,Err:" + err.Error() return } if !havePower { br.Msg = popupMsg return } updateParams := make(map[string]interface{}) if activityInfo.PublishStatus == 0 { item.PublishStatus = 1 updateParams["PublishDate"] = time.Now() } else { item.PublishStatus = 0 // 取消专项调研返点 //go cygxService.ActivitySpecialPublishAndCancel(activityInfo) } updateParams["PublishStatus"] = item.PublishStatus item.ActivityId = req.ActivityId err = cygx.UpdateActivitySpecial(updateParams, item) if err != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + err.Error() return } //模板消息推送 if item.PublishStatus == 1 { go services.SendWxMsgWithCygxActivitySpecial(activityId) //go cygxService.UpdateResourceData(activityId, "activityspecial", "add", time.Now().Format(utils.FormatDateTime)) } else { go cygxService.DetermineTripCancel(activityId) //go cygxService.UpdateResourceData(activityId, "activityspecial", "delete", time.Now().Format(utils.FormatDateTime)) } go cygxService.UpdateActivitySpecialResourceData(activityId) //写入首页最新 cygx_resource_data 表 go elastic.AddComprehensiveActivitySpecial(activityId) // Es添加活动 br.Ret = 200 br.Success = true br.Msg = "操作成功" br.IsAddLog = true } // @Title 删除活动 // @Description 删除活动接口 // @Param request body cygx.ActivityIdRep true "type json string" // @Success Ret=200 // @router /special/delete [post] func (this *ActivitySpecialCoAntroller) Delete() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() AdminUser := this.SysUser if AdminUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req cygx.ActivityIdRep err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } activityId := req.ActivityId if activityId < 1 { br.Msg = "请输入活动ID" return } activityInfo, errInfo := cygx.GetAddActivityInfoSpecialById(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 } //校验活动后台管理员、销售是否有修改权限 havePower, popupMsg, err := cygxService.CheckActivitySpecialUpdatePower(AdminUser.AdminId, activityInfo) if err != nil { br.Msg = "获取管理员身份信息失败" br.ErrMsg = "获取管理员身份信息失败,Err:" + err.Error() return } if !havePower { br.Msg = popupMsg return } err = cygx.DeleteActivitySpecial(activityId) if err != nil { br.Msg = "删除信息失败" br.ErrMsg = "删除信息失败,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "已删除" br.IsAddLog = true } // @Title 获取活动感兴趣人员列表 // @Description 获取活动感兴趣人员列表情接口 // @Param ActivityId query int true "活动ID" // @Success Ret=200 {object} cygx.CygxActivitySpecialSignupListResp // @router /special/interested/list [get] func (this *ActivitySpecialCoAntroller) InterestedList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() AdminUser := this.SysUser if AdminUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } activityId, _ := this.GetInt("ActivityId") if activityId < 1 { br.Msg = "请输入活动ID" return } _, err := cygx.GetAddActivityInfoSpecialById(activityId) if err != nil { br.Msg = "活动不存在" br.ErrMsg = "活动ID错误,ActivityId:" + strconv.Itoa(activityId) return } list, errList := cygx.GetCygxActivitySpecialSignupList(activityId) if errList != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errList.Error() return } resp := new(cygx.CygxActivitySpecialSignupListResp) resp.List = list br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 动感兴趣人员列表表格下载 // @Description 动感兴趣人员列表表格下载接口 // @Param ActivityId query int true "活动ID" // @Success 200 导出成功 // @router /special/export [get] func (this *ActivitySignupCoAntroller) SpecialExport() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() AdminUser := this.SysUser if AdminUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } activityId, _ := this.GetInt("ActivityId") //signupType := this.GetString("SignupType") activityInfo, err := cygx.GetAddActivityInfoSpecialById(activityId) if err != nil { br.Msg = "活动不存在" br.ErrMsg = "活动ID错误,ActivityId:" + strconv.Itoa(activityId) return } list, errList := cygx.GetCygxActivitySpecialSignupList(activityId) if errList != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errList.Error() return } //创建excel dir, err := os.Executable() exPath := filepath.Dir(dir) downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx" xlsxFile := xlsx.NewFile() if err != nil { br.Msg = "生成文件失败" br.ErrMsg = "生成文件失败" 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失败" br.ErrMsg = "新增Sheet失败,Err:" + err.Error() return } var isAdmin bool adminInfo, errAdmin := system.GetSysUserById(AdminUser.AdminId) if errAdmin != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errAdmin.Error() return } if adminInfo.Role == "admin" || adminInfo.Role == "researcher" { isAdmin = true } //标头 rowTitle := sheet.AddRow() if isAdmin { cellA := rowTitle.AddCell() cellA.Value = "姓名" cellB := rowTitle.AddCell() cellB.Value = "手机号" cellC := rowTitle.AddCell() cellC.Value = "公司名称" cellD := rowTitle.AddCell() cellD.Value = "所属销售" for _, item := range list { row := sheet.AddRow() cellA := row.AddCell() cellA.Value = item.RealName cellB := row.AddCell() cellB.Value = item.Mobile cellC := row.AddCell() cellC.Value = item.CompanyName cellD := row.AddCell() cellD.Value = item.SellerName } } else { cellA := rowTitle.AddCell() cellA.Value = "姓名" cellB := rowTitle.AddCell() cellB.Value = "公司名称" cellC := rowTitle.AddCell() cellC.Value = "所属销售" for _, item := range list { row := sheet.AddRow() cellA := row.AddCell() cellA.Value = item.RealName cellB := row.AddCell() cellB.Value = item.CompanyName cellC := row.AddCell() cellC.Value = item.SellerName } } err = xlsxFile.Save(downLoadnFilePath) if err != nil { br.Msg = "保存文件失败" br.ErrMsg = "保存文件失败" return } downloadFileName := activityInfo.ResearchTheme + ".xlsx" this.Ctx.Output.Download(downLoadnFilePath, downloadFileName) defer func() { os.Remove(downLoadnFilePath) }() //添加操作日志记录 br.Success = true br.Ret = 200 br.Msg = "导出成功" br.IsAddLog = true } // @Title 专项调研客户感兴趣总览 // @Description 专项调研客户感兴趣总览接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Success 200 {object} cygx.CygxActivitySpecialSignupRespList // @router /special/signup/list [get] func (this *ActivitySpecialCoAntroller) ActivitySignupList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" return } 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 isCanDownload bool var pars []interface{} if sysUser.Role == "admin" || sysUser.Role == "researcher" { isCanDownload = true } if isCanDownload == false { if sysUser.RoleTypeCode == "rai_group" { //组长查看本组所有组员 condition += ` AND s.company_id IN (SELECT company_id FROM user_seller_relation WHERE seller_id IN (SELECT admin_id FROM admin WHERE group_id = (SELECT group_id FROM admin WHERE admin_id = ` + strconv.Itoa(sysUser.AdminId) + ` ) )) ` } else { //组员查看自己 condition += ` AND s.company_id IN (SELECT company_id FROM user_seller_relation WHERE seller_id = ` + strconv.Itoa(sysUser.AdminId) + `) ` } } //condition += ` AND s.create_time < ? ` //pars = append(pars, time.Now().Format(utils.FormatDate)) total, err := cygx.GetCygxActivitySpecialSignupCount(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } condition += ` GROUP BY s.id ORDER BY s.create_time DESC ` list, errList := cygx.GetCygxActivitySpecialSignupListAll(condition, pars, startSize, pageSize) if errList != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errList.Error() return } if len(list) == 0 { list = make([]*cygx.CygxActivitySpecialSignupResp, 0) } page := paging.GetPaging(currentIndex, pageSize, total) resp := new(cygx.CygxActivitySpecialSignupRespList) resp.List = list resp.Paging = page br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 确定行程编辑 // @Description 确定行程编辑接口 // @Param request body cygx.ActivitySpecialRep true "type json string" // @Success 200 操作成功 // @router /special/trip/PreserveAndPublish [post] func (this *ActivitySpecialCoAntroller) TripPreserveAndPublish() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() AdminUser := this.SysUser if AdminUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } var req cygx.ActivitySpecialDateRep err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } activityId := req.ActivityId industrialManagementIdS := req.IndustrialManagementIdS industrialSubjectIdS := req.IndustrialSubjectIdS temporaryLabel := req.TemporaryLabel permissionName := req.PermissionName specialType := req.SpecialType city := req.City isShowSubjectName := req.IsShowSubjectName temporarySubject := req.TemporarySubject dateYmdList := req.DateYmdList item := new(cygx.CygxActivitySpecial) customerTypeIds := req.CustomerTypeIds if customerTypeIds != "" { condition := ` AND customer_type_id IN (` + customerTypeIds + `)` listValue, err := cygx.GetActivityCcustomerTypeList(condition) if err != nil { br.Msg = "活动可见套餐类型错误,请核实" return } req.CustomerTypeIds = "" for _, v := range listValue { req.CustomerTypeIds += v.PermissionValue + "," } req.CustomerTypeIds = strings.TrimRight(req.CustomerTypeIds, ",") } if specialType != 1 && specialType != 2 { br.Msg = "请选择调研形式!" return } if specialType == 2 && city == "" { br.Msg = "请输入调研城市!" return } if req.Days < 1 { br.Msg = "请选择调研天数!" return } if req.Host == "" { br.Msg = "请输入主持人!" return } if req.PersonInCharge == "" { br.Msg = "请输入纪要负责人!" return } if len(dateYmdList) < 1 { br.Msg = "请选择调研日期!" return } req.Days = len(dateYmdList) industrialActivityItems, subjectActivityItems, err, industrialNames, industrialSubjectNames := cygxService.HandleIndustrialLabel(temporaryLabel, industrialManagementIdS, industrialSubjectIdS, activityId) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "cygxService.HandleIndustrialLabel,Err:" + err.Error() return } //var items []*cygx.CygxActivity var dateYmdListOld []*cygx.CygxActivitySpecialDayResp dateYmdListOld, err = cygx.GetCygxActivitySpecialDayByActivityId(activityId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = " 处理时间格式失败,GetCygxActivitySpecialDay,Err:" + err.Error() return } activityTimeTextByDay, activityTime, activityTimeEnd, dateList, e := cygxService.HandleDateYmdList(dateYmdList) if e != nil { br.Msg = "时间格式有误!" br.ErrMsg = "cygxService.HandleIndustrialLabel,Err:" + e.Error() return } if strings.Contains(permissionName, "研选") { permissionName = utils.CHART_PERMISSION_NAME_MF_YANXUAN } charInfo, errCategory := cygx.GetCategoryInfoByName(permissionName) if errCategory != nil { br.Msg = "请选择所属行业" br.ErrMsg = "获取所属行业信息失败,Err:" + errCategory.Error() return } item.ChartPermissionId = charInfo.ChartPermissionId item.ChartPermissionName = req.PermissionName item.CustomerTypeIds = req.CustomerTypeIds item.ResearchTheme = req.ResearchTheme item.TemporaryLabel = req.TemporaryLabel item.TemporarySubject = req.TemporarySubject item.Scale = req.Scale item.TripImgLink = req.TripImgLink item.IndustrialName = industrialNames item.IndustrialSubjectName = industrialSubjectNames item.SpecialType = specialType if specialType == 1 { item.City = "" } else { item.City = city } item.IsShowSubjectName = isShowSubjectName if req.TemporaryLabel != "" { item.Label = req.TemporaryLabel } else { if isShowSubjectName == 1 { if temporarySubject != "" { item.Label = strings.Replace(temporarySubject, ",", "/", -1) } else { if industrialSubjectNames == "" { br.Msg = "请选择关联标的" return } item.Label = industrialSubjectNames } } else { item.Label = industrialNames } } activityInfo, errInfo := cygx.GetAddActivityInfoSpecialById(req.ActivityId) if errInfo != nil { br.Msg = "活动不存在" br.ErrMsg = "活动ID错误,ActivityId:" + strconv.Itoa(req.ActivityId) return } //校验活动后台管理员、销售是否有修改权限 havePower, popupMsg, err := cygxService.CheckActivitySpecialUpdatePower(AdminUser.AdminId, activityInfo) if err != nil { br.Msg = "获取管理员身份信息失败" br.ErrMsg = "获取管理员身份信息失败,Err:" + err.Error() return } if !havePower { br.Msg = popupMsg return } item.ActivityId = activityInfo.ActivityId updateParams := make(map[string]interface{}) updateParams["ChartPermissionId"] = item.ChartPermissionId updateParams["ChartPermissionName"] = item.ChartPermissionName updateParams["CustomerTypeIds"] = item.CustomerTypeIds updateParams["ResearchTheme"] = item.ResearchTheme updateParams["Label"] = item.Label updateParams["TemporaryLabel"] = item.TemporaryLabel updateParams["TemporarySubject"] = item.TemporarySubject updateParams["Scale"] = item.Scale updateParams["IndustrialName"] = item.IndustrialName updateParams["IndustrialSubjectName"] = item.IndustrialSubjectName updateParams["LastUpdatedTime"] = time.Now() updateParams["SpecialType"] = item.SpecialType updateParams["City"] = item.City updateParams["IsShowSubjectName"] = item.IsShowSubjectName updateParams["Days"] = req.Days updateParams["Host"] = req.Host updateParams["LimitPeopleNum"] = req.LimitPeopleNum updateParams["PersonInCharge"] = req.PersonInCharge updateParams["TripImgLinkFix"] = req.TripImgLinkFix updateParams["ActivityTimeTextByDay"] = activityTimeTextByDay updateParams["ActivityTime"] = activityTime updateParams["ActivityTimeEnd"] = activityTimeEnd err = cygx.EditActivitySpecial(updateParams, item, industrialActivityItems, subjectActivityItems) if err != nil { br.Msg = "发布失败" br.ErrMsg = "发布失败,Err:" + err.Error() return } // 批量插入日程时间 err = cygxService.AddActivitySpecial(dateList, activityId) if err != nil { br.Msg = "发布失败" br.ErrMsg = "发布失败,时间格式有误Err:" + err.Error() return } if activityInfo.Days == 0 { cygxService.DetermineTripBeInterested(activityId) cygxService.SendWxMsgWithCygxActivitySpecialSubscribeNoInterested(activityId) } else { var changeMsg string if activityInfo.SpecialType != req.SpecialType { if req.SpecialType == 1 { changeMsg = "调研形式由【线下】变为【线上】" } else { changeMsg = "调研形式由【线上】变为【线下】" } cygxService.DetermineTripChange(activityId, "SpecialType", changeMsg) } if activityInfo.City != req.City && req.City != "" && activityInfo.SpecialType == req.SpecialType { changeMsg = "调研形式由【" + activityInfo.City + "】变为【" + req.City + "】" cygxService.DetermineTripChange(activityId, "City", changeMsg) } //判断时间是否有改动,处理字符串 mapdateYmd := make(map[string]string) mapdateYmdTxt := make(map[string]string) for k, v := range dateList { resultTime := utils.StrTimeToTime(v) //时间字符串格式转时间格式 timeStrYmd := resultTime.Format(utils.FormatDateTime) timeStrYmdTxt := resultTime.Format(utils.FormatDate) timeStrHm := resultTime.Format(utils.FormatTimeHm) mapdateYmd[timeStrYmd] += timeStrYmd if k%2 == 0 { mapdateYmdTxt[timeStrYmdTxt] += timeStrHm } else { mapdateYmdTxt[timeStrYmdTxt] += "~" + timeStrHm + ", " } } for k, v := range mapdateYmdTxt { v = strings.TrimRight(v, ", ") changeMsg += k + " " + v + ";" } changeMsg = strings.TrimRight(changeMsg, ";") var changedate bool for _, v := range dateYmdListOld { if _, ok := mapdateYmd[v.DayTime.Format(utils.FormatDateTime)]; !ok { changedate = true } } if len(dateList) != len(dateYmdListOld) || changedate { changeMsg = strings.TrimRight(changeMsg, ",") cygxService.DetermineTripChange(activityId, "dateList", changeMsg) } } go elastic.AddComprehensiveActivitySpecial(activityId) // Es添加活动 br.Ret = 200 br.Success = true br.Msg = "操作成功" br.IsAddLog = true } // @Title 活动下线与重新发布 // @Description 活动的发布与取消发布接口 // @Param request body cygx.ActivityIdRep true "type json string" // @Success 200 操作成功 // @router /special/Offline [post] func (this *ActivitySpecialCoAntroller) Offline() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() AdminUser := this.SysUser if AdminUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } var req cygx.ActivityIdRep err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } activityId := req.ActivityId item := new(cygx.CygxActivitySpecial) activityInfo, errInfo := cygx.GetAddActivityInfoSpecialById(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 } //校验活动后台管理员、销售是否有修改权限 havePower, popupMsg, err := cygxService.CheckActivitySpecialUpdatePower(AdminUser.AdminId, activityInfo) if err != nil { br.Msg = "获取管理员身份信息失败" br.ErrMsg = "获取管理员身份信息失败,Err:" + err.Error() return } if !havePower { br.Msg = popupMsg return } updateParams := make(map[string]interface{}) if activityInfo.IsOffline == 0 { item.IsOffline = 1 item.PublishStatus = 0 } else { item.IsOffline = 0 item.PublishStatus = 1 updateParams["PublishDate"] = time.Now() } updateParams["PublishStatus"] = item.PublishStatus updateParams["IsOffline"] = item.IsOffline item.ActivityId = req.ActivityId err = cygx.UpdateActivitySpecial(updateParams, item) if err != nil { br.Msg = "操作失败" br.ErrMsg = "操作失败,Err:" + err.Error() return } //模板消息推送 //if item.PublishStatus == 1 { // go cygxService.UpdateResourceData(activityId, "activityspecial", "add", time.Now().Format(utils.FormatDateTime)) // //go services.SendWxMsgWithCygxActivitySpecial(activityId) //} else { // go cygxService.UpdateResourceData(activityId, "activityspecial", "delete", time.Now().Format(utils.FormatDateTime)) //} go cygxService.UpdateActivitySpecialResourceData(activityId) //写入首页最新 cygx_resource_data 表 go elastic.AddComprehensiveActivitySpecial(activityId) // Es添加活动 br.Ret = 200 br.Success = true br.Msg = "操作成功" br.IsAddLog = true }