message.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504
  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. for _, report := range reportViewList {
  108. var classifyId int
  109. classifyId, err = models.GetETAReportById(report.OrgId)
  110. if err != nil {
  111. br.Msg = "获取报告列表失败"
  112. br.ErrMsg = "获取eta报告失败,Err:" + err.Error()
  113. return
  114. }
  115. var list []int
  116. list, err = models.GetByPermissionIdsByClassifyId(classifyId)
  117. if err != nil {
  118. br.Msg = "获取报告列表失败"
  119. br.ErrMsg = "获取eta品种信息失败,Err:" + err.Error()
  120. return
  121. }
  122. if len(list) > 0 {
  123. var names []string
  124. names, err = models.GetPermissionNames(list)
  125. if err != nil {
  126. br.Msg = "获取报告列表失败"
  127. br.ErrMsg = "获取eta品种名称信息失败,Err:" + err.Error()
  128. return
  129. }
  130. report.PermissionNames = strings.Join(names, ",")
  131. }
  132. }
  133. page := paging.GetPaging(currentIndex, pageSize, total)
  134. resp := new(response.ReportListResp)
  135. resp.List = reportViewList
  136. resp.Paging = page
  137. br.Ret = 200
  138. br.Success = true
  139. br.Data = resp
  140. br.Msg = "获取成功"
  141. }
  142. // AudioList
  143. // @Title 研报列表
  144. // @Description pdf研报列表
  145. // @Param PageSize query int true "每页数据条数"
  146. // @Param CurrentIndex query int true "当前页页码,从1开始"
  147. // @Param ClassifyIds query string true "二级分类id,可多选用英文,隔开"
  148. // @Param KeyWord query string true "报告标题/创建人"
  149. // @Param SortType query string true "排序方式"
  150. // @Success 200 {object} models.ReportAuthorResp
  151. // @router /audioList [get]
  152. func (this *MessageController) AudioList() {
  153. br := new(models.BaseResponse).Init()
  154. defer func() {
  155. this.Data["json"] = br
  156. this.ServeJSON()
  157. }()
  158. pageSize, _ := this.GetInt("PageSize")
  159. currentIndex, _ := this.GetInt("CurrentIndex")
  160. permissionIds := this.GetString("PermissionIds")
  161. analystIds := this.GetString("AnalystIds")
  162. sortType := this.GetString("SortType")
  163. KeyWord := this.GetString("KeyWord")
  164. var permissionCondition string
  165. var condition string
  166. var pars []interface{}
  167. if pageSize <= 0 {
  168. pageSize = utils.PageSize20
  169. }
  170. if currentIndex <= 0 {
  171. currentIndex = 1
  172. }
  173. if KeyWord != "" {
  174. condition += " AND media_name like '%" + KeyWord + "%'"
  175. }
  176. var permissionPars []interface{}
  177. if permissionIds != "" {
  178. permissionArr := strings.Split(permissionIds, ",")
  179. for _, permissionId := range permissionArr {
  180. perId, _ := strconv.Atoi(permissionId)
  181. permissionPars = append(permissionPars, perId)
  182. }
  183. permissionCondition += " AND permission_id in (" + utils.GetOrmReplaceHolder(len(permissionPars)) + ")"
  184. ids, err := models.GetMappingsByCondition(permissionCondition, permissionPars)
  185. if err != nil {
  186. condition += " AND id in (" + utils.GetOrmReplaceHolder(len(ids)) + ")"
  187. pars = append(pars, ids)
  188. }
  189. }
  190. if analystIds != "" {
  191. analystIdArr := strings.Split(analystIds, ",")
  192. var authorIds []int
  193. for _, analystId := range analystIdArr {
  194. id, _ := strconv.Atoi(analystId)
  195. authorIds = append(authorIds, id)
  196. }
  197. condition += " AND author_id in (" + utils.GetOrmReplaceHolder(len(authorIds)) + ")"
  198. pars = append(pars, authorIds)
  199. }
  200. sortCondition := " ORDER BY published_time "
  201. if sortType == "" {
  202. sortType = "DESC"
  203. }
  204. sortCondition = sortCondition + sortType
  205. total, err := models.GetMediaCountByCondition(models.Audio, condition, pars)
  206. if err != nil {
  207. br.Msg = "获取研报列表失败"
  208. br.ErrMsg = "获取研报列表统计失败,Err:" + err.Error()
  209. return
  210. }
  211. startSize := utils.StartIndex(currentIndex, pageSize)
  212. reportList, err := models.GetMediaByCondition(models.Audio, condition, sortCondition, pars, startSize, pageSize)
  213. if err != nil {
  214. br.Msg = "获取研报列表失败"
  215. br.ErrMsg = "获取研报列表失败,Err:" + err.Error()
  216. return
  217. }
  218. var reportViewList []*models.MessageMedia
  219. for _, report := range reportList {
  220. reportView := report.ToMessageView()
  221. reportViewList = append(reportViewList, reportView)
  222. }
  223. page := paging.GetPaging(currentIndex, pageSize, total)
  224. resp := new(response.MessageMediaListResp)
  225. resp.List = reportViewList
  226. resp.Paging = page
  227. br.Ret = 200
  228. br.Success = true
  229. br.Data = resp
  230. br.Msg = "获取成功"
  231. }
  232. // VideoList
  233. // @Title 研报列表
  234. // @Description pdf研报列表
  235. // @Param PageSize query int true "每页数据条数"
  236. // @Param CurrentIndex query int true "当前页页码,从1开始"
  237. // @Param ClassifyIds query string true "二级分类id,可多选用英文,隔开"
  238. // @Param KeyWord query string true "报告标题/创建人"
  239. // @Param SortType query string true "排序方式"
  240. // @Success 200 {object} models.ReportAuthorResp
  241. // @router /videoList [get]
  242. func (this *MessageController) VideoList() {
  243. br := new(models.BaseResponse).Init()
  244. defer func() {
  245. this.Data["json"] = br
  246. this.ServeJSON()
  247. }()
  248. pageSize, _ := this.GetInt("PageSize")
  249. currentIndex, _ := this.GetInt("CurrentIndex")
  250. permissionIds := this.GetString("PermissionIds")
  251. analystIds := this.GetString("AnalystIds")
  252. sortType := this.GetString("SortType")
  253. KeyWord := this.GetString("KeyWord")
  254. var permissionCondition string
  255. var condition string
  256. var pars []interface{}
  257. if pageSize <= 0 {
  258. pageSize = utils.PageSize20
  259. }
  260. if currentIndex <= 0 {
  261. currentIndex = 1
  262. }
  263. if KeyWord != "" {
  264. condition += " AND media_name like '%" + KeyWord + "%'"
  265. }
  266. var permissionPars []interface{}
  267. if permissionIds != "" {
  268. permissionArr := strings.Split(permissionIds, ",")
  269. for _, permissionId := range permissionArr {
  270. perId, _ := strconv.Atoi(permissionId)
  271. permissionPars = append(permissionPars, perId)
  272. }
  273. permissionCondition += " AND permission_id in (" + utils.GetOrmReplaceHolder(len(permissionPars)) + ")"
  274. ids, err := models.GetMappingsByCondition(permissionCondition, permissionPars)
  275. if err != nil {
  276. condition += " AND id in (" + utils.GetOrmReplaceHolder(len(ids)) + ")"
  277. pars = append(pars, ids)
  278. }
  279. }
  280. if analystIds != "" {
  281. analystIdArr := strings.Split(analystIds, ",")
  282. var authorIds []int
  283. for _, analystId := range analystIdArr {
  284. id, _ := strconv.Atoi(analystId)
  285. authorIds = append(authorIds, id)
  286. }
  287. condition += " AND author_id in (" + utils.GetOrmReplaceHolder(len(authorIds)) + ")"
  288. pars = append(pars, authorIds)
  289. }
  290. sortCondition := " ORDER BY published_time "
  291. if sortType == "" {
  292. sortType = "DESC"
  293. }
  294. sortCondition = sortCondition + sortType
  295. total, err := models.GetMediaCountByCondition(models.Video, condition, pars)
  296. if err != nil {
  297. br.Msg = "获取视频列表失败"
  298. br.ErrMsg = "获取视频列表统计失败,Err:" + err.Error()
  299. return
  300. }
  301. startSize := utils.StartIndex(currentIndex, pageSize)
  302. List, err := models.GetMediaByCondition(models.Video, condition, sortCondition, pars, startSize, pageSize)
  303. if err != nil {
  304. br.Msg = "获取视频列表失败"
  305. br.ErrMsg = "获取视频列表失败,Err:" + err.Error()
  306. return
  307. }
  308. var reportViewList []*models.MessageMedia
  309. for _, report := range List {
  310. reportView := report.ToMessageView()
  311. reportViewList = append(reportViewList, reportView)
  312. }
  313. page := paging.GetPaging(currentIndex, pageSize, total)
  314. resp := new(response.MessageMediaListResp)
  315. resp.List = reportViewList
  316. resp.Paging = page
  317. br.Ret = 200
  318. br.Success = true
  319. br.Data = resp
  320. br.Msg = "获取成功"
  321. }
  322. const (
  323. Report string = "report"
  324. Audio string = "audio"
  325. Video string = "video"
  326. )
  327. // SendTemplateMsg
  328. // @Title 研报列表
  329. // @Description pdf研报列表
  330. // @Param PageSize query int true "每页数据条数"
  331. // @Param CurrentIndex query int true "当前页页码,从1开始"
  332. // @Param ClassifyIds query string true "二级分类id,可多选用英文,隔开"
  333. // @Param KeyWord query string true "报告标题/创建人"
  334. // @Param SortType query string true "排序方式"
  335. // @Success 200 {object} models.ReportAuthorResp
  336. // @router /sendTemplateMsg [post]
  337. func (this *MessageController) SendTemplateMsg() {
  338. br := new(models.BaseResponse).Init()
  339. defer func() {
  340. this.Data["json"] = br
  341. this.ServeJSON()
  342. }()
  343. var req request.WxMessageReq
  344. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  345. if req.DataId <= 0 {
  346. br.Msg = "DataId为空"
  347. return
  348. }
  349. if req.DataType == "" {
  350. br.Msg = "DataType为空"
  351. return
  352. }
  353. sendData := make(map[string]interface{})
  354. if req.DataType == Report {
  355. var report *models.Report
  356. report, err = models.GetReportById(req.DataId)
  357. if err != nil {
  358. br.Msg = "发送模版消息失败"
  359. br.ErrMsg = "获取报告失败"
  360. return
  361. }
  362. switch report.Source {
  363. case "ETA":
  364. var classifyId int
  365. var ids []int
  366. var names []string
  367. classifyId, err = models.GetETAReportIdByClassifyId(report.OrgId)
  368. ids, err = models.GetByPermissionIdsByClassifyId(classifyId)
  369. if err != nil {
  370. br.Msg = "发送模版消息失败"
  371. br.ErrMsg = fmt.Sprintf("获取eta品种信息失败,Err:%v", err)
  372. return
  373. }
  374. names, err = models.GetPermissionNames(ids)
  375. if err != nil {
  376. br.Msg = "发送模版消息失败"
  377. br.ErrMsg = fmt.Sprintf("获取eta品种信息失败,Err:%v", err)
  378. return
  379. }
  380. sendData["keyword1"] = map[string]interface{}{"value": strings.Join(names, ","), "color": "#173177"}
  381. case "HT":
  382. sendData["keyword1"] = map[string]interface{}{"value": "ht", "color": "#173177"}
  383. default:
  384. sendData["keyword1"] = map[string]interface{}{"value": "", "color": "#173177"}
  385. }
  386. sendData["keyword2"] = map[string]interface{}{"value": report.Title, "color": "#173177"}
  387. sendData["keyword3"] = map[string]interface{}{"value": report.PublishedTime, "color": "#173177"}
  388. sendData["keyword4"] = map[string]interface{}{"value": report.Abstract, "color": "#173177"}
  389. err = report.UpdateSendStatus(models.SEND)
  390. if err != nil {
  391. br.Msg = "发送模版消息失败"
  392. br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
  393. return
  394. }
  395. }
  396. if req.DataType == Audio {
  397. var media *models.Media
  398. media, err = models.GetMediaById(models.Audio, req.DataId)
  399. if err != nil {
  400. br.Msg = "发送模版消息失败"
  401. br.ErrMsg = "获取音频失败"
  402. return
  403. }
  404. sendData["keyword1"] = map[string]interface{}{"value": "线上音频", "color": "#173177"}
  405. sendData["keyword2"] = map[string]interface{}{"value": media.MediaName, "color": "#173177"}
  406. sendData["keyword3"] = map[string]interface{}{"value": media.CreatedTime.Format(time.DateTime), "color": "#173177"}
  407. err = media.UpdateSendStatus(models.SEND)
  408. if err != nil {
  409. br.Msg = "发送模版消息失败"
  410. br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
  411. return
  412. }
  413. }
  414. if req.DataType == Video {
  415. var media *models.Media
  416. media, err = models.GetMediaById(models.Video, req.DataId)
  417. if err != nil {
  418. br.Msg = "发送模版消息失败"
  419. br.ErrMsg = "获取音频失败"
  420. return
  421. }
  422. sendData["keyword1"] = map[string]interface{}{"value": "线上视频", "color": "#173177"}
  423. sendData["keyword2"] = map[string]interface{}{"value": media.MediaName, "color": "#173177"}
  424. sendData["keyword3"] = map[string]interface{}{"value": media.CreatedTime.Format(time.DateTime), "color": "#173177"}
  425. err = media.UpdateSendStatus(models.SEND)
  426. if err != nil {
  427. br.Msg = "发送模版消息失败"
  428. br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
  429. return
  430. }
  431. }
  432. users, err := models.GetTemplateUserList()
  433. if err != nil {
  434. br.Msg = "发送模版消息失败"
  435. br.ErrMsg = "获取用户OPENID失败,Err:" + err.Error()
  436. return
  437. }
  438. var openIds []*services.OpenIdList
  439. for _, user := range users {
  440. openId := &services.OpenIdList{
  441. OpenId: user.OpenId,
  442. UserId: user.Id,
  443. }
  444. openIds = append(openIds, openId)
  445. }
  446. err = services.SendMultiTemplateMsg(sendData, openIds, req.DataId, req.DataType)
  447. if err != nil {
  448. if req.DataType == Report {
  449. var report *models.Report
  450. report, err = models.GetReportById(req.DataId)
  451. if err != nil {
  452. return
  453. }
  454. _ = report.UpdateSendStatus(models.UNSEND)
  455. }
  456. if req.DataType == Audio {
  457. var media *models.Media
  458. media, err = models.GetMediaById(models.Audio, req.DataId)
  459. if err != nil {
  460. return
  461. }
  462. _ = media.UpdateSendStatus(models.UNSEND)
  463. }
  464. if req.DataType == Video {
  465. var media *models.Media
  466. media, err = models.GetMediaById(models.Video, req.DataId)
  467. if err != nil {
  468. return
  469. }
  470. _ = media.UpdateSendStatus(models.SEND)
  471. }
  472. br.Msg = "发送模板消息失败"
  473. br.ErrMsg = "发送模板消息失败,Err:" + err.Error()
  474. return
  475. }
  476. br.Ret = 200
  477. br.Success = true
  478. br.Data = nil
  479. br.Msg = "发送成功"
  480. }