message.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  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. br.Msg = "查询失败"
  220. br.Msg = "筛选品种信息失败,Err:" + err.Error()
  221. return
  222. }
  223. if len(ids) == 0 {
  224. return
  225. }
  226. condition += " AND id in (" + utils.GetOrmReplaceHolder(len(ids)) + ")"
  227. pars = append(pars, ids)
  228. }
  229. if analystIds != "" {
  230. analystIdArr := strings.Split(analystIds, ",")
  231. var authorIds []int
  232. for _, analystId := range analystIdArr {
  233. id, _ := strconv.Atoi(analystId)
  234. authorIds = append(authorIds, id)
  235. }
  236. condition += " AND author_id in (" + utils.GetOrmReplaceHolder(len(authorIds)) + ")"
  237. pars = append(pars, authorIds)
  238. }
  239. sortCondition := " ORDER BY published_time "
  240. if sortType == "" {
  241. sortType = "DESC"
  242. }
  243. sortCondition = sortCondition + sortType
  244. total, err := models.GetMediaCountByCondition(models.Audio, condition, pars)
  245. if err != nil {
  246. br.Msg = "获取研报列表失败"
  247. br.ErrMsg = "获取研报列表统计失败,Err:" + err.Error()
  248. return
  249. }
  250. startSize := utils.StartIndex(currentIndex, pageSize)
  251. reportList, err := models.GetMediaByCondition(models.Audio, condition, sortCondition, pars, startSize, pageSize)
  252. if err != nil {
  253. br.Msg = "获取研报列表失败"
  254. br.ErrMsg = "获取研报列表失败,Err:" + err.Error()
  255. return
  256. }
  257. var reportViewList []*models.MessageMedia
  258. for _, report := range reportList {
  259. reportView := report.ToMessageView()
  260. reportViewList = append(reportViewList, reportView)
  261. }
  262. page := paging.GetPaging(currentIndex, pageSize, total)
  263. resp := new(response.MessageMediaListResp)
  264. resp.List = reportViewList
  265. resp.Paging = page
  266. br.Ret = 200
  267. br.Success = true
  268. br.Data = resp
  269. br.Msg = "获取成功"
  270. }
  271. // VideoList
  272. // @Title 研报列表
  273. // @Description pdf研报列表
  274. // @Param PageSize query int true "每页数据条数"
  275. // @Param CurrentIndex query int true "当前页页码,从1开始"
  276. // @Param ClassifyIds query string true "二级分类id,可多选用英文,隔开"
  277. // @Param KeyWord query string true "报告标题/创建人"
  278. // @Param SortType query string true "排序方式"
  279. // @Success 200 {object} models.ReportAuthorResp
  280. // @router /videoList [get]
  281. func (this *MessageController) VideoList() {
  282. br := new(models.BaseResponse).Init()
  283. defer func() {
  284. this.Data["json"] = br
  285. this.ServeJSON()
  286. }()
  287. pageSize, _ := this.GetInt("PageSize")
  288. currentIndex, _ := this.GetInt("CurrentIndex")
  289. permissionIds := this.GetString("PermissionIds")
  290. analystIds := this.GetString("AnalystIds")
  291. sortType := this.GetString("SortType")
  292. KeyWord := this.GetString("KeyWord")
  293. var permissionCondition string
  294. var condition string
  295. var pars []interface{}
  296. if pageSize <= 0 {
  297. pageSize = utils.PageSize20
  298. }
  299. if currentIndex <= 0 {
  300. currentIndex = 1
  301. }
  302. if KeyWord != "" {
  303. condition += " AND media_name like '%" + KeyWord + "%'"
  304. }
  305. var permissionPars []interface{}
  306. if permissionIds != "" {
  307. permissionArr := strings.Split(permissionIds, ",")
  308. for _, permissionId := range permissionArr {
  309. perId, _ := strconv.Atoi(permissionId)
  310. permissionPars = append(permissionPars, perId)
  311. }
  312. permissionCondition += " AND permission_id in (" + utils.GetOrmReplaceHolder(len(permissionPars)) + ")"
  313. ids, err := models.GetMappingsByCondition(permissionCondition, permissionPars)
  314. if err != nil {
  315. br.Msg = "查询失败"
  316. br.Msg = "筛选品种信息失败,Err:" + err.Error()
  317. return
  318. }
  319. condition += " AND id in (" + utils.GetOrmReplaceHolder(len(ids)) + ")"
  320. pars = append(pars, ids)
  321. }
  322. if analystIds != "" {
  323. analystIdArr := strings.Split(analystIds, ",")
  324. var authorIds []int
  325. for _, analystId := range analystIdArr {
  326. id, _ := strconv.Atoi(analystId)
  327. authorIds = append(authorIds, id)
  328. }
  329. condition += " AND author_id in (" + utils.GetOrmReplaceHolder(len(authorIds)) + ")"
  330. pars = append(pars, authorIds)
  331. }
  332. sortCondition := " ORDER BY published_time "
  333. if sortType == "" {
  334. sortType = "DESC"
  335. }
  336. sortCondition = sortCondition + sortType
  337. total, err := models.GetMediaCountByCondition(models.Video, condition, pars)
  338. if err != nil {
  339. br.Msg = "获取视频列表失败"
  340. br.ErrMsg = "获取视频列表统计失败,Err:" + err.Error()
  341. return
  342. }
  343. startSize := utils.StartIndex(currentIndex, pageSize)
  344. List, err := models.GetMediaByCondition(models.Video, condition, sortCondition, pars, startSize, pageSize)
  345. if err != nil {
  346. br.Msg = "获取视频列表失败"
  347. br.ErrMsg = "获取视频列表失败,Err:" + err.Error()
  348. return
  349. }
  350. var reportViewList []*models.MessageMedia
  351. for _, report := range List {
  352. reportView := report.ToMessageView()
  353. reportViewList = append(reportViewList, reportView)
  354. }
  355. page := paging.GetPaging(currentIndex, pageSize, total)
  356. resp := new(response.MessageMediaListResp)
  357. resp.List = reportViewList
  358. resp.Paging = page
  359. br.Ret = 200
  360. br.Success = true
  361. br.Data = resp
  362. br.Msg = "获取成功"
  363. }
  364. const (
  365. Report string = "report"
  366. Audio string = "audio"
  367. Video string = "video"
  368. )
  369. // SendTemplateMsg
  370. // @Title 研报列表
  371. // @Description pdf研报列表
  372. // @Param PageSize query int true "每页数据条数"
  373. // @Param CurrentIndex query int true "当前页页码,从1开始"
  374. // @Param ClassifyIds query string true "二级分类id,可多选用英文,隔开"
  375. // @Param KeyWord query string true "报告标题/创建人"
  376. // @Param SortType query string true "排序方式"
  377. // @Success 200 {object} models.ReportAuthorResp
  378. // @router /sendTemplateMsg [post]
  379. func (this *MessageController) SendTemplateMsg() {
  380. br := new(models.BaseResponse).Init()
  381. defer func() {
  382. this.Data["json"] = br
  383. this.ServeJSON()
  384. }()
  385. var req request.WxMessageReq
  386. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  387. if req.DataId <= 0 {
  388. br.Msg = "DataId为空"
  389. return
  390. }
  391. if req.DataType == "" {
  392. br.Msg = "DataType为空"
  393. return
  394. }
  395. var template services.SendWxTemplate
  396. if req.DataType == Report {
  397. var report *models.Report
  398. report, err = models.GetReportById(req.DataId)
  399. if err != nil {
  400. br.Msg = "发送模版消息失败"
  401. br.ErrMsg = "获取报告失败"
  402. return
  403. }
  404. switch report.Source {
  405. case "ETA":
  406. var classifyId int
  407. var ids []int
  408. var names []string
  409. classifyId, err = models.GetETAReportIdByClassifyId(report.OrgId)
  410. ids, err = models.GetByPermissionIdsByClassifyId(classifyId)
  411. if err != nil {
  412. br.Msg = "发送模版消息失败"
  413. br.ErrMsg = fmt.Sprintf("获取eta品种信息失败,Err:%v", err)
  414. return
  415. }
  416. names, err = models.GetPermissionNames(ids)
  417. if err != nil {
  418. br.Msg = "发送模版消息失败"
  419. br.ErrMsg = fmt.Sprintf("获取eta品种信息失败,Err:%v", err)
  420. return
  421. }
  422. template.Keyword1 = strings.Join(names, ",")
  423. case "HT":
  424. template.Keyword1 = "ht"
  425. default:
  426. template.Keyword1 = ""
  427. }
  428. template.Keyword2 = report.Title
  429. template.Keyword3 = report.PublishedTime
  430. template.Keyword4 = report.Abstract
  431. err = report.UpdateSendStatus(models.SEND)
  432. if err != nil {
  433. br.Msg = "发送模版消息失败"
  434. br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
  435. return
  436. }
  437. }
  438. if req.DataType == Audio {
  439. var media *models.Media
  440. media, err = models.GetMediaById(models.Audio, req.DataId)
  441. if err != nil {
  442. br.Msg = "发送模版消息失败"
  443. br.ErrMsg = "获取音频失败"
  444. return
  445. }
  446. template.Keyword1 = "线上音频"
  447. template.Keyword2 = media.MediaName
  448. template.Keyword3 = media.CreatedTime.Format(time.DateTime)
  449. err = media.UpdateSendStatus(models.SEND)
  450. if err != nil {
  451. br.Msg = "发送模版消息失败"
  452. br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
  453. return
  454. }
  455. }
  456. if req.DataType == Video {
  457. var media *models.Media
  458. media, err = models.GetMediaById(models.Video, req.DataId)
  459. if err != nil {
  460. br.Msg = "发送模版消息失败"
  461. br.ErrMsg = "获取音频失败"
  462. return
  463. }
  464. template.Keyword1 = "线上视频"
  465. template.Keyword2 = media.MediaName
  466. template.Keyword3 = media.CreatedTime.Format(time.DateTime)
  467. err = media.UpdateSendStatus(models.SEND)
  468. if err != nil {
  469. br.Msg = "发送模版消息失败"
  470. br.ErrMsg = fmt.Sprintf("更新发送状态失败,Err:%v", err)
  471. return
  472. }
  473. }
  474. users, err := models.GetTemplateUserList()
  475. if err != nil {
  476. br.Msg = "发送模版消息失败"
  477. br.ErrMsg = "获取用户OPENID失败,Err:" + err.Error()
  478. return
  479. }
  480. var openIds []*services.OpenIdList
  481. for _, user := range users {
  482. openId := &services.OpenIdList{
  483. OpenId: user.OpenId,
  484. UserId: user.Id,
  485. }
  486. openIds = append(openIds, openId)
  487. }
  488. err = services.SendMultiTemplateMsg(template, openIds, req.DataId, req.DataType)
  489. if err != nil {
  490. if req.DataType == Report {
  491. var report *models.Report
  492. report, err = models.GetReportById(req.DataId)
  493. if err != nil {
  494. return
  495. }
  496. _ = report.UpdateSendStatus(models.UNSEND)
  497. }
  498. if req.DataType == Audio {
  499. var media *models.Media
  500. media, err = models.GetMediaById(models.Audio, req.DataId)
  501. if err != nil {
  502. return
  503. }
  504. _ = media.UpdateSendStatus(models.UNSEND)
  505. }
  506. if req.DataType == Video {
  507. var media *models.Media
  508. media, err = models.GetMediaById(models.Video, req.DataId)
  509. if err != nil {
  510. return
  511. }
  512. _ = media.UpdateSendStatus(models.SEND)
  513. }
  514. br.Msg = "发送模板消息失败"
  515. br.ErrMsg = "发送模板消息失败,Err:" + err.Error()
  516. return
  517. }
  518. br.Ret = 200
  519. br.Success = true
  520. br.Data = nil
  521. br.Msg = "发送成功"
  522. }