company.go 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. package services
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hz_eta_api/models"
  6. "hongze/hz_eta_api/models/company"
  7. "hongze/hz_eta_api/services/alarm_msg"
  8. "hongze/hz_eta_api/utils"
  9. "time"
  10. )
  11. func GetProductId(roleTypeCode string) (productId int) {
  12. if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER ||
  13. roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN ||
  14. roleTypeCode == utils.ROLE_TYPE_CODE_FICC_TEAM ||
  15. roleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP ||
  16. roleTypeCode == utils.ROLE_TYPE_CODE_FICC_DEPARTMENT {
  17. productId = 1
  18. } else if roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER ||
  19. roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN ||
  20. roleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP ||
  21. roleTypeCode == utils.ROLE_TYPE_CODE_RAI_DEPARTMENT {
  22. productId = 2
  23. } else {
  24. productId = 0
  25. }
  26. return
  27. }
  28. // GetFiccLastUserViewHistoryByCompanyIds 根据客户id集合map获取ficc最后一次阅读时间
  29. func GetFiccLastUserViewHistoryByCompanyIds(companyIdStr string) (companyViewTime map[int]time.Time, err error) {
  30. //user_view_record mobile
  31. companyViewTime = make(map[int]time.Time)
  32. userViewList, err := models.GetLastUserViewHistoryByCompanyIdsMobile(companyIdStr)
  33. if err != nil {
  34. return
  35. }
  36. for _, userView := range userViewList {
  37. companyViewTime[userView.CompanyId] = userView.ViewTime
  38. }
  39. //user_view_record email
  40. userViewList, err = models.GetLastUserViewHistoryByCompanyIdsEmail(companyIdStr)
  41. if err != nil {
  42. return
  43. }
  44. checkLastTime(companyViewTime, userViewList)
  45. //AdvisoryArticleViewRecord mobile
  46. userViewList, err = models.GetLastAdvisoryArticleViewRecordByCompanyIdsMobile(companyIdStr)
  47. if err != nil {
  48. return
  49. }
  50. checkLastTime(companyViewTime, userViewList)
  51. //AdvisoryArticleViewRecord email
  52. userViewList, err = models.GetLastAdvisoryArticleViewRecordByCompanyIdsEmail(companyIdStr)
  53. if err != nil {
  54. return
  55. }
  56. checkLastTime(companyViewTime, userViewList)
  57. //ReportViewRecord mobile
  58. userViewList, err = models.GetLastReportViewRecordByCompanyIdsMobile(companyIdStr)
  59. if err != nil {
  60. return
  61. }
  62. checkLastTime(companyViewTime, userViewList)
  63. //ReportViewRecord email
  64. userViewList, err = models.GetLastReportViewRecordByCompanyIdsEmail(companyIdStr)
  65. if err != nil {
  66. return
  67. }
  68. checkLastTime(companyViewTime, userViewList)
  69. //UserViewStatistics mobile
  70. userViewList, err = models.GetLastUserViewStatisticsByCompanyIdsMobile(companyIdStr)
  71. if err != nil {
  72. return
  73. }
  74. checkLastTime(companyViewTime, userViewList)
  75. //UserViewStatistics email
  76. userViewList, err = models.GetLastUserViewStatisticsByCompanyIdsEmail(companyIdStr)
  77. if err != nil {
  78. return
  79. }
  80. checkLastTime(companyViewTime, userViewList)
  81. return
  82. }
  83. // GetRaiLastUserViewHistoryByCompanyIds 根据客户id集合map获取权益最后一次阅读时间
  84. func GetRaiLastUserViewHistoryByCompanyIds(companyIdStr string) (companyViewTime map[int]time.Time, err error) {
  85. //CygxArticleViewRecord mobile
  86. companyViewTime = make(map[int]time.Time)
  87. userViewList, err := models.GetLastCygxArticleViewRecordByCompanyIdsMobile(companyIdStr)
  88. if err != nil {
  89. return
  90. }
  91. for _, userView := range userViewList {
  92. companyViewTime[userView.CompanyId] = userView.ViewTime
  93. }
  94. //CygxArticleViewRecord email
  95. userViewList, err = models.GetLastCygxArticleViewRecordByCompanyIdsEmail(companyIdStr)
  96. if err != nil {
  97. return
  98. }
  99. checkLastTime(companyViewTime, userViewList)
  100. return
  101. }
  102. // checkLastTime 检测最后的时间并重新赋值
  103. func checkLastTime(companyViewTime map[int]time.Time, userViewList []*models.CompanyLastViewSlice) {
  104. for _, userView := range userViewList {
  105. if viewTime, ok := companyViewTime[userView.CompanyId]; ok {
  106. if userView.ViewTime.After(viewTime) { //如果当前时间晚于 map中的时间,那么重新赋值
  107. companyViewTime[userView.CompanyId] = userView.ViewTime
  108. }
  109. } else { //如果没有数据,那么直接赋值
  110. companyViewTime[userView.CompanyId] = userView.ViewTime
  111. }
  112. }
  113. return
  114. }
  115. // GetFiccCountUserViewHistoryByCompanyIds 根据客户id集合map获取ficc的阅读次数
  116. func GetFiccCountUserViewHistoryByCompanyIds(companyIdStr string) (companyViewTotal map[int]int, err error) {
  117. //user_view_record mobile
  118. companyViewTotal = make(map[int]int)
  119. userViewList, err := models.GetCountUserViewHistoryByCompanyIdsMobile(companyIdStr)
  120. if err != nil {
  121. return
  122. }
  123. for _, userView := range userViewList {
  124. companyViewTotal[userView.CompanyId] = userView.ViewTotal
  125. }
  126. userViewList, err = models.GetCountUserViewHistoryByCompanyIdsEmail(companyIdStr)
  127. if err != nil {
  128. return
  129. }
  130. checkCount(companyViewTotal, userViewList)
  131. //AdvisoryArticleViewRecord mobile
  132. userViewList, err = models.GetCountAdvisoryArticleViewRecordByCompanyIdsMobile(companyIdStr)
  133. if err != nil {
  134. return
  135. }
  136. checkCount(companyViewTotal, userViewList)
  137. //AdvisoryArticleViewRecord email
  138. userViewList, err = models.GetCountAdvisoryArticleViewRecordByCompanyIdsEmail(companyIdStr)
  139. if err != nil {
  140. return
  141. }
  142. checkCount(companyViewTotal, userViewList)
  143. //ReportViewRecord mobile
  144. userViewList, err = models.GetCountReportViewRecordByCompanyIdsMobile(companyIdStr)
  145. if err != nil {
  146. return
  147. }
  148. checkCount(companyViewTotal, userViewList)
  149. //ReportViewRecord email
  150. userViewList, err = models.GetCountReportViewRecordByCompanyIdsEmail(companyIdStr)
  151. if err != nil {
  152. return
  153. }
  154. checkCount(companyViewTotal, userViewList)
  155. //UserViewStatistics mobile
  156. userViewList, err = models.GetUserViewStatisticsByCompanyIdsMobile(companyIdStr)
  157. if err != nil {
  158. return
  159. }
  160. checkCount(companyViewTotal, userViewList)
  161. //UserViewStatistics email
  162. userViewList, err = models.GetUserViewStatisticsByCompanyIdsEmail(companyIdStr)
  163. if err != nil {
  164. return
  165. }
  166. checkCount(companyViewTotal, userViewList)
  167. return
  168. }
  169. // GetRaiCountUserViewHistoryByCompanyIds 根据客户id集合map获取权益的阅读次数
  170. func GetRaiCountUserViewHistoryByCompanyIds(companyIdStr string) (companyViewTotal map[int]int, err error) {
  171. //CygxArticleViewRecord mobile
  172. companyViewTotal = make(map[int]int)
  173. userViewList, err := models.GetCountCygxArticleViewRecordByCompanyIdsMobile(companyIdStr)
  174. if err != nil {
  175. return
  176. }
  177. for _, userView := range userViewList {
  178. companyViewTotal[userView.CompanyId] = userView.ViewTotal
  179. }
  180. //CygxArticleViewRecord email
  181. userViewList, err = models.GetCountCygxArticleViewRecordByCompanyIdsEmail(companyIdStr)
  182. if err != nil {
  183. return
  184. }
  185. checkCount(companyViewTotal, userViewList)
  186. return
  187. }
  188. func checkCount(companyViewTotal map[int]int, userViewList []*models.CompanyViewTotalSlice) {
  189. for _, userView := range userViewList {
  190. if viewTotal, ok := companyViewTotal[userView.CompanyId]; ok {
  191. companyViewTotal[userView.CompanyId] = viewTotal + userView.ViewTotal
  192. } else { //如果没有数据,那么直接赋值
  193. companyViewTotal[userView.CompanyId] = userView.ViewTotal
  194. }
  195. }
  196. return
  197. }
  198. // ModifyCompanyProductLastViewData 修改客户产品的总共阅读次数以及最近阅读时间
  199. func ModifyCompanyProductLastViewData(companyIdList []int) (err error) {
  200. defer func() {
  201. if err != nil {
  202. go alarm_msg.SendAlarmMsg("修改客户产品的总共阅读次数以及最近阅读时间失败,"+fmt.Sprint("companyIdList:", companyIdList, ";err:", err), 3)
  203. //go utils.SendEmail("修改客户产品的总共阅读次数以及最近阅读时间失败", fmt.Sprint("companyIdList:", companyIdList, ";err:", err), utils.EmailSendToUsers)
  204. }
  205. }()
  206. companyIdStr := ``
  207. for _, companyId := range companyIdList {
  208. companyIdStr += fmt.Sprint(companyId, ",")
  209. }
  210. companyIdStr = companyIdStr[:len(companyIdStr)-1]
  211. companyFiccViewTotalMap, err := GetFiccCountUserViewHistoryByCompanyIds(companyIdStr)
  212. if err != nil {
  213. return
  214. }
  215. companyFiccLastViewMap, err := GetFiccLastUserViewHistoryByCompanyIds(companyIdStr)
  216. if err != nil {
  217. return
  218. }
  219. companyRaiViewTotalMap, err := GetRaiCountUserViewHistoryByCompanyIds(companyIdStr)
  220. if err != nil {
  221. return
  222. }
  223. companyRaiLastViewMap, err := GetRaiLastUserViewHistoryByCompanyIds(companyIdStr)
  224. if err != nil {
  225. return
  226. }
  227. for _, companyId := range companyIdList {
  228. //ficc
  229. var companyFiccViewTotal int
  230. var companyFiccLastView time.Time
  231. var companyFiccLastViewStr string
  232. companyFiccViewTotal, _ = companyFiccViewTotalMap[companyId]
  233. companyFiccLastView, _ = companyFiccLastViewMap[companyId]
  234. if companyFiccLastView.IsZero() {
  235. companyFiccLastViewStr = "0000-00-00 00:00:00"
  236. } else {
  237. companyFiccLastViewStr = companyFiccLastView.Format(utils.FormatDateTime)
  238. }
  239. company.ModifyCompanyProductLastViewData(companyId, 1, companyFiccViewTotal, companyFiccLastViewStr)
  240. //权益
  241. var companyRaiViewTotal int
  242. var companyRaiLastView time.Time
  243. var companyRaiLastViewStr string
  244. companyRaiViewTotal, _ = companyRaiViewTotalMap[companyId]
  245. companyRaiLastView, _ = companyRaiLastViewMap[companyId]
  246. if companyRaiLastView.IsZero() {
  247. companyRaiLastViewStr = "0000-00-00 00:00:00"
  248. } else {
  249. companyRaiLastViewStr = companyRaiLastView.Format(utils.FormatDateTime)
  250. }
  251. company.ModifyCompanyProductLastViewData(companyId, 2, companyRaiViewTotal, companyRaiLastViewStr)
  252. }
  253. return
  254. }
  255. // AddWxUserOpLog 记录新增用户的日志
  256. func AddWxUserOpLog(wxUserOpLog company.WxUserOpLog) {
  257. userSellerRelationList, err := models.GetUserSellerRelationList(wxUserOpLog.UserId)
  258. if err != nil {
  259. return
  260. }
  261. userSellerRelationInfo, _ := json.Marshal(userSellerRelationList)
  262. wxUserOpLog.UserSellerInfo = string(userSellerRelationInfo)
  263. company.AddWxUserOpLog(&wxUserOpLog)
  264. }