package yb import ( "errors" "fmt" "github.com/beego/beego/v2/client/orm" "hongze/hz_crm_api/models" "hongze/hz_crm_api/models/company" "hongze/hz_crm_api/models/yb" "hongze/hz_crm_api/models/yb/request" "hongze/hz_crm_api/services" "hongze/hz_crm_api/services/alarm_msg" "hongze/hz_crm_api/services/quanshi" "hongze/hz_crm_api/utils" "strconv" "strings" "time" ) // AddActivity 添加活动 func AddActivity(req request.AddActivityReq, userId int) (activityInfo *yb.Activity, err error) { startTime, err := time.ParseInLocation(utils.FormatDateTime, req.StartTime, time.Local) if err != nil { err = errors.New(fmt.Sprint("活动开始日期转换失败:", err)) return } endTime, err := time.ParseInLocation(utils.FormatDateTime, req.EndTime, time.Local) if err != nil { err = errors.New(fmt.Sprint("活动结束日期转换失败:", err)) return } //是否限制人数 var isLimitPeople int8 if req.LimitPeopleNum > 0 { isLimitPeople = 1 } // 查询分类详情 activityType, err := yb.GetActivityTypeListById(req.ActivityTypeId) if err != nil { return } firstActivityType, err := yb.GetActivityTypeListById(activityType.Pid) if err != nil { return } //活动 activityInfo = &yb.Activity{ FirstActivityTypeId: firstActivityType.ActivityTypeId, FirstActivityTypeName: firstActivityType.ActivityTypeName, ActivityTypeId: req.ActivityTypeId, ActivityTypeName: req.ActivityTypeName, //ChartPermissionId int `description:"对应的权限id,表chart_permission中id"` //ChartPermissionName string `description:"对应的权限名称,表chart_permission中name"` ActivityName: utils.TrimStr(req.ActivityName), StartTime: startTime, EndTime: endTime, Speaker: req.Speaker, SpeakerHeadPic: req.SpeakerHeadPic, SpeakerBackgroundPic: getBackgroundPic(firstActivityType.ActivityTypeId), MainlandTel: req.MainlandTel, HongKongTel: req.HongKongTel, TaiwanTel: req.TaiwanTel, AmericaTel: req.AmericaTel, SingaporeTel: req.SingaporeTel, ParticipationCode: req.ParticipationCode, LinkParticipants: req.LinkParticipants, IsLimitPeople: isLimitPeople, LimitPeopleNum: req.LimitPeopleNum, ReportId: req.ReportId, ReportLink: req.ReportLink, ReportName: utils.TrimStr(req.ReportName), City: req.City, Address: req.Address, //VoiceUrl :req.Vi //Remarks :req.Remarks, UserId: userId, PublishStatus: req.PublishStatus, //ActiveStatus int8 `description:"活动进行状态 未开始:1、进行中2、已结束3"` IsSendWxMsg: 0, IsSendSalonWxMsg: 0, //ArticleId int `description:"报告链接所关联的文章ID"` ModifyTime: time.Now(), CreateTime: time.Now(), IsNewReport: req.IsNewReport, } //活动海报 activityPosterList := make([]*yb.ActivityPoster, 0) for _, v := range req.PosterList { tmpPoster := &yb.ActivityPoster{ //ActivityId: activityInfo.ActivityId, Url: v.Url, Name: v.Name, CreateTime: time.Now(), } activityPosterList = append(activityPosterList, tmpPoster) } // 权限列表 activityPermissionList := make([]*yb.ActivityPermission, 0) permissionIdList := make([]int, 0) if activityInfo.FirstActivityTypeId == 1 { //电话会这种,直接从数据库里面读取权限配置 activityType, tmpErr := yb.GetActivityTypeListById(activityInfo.ActivityTypeId) if tmpErr != nil { err = fmt.Errorf("查询分类权限失败,Err:", tmpErr) return } if activityType.ChartPermissionId != "" { permissionIds := strings.Split(activityType.ChartPermissionId, ",") for _, val := range permissionIds { permissionId, _ := strconv.Atoi(val) permissionIdList = append(permissionIdList, permissionId) } } } else { permissionIdList = req.PermissionIdList } if len(permissionIdList) > 0 { permissionList, tmpErr := company.GetChartPermissionListByIds(permissionIdList) if tmpErr != nil { err = fmt.Errorf("查询权限失败,Err:", tmpErr) return } for _, v := range permissionList { tmpPermission := &yb.ActivityPermission{ PermissionId: v.ChartPermissionId, PermissionName: v.PermissionName, CreateTime: time.Now(), } activityPermissionList = append(activityPermissionList, tmpPermission) } } //新增活动 err = yb.AddNewActivity(activityInfo, activityPosterList, activityPermissionList) //推送报告给同花顺 //if activityInfo.ReportLink != `` && activityInfo.PublishStatus == 1 { // go services.SendActivityToThs(activityInfo) //} return } // EditActivity 编辑活动 func EditActivity(req request.EditActivityReq) (activityInfo *yb.Activity, err error, errMsg string) { startTime, err := time.ParseInLocation(utils.FormatDateTime, req.StartTime, time.Local) if err != nil { err = errors.New(fmt.Sprint("活动开始日期转换失败:", err)) return } endTime, err := time.ParseInLocation(utils.FormatDateTime, req.EndTime, time.Local) if err != nil { err = errors.New(fmt.Sprint("活动结束日期转换失败:", err)) return } activityInfo, err = yb.GetById(req.ActivityId) if err != nil { if err.Error() == utils.ErrNoRow() { errMsg = "找不到该活动" } return } oldActivityInfo := *activityInfo //修改前的数据 // 活动已结束去除所有时间限制 now := time.Now() if oldActivityInfo.EndTime.After(now) { /*if now.After(startTime) { err = errors.New(fmt.Sprint("活动时间不允许小于当前时间!", err)) errMsg = "活动时间不允许小于当前时间!" return }*/ if startTime.After(endTime) { err = errors.New(fmt.Sprint("活动结束时间不允许小于开始时间!", err)) errMsg = "活动结束时间不允许小于开始时间!" return } allowEndTime := startTime.Add(30 * time.Minute) if allowEndTime.After(endTime) { err = errors.New(fmt.Sprint("活动结束时间至少要在开始时间半个小时之后!", err)) errMsg = "活动结束时间至少要在开始时间半个小时之后!" return } } //是否限制人数 var isLimitPeople int8 if req.LimitPeopleNum > 0 { isLimitPeople = 1 } req.ReportLink = utils.TrimStr(req.ReportLink) updateCols := make([]string, 0) activityInfo.ActivityName = utils.TrimStr(req.ActivityName) activityInfo.StartTime = startTime activityInfo.EndTime = endTime activityInfo.Speaker = req.Speaker activityInfo.SpeakerHeadPic = req.SpeakerHeadPic activityInfo.SpeakerBackgroundPic = getBackgroundPic(activityInfo.FirstActivityTypeId) activityInfo.MainlandTel = req.MainlandTel activityInfo.HongKongTel = req.HongKongTel activityInfo.TaiwanTel = req.TaiwanTel activityInfo.AmericaTel = req.AmericaTel activityInfo.SingaporeTel = req.SingaporeTel activityInfo.ParticipationCode = req.ParticipationCode activityInfo.LinkParticipants = req.LinkParticipants activityInfo.IsLimitPeople = isLimitPeople activityInfo.ReportId = req.ReportId activityInfo.LimitPeopleNum = req.LimitPeopleNum activityInfo.ReportLink = req.ReportLink activityInfo.ReportName = utils.TrimStr(req.ReportName) activityInfo.City = req.City activityInfo.Address = req.Address ////VoiceUrl :req.Vi activityInfo.Remarks = req.Remarks activityInfo.IsNewReport = req.IsNewReport //发布 if req.PublishStatus >= 1 { activityInfo.PublishStatus = req.PublishStatus updateCols = append(updateCols, "PublishStatus") } activityInfo.ModifyTime = time.Now() ////ActiveStatus int8 `description:"活动进行状态 未开始:1、进行中2、已结束3"` ////ArticleId int `description:"报告链接所关联的文章ID"` //更新 updateCols = append(updateCols, "ActivityName", "StartTime", "EndTime", "Speaker", "SpeakerHeadPic", "SpeakerBackgroundPic", "MainlandTel", "HongKongTel", "TaiwanTel", "AmericaTel", "SingaporeTel", "ParticipationCode", "LinkParticipants", "IsLimitPeople", "LimitPeopleNum", "ReportLink", "ReportName", "ReportId", "City", "Address", "Remarks", "ModifyTime", "IsNewReport") //插入新的海报文件 activityPosterList := make([]*yb.ActivityPoster, 0) for _, v := range req.PosterList { tmpPoster := &yb.ActivityPoster{ ActivityId: activityInfo.ActivityId, Url: v.Url, Name: v.Name, CreateTime: time.Now(), } activityPosterList = append(activityPosterList, tmpPoster) } //插入新的音频文件 activityVoiceList := make([]*yb.ActivityVoice, 0) for _, v := range req.VoiceList { tmpVoice := &yb.ActivityVoice{ ActivityId: activityInfo.ActivityId, VoiceUrl: v.Url, VoiceName: v.Name, VoicePlaySeconds: v.PlaySeconds, CreateTime: time.Now(), } activityVoiceList = append(activityVoiceList, tmpVoice) } // 权限列表 activityPermissionList := make([]*yb.ActivityPermission, 0) permissionIdList := make([]int, 0) if activityInfo.FirstActivityTypeId == 1 { //电话会这种,直接从数据库里面读取权限配置 activityType, tmpErr := yb.GetActivityTypeListById(activityInfo.ActivityTypeId) if tmpErr != nil { err = fmt.Errorf("查询分类权限失败,Err:", tmpErr) return } if activityType.ChartPermissionId != "" { permissionIds := strings.Split(activityType.ChartPermissionId, ",") for _, val := range permissionIds { permissionId, _ := strconv.Atoi(val) permissionIdList = append(permissionIdList, permissionId) } } } else { permissionIdList = req.PermissionIdList } if len(permissionIdList) > 0 { permissionList, tmpErr := company.GetChartPermissionListByIds(permissionIdList) if tmpErr != nil { err = fmt.Errorf("查询权限失败,Err:", tmpErr) return } for _, v := range permissionList { tmpPermission := &yb.ActivityPermission{ ActivityId: activityInfo.ActivityId, PermissionId: v.ChartPermissionId, PermissionName: v.PermissionName, CreateTime: time.Now(), } activityPermissionList = append(activityPermissionList, tmpPermission) } } err = activityInfo.UpdateActivity(updateCols, activityPosterList, activityVoiceList, activityPermissionList) if err != nil { return } //变更提醒(活动已经发布了) if oldActivityInfo.PublishStatus >= 1 { go sendWxMsg(oldActivityInfo, activityInfo) } //推送报告给同花顺 //if activityInfo.ReportLink != `` && activityInfo.PublishStatus == 1 { // go services.SendActivityToThs(activityInfo) //} // 如果开始时间/活动标题有过变更,那么需要去修改全时会议 if !oldActivityInfo.StartTime.Equal(activityInfo.StartTime) || oldActivityInfo.ActivityName != activityInfo.ActivityName { go updateQsEvent(activityInfo) } return } // PublishActivity 发布活动 func PublishActivity(activityId int) (activityInfo *yb.Activity, err error, errMsg string) { activityInfo, err = yb.GetById(activityId) if err != nil { if err.Error() == utils.ErrNoRow() { errMsg = "找不到该活动" } return } if activityInfo.PublishStatus == 1 { err = errors.New("该活动已发布") errMsg = "该活动已发布" return } updateCols := make([]string, 0) //发布 activityInfo.PublishStatus = 1 activityInfo.ModifyTime = time.Now() //更新 updateCols = append(updateCols, "PublishStatus", "ModifyTime") err = activityInfo.Update(updateCols) //推送同花顺报告 //if activityInfo.ReportLink != `` && activityInfo.PublishStatus == 1 { // go services.SendActivityToThs(activityInfo) //} return } // UnPublishActivity 取消发布活动 func UnPublishActivity(activityId int) (activityInfo *yb.Activity, err error, errMsg string) { activityInfo, err = yb.GetById(activityId) if err != nil { if err.Error() == utils.ErrNoRow() { errMsg = "找不到该活动" } return } if activityInfo.PublishStatus == 0 { err = errors.New("该活动未发布") errMsg = "该活动未发布" return } oldActivityInfo := *activityInfo o := orm.NewOrm() to, err := o.Begin() if err != nil { return } defer func() { if err != nil { _ = to.Rollback() } else { _ = to.Commit() } }() // 1.取消发布活动 activityInfo.PublishStatus = 0 activityInfo.ModifyTime = time.Now() updateCols := make([]string, 0) updateCols = append(updateCols, "PublishStatus", "ModifyTime") err = activityInfo.Update(updateCols) if err != nil { err = errors.New("取消发布失败") errMsg = "取消发布失败" return } // 2.更新该活动所有报名为取消报名 err = yb.CancelActivityRegisters(activityId) if err != nil { err = errors.New("取消报名信息失败") errMsg = "取消报名信息失败" return } // 3.清除所有活动提醒 err = yb.DelActivityReminds(activityId) if err != nil { err = errors.New("清除活动提醒失败") errMsg = "清除活动提醒失败" return } // 4.变更提醒 go sendWxMsg(oldActivityInfo, activityInfo) // 取消全时会议 go cancelQsEvent(activityInfo) return } // DelActivity 删除活动 func DelActivity(activityId int) (activityInfo *yb.Activity, err error, errMsg string) { activityInfo, err = yb.GetById(activityId) if err != nil { if err.Error() == utils.ErrNoRow() { errMsg = "找不到该活动" } return } if activityInfo.IsDelete == 1 { err = errors.New("该活动不存在") errMsg = "该活动不存在" return } updateCols := make([]string, 0) //发布 activityInfo.IsDelete = 1 activityInfo.ModifyTime = time.Now() //更新 updateCols = append(updateCols, "IsDelete", "ModifyTime") err = activityInfo.Update(updateCols) return } // sendWxMsg 发送微信消息 func sendWxMsg(oldActivityInfo yb.Activity, activityInfo *yb.Activity) (err error) { defer func() { if err != nil { fmt.Println(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送电话会提醒失败 ErrMsg:"+err.Error()) //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "发送电话会提醒失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers) } }() // 如果活动结束时间小于现在,那么也不提醒 if activityInfo.EndTime.Before(time.Now()) { return } //不是我们主持的会议或者沙龙,那么就不通知 if activityInfo.FirstActivityTypeId != 1 && activityInfo.FirstActivityTypeId != 3 { return } var isUpdateTime, isUpdateAddress, isCancel bool //是否更改时间,是否更改地址 if activityInfo.StartTime != oldActivityInfo.StartTime || activityInfo.EndTime != oldActivityInfo.EndTime { isUpdateTime = true } if activityInfo.Address != oldActivityInfo.Address { isUpdateAddress = true } //活动取消 if activityInfo.PublishStatus != oldActivityInfo.PublishStatus && activityInfo.PublishStatus == 0 { isCancel = true } //您有一场【橡胶双周报】发生了时间变更 firstUpdateStr := "" detailUpdateStr := `` if isUpdateTime && isUpdateAddress { firstUpdateStr = `发生了时间变更、活动地址变更` detailUpdateStr = `原定时间【` + formatActivityTimeStr(oldActivityInfo.StartTime, oldActivityInfo.EndTime) + `】变更为【` + formatActivityTimeStr(activityInfo.StartTime, activityInfo.EndTime) + `】,原定活动地址【` + oldActivityInfo.Address + `】变更为【` + activityInfo.Address + `】` } else if isUpdateTime { firstUpdateStr = `发生了时间变更` detailUpdateStr = `原定时间【` + formatActivityTimeStr(oldActivityInfo.StartTime, oldActivityInfo.EndTime) + `】变更为【` + formatActivityTimeStr(activityInfo.StartTime, activityInfo.EndTime) + `】` } else if isUpdateAddress { firstUpdateStr = `发生了活动地址变更` detailUpdateStr = `原定活动地址【` + oldActivityInfo.Address + `】变更为【` + activityInfo.Address + `】` } else if isCancel { firstUpdateStr = `已取消` detailUpdateStr = `已取消` } else { return } //您有一场【橡胶双周报】将在15分钟后开始 userIdList := make([]string, 0) //提醒用户列表 //电话会 if activityInfo.FirstActivityTypeId == 1 { list, tmpErr := yb.GetAllActivityRemindListByActivityId(activityInfo.ActivityId) if tmpErr != nil { err = tmpErr return } for _, v := range list { userIdList = append(userIdList, fmt.Sprint(v.UserId)) } } else { //沙龙 //提醒 list, tmpErr := yb.GetAllActivityRemindListByActivityId(activityInfo.ActivityId) if tmpErr != nil { err = tmpErr return } for _, v := range list { userIdList = append(userIdList, fmt.Sprint(v.UserId)) } //线下报名 list2, tmpErr := yb.GetAllActivityRegisterListByActivityId(activityInfo.ActivityId) if tmpErr != nil { err = tmpErr return } for _, v := range list2 { userIdList = append(userIdList, fmt.Sprint(v.UserId)) } } if len(userIdList) <= 0 { return } first := `您有一场【` + activityInfo.ActivityTypeName + `】` + firstUpdateStr keyword1 := activityInfo.ActivityName keyword2 := detailUpdateStr remark := `` //小程序跳转地址 wxAppPath := `` //如果不是已取消,那么需要让他跳转到详情 if !isCancel { wxAppPath = `pages-activity/detail?id=` + fmt.Sprint(activityInfo.ActivityId) remark = `点击查看活动详情` } //由于测试环境小程序没有发布,模板消息设置了小程序跳转地址,会导致模板消息发送失败 if utils.RunMode == `debug` { wxAppPath = `` } //获取所有用户的openid列表 openidList, err := models.GetUserOpenidListByUserIds(userIdList) if err != nil { return } err = services.SendWxMsgWithActivityAppointmentRemind(first, keyword1, keyword2, remark, wxAppPath, openidList) return } // formatActivityTimeStr 格式化活动的开始结束时间 func formatActivityTimeStr(startTime, endTime time.Time) string { startStr := startTime.Format("2006-01-02 15:04") endStr := endTime.Format("15:04") weekStr := `` weekInt := startTime.Weekday() switch weekInt { case 0: weekStr = `星期日` case 1: weekStr = `星期一` case 2: weekStr = `星期二` case 3: weekStr = `星期三` case 4: weekStr = `星期四` case 5: weekStr = `星期五` case 6: weekStr = `星期六` } return startStr + `-` + endStr + ` ` + weekStr } // getBackgroundPic 获取活动背景图 func getBackgroundPic(typeId int) (pic string) { if typeId <= 2 { //电话会议 pic = `https://hongze.oss-accelerate.aliyuncs.com/static/images/202112/20211214/nNSTxmH6lxlT0PAp7xcfJJTGX9Gu.png` } else { //线下沙龙 pic = `https://hongze.oss-accelerate.aliyuncs.com/static/images/202112/20211214/k77gDxvFvuAnYUhF6PU1FOVDHI8O.png` } return } // CreateQsEvent 创建全时会议 func CreateQsEvent(req request.CreateQsReq) (err error, errMsg string) { activityInfo, err := yb.GetById(req.ActivityId) if err != nil { if err.Error() == utils.ErrNoRow() { errMsg = "活动信息不存在" } else { errMsg = "活动详情获取失败" } return } //获取最近一条全时会议信息 qsEventInfo, err := yb.GetLastQsEventByActivityId(req.ActivityId) if err != nil && err.Error() != utils.ErrNoRow() { errMsg = "获取全时信息异常!" return } if qsEventInfo != nil { if qsEventInfo.Status == 1 { errMsg = "全时会议已创建,请勿重复创建!" return } else if qsEventInfo.Status == 2 { qsEventInfo = nil } } //创建全时会议 startTime := activityInfo.StartTime if startTime.Before(time.Now()) { //如果开始时间早于现在,那么就以现在的时间往后推迟10s作为会议开始时间 startTime = time.Now().Add(10 * time.Second) } paramStr := fmt.Sprintf(`activity_id=%d&time=%d`, activityInfo.ActivityId, time.Now().Unix()) signStr := quanshi.GetSign(paramStr) paramStr += `&sign=` + signStr callbackUrl := `http://8.136.199.33:8608/api/quanshi/callback?` + paramStr if utils.RunMode == "release" { callbackUrl = `https://openapi.hzinsights.com/api/quanshi/callback?` + paramStr } qsResp, err := quanshi.QsEventCreate(activityInfo.ActivityName, req.Time, 1, startTime, callbackUrl) if err != nil { errMsg = "请求全时接口异常" return } if qsEventInfo != nil { qsEventInfo.QsEventId = int(qsResp.EventID) qsEventInfo.StartTime = startTime qsEventInfo.EndTime = startTime.Add(time.Duration(req.Time*60) * time.Second) qsEventInfo.ModifyTime = time.Now() qsEventInfo.Status = 1 err = qsEventInfo.Update([]string{"QsEventId", "StartTime", "EndTime", "ModifyTime", "Status"}) } else { qsEventInfo = &yb.QsEvent{ YbActivityId: req.ActivityId, QsEventId: int(qsResp.EventID), StartTime: startTime, EndTime: startTime.Add(time.Duration(req.Time*60) * time.Second), Time: req.Time, Status: 1, ModifyTime: time.Now(), CreateTime: time.Now(), } err = yb.AddQsEvent(qsEventInfo) } if err != nil { go alarm_msg.SendAlarmMsg("全时会议创建成功,变更全时记录表信息失败;ERR:"+err.Error(), 3) errMsg = "保存活动失败!" return } //变更参会信息 activityInfo.HostCode = qsResp.Pcode1 activityInfo.ParticipationCode = qsResp.Pcode2 activityInfo.LinkParticipants = qsResp.AttendeeJoinURL activityInfo.QsId = qsEventInfo.QsId err = activityInfo.Update([]string{"HostCode", "ParticipationCode", "LinkParticipants", "QsId"}) if err != nil { go alarm_msg.SendAlarmMsg("全时会议创建成功,变更参会信息失败;ERR:"+err.Error(), 3) } return } // CancelQsEvent 取消全时会议 func CancelQsEvent(activityId int) (err error, errMsg string) { activityInfo, err := yb.GetById(activityId) if err != nil { if err.Error() == utils.ErrNoRow() { errMsg = "找不到该活动!" } else { errMsg = "获取活动信息异常!" } return } err, errMsg = cancelQsEvent(activityInfo) return } // cancelQsEvent 取消全时会议 func cancelQsEvent(activityInfo *yb.Activity) (err error, errMsg string) { qsEventInfo, err := yb.GetQsEventByActivityId(activityInfo.ActivityId) if err != nil { errMsg = "获取全时信息异常!" return } //取消全时会议 err = quanshi.QsEventCancel(qsEventInfo.QsEventId) if err != nil { errMsg = "取消全时会议失败!" return } //变更全时会议同步状态 qsEventInfo.Status = 2 err = qsEventInfo.Update([]string{"Status"}) if err != nil { errMsg = "取消会议失败!" return } //变更活动关联关系id activityInfo.QsId = 0 activityInfo.HostCode = "" activityInfo.ParticipationCode = "" activityInfo.LinkParticipants = "" err = activityInfo.Update([]string{"QsId", "HostCode", "ParticipationCode", "LinkParticipants"}) if err != nil { errMsg = "取消会议失败!" return } return } // updateQsEvent 修改全时会议 func updateQsEvent(activityInfo *yb.Activity) (err error, errMsg string) { //获取最近一条全时会议信息 qsEventInfo, err := yb.GetLastQsEventByActivityId(activityInfo.ActivityId) if err != nil && err.Error() != utils.ErrNoRow() { errMsg = "获取全时信息异常!" return } if qsEventInfo == nil { errMsg = "没有创建全时会议!" err = errors.New("没有创建全时会议") return } //变更全时会议信息 startTime := activityInfo.StartTime if startTime.Before(time.Now()) { //如果开始时间早于现在,那么就以现在的时间往后推迟10s作为会议开始时间 startTime = time.Now().Add(10) } _, err = quanshi.QsEventUpdate(qsEventInfo.QsEventId, qsEventInfo.Time, activityInfo.ActivityName, startTime) if err != nil { errMsg = "请求全时接口异常" return } return } func SyncUser(qsEventId int) { //qsEventId := 6631607 qsEventInfo, err := yb.GetQsEventByQsEventId(qsEventId) if err != nil { return } if qsEventInfo.IsSync == 1 { return } //获取全时的参会人员信息 qsData, err := quanshi.QsEventReportSummary(qsEventId) if err != nil { fmt.Println(err) return } fmt.Println(qsData) //获取全时录制的流媒体信息 qsVideoData, err := quanshi.QsEventReportQueryVideo(int64(qsEventId)) if err != nil { fmt.Println(err) return } fmt.Println(qsData) if qsData.Summary != nil && len(qsData.Summary) > 0 { for _, v := range qsData.Summary { fmt.Println(v) mobile := v.Mobile trimMobile := mobile countryCode := "86" var companyProductInfo *company.CompanyProduct var wxUserInfo *models.WxUser if mobile != "" { trimMobileSlice := strings.Split(v.Mobile, "-") lenTrimMobileSlice := len(trimMobileSlice) if lenTrimMobileSlice > 1 { trimMobile = trimMobileSlice[1] countryCode = strings.Replace(trimMobileSlice[0], "+", "", -1) } fmt.Println(trimMobile) fmt.Println(countryCode) wxUserInfo, _ = models.GetWxUserByMobileCountryCode(trimMobile, countryCode) if wxUserInfo != nil { companyProductInfo, _ = company.GetCompanyProductByCompanyIdAndProductId(wxUserInfo.CompanyId, 1) } } qsEventUserInfo := &yb.QsEventUser{ QsId: qsEventInfo.QsId, UserId: 0, Mobile: v.Mobile, Email: v.Email, Name: v.Name, //RegisterTime: time.Time{}, ViewTotal: 0, //LastViewTime: time.Time{}, CompanyId: 0, ProductId: 0, CompanyName: "", Status: "", SellerId: 0, SellerName: "", CompanyViewTotal: 0, CompanyRoadTotal: 0, CreateTime: time.Now(), } //这个时候是系统用户了,美滋滋 if companyProductInfo != nil { qsEventUserInfo.RegisterTime = wxUserInfo.RegisterTime userViewStatisticsInfo, _ := models.GetUserViewStatisticsByMobile(trimMobile) //用户阅读信息 if userViewStatisticsInfo != nil { qsEventUserInfo.ViewTotal = userViewStatisticsInfo.Total qsEventUserInfo.LastViewTime = userViewStatisticsInfo.LastViewTime } qsEventUserInfo.CompanyId = companyProductInfo.CompanyId qsEventUserInfo.ProductId = companyProductInfo.ProductId qsEventUserInfo.CompanyName = companyProductInfo.ProductName qsEventUserInfo.Status = companyProductInfo.Status qsEventUserInfo.SellerId = companyProductInfo.SellerId qsEventUserInfo.SellerName = companyProductInfo.SellerName qsEventUserInfo.CompanyViewTotal = companyProductInfo.ViewTotal qsEventUserInfo.CompanyRoadTotal = companyProductInfo.RoadShowTotal } _ = yb.AddQsEventUser(qsEventUserInfo) } } videoUrl := `` for k, v := range qsVideoData.Records { if k == strconv.Itoa(qsEventId) { videoUrl = v.VideoURL } } qsEventInfo.VideoUrl = videoUrl qsEventInfo.IsSync = 1 qsEventInfo.QsStatus = 2 err = qsEventInfo.Update([]string{"VideoUrl", "IsSync"}) }