message.go 14 KB

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