comein.go 6.8 KB

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