message.go 17 KB

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