123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632 |
- 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"
- "hongze/hz_crm_api/utils"
- "strconv"
- "strings"
- "time"
- )
- type ThsSendController struct {
- controllers.BaseAuthController
- }
- // @Title 推送客群待发送列表
- // @Description 推送客群待发送列表
- // @Param PageSize query int true "每页数据条数"
- // @Param CurrentIndex query int true "当前页页码,从1开始"
- // @Param Title query string true "推送标题"
- // @Param ReportType query string true "内容类型"
- // @Param CreateTimeStart query string true "创建时间起始时间"
- // @Param CreateTimeEnd query string true "创建时间截止时间"
- // @Param PushTimeStart query string true "待推送时间起始时间"
- // @Param PushTimeEnd query string true "待推送时间截止时间"
- // @Success 200 {object} models.ReportSendThsListResp
- // @router /ths_send/list [get]
- func (t *ThsSendController) List() {
- br := new(models.BaseResponse).Init()
- defer func() {
- t.Data["json"] = br
- t.ServeJSON()
- }()
- sysUser := t.SysUser
- if sysUser == nil {
- br.Msg = "请登录"
- br.ErrMsg = "请登录,SysUser Is Empty"
- br.Ret = 408
- return
- }
- pageSize, _ := t.GetInt("PageSize")
- currentIndex, _ := t.GetInt("CurrentIndex")
- title := t.GetString("Title")
- reportType := t.GetString("ReportType")
- createTimeStart := t.GetString("CreateTimeStart")
- createTimeEnd := t.GetString("CreateTimeEnd")
- pushTimeStart := t.GetString("PushTimeStart")
- pushTimeEnd := t.GetString("PushTimeEnd")
- var startSize int
- if pageSize <= 0 {
- pageSize = utils.PageSize20
- }
- if currentIndex <= 0 {
- currentIndex = 1
- }
- startSize = paging.StartIndex(currentIndex, pageSize)
- var condition string
- var pars []interface{}
- if title != "" {
- condition += ` AND title LIKE '%` + title + `%' `
- }
- if reportType != "" {
- condition += ` AND report_type = ? `
- pars = append(pars, reportType)
- }
- if createTimeStart != "" {
- condition += ` AND create_time >= ? `
- pars = append(pars, createTimeStart)
- }
- if createTimeEnd != "" {
- tmpDate, err := time.ParseInLocation(utils.FormatDate, createTimeEnd, time.Local)
- if err != nil {
- br.Msg = "截止日期格式错误"
- return
- }
- tmpDate = tmpDate.AddDate(0, 0, 1)
- condition += ` AND create_time < ? `
- pars = append(pars, tmpDate)
- }
- if pushTimeStart != "" {
- condition += ` AND push_time >= ? `
- pars = append(pars, pushTimeStart)
- }
- if pushTimeEnd != "" {
- tmpDate, err := time.ParseInLocation(utils.FormatDate, pushTimeEnd, time.Local)
- if err != nil {
- br.Msg = "待推送截止日期格式错误"
- return
- }
- tmpDate = tmpDate.AddDate(0, 0, 1)
- condition += ` AND push_time < ? `
- pars = append(pars, tmpDate)
- }
- total, err := models.GetWaitReportSendThsCount(condition, pars)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取数据总数失败,Err:" + err.Error()
- return
- }
- list := make([]*models.ReportSendThsListItem, 0)
- tmpList, err := models.GetWaitReportSendThsList(condition, pars, startSize, pageSize)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取数据失败,Err:" + err.Error()
- return
- }
- for _, v := range tmpList {
- tmp := &models.ReportSendThsListItem{
- SendId: v.SendId,
- ReportId: v.ReportId,
- ReportType: v.ReportType,
- Status: v.Status,
- Remark: v.Remark,
- Title: v.Title,
- LabelStr: v.LabelStr,
- Level: v.Level,
- PushTime: v.PushTime.Format(utils.FormatDateTime),
- CreateTime: v.CreateTime.Format(utils.FormatDateTime),
- }
- list = append(list, tmp)
- }
- page := paging.GetPaging(currentIndex, pageSize, int(total))
- resp := new(models.ReportSendThsListResp)
- resp.List = list
- resp.Paging = page
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- br.Data = resp
- }
- // Save
- // @Title 设置同花顺客群待推送时间
- // @Description 设置同花顺客群待推送时间
- // @Param request body request.ModifyReportThsSendPushTimeReq true "type json string"
- // @Success 200 string "操作成功"
- // @router /ths_send/modify_push_time [post]
- func (t *ThsSendController) ModifyPushTime() {
- br := new(models.BaseResponse).Init()
- br.IsSendEmail = false
- defer func() {
- t.Data["json"] = br
- t.ServeJSON()
- }()
- sysUser := t.SysUser
- if sysUser == nil {
- br.Msg = "请登录"
- br.ErrMsg = "请登录,SysUser Is Empty"
- br.Ret = 408
- return
- }
- var req request.ModifyReportThsSendPushTimeReq
- if err := json.Unmarshal(t.Ctx.Input.RequestBody, &req); err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- if req.SendId == 0 {
- br.Msg = "请选择要修改的记录"
- return
- }
- if req.PushTime == "" {
- br.Msg = "请输入新的推送时间"
- return
- }
- newPushTime, err := time.ParseInLocation(utils.FormatDateTime, req.PushTime, time.Local)
- if err != nil {
- br.Msg = "新的推送时间格式错误"
- return
- }
- if newPushTime.Before(time.Now()) {
- br.Msg = "新的推送时间不能设置成过去时间"
- return
- }
- //查询当前记录是否允许更改
- info, err := models.GetReportSendThsBySendId(req.SendId)
- if err != nil {
- br.Msg = "查询推送记录失败"
- br.ErrMsg = "查询推送记录失败 ErrMsg:" + err.Error()
- return
- }
- if info.Status != 2 {
- br.Msg = "当前状态不是待推送,禁止修改"
- return
- }
- //查询新的推送时间和最近一条待推送的时间是否间隔5分钟以上
- last, err := models.GetLatelyWaitReportSendThs()
- if err != nil {
- br.Msg = "查询最近的待推送记录失败"
- br.ErrMsg = "查询最近的待推送记录失败 ErrMsg:" + err.Error()
- return
- }
- var sub time.Duration
- if last.PushTime.Before(newPushTime) {
- sub = newPushTime.Sub(last.PushTime)
- } else {
- sub = last.PushTime.Sub(newPushTime)
- }
- if sub.Minutes() <= 5 {
- br.Msg = "新的推送时间与最近待推送的时间相隔过近,不允许修改"
- return
- }
- //查询是否存在和设置时间相近的待推送记录
- newPushTimeStart := newPushTime.Add(-5 * time.Minute)
- newPushTimeEnd := newPushTime.Add(5 * time.Minute)
- nearly, e := models.GetNearlyWaitReportSendThsByPushTime(info.SendId, newPushTimeStart, newPushTimeEnd)
- if e != nil && e.Error() != utils.ErrNoRow() {
- br.Msg = "查询最近的待推送记录失败"
- br.ErrMsg = "查询最近的待推送记录失败 ErrMsg:" + e.Error()
- return
- }
- if e == nil && nearly.SendId > 0 {
- br.Msg = "新的推送时间与某条待推送记录时间相隔过近,不允许修改"
- return
- }
- var condition string
- var pars []interface{}
- condition = " and push_time > ?"
- pars = append(pars, req.PushTime)
- //查询
- allList, err := models.GetWaitReportSendThsAll(condition, pars)
- if err != nil {
- br.Msg = "查询推送记录失败"
- br.ErrMsg = "查询推送记录失败 ErrMsg:" + err.Error()
- return
- }
- needChangeSendIds := ""
- multi := ""
- if len(allList) > 0 {
- //整理需要更新推送时间的记录
- n := 0
- for _, v := range allList {
- if v.SendId == req.SendId {
- continue
- }
- n = n + 1
- needChangeSendIds += strconv.Itoa(v.SendId) + ","
- add := time.Duration((n)*40) * time.Minute
- newTime := newPushTime.Add(add).Format(utils.FormatDateTime)
- multi += ` WHEN ` + strconv.Itoa(v.SendId) + ` THEN "` + newTime + `"`
- }
- }
- if needChangeSendIds != "" {
- needChangeSendIds = strings.Trim(needChangeSendIds, ",")
- }
- err = models.MultiUpdateReportSendThsPushTime(req.SendId, req.PushTime, multi, needChangeSendIds)
- if err != nil {
- br.Msg = "设置失败"
- br.ErrMsg = "设置失败 ErrMsg:" + err.Error()
- return
- }
- br.Ret = 200
- br.Success = true
- br.Msg = "操作成功"
- }
- // @Title 推送客群待发送类型列表
- // @Description 推送客群待发送类型列表
- // @Success 200 {object} models.ReportSendThsListResp
- // @router /ths_send/report_type [get]
- func (t *ThsSendController) ReportTypeList() {
- br := new(models.BaseResponse).Init()
- defer func() {
- t.Data["json"] = br
- t.ServeJSON()
- }()
- sysUser := t.SysUser
- if sysUser == nil {
- br.Msg = "请登录"
- br.ErrMsg = "请登录,SysUser Is Empty"
- br.Ret = 408
- return
- }
- list := make([]*models.ReportSendThsTypeListItem, 0)
- /*tmpList, err := models.GetWaitReportSendThsType()
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取数据失败,Err:" + err.Error()
- return
- }
- for _, v := range tmpList {
- tmp := &models.ReportSendThsTypeListItem{ReportType: v.ReportType}
- list = append(list, tmp)
- }*/
- reportTypes := []string{"研报", "语音播报", "视频社区", "线上路演"}
- for _, v := range reportTypes {
- tmp := &models.ReportSendThsTypeListItem{ReportType: v}
- list = append(list, tmp)
- }
- resp := new(models.ReportSendThsTypeListResp)
- resp.List = list
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- br.Data = resp
- }
- // ThsSentConfList
- // @Title 推送客户群设置-产品优先列表
- // @Description 推送客户群设置-产品优先列表
- // @Param SortParam query string false "排序字段参数,用来排序的字段, 枚举值:'level':优先类型"
- // @Param SortType query string true "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
- // @Param PageSize query int true "每页数据条数"
- // @Param CurrentIndex query int true "当前页页码,从1开始"
- // @Success 200 {object} models.ReportSendThsListResp
- // @router /ths_send/config/list [get]
- func (t *ThsSendController) ThsSentConfList() {
- br := new(models.BaseResponse).Init()
- defer func() {
- t.Data["json"] = br
- t.ServeJSON()
- }()
- sysUser := t.SysUser
- if sysUser == nil {
- br.Msg = "请登录"
- br.ErrMsg = "请登录,SysUser Is Empty"
- br.Ret = 408
- return
- }
- pageSize, _ := t.GetInt("PageSize")
- currentIndex, _ := t.GetInt("CurrentIndex")
- sortParam := t.GetString("SortParam")
- sortType := t.GetString("SortType")
- var startSize int
- if pageSize <= 0 {
- pageSize = utils.PageSize20
- }
- if currentIndex <= 0 {
- currentIndex = 1
- }
- startSize = paging.StartIndex(currentIndex, pageSize)
- var condition string
- var pars []interface{}
- sortStr := ``
- if sortParam != `` {
- sortStr = fmt.Sprintf("%s %s,modify_time desc ", sortParam, sortType)
- } else {
- sortStr = " modify_time desc,config_id desc "
- }
- total, err := models.GetReportSendThsConfigCount(condition, pars)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取数据总数失败,Err:" + err.Error()
- return
- }
- list := make([]*models.ReportSendThsConfigListItem, 0)
- tmpList, err := models.GetReportSendThsConfigList(condition, pars, startSize, pageSize, sortStr)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取数据失败,Err:" + err.Error()
- return
- }
- for _, v := range tmpList {
- tmp := &models.ReportSendThsConfigListItem{
- ConfigId: v.ConfigId,
- ConfigType: v.ConfigType,
- ClassifyId: v.ClassifyId,
- ClassifyName: v.ClassifyName,
- Level: v.Level,
- ModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
- CreateTime: v.CreateTime.Format(utils.FormatDateTime),
- }
- list = append(list, tmp)
- }
- page := paging.GetPaging(currentIndex, pageSize, int(total))
- resp := new(models.ReportSendThsConfigListResp)
- resp.List = list
- resp.Paging = page
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- br.Data = resp
- }
- // AddThsSentConf
- // @Title 推送客户群设置-添加产品优先配置
- // @Description 推送客户群设置-添加产品优先配置
- // @Param request body request.AddThsSentConfReq true "type json string"
- // @Success 200 string "操作成功"
- // @router /ths_send/config/add [post]
- func (t *ThsSendController) AddThsSentConf() {
- br := new(models.BaseResponse).Init()
- defer func() {
- t.Data["json"] = br
- t.ServeJSON()
- }()
- sysUser := t.SysUser
- if sysUser == nil {
- br.Msg = "请登录"
- br.ErrMsg = "请登录,SysUser Is Empty"
- br.Ret = 408
- return
- }
- var req request.AddThsSentConfReq
- if err := json.Unmarshal(t.Ctx.Input.RequestBody, &req); err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- req.ConfigType = utils.TrimStr(req.ConfigType)
- if req.ConfigType == "" {
- br.Msg = "请选择产品类型"
- br.IsSendEmail = false
- return
- }
- if req.ClassifyId == 0 && req.ConfigType != "线上路演" && req.ConfigType != "视频社区" {
- br.Msg = "请选择产品"
- br.IsSendEmail = false
- return
- }
- intervalTime := 40 //间隔时间
- switch req.Level {
- case 1:
- intervalTime = 0
- case 2:
- intervalTime = 20
- case 3:
- intervalTime = 40
- default:
- br.Msg = "错误的优先类型"
- br.IsSendEmail = false
- return
- }
- item := &models.ReportSendThsConfig{
- //ConfigId: 0,
- ConfigType: req.ConfigType,
- ClassifyId: req.ClassifyId,
- ClassifyName: "",
- Level: req.Level,
- Time: intervalTime,
- SysUserId: sysUser.AdminId,
- SysRealName: sysUser.RealName,
- ModifyTime: time.Now(),
- CreateTime: time.Now(),
- }
- //研报、语音播报、视频社区、线上路演
- switch req.ConfigType {
- case "研报":
- classifyName := ``
- secondInfo, err := models.GetClassifyById(req.ClassifyId)
- if err != nil {
- br.Msg = "查询研报二级分类信息异常"
- br.ErrMsg = "查询研报二级分类信息异常,err:" + err.Error()
- return
- }
- classifyName = secondInfo.ClassifyName
- if secondInfo.ParentId > 0 {
- firstInfo, err := models.GetClassifyById(secondInfo.ParentId)
- if err != nil {
- br.Msg = "查询研报一级分类信息异常"
- br.ErrMsg = "查询研报一级分类信息异常,err:" + err.Error()
- return
- }
- classifyName += "/" + firstInfo.ClassifyName
- }
- item.ClassifyName = classifyName
- case "语音播报":
- voiceSection, err := yb.GetVoiceSectionById(req.ClassifyId)
- if err != nil {
- br.Msg = "查询语音播报版块信息异常"
- br.ErrMsg = "查询语音播报版块信息异常,err:" + err.Error()
- return
- }
- item.ClassifyName = voiceSection.SectionName
- case "视频社区", "线上路演":
- item.ClassifyName = req.ConfigType
- default:
- br.Msg = "错误的产品类型"
- br.IsSendEmail = false
- return
- }
- count, err := models.GetCountReportSendThsConfigByClassifyId(req.ConfigType, req.ClassifyId)
- if err != nil {
- br.Msg = "添加配置异常"
- br.ErrMsg = "查询现有的配置异常,err:" + err.Error()
- return
- }
- if count > 0 {
- br.Msg = "该产品已配置,请不要重复配置"
- br.IsSendEmail = false
- return
- }
- err = models.AddReportSendThsConfig(item)
- if err != nil {
- br.Msg = "添加配置失败"
- br.ErrMsg = "添加配置失败,err:" + err.Error()
- return
- }
- br.Ret = 200
- br.Success = true
- br.Msg = "配置成功"
- }
- // EditThsSentConf
- // @Title 推送客户群设置-编辑产品优先配置
- // @Description 推送客户群设置-编辑产品优先配置
- // @Param request body request.EditThsSentConfReq true "type json string"
- // @Success 200 string "操作成功"
- // @router /ths_send/config/edit [post]
- func (t *ThsSendController) EditThsSentConf() {
- br := new(models.BaseResponse).Init()
- defer func() {
- t.Data["json"] = br
- t.ServeJSON()
- }()
- sysUser := t.SysUser
- if sysUser == nil {
- br.Msg = "请登录"
- br.ErrMsg = "请登录,SysUser Is Empty"
- br.Ret = 408
- return
- }
- var req request.EditThsSentConfReq
- if err := json.Unmarshal(t.Ctx.Input.RequestBody, &req); err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- if req.ConfigId < 0 {
- br.Msg = "请选择配置"
- br.IsSendEmail = false
- return
- }
- configInfo, err := models.GetReportSendThsConfigByConfigId(req.ConfigId)
- if err != nil {
- if err.Error() == utils.ErrNoRow() {
- br.Msg = "不存在该配置信息"
- br.IsSendEmail = false
- return
- }
- br.Msg = "查询配置信息异常"
- br.ErrMsg = "查询现有的配置异常,err:" + err.Error()
- return
- }
- configInfo.Level = req.Level
- configInfo.ModifyTime = time.Now()
- err = configInfo.Update([]string{"Level", "ModifyTime"})
- if err != nil {
- br.Msg = "添加配置失败"
- br.ErrMsg = "添加配置失败,err:" + err.Error()
- return
- }
- br.Ret = 200
- br.Success = true
- br.Msg = "修改成功"
- }
- // DeleteThsSentConf
- // @Title 推送客户群设置-删除产品优先配置
- // @Description 推送客户群设置-删除产品优先配置
- // @Param request body request.EditThsSentConfReq true "type json string"
- // @Success 200 string "操作成功"
- // @router /ths_send/config/delete [post]
- func (t *ThsSendController) DeleteThsSentConf() {
- br := new(models.BaseResponse).Init()
- defer func() {
- t.Data["json"] = br
- t.ServeJSON()
- }()
- sysUser := t.SysUser
- if sysUser == nil {
- br.Msg = "请登录"
- br.ErrMsg = "请登录,SysUser Is Empty"
- br.Ret = 408
- return
- }
- var req request.EditThsSentConfReq
- if err := json.Unmarshal(t.Ctx.Input.RequestBody, &req); err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- if req.ConfigId < 0 {
- br.Msg = "请选择配置"
- br.IsSendEmail = false
- return
- }
- err := models.DeleteReportSendThsConfigByConfigId(req.ConfigId)
- if err != nil {
- br.Msg = "删除配置信息失败"
- br.ErrMsg = "删除配置信息失败,err:" + err.Error()
- return
- }
- br.Ret = 200
- br.Success = true
- br.Msg = "删除成功"
- }
|