message.go 17 KB

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