package services import ( "context" "fmt" "hongze/hongze_task/models" "hongze/hongze_task/models/yb" "hongze/hongze_task/services/comein" "hongze/hongze_task/utils" "strings" "time" ) // SyncComeinMeeting 同步进门会议参会人员数据 func SyncComeinMeeting(cont context.Context) (err error) { errMsgList := make([]string, 0) defer func() { if len(errMsgList) > 0 { for _, v := range errMsgList { fmt.Println(v) } } }() startTimeInt := time.Now().Add(-3700*time.Second).Unix() * 1000 //开始时间 endTimeInt := time.Now().Unix() * 1000 //结束时间 //每天的第一次同步,那么拉取数据的开始时间 需要 往前面推10个小时(避免因为晚上有客户看回放而把用户遗漏了) if time.Now().Hour() == 7 { startTimeInt = time.Now().Add(-60*60*10*time.Second).Unix() * 1000 } roadshowData, err := comein.GetRoadshowDataList(startTimeInt, endTimeInt) if err != nil { errMsgList = append(errMsgList, fmt.Sprintf("获取进门路演到会信息失败,%s,err:%s", time.Now().Format(utils.FormatDate), err.Error())) return } roadshowDataList := roadshowData.Data comeinEventMap := make(map[int]*yb.ComeinEvent) // 开始同步 companyProductMap := make(map[string]*models.CompanyProduct) companyMap := make(map[string]*models.Company) companyIdProductIdMap := make(map[int]int) // 参会人 for _, v := range roadshowDataList { //只记录普通成员(也就是参会人) if v.UserIdentity != 4 { //参会者身份,1:主讲人 2:主持人 3:嘉宾 4:普通参会者 5:联席主讲人 6:会议助理 continue } if v.UserPhone == "" { //如果手机号为空,那么就不处理了,进入下一个循环 continue } tmpComeinEvent, ok := comeinEventMap[int(v.RoadshowID)] if !ok { // 检测会议是否存在,不存在则创建会议 tmpComeinEventInfo, tmpErr := yb.GetComeinEventByRoadshowId(int(v.RoadshowID)) if tmpErr != nil { if tmpErr.Error() == utils.ErrNoRow() { //会议信息 tmpComeinEventInfo = &yb.ComeinEvent{ //ComeinEventId: 0, RoadshowId: int(v.RoadshowID), //ConferenceId: comeinDataInfo.ConferenceType, Title: v.RoadshowTitle, StartTime: time.Unix(v.RoadshowBeginTime/1000, 0), EndTime: time.Unix(v.RoadshowEndTime/1000, 0), People: 0, CreateTime: time.Now(), } tmpErr2 := yb.AddComeinEvent(tmpComeinEventInfo) if tmpErr2 != nil { //入库失败 errMsgList = append(errMsgList, fmt.Sprintf("路演id:%d,路演标题:%s,会议入库失败,err:%s", v.RoadshowID, v.RoadshowTitle, err.Error())) continue } } else { //数据异常,sql异常 errMsgList = append(errMsgList, fmt.Sprintf("路演id:%d,路演标题:%s,查找会议失败,err:%s", v.RoadshowID, v.RoadshowTitle, err.Error())) continue } } comeinEventMap[tmpComeinEventInfo.RoadshowId] = tmpComeinEventInfo tmpComeinEvent = tmpComeinEventInfo } //校验该记录是否已经入库,如果已经入库,那么就不处理了,进入下一个循环 tmpComeinEventUser, tmpErr := yb.GetComeinEventUserByComeinDataId(int(v.ID)) if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() { errMsgList = append(errMsgList, fmt.Sprintf("路演id:%d,路演标题:%s,用户手机号:%s,会议用户入库失败,err:%s", v.RoadshowID, v.RoadshowTitle, v.UserPhone, err.Error())) continue } if tmpComeinEventUser == nil { mobile := v.UserPhone countryCode := strings.Replace(v.AreaCode, "+", "", -1) var companyProductInfo *models.CompanyProduct var companyInfo *models.Company var wxUserInfo *models.WxUser productIdList := []int{1, 2} if mobile != "" { wxUserInfo, _ = models.GetWxUserByMobileCountryCode(mobile, countryCode) if wxUserInfo != nil && wxUserInfo.CompanyId != 1 { //获取客户产品信息 productId, ok := companyIdProductIdMap[wxUserInfo.CompanyId] if ok { //已经查询过 if productId > 0 { // 获取客户产品信息 key := fmt.Sprint(wxUserInfo.CompanyId, "_", productId) if tmpCompanyProductInfo, ok := companyProductMap[key]; ok { companyProductInfo = tmpCompanyProductInfo } } } else { for _, productId := range productIdList { key := fmt.Sprint(wxUserInfo.CompanyId, "_", productId) companyProductInfo, _ = models.GetCompanyProduct(wxUserInfo.CompanyId, productId) if companyProductInfo != nil { companyProductMap[key] = companyProductInfo companyIdProductIdMap[wxUserInfo.CompanyId] = productId //退出产品查询 break } } if companyProductInfo == nil { companyIdProductIdMap[wxUserInfo.CompanyId] = 0 } } // 获取客户信息 key := fmt.Sprint(wxUserInfo.CompanyId) if tmpCompanyInfo, ok := companyMap[key]; ok { companyInfo = tmpCompanyInfo } else { companyInfo, _ = models.GetCompanyById(wxUserInfo.CompanyId) if companyInfo != nil { companyMap[key] = companyInfo } } } } name := v.UserName comeinEventUserInfo := &yb.ComeinEventUser{ //ComeinUserId int `orm:"column(comein_user_id);pk" description:"自增id"` ComeinEventId: tmpComeinEvent.ComeinEventId, ComeinDataId: int(v.ID), UserId: 0, Mobile: mobile, Email: v.Email, Name: name, FirstWatchTime: time.Unix(v.FirstWatchTime/1000, 0), LastWatchTime: time.Unix(v.LastWatchTime/1000, 0), JoinTime: int(v.JoinTime), AuthInfo: v.AuthInfo, JoinType: int(v.JoinType), DataType: int(v.DataType), //RegisterTime: time.Time{}, ViewTotal: 0, //LastViewTime: time.Time{}, CompanyId: 0, ProductId: 0, CompanyName: v.Company, Occupation: v.Occupation, Status: "", SellerId: 0, SellerName: "", CompanyViewTotal: 0, CompanyRoadTotal: 0, CreateTime: time.Now(), } //这个时候是系统用户了,美滋滋 if companyProductInfo != nil { comeinEventUserInfo.RegisterTime = wxUserInfo.RegisterTime //models. userViewStatisticsInfo, _ := models.GetUserLastViewStatisticsByMobile(mobile) //用户阅读信息 if userViewStatisticsInfo != nil { comeinEventUserInfo.ViewTotal = userViewStatisticsInfo.Total comeinEventUserInfo.LastViewTime = userViewStatisticsInfo.LastViewTime } comeinEventUserInfo.UserId = int(wxUserInfo.UserId) comeinEventUserInfo.Name = wxUserInfo.RealName comeinEventUserInfo.CompanyId = companyProductInfo.CompanyId comeinEventUserInfo.ProductId = companyProductInfo.ProductId comeinEventUserInfo.CompanyName = companyInfo.CompanyName comeinEventUserInfo.Status = companyProductInfo.Status comeinEventUserInfo.SellerId = companyProductInfo.SellerId comeinEventUserInfo.SellerName = companyProductInfo.SellerName comeinEventUserInfo.CompanyViewTotal = companyProductInfo.ViewTotal comeinEventUserInfo.CompanyRoadTotal = companyProductInfo.RoadShowTotal } yb.AddComeinEventUser(comeinEventUserInfo) tmpComeinEvent.People = tmpComeinEvent.People + 1 } } for _, v := range comeinEventMap { v.Update([]string{"People"}) } return }