industrial_management.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package services
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_clpt/models"
  6. "hongze/hongze_clpt/utils"
  7. "time"
  8. )
  9. //根据行业处理所选的全部赛道字段
  10. func DoXzsChooseSend(chartPermissionName string) string {
  11. var allIn string
  12. if chartPermissionName == utils.YI_YAO_NAME {
  13. allIn = "all_in_yi_yao"
  14. } else if chartPermissionName == utils.XIAO_FEI_NAME {
  15. allIn = "all_in_xiao_fei"
  16. } else if chartPermissionName == utils.KE_JI_NAME {
  17. allIn = "all_in_ke_ji"
  18. } else if chartPermissionName == utils.ZHI_ZAO_NAME {
  19. allIn = "all_in_zhi_zao"
  20. } else if chartPermissionName == utils.CHART_PERMISSION_NAME_MF_YANXUAN {
  21. allIn = "all_in_yan_xuan"
  22. }
  23. return allIn
  24. }
  25. //行业关注或者取消关注的时候,对于用户全部赛道的影响
  26. func IndustryFllowWithTrack(industrialManagementId, count, uid int) (err error) {
  27. defer func() {
  28. if err != nil {
  29. fmt.Println(err)
  30. go utils.SendAlarmMsg("修改行业关注或者取消关注的时候,对于用户全部赛道的影响信息失败"+err.Error(), 2)
  31. go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "修改行业关注或者取消关注的时候,对于用户全部赛道的影响信息失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
  32. }
  33. }()
  34. detail, err := models.GetIndustrialManagementDetail(industrialManagementId)
  35. if err != nil {
  36. return err
  37. }
  38. categoryinfo, err := models.GetChartPermissionById(detail.ChartPermissionId)
  39. if err != nil {
  40. return err
  41. }
  42. var allIn string
  43. allIn = DoXzsChooseSend(categoryinfo.PermissionName)
  44. if allIn != "" {
  45. //如果取消关注就把该赛道设置为非全部赛道
  46. if count == 1 {
  47. err = models.UpdateCygxXzsChooseSendIsAllIn(allIn, 0, uid)
  48. if err != nil {
  49. return err
  50. }
  51. } else {
  52. //医药、消费、科技、智造、研选下的产业赛道
  53. mapIndustrial := make(map[int][]*models.IndustrialManagementRep)
  54. industrialList, err := models.GetindustrialManagement()
  55. if err != nil {
  56. return err
  57. }
  58. for _, v := range industrialList {
  59. mapIndustrial[v.ChartPermissionId] = append(mapIndustrial[v.ChartPermissionId], v)
  60. }
  61. fllowNum, err := models.GetCountCygxIndustryFllowByUidAndChartPermissionId(uid, detail.ChartPermissionId)
  62. if err != nil {
  63. return err
  64. }
  65. if fllowNum == len(mapIndustrial[detail.ChartPermissionId]) {
  66. err = models.UpdateCygxXzsChooseSendIsAllIn(allIn, 1, uid)
  67. if err != nil {
  68. return err
  69. }
  70. }
  71. }
  72. }
  73. return err
  74. }
  75. //HandleIndustryList预处理产业列表字段
  76. func HandleIndustryList(list []*models.IndustrialManagement, user *models.WxUserItem) (items []*models.IndustrialManagement, err error) {
  77. userId := user.UserId
  78. fllowList, err := models.GetUserFllowIndustrialList(userId)
  79. if err != nil {
  80. return
  81. }
  82. fllowMap := make(map[int]int)
  83. if len(fllowList) > 0 {
  84. for _, v := range fllowList {
  85. fllowMap[v.IndustrialManagementId] = v.IndustrialManagementId
  86. }
  87. }
  88. mapindustrialId, e := GetMicroRoadshowVideoMap()
  89. if e != nil {
  90. err = e
  91. return
  92. }
  93. //合并产业关联的标的
  94. listSubjcet, err := models.GetThemeHeatSubjectList("")
  95. if err != nil {
  96. return
  97. }
  98. industrialIdArr := make([]int, 0)
  99. for k, v := range list {
  100. list[k].Source = 1
  101. if fllowMap[v.IndustrialManagementId] > 0 {
  102. list[k].IsFollow = true
  103. }
  104. industrialIdArr = append(industrialIdArr, v.IndustrialManagementId)
  105. if _, ok := mapindustrialId[v.IndustrialManagementId]; !ok {
  106. continue
  107. }
  108. videoSimple, au, e := GetindustryVideo(user, v.IndustrialManagementId)
  109. if e != nil {
  110. err = errors.New("获取产业关联的视频失败,GetindustryVideo " + e.Error())
  111. return
  112. }
  113. if videoSimple != nil && videoSimple.Id > 0 {
  114. v.IndustryVideo = videoSimple
  115. }
  116. v.AuthInfo = au
  117. }
  118. mapUPdateTime := make(map[int]string)
  119. mapHistroyArticleId := make(map[int]int)
  120. if len(industrialIdArr) > 0 {
  121. //合并产业关联的标的
  122. listSubjcet, err = models.GetIndustrialSubjectAllByIndustrialId(industrialIdArr)
  123. if err != nil {
  124. return
  125. }
  126. mapIndustrial := make(map[string]int)
  127. for _, v := range listSubjcet {
  128. for k2, v2 := range list {
  129. if v2.IndustrialManagementId == v.IndustrialManagementId && mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Hz", v.SubjectName)] == 0 {
  130. list[k2].IndustrialSubjectList = append(list[k2].IndustrialSubjectList, v)
  131. mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Hz", v.SubjectName)] = v2.IndustrialManagementId
  132. }
  133. }
  134. }
  135. articleIdArr := make([]int, 0)
  136. //获取这些产业下最新更新的文章
  137. if len(industrialIdArr) > 0 {
  138. listUpdateTime, e := models.GetNewArticleDetailByIndustrialIds(industrialIdArr)
  139. if e != nil && e.Error() != utils.ErrNoRow() {
  140. err = e
  141. return
  142. }
  143. for _, v := range listUpdateTime {
  144. mapUPdateTime[v.IndustrialManagementId] = v.PublishDate
  145. articleIdArr = append(articleIdArr, v.ArticleId)
  146. }
  147. }
  148. //时间线的更新时间
  149. // maptimelineUPdateTime := make(map[int]string)
  150. listtimelinePublishdate, e := models.GetTimeLineReportIndustrialPublishdateList(industrialIdArr)
  151. if e != nil && e.Error() != utils.ErrNoRow() {
  152. err = e
  153. return
  154. }
  155. for _, v := range listtimelinePublishdate {
  156. if mapUPdateTime[v.IndustrialManagementId] != "" {
  157. if utils.StrTimeToTime(v.PublishDate).After(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
  158. mapUPdateTime[v.IndustrialManagementId] = v.PublishDate
  159. }
  160. }
  161. }
  162. if userId > 0 {
  163. listArticleHistory, e := models.GetUserToArticleHistory(userId, industrialIdArr)
  164. if e != nil && e.Error() != utils.ErrNoRow() {
  165. err = errors.New("获取产业关联的视频失败,GetindustryVideo " + e.Error())
  166. return
  167. }
  168. for _, v := range listArticleHistory {
  169. mapHistroyArticleId[v.ArticleId] = v.ArticleId
  170. }
  171. }
  172. }
  173. nowTime := time.Now().Local()
  174. threeMonBefore := nowTime.AddDate(0, -3, 0)
  175. for k, v := range list {
  176. list[k].UpdateTime = utils.TimeRemoveHms(mapUPdateTime[v.IndustrialManagementId])
  177. if userId > 0 {
  178. //如果文章没有阅读,而且,文章的发布时间晚于项目的上线时间,而且文章的发布时间晚于用户的注册时间,就进行标红处理
  179. if mapHistroyArticleId[v.ArticleId] == 0 && user.CreatedTime.Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
  180. list[k].IsRed = true
  181. }
  182. } else {
  183. if utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
  184. list[k].IsRed = true
  185. }
  186. list[k].IsFollow = false
  187. }
  188. list[k].UpdateTime = utils.TimeRemoveHms(mapUPdateTime[v.IndustrialManagementId])
  189. if userId > 0 {
  190. //如果文章没有阅读,而且,文章的发布时间晚于项目的上线时间,而且文章的发布时间晚于用户的注册时间,就进行标红处理
  191. if mapHistroyArticleId[v.ArticleId] == 0 && user.CreatedTime.Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
  192. list[k].IsRed = true
  193. }
  194. } else {
  195. if utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
  196. list[k].IsRed = true
  197. }
  198. list[k].IsFollow = false
  199. }
  200. // 关联报告发布时间均在3个月内则标记New
  201. if v.MinReportTime != "" {
  202. t, e := time.Parse(utils.FormatDateTime, v.MinReportTime)
  203. if e != nil {
  204. err = errors.New("报告最早发布时间有误,GetindustryVideo " + e.Error())
  205. return
  206. }
  207. if t.After(threeMonBefore) {
  208. list[k].IsNew = true
  209. }
  210. }
  211. }
  212. items = list
  213. return
  214. }