comein.go 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. package services
  2. import (
  3. "context"
  4. "fmt"
  5. "hongze/hongze_task/models"
  6. "hongze/hongze_task/models/yb"
  7. "hongze/hongze_task/services/alarm_msg"
  8. "hongze/hongze_task/services/comein"
  9. "hongze/hongze_task/utils"
  10. "strings"
  11. "time"
  12. )
  13. // SyncComeinMeeting 同步进门会议参会人员数据
  14. func SyncComeinMeeting(cont context.Context) (err error) {
  15. errMsgList := make([]string, 0)
  16. defer func() {
  17. if len(errMsgList) > 0 {
  18. //for _, v := range errMsgList {
  19. // fmt.Println(v)
  20. //}
  21. go alarm_msg.SendAlarmMsg("同步进门会议参会人员数据失败:"+strings.Join(errMsgList, "/n"), 3)
  22. }
  23. }()
  24. startTimeInt := time.Now().Add(-3700*time.Second).Unix() * 1000 //开始时间
  25. endTimeInt := time.Now().Unix() * 1000 //结束时间
  26. //每天的第一次同步,那么拉取数据的开始时间 需要 往前面推10个小时(避免因为晚上有客户看回放而把用户遗漏了)
  27. if time.Now().Hour() == 7 {
  28. startTimeInt = time.Now().Add(-60*60*10*time.Second).Unix() * 1000
  29. }
  30. roadshowData, err := comein.GetRoadshowDataList(startTimeInt, endTimeInt)
  31. if err != nil {
  32. errMsgList = append(errMsgList, fmt.Sprintf("获取进门路演到会信息失败,%s,err:%s", time.Now().Format(utils.FormatDate), err.Error()))
  33. return
  34. }
  35. roadshowDataList := roadshowData.Data
  36. comeinEventMap := make(map[int]*yb.ComeinEvent)
  37. // 开始同步
  38. companyProductMap := make(map[string]*models.CompanyProduct)
  39. companyMap := make(map[string]*models.Company)
  40. companyIdProductIdMap := make(map[int]int)
  41. // 参会人
  42. for _, v := range roadshowDataList {
  43. //只记录普通成员(也就是参会人)
  44. if v.UserIdentity != 4 { //参会者身份,1:主讲人 2:主持人 3:嘉宾 4:普通参会者 5:联席主讲人 6:会议助理
  45. continue
  46. }
  47. if v.UserPhone == "" { //如果手机号为空,那么就不处理了,进入下一个循环
  48. continue
  49. }
  50. tmpComeinEvent, ok := comeinEventMap[int(v.RoadshowID)]
  51. if !ok {
  52. // 检测会议是否存在,不存在则创建会议
  53. tmpComeinEventInfo, tmpErr := yb.GetComeinEventByRoadshowId(int(v.RoadshowID))
  54. if tmpErr != nil {
  55. if tmpErr.Error() == utils.ErrNoRow() {
  56. //会议信息
  57. tmpComeinEventInfo = &yb.ComeinEvent{
  58. //ComeinEventId: 0,
  59. RoadshowId: int(v.RoadshowID),
  60. //ConferenceId: comeinDataInfo.ConferenceType,
  61. Title: v.RoadshowTitle,
  62. StartTime: time.Unix(v.RoadshowBeginTime/1000, 0),
  63. EndTime: time.Unix(v.RoadshowEndTime/1000, 0),
  64. People: 0,
  65. CreateTime: time.Now(),
  66. }
  67. tmpErr2 := yb.AddComeinEvent(tmpComeinEventInfo)
  68. if tmpErr2 != nil {
  69. //入库失败
  70. errMsgList = append(errMsgList, fmt.Sprintf("路演id:%d,路演标题:%s,会议入库失败,err:%s", v.RoadshowID, v.RoadshowTitle, err.Error()))
  71. continue
  72. }
  73. } else {
  74. //数据异常,sql异常
  75. errMsgList = append(errMsgList, fmt.Sprintf("路演id:%d,路演标题:%s,查找会议失败,err:%s", v.RoadshowID, v.RoadshowTitle, err.Error()))
  76. continue
  77. }
  78. }
  79. comeinEventMap[tmpComeinEventInfo.RoadshowId] = tmpComeinEventInfo
  80. tmpComeinEvent = tmpComeinEventInfo
  81. }
  82. //校验该记录是否已经入库,如果已经入库,那么就不处理了,进入下一个循环
  83. tmpComeinEventUser, tmpErr := yb.GetComeinEventUserByComeinDataId(int(v.ID))
  84. if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
  85. errMsgList = append(errMsgList, fmt.Sprintf("路演id:%d,路演标题:%s,用户手机号:%s,会议用户入库失败,err:%s", v.RoadshowID, v.RoadshowTitle, v.UserPhone, err.Error()))
  86. continue
  87. }
  88. if tmpComeinEventUser == nil {
  89. mobile := v.UserPhone
  90. countryCode := strings.Replace(v.AreaCode, "+", "", -1)
  91. var companyProductInfo *models.CompanyProduct
  92. var companyInfo *models.Company
  93. var wxUserInfo *models.WxUser
  94. productIdList := []int{1, 2}
  95. if mobile != "" {
  96. wxUserInfo, _ = models.GetWxUserByMobileCountryCode(mobile, countryCode)
  97. if wxUserInfo != nil && wxUserInfo.CompanyId != 1 {
  98. //获取客户产品信息
  99. productId, ok := companyIdProductIdMap[wxUserInfo.CompanyId]
  100. if ok { //已经查询过
  101. if productId > 0 {
  102. // 获取客户产品信息
  103. key := fmt.Sprint(wxUserInfo.CompanyId, "_", productId)
  104. if tmpCompanyProductInfo, ok := companyProductMap[key]; ok {
  105. companyProductInfo = tmpCompanyProductInfo
  106. }
  107. }
  108. } else {
  109. for _, productId := range productIdList {
  110. key := fmt.Sprint(wxUserInfo.CompanyId, "_", productId)
  111. companyProductInfo, _ = models.GetCompanyProduct(wxUserInfo.CompanyId, productId)
  112. if companyProductInfo != nil {
  113. companyProductMap[key] = companyProductInfo
  114. companyIdProductIdMap[wxUserInfo.CompanyId] = productId
  115. //退出产品查询
  116. break
  117. }
  118. }
  119. if companyProductInfo == nil {
  120. companyIdProductIdMap[wxUserInfo.CompanyId] = 0
  121. }
  122. }
  123. // 获取客户信息
  124. key := fmt.Sprint(wxUserInfo.CompanyId)
  125. if tmpCompanyInfo, ok := companyMap[key]; ok {
  126. companyInfo = tmpCompanyInfo
  127. } else {
  128. companyInfo, _ = models.GetCompanyById(wxUserInfo.CompanyId)
  129. if companyInfo != nil {
  130. companyMap[key] = companyInfo
  131. }
  132. }
  133. }
  134. }
  135. name := v.UserName
  136. comeinEventUserInfo := &yb.ComeinEventUser{
  137. //ComeinUserId int `orm:"column(comein_user_id);pk" description:"自增id"`
  138. ComeinEventId: tmpComeinEvent.ComeinEventId,
  139. ComeinDataId: int(v.ID),
  140. UserId: 0,
  141. Mobile: mobile,
  142. Email: v.Email,
  143. Name: name,
  144. FirstWatchTime: time.Unix(v.FirstWatchTime/1000, 0),
  145. LastWatchTime: time.Unix(v.LastWatchTime/1000, 0),
  146. JoinTime: int(v.JoinTime),
  147. AuthInfo: v.AuthInfo,
  148. JoinType: int(v.JoinType),
  149. DataType: int(v.DataType),
  150. //RegisterTime: time.Time{},
  151. ViewTotal: 0,
  152. //LastViewTime: time.Time{},
  153. CompanyId: 0,
  154. ProductId: 0,
  155. CompanyName: v.Company,
  156. Occupation: v.Occupation,
  157. Status: "",
  158. SellerId: 0,
  159. SellerName: "",
  160. CompanyViewTotal: 0,
  161. CompanyRoadTotal: 0,
  162. CreateTime: time.Now(),
  163. }
  164. //这个时候是系统用户了,美滋滋
  165. if companyProductInfo != nil {
  166. comeinEventUserInfo.RegisterTime = wxUserInfo.RegisterTime
  167. //models.
  168. userViewStatisticsInfo, _ := models.GetUserLastViewStatisticsByMobile(mobile) //用户阅读信息
  169. if userViewStatisticsInfo != nil {
  170. comeinEventUserInfo.ViewTotal = userViewStatisticsInfo.Total
  171. comeinEventUserInfo.LastViewTime = userViewStatisticsInfo.LastViewTime
  172. }
  173. comeinEventUserInfo.UserId = int(wxUserInfo.UserId)
  174. comeinEventUserInfo.Name = wxUserInfo.RealName
  175. comeinEventUserInfo.CompanyId = companyProductInfo.CompanyId
  176. comeinEventUserInfo.ProductId = companyProductInfo.ProductId
  177. comeinEventUserInfo.CompanyName = companyInfo.CompanyName
  178. comeinEventUserInfo.Status = companyProductInfo.Status
  179. comeinEventUserInfo.SellerId = companyProductInfo.SellerId
  180. comeinEventUserInfo.SellerName = companyProductInfo.SellerName
  181. comeinEventUserInfo.CompanyViewTotal = companyProductInfo.ViewTotal
  182. comeinEventUserInfo.CompanyRoadTotal = companyProductInfo.RoadShowTotal
  183. }
  184. yb.AddComeinEventUser(comeinEventUserInfo)
  185. tmpComeinEvent.People = tmpComeinEvent.People + 1
  186. }
  187. }
  188. for _, v := range comeinEventMap {
  189. v.Update([]string{"People"})
  190. }
  191. return
  192. }