message.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_mini_crm_ht/models"
  5. "eta/eta_mini_crm_ht/models/request"
  6. "eta/eta_mini_crm_ht/models/response"
  7. "eta/eta_mini_crm_ht/services"
  8. "eta/eta_mini_crm_ht/utils"
  9. "fmt"
  10. "github.com/rdlucklib/rdluck_tools/paging"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. type MessageController struct {
  16. BaseAuthController
  17. }
  18. // ReportList
  19. // @Title 研报列表
  20. // @Description pdf研报列表
  21. // @Param PageSize query int true "每页数据条数"
  22. // @Param CurrentIndex query int true "当前页页码,从1开始"
  23. // @Param ClassifyIds query string true "二级分类id,可多选用英文,隔开"
  24. // @Param KeyWord query string true "报告标题/创建人"
  25. // @Param SortType query string true "排序方式"
  26. // @Success 200 {object} models.ReportAuthorResp
  27. // @router /reportList [get]
  28. func (this *MessageController) ReportList() {
  29. br := new(models.BaseResponse).Init()
  30. defer func() {
  31. this.Data["json"] = br
  32. this.ServeJSON()
  33. }()
  34. pageSize, _ := this.GetInt("PageSize")
  35. currentIndex, _ := this.GetInt("CurrentIndex")
  36. permissionIds := this.GetString("PermissionIds")
  37. analystNames := this.GetString("AnalystNames")
  38. sortType := this.GetString("SortType")
  39. KeyWord := this.GetString("KeyWord")
  40. var permissionCondition string
  41. var condition string
  42. var pars []interface{}
  43. if pageSize <= 0 {
  44. pageSize = utils.PageSize20
  45. }
  46. if currentIndex <= 0 {
  47. currentIndex = 1
  48. }
  49. if KeyWord != "" {
  50. condition += " AND title like '%" + KeyWord + "%'"
  51. }
  52. var permissionPars []interface{}
  53. var classifyPars []interface{}
  54. if permissionIds != "" {
  55. permissionArr := strings.Split(permissionIds, ",")
  56. for _, permissionId := range permissionArr {
  57. perId, _ := strconv.Atoi(permissionId)
  58. permissionPars = append(permissionPars, perId)
  59. }
  60. permissionCondition += " AND chart_permission_id in (" + utils.GetOrmReplaceHolder(len(permissionPars)) + ")"
  61. classifyIds, err := models.GetClassifyIdsByPermissionIds(permissionCondition, permissionPars)
  62. if err != nil {
  63. br.Msg = "获取报告列表失败"
  64. br.ErrMsg = "eta获取品种信息失败,Err:" + err.Error()
  65. return
  66. }
  67. classifyCondition := " AND COALESCE(NULLIF(classify_id_third,0),NULLIF(classify_id_second,0),classify_id_first) in (" + utils.GetOrmReplaceHolder(len(classifyIds)) + ")"
  68. classifyPars = append(classifyPars, classifyIds)
  69. var ids []int
  70. ids, _ = models.GetETAReportIdsByCondition(classifyCondition, classifyPars)
  71. if err != nil {
  72. br.Msg = "获取报告列表失败"
  73. br.ErrMsg = "获取报告表ids失败,Err:" + err.Error()
  74. return
  75. }
  76. condition += " AND id in (" + utils.GetOrmReplaceHolder(len(ids)) + ") And source ='ETA'"
  77. pars = append(pars, ids)
  78. }
  79. if analystNames != "" {
  80. analystNameArr := strings.Split(analystNames, ",")
  81. condition += " AND author in (" + utils.GetOrmReplaceHolder(len(analystNameArr)) + ")"
  82. pars = append(pars, analystNameArr)
  83. }
  84. sortCondition := " ORDER BY published_time "
  85. if sortType == "" {
  86. sortType = "DESC"
  87. }
  88. sortCondition = sortCondition + sortType
  89. total, err := models.GetReportCountByCondition(condition, pars)
  90. if err != nil {
  91. br.Msg = "获取报告列表失败"
  92. br.ErrMsg = "获取报告列表统计失败,Err:" + err.Error()
  93. return
  94. }
  95. startSize := utils.StartIndex(currentIndex, pageSize)
  96. reportList, err := models.GetReportByCondition(condition, sortCondition, pars, startSize, pageSize)
  97. if err != nil {
  98. br.Msg = "获取报告列表失败"
  99. br.ErrMsg = "获取报告列表失败,Err:" + err.Error()
  100. return
  101. }
  102. var reportViewList []*models.ReportView
  103. for _, report := range reportList {
  104. reportView := report.ToView()
  105. reportViewList = append(reportViewList, reportView)
  106. }
  107. page := paging.GetPaging(currentIndex, pageSize, total)
  108. resp := new(response.ReportListResp)
  109. resp.List = reportViewList
  110. resp.Paging = page
  111. br.Ret = 200
  112. br.Success = true
  113. br.Data = resp
  114. br.Msg = "获取成功"
  115. }
  116. // AudioList
  117. // @Title 研报列表
  118. // @Description pdf研报列表
  119. // @Param PageSize query int true "每页数据条数"
  120. // @Param CurrentIndex query int true "当前页页码,从1开始"
  121. // @Param ClassifyIds query string true "二级分类id,可多选用英文,隔开"
  122. // @Param KeyWord query string true "报告标题/创建人"
  123. // @Param SortType query string true "排序方式"
  124. // @Success 200 {object} models.ReportAuthorResp
  125. // @router /audioList [get]
  126. func (this *MessageController) AudioList() {
  127. br := new(models.BaseResponse).Init()
  128. defer func() {
  129. this.Data["json"] = br
  130. this.ServeJSON()
  131. }()
  132. pageSize, _ := this.GetInt("PageSize")
  133. currentIndex, _ := this.GetInt("CurrentIndex")
  134. permissionIds := this.GetString("PermissionIds")
  135. analystIds := this.GetString("AnalystIds")
  136. sortType := this.GetString("SortType")
  137. KeyWord := this.GetString("KeyWord")
  138. var permissionCondition string
  139. var condition string
  140. var pars []interface{}
  141. if pageSize <= 0 {
  142. pageSize = utils.PageSize20
  143. }
  144. if currentIndex <= 0 {
  145. currentIndex = 1
  146. }
  147. if KeyWord != "" {
  148. condition += " AND media_name like '%" + KeyWord + "%'"
  149. }
  150. var permissionPars []interface{}
  151. if permissionIds != "" {
  152. permissionArr := strings.Split(permissionIds, ",")
  153. for _, permissionId := range permissionArr {
  154. perId, _ := strconv.Atoi(permissionId)
  155. permissionPars = append(permissionPars, perId)
  156. }
  157. permissionCondition += " AND permission_id in (" + utils.GetOrmReplaceHolder(len(permissionPars)) + ")"
  158. ids, err := models.GetMappingsByCondition(permissionCondition, permissionPars)
  159. if err != nil {
  160. condition += " AND id in (" + utils.GetOrmReplaceHolder(len(ids)) + ")"
  161. pars = append(pars, ids)
  162. }
  163. }
  164. if analystIds != "" {
  165. analystIdArr := strings.Split(analystIds, ",")
  166. var authorIds []int
  167. for _, analystId := range analystIdArr {
  168. id, _ := strconv.Atoi(analystId)
  169. authorIds = append(authorIds, id)
  170. }
  171. condition += " AND author_id in (" + utils.GetOrmReplaceHolder(len(authorIds)) + ")"
  172. pars = append(pars, authorIds)
  173. }
  174. sortCondition := " ORDER BY published_time "
  175. if sortType == "" {
  176. sortType = "DESC"
  177. }
  178. sortCondition = sortCondition + sortType
  179. total, err := models.GetMediaCountByCondition(models.Audio, condition, pars)
  180. if err != nil {
  181. br.Msg = "获取研报列表失败"
  182. br.ErrMsg = "获取研报列表统计失败,Err:" + err.Error()
  183. return
  184. }
  185. startSize := utils.StartIndex(currentIndex, pageSize)
  186. reportList, err := models.GetMediaByCondition(models.Audio, condition, sortCondition, pars, startSize, pageSize)
  187. if err != nil {
  188. br.Msg = "获取研报列表失败"
  189. br.ErrMsg = "获取研报列表失败,Err:" + err.Error()
  190. return
  191. }
  192. var reportViewList []*models.MessageMedia
  193. for _, report := range reportList {
  194. reportView := report.ToMessageView()
  195. reportViewList = append(reportViewList, reportView)
  196. }
  197. page := paging.GetPaging(currentIndex, pageSize, total)
  198. resp := new(response.MessageMediaListResp)
  199. resp.List = reportViewList
  200. resp.Paging = page
  201. br.Ret = 200
  202. br.Success = true
  203. br.Data = resp
  204. br.Msg = "获取成功"
  205. }
  206. // VideoList
  207. // @Title 研报列表
  208. // @Description pdf研报列表
  209. // @Param PageSize query int true "每页数据条数"
  210. // @Param CurrentIndex query int true "当前页页码,从1开始"
  211. // @Param ClassifyIds query string true "二级分类id,可多选用英文,隔开"
  212. // @Param KeyWord query string true "报告标题/创建人"
  213. // @Param SortType query string true "排序方式"
  214. // @Success 200 {object} models.ReportAuthorResp
  215. // @router /videoList [get]
  216. func (this *MessageController) VideoList() {
  217. br := new(models.BaseResponse).Init()
  218. defer func() {
  219. this.Data["json"] = br
  220. this.ServeJSON()
  221. }()
  222. pageSize, _ := this.GetInt("PageSize")
  223. currentIndex, _ := this.GetInt("CurrentIndex")
  224. permissionIds := this.GetString("PermissionIds")
  225. analystIds := this.GetString("AnalystIds")
  226. sortType := this.GetString("SortType")
  227. KeyWord := this.GetString("KeyWord")
  228. var permissionCondition string
  229. var condition string
  230. var pars []interface{}
  231. if pageSize <= 0 {
  232. pageSize = utils.PageSize20
  233. }
  234. if currentIndex <= 0 {
  235. currentIndex = 1
  236. }
  237. if KeyWord != "" {
  238. condition += " AND media_name like '%" + KeyWord + "%'"
  239. }
  240. var permissionPars []interface{}
  241. if permissionIds != "" {
  242. permissionArr := strings.Split(permissionIds, ",")
  243. for _, permissionId := range permissionArr {
  244. perId, _ := strconv.Atoi(permissionId)
  245. permissionPars = append(permissionPars, perId)
  246. }
  247. permissionCondition += " AND permission_id in (" + utils.GetOrmReplaceHolder(len(permissionPars)) + ")"
  248. ids, err := models.GetMappingsByCondition(permissionCondition, permissionPars)
  249. if err != nil {
  250. condition += " AND id in (" + utils.GetOrmReplaceHolder(len(ids)) + ")"
  251. pars = append(pars, ids)
  252. }
  253. }
  254. if analystIds != "" {
  255. analystIdArr := strings.Split(analystIds, ",")
  256. var authorIds []int
  257. for _, analystId := range analystIdArr {
  258. id, _ := strconv.Atoi(analystId)
  259. authorIds = append(authorIds, id)
  260. }
  261. condition += " AND author_id in (" + utils.GetOrmReplaceHolder(len(authorIds)) + ")"
  262. pars = append(pars, authorIds)
  263. }
  264. sortCondition := " ORDER BY published_time "
  265. if sortType == "" {
  266. sortType = "DESC"
  267. }
  268. sortCondition = sortCondition + sortType
  269. total, err := models.GetMediaCountByCondition(models.Video, condition, pars)
  270. if err != nil {
  271. br.Msg = "获取视频列表失败"
  272. br.ErrMsg = "获取视频列表统计失败,Err:" + err.Error()
  273. return
  274. }
  275. startSize := utils.StartIndex(currentIndex, pageSize)
  276. List, err := models.GetMediaByCondition(models.Video, condition, sortCondition, pars, startSize, pageSize)
  277. if err != nil {
  278. br.Msg = "获取视频列表失败"
  279. br.ErrMsg = "获取视频列表失败,Err:" + err.Error()
  280. return
  281. }
  282. var reportViewList []*models.MessageMedia
  283. for _, report := range List {
  284. reportView := report.ToMessageView()
  285. reportViewList = append(reportViewList, reportView)
  286. }
  287. page := paging.GetPaging(currentIndex, pageSize, total)
  288. resp := new(response.MessageMediaListResp)
  289. resp.List = reportViewList
  290. resp.Paging = page
  291. br.Ret = 200
  292. br.Success = true
  293. br.Data = resp
  294. br.Msg = "获取成功"
  295. }
  296. const (
  297. Report string = "report"
  298. Audio string = "audio"
  299. Video string = "video"
  300. )
  301. // SendTemplateMsg
  302. // @Title 研报列表
  303. // @Description pdf研报列表
  304. // @Param PageSize query int true "每页数据条数"
  305. // @Param CurrentIndex query int true "当前页页码,从1开始"
  306. // @Param ClassifyIds query string true "二级分类id,可多选用英文,隔开"
  307. // @Param KeyWord query string true "报告标题/创建人"
  308. // @Param SortType query string true "排序方式"
  309. // @Success 200 {object} models.ReportAuthorResp
  310. // @router /sendTemplateMsg [post]
  311. func (this *MessageController) SendTemplateMsg() {
  312. br := new(models.BaseResponse).Init()
  313. defer func() {
  314. this.Data["json"] = br
  315. this.ServeJSON()
  316. }()
  317. var req request.WxMessageReq
  318. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  319. if req.DataId <= 0 {
  320. br.Msg = "DataId为空"
  321. return
  322. }
  323. if req.DataType == "" {
  324. br.Msg = "DataType为空"
  325. return
  326. }
  327. sendData := make(map[string]interface{})
  328. if req.DataType == Report {
  329. var report *models.Report
  330. report, err = models.GetReportById(req.DataId)
  331. if err != nil {
  332. br.Msg = "发送模版消息失败"
  333. br.ErrMsg = "获取报告失败"
  334. return
  335. }
  336. switch report.Source {
  337. case "ETA":
  338. var classifyId int
  339. var ids []int
  340. var names []string
  341. classifyId, err = models.GetETAReportIdByClassifyId(report.OrgId)
  342. ids, err = models.GetByPermissionIdsByClassifyId(classifyId)
  343. if err != nil {
  344. br.Msg = "发送模版消息失败"
  345. br.ErrMsg = fmt.Sprintf("获取eta品种信息失败,Err:%v", err)
  346. return
  347. }
  348. names, err = models.GetPermissionNames(ids)
  349. if err != nil {
  350. br.Msg = "发送模版消息失败"
  351. br.ErrMsg = fmt.Sprintf("获取eta品种信息失败,Err:%v", err)
  352. return
  353. }
  354. sendData["keyword1"] = map[string]interface{}{"value": strings.Join(names, ","), "color": "#173177"}
  355. case "HT":
  356. sendData["keyword1"] = map[string]interface{}{"value": "ht", "color": "#173177"}
  357. default:
  358. sendData["keyword1"] = map[string]interface{}{"value": "", "color": "#173177"}
  359. }
  360. sendData["keyword2"] = map[string]interface{}{"value": report.Title, "color": "#173177"}
  361. sendData["keyword3"] = map[string]interface{}{"value": report.PublishedTime, "color": "#173177"}
  362. sendData["keyword4"] = map[string]interface{}{"value": report.Abstract, "color": "#173177"}
  363. err = report.UpdateSendStatus(models.SEND)
  364. if err != nil {
  365. br.Msg = "发送模版消息失败"
  366. br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
  367. return
  368. }
  369. }
  370. if req.DataType == Audio {
  371. var media *models.Media
  372. media, err = models.GetMediaById(models.Audio, req.DataId)
  373. if err != nil {
  374. br.Msg = "发送模版消息失败"
  375. br.ErrMsg = "获取音频失败"
  376. return
  377. }
  378. sendData["keyword1"] = map[string]interface{}{"value": "线上音频", "color": "#173177"}
  379. sendData["keyword2"] = map[string]interface{}{"value": media.MediaName, "color": "#173177"}
  380. sendData["keyword3"] = map[string]interface{}{"value": media.CreatedTime.Format(time.DateTime), "color": "#173177"}
  381. err = media.UpdateSendStatus(models.SEND)
  382. if err != nil {
  383. br.Msg = "发送模版消息失败"
  384. br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
  385. return
  386. }
  387. }
  388. if req.DataType == Video {
  389. var media *models.Media
  390. media, err = models.GetMediaById(models.Video, req.DataId)
  391. if err != nil {
  392. br.Msg = "发送模版消息失败"
  393. br.ErrMsg = "获取音频失败"
  394. return
  395. }
  396. sendData["keyword1"] = map[string]interface{}{"value": "线上视频", "color": "#173177"}
  397. sendData["keyword2"] = map[string]interface{}{"value": media.MediaName, "color": "#173177"}
  398. sendData["keyword3"] = map[string]interface{}{"value": media.CreatedTime.Format(time.DateTime), "color": "#173177"}
  399. err = media.UpdateSendStatus(models.SEND)
  400. if err != nil {
  401. br.Msg = "发送模版消息失败"
  402. br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
  403. return
  404. }
  405. }
  406. users, err := models.GetTemplateUserList()
  407. if err != nil {
  408. br.Msg = "发送模版消息失败"
  409. br.ErrMsg = "获取用户OPENID失败,Err:" + err.Error()
  410. return
  411. }
  412. var openIds []*services.OpenIdList
  413. for _, user := range users {
  414. openId := &services.OpenIdList{
  415. OpenId: user.OpenId,
  416. UserId: user.Id,
  417. }
  418. openIds = append(openIds, openId)
  419. }
  420. err = services.SendMultiTemplateMsg(sendData, openIds, req.DataId, req.DataType)
  421. if err != nil {
  422. if req.DataType == Report {
  423. var report *models.Report
  424. report, err = models.GetReportById(req.DataId)
  425. if err != nil {
  426. return
  427. }
  428. _ = report.UpdateSendStatus(models.UNSEND)
  429. }
  430. if req.DataType == Audio {
  431. var media *models.Media
  432. media, err = models.GetMediaById(models.Audio, req.DataId)
  433. if err != nil {
  434. return
  435. }
  436. _ = media.UpdateSendStatus(models.UNSEND)
  437. }
  438. if req.DataType == Video {
  439. var media *models.Media
  440. media, err = models.GetMediaById(models.Video, req.DataId)
  441. if err != nil {
  442. return
  443. }
  444. _ = media.UpdateSendStatus(models.SEND)
  445. }
  446. br.Msg = "发送模板消息失败"
  447. br.ErrMsg = "发送模板消息失败,Err:" + err.Error()
  448. return
  449. }
  450. br.Ret = 200
  451. br.Success = true
  452. br.Data = nil
  453. br.Msg = "发送成功"
  454. }