research_summary.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. package cygx
  2. import (
  3. "fmt"
  4. "hongze/hz_crm_api/models"
  5. "hongze/hz_crm_api/models/cygx"
  6. "hongze/hz_crm_api/services"
  7. "hongze/hz_crm_api/services/alarm_msg"
  8. "hongze/hz_crm_api/utils"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. func AppendItemsLog(items []*cygx.CygxResearchSummaryLog, item []*cygx.CygxRSlChartPermission, logType, sort string) (itemsResult []*cygx.CygxResearchSummaryLog, msg string, err error) {
  14. mapSort := make(map[string]int)
  15. for _, v := range item {
  16. for _, v2 := range v.List {
  17. item := new(cygx.CygxResearchSummaryLog)
  18. if mapSort[v.ChartPermissionSort] != 0 && mapSort[v.ChartPermissionSort] != v.ChartPermissionId {
  19. msg = "有内容行业分类,序号不能为空"
  20. return
  21. }
  22. mapSort[v.ChartPermissionSort] = v.ChartPermissionId
  23. item.Type = logType
  24. item.Sort = strings.ToUpper(sort)
  25. item.ChartPermissionId = v.ChartPermissionId
  26. item.ChartPermissionSort = v.ChartPermissionSort
  27. item.CreateTime = time.Now()
  28. item.Body = GetRichtext(v2.Body)
  29. item.ReportLink = v2.ReportLink
  30. if item.ReportLink != "" {
  31. articleIdLink, errArt := GetReportLinkToArticleid(item.ReportLink)
  32. if errArt != nil && errArt.Error() != utils.ErrNoRow() {
  33. msg = "获取信息失败"
  34. err = errArt
  35. return
  36. }
  37. item.LinkArticleId = articleIdLink
  38. }
  39. items = append(items, item)
  40. }
  41. }
  42. itemsResult = items
  43. return
  44. }
  45. func AppendMinutesItemsLog(items []*cygx.CygxMinutesSummaryLog, item []*cygx.CygxRSlChartPermission, logType, sort string) (itemsResult []*cygx.CygxMinutesSummaryLog, msg string, err error) {
  46. mapSort := make(map[string]int)
  47. for _, v := range item {
  48. for _, v2 := range v.List {
  49. item := new(cygx.CygxMinutesSummaryLog)
  50. if mapSort[v.ChartPermissionSort] != 0 && mapSort[v.ChartPermissionSort] != v.ChartPermissionId {
  51. msg = "有内容行业分类,序号不能为空"
  52. return
  53. }
  54. mapSort[v.ChartPermissionSort] = v.ChartPermissionId
  55. item.Type = logType
  56. item.Sort = strings.ToUpper(sort)
  57. item.ChartPermissionId = v.ChartPermissionId
  58. item.ChartPermissionSort = v.ChartPermissionSort
  59. item.CreateTime = time.Now()
  60. item.Body = GetRichtext(v2.Body)
  61. item.ReportLink = v2.ReportLink
  62. if item.ReportLink != "" {
  63. articleIdLink, errArt := GetReportLinkToArticleid(item.ReportLink)
  64. if errArt != nil && errArt.Error() != utils.ErrNoRow() {
  65. msg = "获取信息失败"
  66. err = errArt
  67. return
  68. }
  69. item.LinkArticleId = articleIdLink
  70. }
  71. items = append(items, item)
  72. }
  73. }
  74. itemsResult = items
  75. return
  76. }
  77. // 通过接解析获取文章ID
  78. func GetReportLinkToArticleid(reportLink string) (articleId int, err error) {
  79. var artMd5 string
  80. //处理报告的
  81. strnum1 := strings.Index(reportLink, "id=")
  82. if strnum1 > 0 {
  83. sliceId := strings.Split(reportLink, "id=")
  84. if len(sliceId) > 1 {
  85. reportLink = sliceId[1]
  86. sliceMd5Id := strings.Split(reportLink, "&")
  87. artMd5 = sliceMd5Id[0]
  88. }
  89. if artMd5 != "" {
  90. detail, errArt := cygx.GetArticleDetailByMd5Id(artMd5)
  91. if errArt != nil && errArt.Error() != utils.ErrNoRow() {
  92. err = errArt
  93. return
  94. }
  95. if detail != nil {
  96. articleId = detail.ArticleId
  97. }
  98. }
  99. } else {
  100. //处理活动的
  101. linkList := strings.Split(reportLink, "/")
  102. if linkList[len(linkList)-1] != "" {
  103. linkArticleId, _ := strconv.Atoi(linkList[len(linkList)-1])
  104. if linkArticleId > 0 {
  105. articleInfo, errArt := cygx.GetArticleIdInfoByArticleId(linkArticleId)
  106. if errArt != nil && errArt.Error() != utils.ErrNoRow() {
  107. err = errArt
  108. return
  109. }
  110. if articleInfo != nil {
  111. articleId = articleInfo.ArticleId
  112. }
  113. }
  114. }
  115. }
  116. return
  117. }
  118. //
  119. //func init() {
  120. // DoArticleOnenIdWxTemplateMsg(1000614, 1)
  121. //}
  122. // 过滤策略平台报告,研选报告重复推送,以及权限勾选的推送
  123. func DoArticleOnenIdWxTemplateMsg(articleId int, source int) (err error) {
  124. //优先排序: 预约纪要 > 关注作者 > 关注产业
  125. //source 来源 1研选 ,2 策略平台的报告
  126. //industrialSubjectIds 标的ID ,发布活动的时候使用
  127. var msg string
  128. var industrialSubjectIds string
  129. defer func() {
  130. //fmt.Println()
  131. if err != nil {
  132. fmt.Println("err:", err)
  133. go alarm_msg.SendAlarmMsg("过滤策略平台报告,研选报告重复推送,以及权限勾选的推送,发送模版消息失败,Err:"+err.Error()+";msg:"+msg, 3)
  134. utils.FileLog.Info(fmt.Sprintf("发送模版消息失败,Err:%s,%s", err.Error(), msg))
  135. }
  136. if msg != "" {
  137. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  138. }
  139. }()
  140. articleInfo, err := cygx.GetArticleInfoOtherByArticleId(articleId)
  141. if err != nil {
  142. return
  143. }
  144. //对于已归类的报告,修改产业不做二次推送
  145. if articleInfo.IsClassFail == 0 && articleInfo.ArticleId < utils.SummaryArticleId {
  146. return err
  147. }
  148. articleInfo.Abstract, _ = utils.GetReportContentTextSub(articleInfo.Abstract)
  149. industrialSubjectIds, err = cygx.GetSubjectIds(articleId)
  150. if err != nil {
  151. return err
  152. }
  153. var chartPermissionId int
  154. if source == 1 {
  155. chartPermissionId = utils.CHART_PERMISSION_ID_YANXUAN
  156. } else {
  157. var chartPermissionName string
  158. reportMapDetail, err := cygx.GetCygxReportMappingRespByid(articleInfo.CategoryId)
  159. if err != nil {
  160. return err
  161. }
  162. //处理策略与非策略 的权限判断
  163. if reportMapDetail.ChartPermissionName == utils.CE_LUE_NAME {
  164. chartPermissionId = utils.CE_LUE_ID
  165. } else {
  166. if reportMapDetail.PermissionType == 1 {
  167. chartPermissionName = reportMapDetail.ChartPermissionName + "(主观)"
  168. } else {
  169. chartPermissionName = reportMapDetail.ChartPermissionName + "(客观)"
  170. }
  171. chartPermissionDetail, err := models.GetChartPermissionByRemark(chartPermissionName)
  172. if err != nil {
  173. return err
  174. }
  175. chartPermissionId = chartPermissionDetail.ChartPermissionId
  176. }
  177. }
  178. //文章关联的产业
  179. var industryName string
  180. var industrialManagementId string
  181. detailIndustryNameList, err := cygx.GetIndustrialManagemenDetailByAaticleID(articleId)
  182. if err != nil && err.Error() != utils.ErrNoRow() {
  183. return err
  184. }
  185. for _, v := range detailIndustryNameList {
  186. industryName += v.IndustryName + ","
  187. industrialManagementId += strconv.Itoa(v.IndustrialManagementId) + ","
  188. }
  189. industryName = strings.TrimRight(industryName, ",")
  190. industrialManagementId = strings.TrimRight(industrialManagementId, ",")
  191. charInfo, err := cygx.GetCategoryInfoById(chartPermissionId)
  192. if err != nil {
  193. return err
  194. }
  195. //处理勾选了全部行业赛道的用户
  196. var allIn string
  197. allIn = DoXzsChooseSend(charInfo.PermissionName)
  198. if allIn != "" {
  199. allInList, err := cygx.GetCygxXzsChooseSendByAllIn(allIn)
  200. if err != nil && err.Error() != utils.ErrNoRow() {
  201. return err
  202. }
  203. if len(allInList) > 0 {
  204. var allInUserId string
  205. for _, v := range allInList {
  206. allInUserId += strconv.Itoa(v.UserId) + ","
  207. }
  208. allInUserId = strings.TrimRight(allInUserId, ",")
  209. userFllowIndustrialList, err := cygx.GetUserFllowIndustrialListByUserIdAndIndustrial(allInUserId, industrialManagementId)
  210. if err != nil && err.Error() != utils.ErrNoRow() {
  211. return err
  212. }
  213. mapUserFllowed := make(map[string]int)
  214. for _, v := range userFllowIndustrialList {
  215. //用户ID与其关注的产业组成唯一索引,判断是否存在,如果不存在就进行自动关注
  216. mapUserFllowed[fmt.Sprint("uid:", v.UserId, "_Industrial:", v.IndustrialManagementId)] = v.UserId
  217. }
  218. //获取这些allIN用户的的信息进行遍历生成需要插入的数据
  219. userList, err := models.GetWxUserListByUserIdsHaveCompany(allInUserId)
  220. if err != nil && err.Error() != utils.ErrNoRow() {
  221. return err
  222. }
  223. var industryFllowItems []*cygx.CygxIndustryFllow
  224. for _, v := range detailIndustryNameList {
  225. for _, vUser := range userList {
  226. //如果用户这个用户没有关注这个产业就进行自动关注
  227. if mapUserFllowed[fmt.Sprint("uid:", vUser.UserId, "_Industrial:", v.IndustrialManagementId)] == 0 {
  228. item := new(cygx.CygxIndustryFllow)
  229. item.IndustrialManagementId = v.IndustrialManagementId
  230. item.UserId = vUser.UserId
  231. item.Email = vUser.Email
  232. item.Mobile = vUser.Mobile
  233. item.RealName = vUser.RealName
  234. item.CompanyId = vUser.CompanyId
  235. item.CompanyName = vUser.CompanyName
  236. item.Source = 3
  237. item.Type = 1
  238. item.CreateTime = time.Now()
  239. item.ModifyTime = time.Now()
  240. industryFllowItems = append(industryFllowItems, item)
  241. }
  242. }
  243. }
  244. err = cygx.AddCygxIndustryFllowMulti(industryFllowItems)
  245. if err != nil {
  246. go alarm_msg.SendAlarmMsg("用户关注全部赛道,出现新赛道批量添加失败 ,AddCygxIndustryFllowMulti ErrMsg:"+err.Error(), 2)
  247. }
  248. }
  249. }
  250. //处理勾选了全部行业赛道的用户之后,再判断是否推送过
  251. cacheKey := fmt.Sprint("Source:ADMIN", "_ArticleId:", articleId)
  252. isExist := utils.Rc.IsExist(cacheKey)
  253. if isExist {
  254. return err
  255. }
  256. setNX := utils.Rc.SetNX(cacheKey, articleId, time.Minute*30)
  257. if !setNX {
  258. go alarm_msg.SendAlarmMsg("发送模版消息失败,设置Redis Key 过期时间失败:key"+cacheKey, 3)
  259. return err
  260. }
  261. //cacheKey := fmt.Sprint("Source:ADMIN", "_ArticleId:", articleId)
  262. //ttlTime := utils.Rc.GetRedisTTL(cacheKey)
  263. //if ttlTime > 0 {
  264. // return err
  265. //}
  266. //
  267. //utils.Rc.Put(cacheKey, articleId, time.Minute*30)
  268. // 获取所有有权的用户的 openid
  269. mapOpenidPower := make(map[int]string)
  270. openidPowerList, err := cygx.GetCygxUserRecordPower(strconv.Itoa(chartPermissionId))
  271. if err != nil && err.Error() != utils.ErrNoRow() {
  272. return err
  273. }
  274. for _, v := range openidPowerList {
  275. mapOpenidPower[v.UserId] = v.OpenId
  276. }
  277. //获取关注这个文章对应产业的用户的 openid
  278. mapOpenidFllow := make(map[int]string)
  279. openidFllowList, err := cygx.GetCygxUserFllowOpenid(articleId)
  280. if err != nil && err.Error() != utils.ErrNoRow() {
  281. return err
  282. }
  283. for _, v := range openidFllowList {
  284. mapOpenidFllow[v.UserId] = v.OpenId
  285. }
  286. //获取关注这个文章对应作者的用户的 openid
  287. mapOpenidDepartmentFllow := make(map[int]string)
  288. openidDepartmentFllowList, err := cygx.GetCygxUserFllowDepartmentOpenid(articleId)
  289. if err != nil && err.Error() != utils.ErrNoRow() {
  290. return err
  291. }
  292. for _, v := range openidDepartmentFllowList {
  293. mapOpenidDepartmentFllow[v.UserId] = v.OpenId
  294. }
  295. //获取拒绝接收推送的的用户的 openid
  296. mapOpenidRefuset := make(map[int]string)
  297. openidRefusetList, err := cygx.GetCygxUserRefusetOpenid()
  298. if err != nil && err.Error() != utils.ErrNoRow() {
  299. return err
  300. }
  301. for _, v := range openidRefusetList {
  302. mapOpenidRefuset[v.UserId] = v.OpenId
  303. }
  304. //获取提交过推送规则的用户的 openid
  305. mapUserIdChooseSend := make(map[int]int)
  306. chooseSendtList, err := cygx.GetCygxXzsChooseSend("")
  307. if err != nil && err.Error() != utils.ErrNoRow() {
  308. return err
  309. }
  310. for _, v := range chooseSendtList {
  311. mapUserIdChooseSend[v.UserId] = v.UserId
  312. }
  313. //已经推送了的openid
  314. mapOpenidPushed := make(map[int]string)
  315. keyword2 := articleInfo.Title
  316. keyword3 := articleInfo.PublishDate.Format(utils.FormatDate)
  317. if source == 2 {
  318. keyword3 = time.Now().Format(utils.FormatDate)
  319. }
  320. keyword4 := articleInfo.Abstract
  321. if source == 1 {
  322. if articleInfo.IsSummary == 1 {
  323. //优先推送1: 预约纪要
  324. if industrialSubjectIds != "" {
  325. mapActivityMobile := make(map[string]string)
  326. appointmentSummaryList, err := cygx.GetCygxAppointmentSummaryListBySubjectId(industrialSubjectIds)
  327. if err != nil && err.Error() != utils.ErrNoRow() {
  328. fmt.Println(err)
  329. return err
  330. }
  331. if len(appointmentSummaryList) > 0 {
  332. for _, v := range appointmentSummaryList {
  333. mapActivityMobile[fmt.Sprintf(v.Mobile)] += v.ActivityName + ","
  334. }
  335. if len(mapActivityMobile) > 0 {
  336. for k := range mapActivityMobile {
  337. openIditem, err := cygx.GetUserRecordOpenidByMobile(k)
  338. if err != nil && err.Error() != utils.ErrNoRow() {
  339. return err
  340. }
  341. //如果没有权限或者没有获取到 openID的就不推送
  342. if openIditem == nil || mapOpenidPower[openIditem.UserId] == "" {
  343. continue
  344. }
  345. first := "您预约的调研,有关联的纪要发布/更新了"
  346. keyword1 := "您预约的调研,有关联的纪要发布/更新了"
  347. //keyword1 := strings.TrimRight(v, ",")
  348. //如果有权限而且小助手没有提交过信息的 就做正常推送
  349. if mapUserIdChooseSend[openIditem.UserId] == 0 {
  350. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  351. mapOpenidPushed[openIditem.UserId] = openIditem.OpenId
  352. }
  353. //如果小助手勾选了对应的权限信息 就做正常推送
  354. if mapUserIdChooseSend[openIditem.UserId] != 0 && mapOpenidFllow[openIditem.UserId] != "" {
  355. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  356. mapOpenidPushed[openIditem.UserId] = openIditem.OpenId
  357. }
  358. }
  359. }
  360. }
  361. }
  362. }
  363. fmt.Println(openidDepartmentFllowList)
  364. //优先推送2: 关注作者
  365. for _, v := range openidDepartmentFllowList {
  366. //如果是已经推送的就不做推送
  367. if mapOpenidPushed[v.UserId] != "" {
  368. continue
  369. }
  370. //如果没有权限 的就不推送
  371. if mapOpenidPower[v.UserId] == "" {
  372. continue
  373. }
  374. openIditem := new(cygx.OpenIdList)
  375. openIditem.UserId = v.UserId
  376. openIditem.OpenId = v.OpenId
  377. first := "您关注的作者发布了新的报告"
  378. keyword1 := "作者【" + articleInfo.NickName + "】发布了新的报告"
  379. //如果有权限而且小助手没有提交过信息的 就做正常推送
  380. if mapUserIdChooseSend[openIditem.UserId] == 0 {
  381. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  382. mapOpenidPushed[openIditem.UserId] = openIditem.OpenId
  383. }
  384. //如果小助手勾选了对应的权限信息 就做正常推送
  385. if mapUserIdChooseSend[openIditem.UserId] != 0 && mapOpenidDepartmentFllow[openIditem.UserId] != "" {
  386. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  387. mapOpenidPushed[openIditem.UserId] = openIditem.OpenId
  388. }
  389. }
  390. //优先推送3: 关注产业
  391. for _, v := range openidFllowList {
  392. //如果是已经推送的就不做推送
  393. if mapOpenidPushed[v.UserId] != "" {
  394. continue
  395. }
  396. //如果没有权限 的就不推送
  397. if mapOpenidPower[v.UserId] == "" {
  398. continue
  399. }
  400. openIditem := new(cygx.OpenIdList)
  401. openIditem.UserId = v.UserId
  402. openIditem.OpenId = v.OpenId
  403. //first := "您关注的产业有更新报告"
  404. //keyword1 := industryName
  405. first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
  406. keyword1 := "【" + industryName + "】有报告发布/更新"
  407. //如果有权限而且小助手没有提交过信息的 就做正常推送
  408. if mapUserIdChooseSend[openIditem.UserId] == 0 {
  409. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  410. mapOpenidPushed[openIditem.UserId] = openIditem.OpenId
  411. }
  412. //如果小助手勾选了对应的权限信息 就做正常推送
  413. if mapUserIdChooseSend[openIditem.UserId] != 0 && mapOpenidFllow[openIditem.UserId] != "" {
  414. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  415. mapOpenidPushed[openIditem.UserId] = openIditem.OpenId
  416. }
  417. }
  418. //针对哪些没有关注作者,没有关注产业,没有预约纪要的人的推送
  419. for k, v := range mapOpenidPower {
  420. //如果是已经推送的就不做推送
  421. if mapOpenidPushed[k] != "" {
  422. continue
  423. }
  424. openIditem := new(cygx.OpenIdList)
  425. openIditem.UserId = k
  426. openIditem.OpenId = v
  427. first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
  428. keyword1 := "【" + industryName + "】有报告发布/更新"
  429. //如果有权限而且小助手没有提交过信息的 就做正常推送
  430. if mapUserIdChooseSend[openIditem.UserId] == 0 {
  431. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  432. }
  433. //如果小助手勾选了对应的权限信息 就做正常推送
  434. if mapUserIdChooseSend[openIditem.UserId] != 0 && mapOpenidFllow[openIditem.UserId] != "" {
  435. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  436. }
  437. }
  438. } else {
  439. reportMapDetail, err := cygx.GetCygxReportMappingRespByid(articleInfo.CategoryId)
  440. if err != nil {
  441. return err
  442. }
  443. //如果是策略就按照策略的推送方式来写
  444. if reportMapDetail.ChartPermissionName == utils.CE_LUE_NAME {
  445. //获取提交过推送规则的用户的 openid
  446. mapUserFllowCeLue := make(map[int]string)
  447. userFllowCeLueList, err := cygx.GetCygxUserFllowCeLueOpenid(articleInfo.CategoryId)
  448. if err != nil {
  449. return err
  450. }
  451. for _, v := range userFllowCeLueList {
  452. mapUserFllowCeLue[v.UserId] = v.OpenId
  453. }
  454. industryName := reportMapDetail.SubCategoryName
  455. for k, v := range mapOpenidPower {
  456. if mapOpenidPushed[k] != "" {
  457. continue
  458. }
  459. openIditem := new(cygx.OpenIdList)
  460. openIditem.UserId = k
  461. openIditem.OpenId = v
  462. first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
  463. keyword1 := "【" + industryName + "】有报告发布/更新"
  464. //如果有权限而且小助手没有提交过信息的 就做正常推送
  465. if mapUserIdChooseSend[openIditem.UserId] == 0 {
  466. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  467. }
  468. //如果小助手勾选了对应的权限信息 就做正常推送
  469. if mapUserIdChooseSend[openIditem.UserId] != 0 && mapUserFllowCeLue[openIditem.UserId] != "" {
  470. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  471. }
  472. }
  473. } else {
  474. for k, v := range mapOpenidPower {
  475. openIditem := new(cygx.OpenIdList)
  476. openIditem.UserId = k
  477. openIditem.OpenId = v
  478. first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
  479. keyword1 := "【" + industryName + "】有报告发布/更新"
  480. //如果有权限而且小助手没有提交过信息的 就做正常推送
  481. if mapUserIdChooseSend[openIditem.UserId] == 0 {
  482. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  483. }
  484. //如果小助手勾选了对应的权限信息 就做正常推送
  485. if mapUserIdChooseSend[openIditem.UserId] != 0 && mapOpenidFllow[openIditem.UserId] != "" {
  486. services.SendWxMsgWithCygxActivityAppointmentNew(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
  487. }
  488. }
  489. }
  490. }
  491. go cygx.UpdateIsClassFail(articleInfo)
  492. return
  493. }
  494. //func init() {
  495. // DoThisWeekLastWeekWxTemplateMsg("标题", "20220909", "摘要", 2, 1)
  496. //}
  497. // 处理本周研究汇总,上周纪要汇总,报告精选
  498. func DoThisWeekLastWeekWxTemplateMsg(title, publishDate, abstract string, articleId int, source int) (err error) {
  499. cacheKey := fmt.Sprint("Source:", source, "_ArticleId:", articleId)
  500. isExist := utils.Rc.IsExist(cacheKey)
  501. if isExist {
  502. return err
  503. }
  504. setNX := utils.Rc.SetNX(cacheKey, articleId, time.Minute*30)
  505. //如果key 设置成功就走推送
  506. if setNX {
  507. var msg string
  508. defer func() {
  509. //fmt.Println()
  510. if err != nil {
  511. fmt.Println("err:", err)
  512. go alarm_msg.SendAlarmMsg("过滤策略平台报告,研选报告重复推送,以及权限勾选的推送,发送模版消息失败,Err:"+err.Error()+";msg:"+msg, 3)
  513. utils.FileLog.Info(fmt.Sprintf("发送模版消息失败,Err:%s,%s", err.Error(), msg))
  514. }
  515. if msg != "" {
  516. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  517. }
  518. }()
  519. OpenIdList, err := models.GetCygxUserAllOpneid()
  520. if err != nil {
  521. return err
  522. }
  523. if len(OpenIdList) > 0 {
  524. var first, keyword1 string
  525. if source == 1 {
  526. keyword1 = "【报告精选】已发布"
  527. } else if source == 2 {
  528. keyword1 = "【本周研究汇总】已发布"
  529. } else {
  530. keyword1 = "【上周纪要汇总】已发布"
  531. }
  532. //keyword1 := "--"
  533. keyword2 := title
  534. keyword3 := strings.Replace(publishDate, "00:00:00", "", -1)
  535. keyword4 := abstract
  536. services.SendWxMsgThisWeekLastWeek(first, keyword1, keyword2, keyword3, keyword4, OpenIdList, articleId, source)
  537. }
  538. } else {
  539. go alarm_msg.SendAlarmMsg("发送模版消息失败,设置Redis Key 过期时间失败:key"+cacheKey, 3)
  540. }
  541. return
  542. }
  543. // 根据行业处理所选的全部赛道字段
  544. func DoXzsChooseSend(chartPermissionName string) string {
  545. var allIn string
  546. if chartPermissionName == utils.YI_YAO_NAME {
  547. allIn = "all_in_yi_yao"
  548. } else if chartPermissionName == utils.XIAO_FEI_NAME {
  549. allIn = "all_in_xiao_fei"
  550. } else if chartPermissionName == utils.KE_JI_NAME {
  551. allIn = "all_in_ke_ji"
  552. } else if chartPermissionName == utils.ZHI_ZAO_NAME {
  553. allIn = "all_in_zhi_zao"
  554. } else if chartPermissionName == utils.CHART_PERMISSION_NAME_MF_YANXUAN {
  555. allIn = "all_in_yan_xuan"
  556. }
  557. return allIn
  558. }