message.go 16 KB

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