comein.go 7.3 KB

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