package yb import ( "encoding/json" "fmt" "github.com/rdlucklib/rdluck_tools/paging" "hongze/hz_crm_api/controllers" "hongze/hz_crm_api/models" "hongze/hz_crm_api/models/yb" "hongze/hz_crm_api/models/yb/request" ybResp "hongze/hz_crm_api/models/yb/response" ybService "hongze/hz_crm_api/services/yb" "hongze/hz_crm_api/utils" "strings" "time" ) // ActivityController 研报活动模块 type ActivityController struct { controllers.BaseAuthController } // List // @Title 获取活动列表 // @Description 获取活动列表 // @Param Keyword query string false "搜索关键字" // @Param ActivityTypeIds query string false "活动类别ids,多个用英文逗号分割" // @Param ActiveStatus query int8 false "活动进行状态,枚举值:1:未开始;2:进行中;3:已结束" // @Param PublishStatus query int8 false "活动发布状态,枚举值:-1:全部;0:未发布;1:已发布" // @Param StartDate query string false "活动开始日期,格式:2021-11-09" // @Param EndDate query string false "活动结束日期,格式:2021-11-10" // @Success 200 {object} []yb.ListResp // @router /activity/list [get] func (this *ActivityController) List() { 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" br.Ret = 408 return } keyword := this.GetString("Keyword") activityTypeIds := this.GetString("ActivityTypeIds", "") activeStatus, _ := this.GetInt("ActiveStatus", 0) publishStatus, _ := this.GetInt("PublishStatus", 0) startDate := this.GetString("StartDate") endDate := this.GetString("EndDate") pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = paging.StartIndex(currentIndex, pageSize) condition := "" pars := make([]interface{}, 0) //关键字 if keyword != "" { condition += ` AND activity_name LIKE '%` + keyword + `%' ` } //活动类别ids if activityTypeIds != "" { condition += ` AND activity_type_id IN (` + activityTypeIds + `)` } //活动开始与否状态 order := "" if activeStatus > 0 { nowTime := time.Now().Format(utils.FormatDateTime) //1:未开始;2:进行中;3:已结束" switch activeStatus { case 1: condition += ` AND start_time > ? ` pars = append(pars, nowTime) case 2: condition += ` AND start_time <= ? and end_time >= ? ` pars = append(pars, nowTime, nowTime) order = " start_time DESC" case 3: condition += ` AND end_time < ? ` pars = append(pars, nowTime) order = " start_time DESC" } } //活动是否发布 if publishStatus >= 0 { condition += ` AND publish_status = ? ` pars = append(pars, publishStatus) } //活动时间 if startDate != "" && endDate != "" { condition += ` AND start_time >= ? and end_time <= ?` pars = append(pars, startDate+" 00:00:00", endDate+" 23:59:59") } // 获取所有的分类 total, list, err := yb.GetList(condition, order, pars, startSize, pageSize) if err != nil { br.Msg = "获取活动列表失败!" br.ErrMsg = "获取活动列表失败,Err:" + err.Error() return } if len(list) > 0 { activityIdList := make([]string, 0) for _, v := range list { activityIdList = append(activityIdList, fmt.Sprint(v.ActivityId)) } //音频文件列表 voiceList, tmpErr := yb.GetVoiceListByActivityIds(strings.Join(activityIdList, ",")) if tmpErr != nil { br.Msg = "获取失败" br.ErrMsg = "获取音频失败,Err:" + tmpErr.Error() return } activityVoiceMap := make(map[int][]*yb.ActivityVoice) for _, voice := range voiceList { tmpVoiceList, ok := activityVoiceMap[voice.ActivityId] if !ok { tmpVoiceList = make([]*yb.ActivityVoice, 0) } activityVoiceMap[voice.ActivityId] = append(tmpVoiceList, voice) } //海报文件列表 posterList, tmpErr := yb.GetPosterListByActivityIds(strings.Join(activityIdList, ",")) if tmpErr != nil { br.Msg = "获取失败" br.ErrMsg = "获取海报失败,Err:" + tmpErr.Error() return } activityPosterMap := make(map[int][]*yb.ActivityPoster) for _, poster := range posterList { tmpPosterList, ok := activityPosterMap[poster.ActivityId] if !ok { tmpPosterList = make([]*yb.ActivityPoster, 0) } activityPosterMap[poster.ActivityId] = append(tmpPosterList, poster) } //权限文件列表 permissionList, tmpErr := yb.GetPermissionListByActivityIds(strings.Join(activityIdList, ",")) if tmpErr != nil { br.Msg = "获取失败" br.ErrMsg = "获取海报失败,Err:" + tmpErr.Error() return } activityPermissionMap := make(map[int][]*yb.ActivityPermission) for _, activityPermission := range permissionList { tmpPermissionList, ok := activityPermissionMap[activityPermission.ActivityId] if !ok { tmpPermissionList = make([]*yb.ActivityPermission, 0) } activityPermissionMap[activityPermission.ActivityId] = append(tmpPermissionList, activityPermission) } for _, activity := range list { // 音频文件 if voiceList, ok := activityVoiceMap[activity.ActivityId]; ok { activity.VoiceList = voiceList } //海报文件 if posterList, ok := activityPosterMap[activity.ActivityId]; ok { activity.PosterList = posterList } //权限列表 if permissionList, ok := activityPermissionMap[activity.ActivityId]; ok { activity.PermissionList = permissionList } } } page := paging.GetPaging(currentIndex, pageSize, total) resp := ybResp.ListResp{ List: list, Paging: page, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // Add // @Title 新增活动 // @Description 新增活动接口 // @Param request body request.AddActivityReq true "type json string" // @Success 200 {object} response.AddContractResp // @router /activity/add [post] func (this *ActivityController) Add() { 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" br.Ret = 408 return } var req request.AddActivityReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.ActivityTypeId <= 0 { br.Msg = "活动类型ID有误!" br.ErrMsg = "活动类型ID有误!" return } if req.ActivityName == "" { br.Msg = "活动标题不能为空!" br.ErrMsg = "活动标题不能为空!" return } if req.Speaker == "" { br.Msg = "活动主讲人不能为空!" br.ErrMsg = "活动主讲人不能为空!" return } startTime, err := time.ParseInLocation(utils.FormatDateTime, req.StartTime, time.Local) if err != nil { br.Msg = "活动开始日期转换失败!" br.ErrMsg = "活动开始日期转换失败,Err:" + err.Error() return } endTime, err := time.ParseInLocation(utils.FormatDateTime, req.EndTime, time.Local) if err != nil { br.Msg = "活动结束日期转换失败!" br.ErrMsg = "活动结束日期转换失败,Err:" + err.Error() return } /*now := time.Now() if now.After(startTime) { br.Msg = "活动时间不允许小于当前时间!" br.ErrMsg = "活动时间不允许小于当前时间!" return }*/ if startTime.After(endTime) { br.Msg = "活动结束时间不允许小于开始时间!" br.ErrMsg = "活动结束时间不允许小于开始时间!" return } allowEndTime := startTime.Add(30 * time.Minute) if allowEndTime.After(endTime) { br.Msg = "活动结束时间至少要在开始时间半个小时之后!" br.ErrMsg = "活动结束时间至少要在开始时间半个小时之后!" return } activityInfo, err := ybService.AddActivity(req, sysUser.AdminId) if err != nil { br.Msg = "保存活动失败!" br.ErrMsg = "保存活动失败,Err:" + err.Error() return } msg := "添加成功" br.Ret = 200 br.Success = true br.Msg = msg br.Data = ybResp.AddActivityResp{ ActivityId: activityInfo.ActivityId, } } // Edit // @Title 编辑活动 // @Description 编辑活动接口 // @Param request body request.EditActivityReq true "type json string" // @Success 200 {object} 保存成功 // @router /activity/edit [post] func (this *ActivityController) Edit() { 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" br.Ret = 408 return } var req request.EditActivityReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.ActivityId <= 0 { br.Msg = "活动ID异常!" br.ErrMsg = "活动ID异常" return } _, err, errMsg := ybService.EditActivity(req) if err != nil { br.Msg = "保存活动失败!" + errMsg br.ErrMsg = "保存活动失败,Err:" + err.Error() return } msg := "保存成功" br.Ret = 200 br.Success = true br.Msg = msg } // Publish // @Title 发布活动 // @Description 发布活动接口 // @Param request body request.PublishActivityReq true "type json string" // @Success 200 {object} 发布成功 // @router /activity/publish [post] func (this *ActivityController) Publish() { 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" br.Ret = 408 return } var req request.PublishActivityReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.ActivityId <= 0 { br.Msg = "活动ID异常!" br.ErrMsg = "活动ID异常" return } _, err, errMsg := ybService.PublishActivity(req.ActivityId) if err != nil { br.Msg = "发布活动失败!" + errMsg br.ErrMsg = "发布活动失败,Err:" + err.Error() return } msg := "发布成功" br.Ret = 200 br.Success = true br.Msg = msg } // UnPublish // @Title 取消发布活动 // @Description 取消发布活动接口 // @Param request body request.PublishActivityReq true "type json string" // @Success 200 {object} 取消发布成功 // @router /activity/unpublish [post] func (this *ActivityController) UnPublish() { 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" br.Ret = 408 return } var req request.PublishActivityReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.ActivityId <= 0 { br.Msg = "活动ID异常!" br.ErrMsg = "活动ID异常" return } _, err, errMsg := ybService.UnPublishActivity(req.ActivityId) if err != nil { br.Msg = "取消发布活动失败!" + errMsg br.ErrMsg = "取消发布活动失败,Err:" + err.Error() return } msg := "取消发布成功" br.Ret = 200 br.Success = true br.Msg = msg } // DelPublish // @Title 删除活动 // @Description 删除活动接口 // @Param request body request.PublishActivityReq true "type json string" // @Success 200 {object} 删除成功 // @router /activity/del_publish [post] func (this *ActivityController) DelPublish() { 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" br.Ret = 408 return } var req request.PublishActivityReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.ActivityId <= 0 { br.Msg = "活动ID异常!" br.ErrMsg = "活动ID异常" return } _, err, errMsg := ybService.DelActivity(req.ActivityId) if err != nil { br.Msg = "删除活动失败!" + errMsg br.ErrMsg = "删除活动失败,Err:" + err.Error() return } msg := "删除成功" br.Ret = 200 br.Success = true br.Msg = msg } // ReportList // @Title 获取报告列表 // @Description 获取报告列表 // @Param Keyword query string false "搜索关键字" // @Param StartDate query string false "开始日期" // @Param EndDate query string false "结束日期" // @Param ReportType query string false "报告类型,枚举值:day,week,two_week,month,other" // @Success 200 {object} yb.ResearchReportListResp // @router /report/list [get] func (this *ActivityController) ReportList() { 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" br.Ret = 408 return } keyword := this.GetString("Keyword") //startDate := this.GetString("StartDate") //endDate := this.GetString("EndDate") reportType := this.GetString("ReportType") classifyId, _ := this.GetInt("ClassifyId") 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{} // 报告类型: 晨报, 周报, 其他电话会报告 reportTypeArr := []string{"day", "week", "tel"} if !utils.InArrayByStr(reportTypeArr, reportType) { br.Msg = "报告类型有误" return } if reportType == "tel" && classifyId == 0 { br.Msg = "请选择报告类型" return } total := 0 list := make([]*models.ResearchReportList, 0) // 晨报-查询老报告 //if reportType == "day" { // if keyword != `` { // condition += ` and research_report_name like '%` + keyword + `%' ` // } // if startDate != `` { // condition += ` and created_time >= ? ` // pars = append(pars, startDate+" 00:00:00") // } // if endDate != `` { // condition += ` and created_time <= ? ` // pars = append(pars, endDate+" 23:59:59") // } // if reportType != `` { // condition += ` and type = ? ` // pars = append(pars, reportType) // } // oldTotal, reportList, err := models.GetResearchReportList(condition, pars, startSize, pageSize) // if err != nil { // br.Msg = "获取报告列表失败!" // br.ErrMsg = "获取报告列表失败,Err:" + err.Error() // return // } // total = oldTotal // // //环境不同,阅读报告的地址不同 // linkUrl := `https://details.hzinsights.com/ficcReportDetail?research_report_id=` // if utils.RunMode == `debug` { // linkUrl = `http://advisoryadmin.brilliantstart.cn/xcx_h5/ficcReportDetail?research_report_id=` // } // for _, report := range reportList { // report.LinkUrl = fmt.Sprint(linkUrl, report.ResearchReportId) // } // list = reportList //} if keyword != "" { condition += ` AND title LIKE '%` + keyword + `%' ` } if reportType == "week" || reportType == "day" { condition += ` AND state = 2 AND has_chapter = 1 AND chapter_type = ? AND old_report_id = 0 ` pars = append(pars, reportType) } else { // 其他电话会报告暂时支持同步过来的报告 condition += ` AND state = 2` // 此处仅查询二级分类中含电话会的报告, 一级分类可能含非电话会二级分类, 所以不用一级分类作为报告的查询条件 var telCond, telOrder string var telPars []interface{} telCond += ` AND parent_id = ? AND has_teleconference = 1` telPars = append(telPars, classifyId) telList, e := models.GetClassifyByCondition(telCond, telOrder, telPars) if e != nil { br.Msg = "获取报告列表失败" br.ErrMsg = "获取其他报告电话会分类失败, Err: " + e.Error() return } telClassifyIds := make([]int, 0) for i := range telList { telClassifyIds = append(telClassifyIds, telList[i].Id) } if len(telClassifyIds) > 0 { condition += ` AND classify_id_second IN (` + utils.GetOrmInReplace(len(telClassifyIds)) + `)` pars = append(pars, telClassifyIds) } else { // 无电话会二级分类理应查不出任何数据 condition += ` AND 1 = 2` } } newTotal, reportList, e := models.GetPageReportList(condition, pars, startSize, pageSize) if e != nil { br.Msg = "获取新报告列表失败" br.ErrMsg = "获取新报告列表失败, Err:" + e.Error() return } total = newTotal linkUrl := `https://details.hzinsights.com/xcx_h5/hzyb/report/detail?reportId=` if utils.RunMode == `debug` { linkUrl = `http://xcxh5test.hzinsights.com/xcx_h5/hzyb/report/detail?reportId=` } for _, v := range reportList { reportDate, e := time.Parse(utils.FormatDateTime, v.PublishTime) if e != nil { return } item := &models.ResearchReportList{ ResearchReportId: v.Id, ResearchReportName: v.Title, ResearchReportDate: reportDate, Type: reportType, Author: v.Author, ReportVariety: v.ClassifyNameFirst, IsSendedMsg: int8(v.MsgIsSend), Periods: v.Stage, Status: "report", Enabled: 1, CreatedTime: v.CreateTime, LastUpdatedTime: v.ModifyTime, LinkUrl: fmt.Sprint(linkUrl, v.Id), } list = append(list, item) } page := paging.GetPaging(currentIndex, pageSize, total) resp := ybResp.ResearchReportListResp{ List: list, Paging: page, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // Detail // @Title 活动详情 // @Description 活动详情 // @Param activityId query int true "活动ID" // @Success 200 {object} yb.Activity 获取成功 // @router /activity/detail [get] func (this *ActivityController) Detail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() activityId, _ := this.GetInt("activityId", 0) if activityId <= 0 { br.Msg = "活动ID异常!" br.ErrMsg = "活动ID异常" return } activity, err := yb.GetById(activityId) if err != nil { if err.Error() == utils.ErrNoRow() { br.Msg = "活动信息不存在" br.ErrMsg = "活动信息不存在" return } br.Msg = "活动详情获取失败" br.ErrMsg = "活动详情获取失败,Err:" + err.Error() return } posterList, err := yb.GetPosterListByActivityId(activityId) if err != nil { br.Msg = "活动海报列表获取失败" br.ErrMsg = "活动海报列表获取失败,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = ybResp.ActivityDetailResp{ Activity: activity, Poster: posterList, } }