package services import ( "errors" "fmt" "hongze/hongze_clpt/models" "hongze/hongze_clpt/utils" "time" ) //根据行业处理所选的全部赛道字段 func DoXzsChooseSend(chartPermissionName string) string { var allIn string if chartPermissionName == utils.YI_YAO_NAME { allIn = "all_in_yi_yao" } else if chartPermissionName == utils.XIAO_FEI_NAME { allIn = "all_in_xiao_fei" } else if chartPermissionName == utils.KE_JI_NAME { allIn = "all_in_ke_ji" } else if chartPermissionName == utils.ZHI_ZAO_NAME { allIn = "all_in_zhi_zao" } else if chartPermissionName == utils.CHART_PERMISSION_NAME_MF_YANXUAN { allIn = "all_in_yan_xuan" } return allIn } //行业关注或者取消关注的时候,对于用户全部赛道的影响 func IndustryFllowWithTrack(industrialManagementId, count, uid int) (err error) { defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg("修改行业关注或者取消关注的时候,对于用户全部赛道的影响信息失败"+err.Error(), 2) go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "修改行业关注或者取消关注的时候,对于用户全部赛道的影响信息失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers) } }() detail, err := models.GetIndustrialManagementDetail(industrialManagementId) if err != nil { return err } categoryinfo, err := models.GetChartPermissionById(detail.ChartPermissionId) if err != nil { return err } var allIn string allIn = DoXzsChooseSend(categoryinfo.PermissionName) if allIn != "" { //如果取消关注就把该赛道设置为非全部赛道 if count == 1 { err = models.UpdateCygxXzsChooseSendIsAllIn(allIn, 0, uid) if err != nil { return err } } else { //医药、消费、科技、智造、研选下的产业赛道 mapIndustrial := make(map[int][]*models.IndustrialManagementRep) industrialList, err := models.GetindustrialManagement() if err != nil { return err } for _, v := range industrialList { mapIndustrial[v.ChartPermissionId] = append(mapIndustrial[v.ChartPermissionId], v) } fllowNum, err := models.GetCountCygxIndustryFllowByUidAndChartPermissionId(uid, detail.ChartPermissionId) if err != nil { return err } if fllowNum == len(mapIndustrial[detail.ChartPermissionId]) { err = models.UpdateCygxXzsChooseSendIsAllIn(allIn, 1, uid) if err != nil { return err } } } } return err } //HandleIndustryList预处理产业列表字段 func HandleIndustryList(list []*models.IndustrialManagement, user *models.WxUserItem) (items []*models.IndustrialManagement, err error) { userId := user.UserId fllowList, err := models.GetUserFllowIndustrialList(userId) if err != nil { return } fllowMap := make(map[int]int) if len(fllowList) > 0 { for _, v := range fllowList { fllowMap[v.IndustrialManagementId] = v.IndustrialManagementId } } mapindustrialId, e := GetMicroRoadshowVideoMap() if e != nil { err = e return } //合并产业关联的标的 listSubjcet, err := models.GetThemeHeatSubjectList("") if err != nil { return } industrialIdArr := make([]int, 0) for k, v := range list { list[k].Source = 1 if fllowMap[v.IndustrialManagementId] > 0 { list[k].IsFollow = true } industrialIdArr = append(industrialIdArr, v.IndustrialManagementId) if _, ok := mapindustrialId[v.IndustrialManagementId]; !ok { continue } videoSimple, au, e := GetindustryVideo(user, v.IndustrialManagementId) if e != nil { err = errors.New("获取产业关联的视频失败,GetindustryVideo " + e.Error()) return } if videoSimple != nil && videoSimple.Id > 0 { v.IndustryVideo = videoSimple } v.AuthInfo = au } mapUPdateTime := make(map[int]string) mapHistroyArticleId := make(map[int]int) if len(industrialIdArr) > 0 { //合并产业关联的标的 listSubjcet, err = models.GetIndustrialSubjectAllByIndustrialId(industrialIdArr) if err != nil { return } mapIndustrial := make(map[string]int) for _, v := range listSubjcet { for k2, v2 := range list { if v2.IndustrialManagementId == v.IndustrialManagementId && mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Hz", v.SubjectName)] == 0 { list[k2].IndustrialSubjectList = append(list[k2].IndustrialSubjectList, v) mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Hz", v.SubjectName)] = v2.IndustrialManagementId } } } articleIdArr := make([]int, 0) //获取这些产业下最新更新的文章 if len(industrialIdArr) > 0 { listUpdateTime, e := models.GetNewArticleDetailByIndustrialIds(industrialIdArr) if e != nil && e.Error() != utils.ErrNoRow() { err = e return } for _, v := range listUpdateTime { mapUPdateTime[v.IndustrialManagementId] = v.PublishDate articleIdArr = append(articleIdArr, v.ArticleId) } } //时间线的更新时间 // maptimelineUPdateTime := make(map[int]string) listtimelinePublishdate, e := models.GetTimeLineReportIndustrialPublishdateList(industrialIdArr) if e != nil && e.Error() != utils.ErrNoRow() { err = e return } for _, v := range listtimelinePublishdate { if mapUPdateTime[v.IndustrialManagementId] != "" { if utils.StrTimeToTime(v.PublishDate).After(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) { mapUPdateTime[v.IndustrialManagementId] = v.PublishDate } } } if userId > 0 { listArticleHistory, e := models.GetUserToArticleHistory(userId, industrialIdArr) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("获取产业关联的视频失败,GetindustryVideo " + e.Error()) return } for _, v := range listArticleHistory { mapHistroyArticleId[v.ArticleId] = v.ArticleId } } } nowTime := time.Now().Local() threeMonBefore := nowTime.AddDate(0, -3, 0) for k, v := range list { list[k].UpdateTime = utils.TimeRemoveHms(mapUPdateTime[v.IndustrialManagementId]) if userId > 0 { //如果文章没有阅读,而且,文章的发布时间晚于项目的上线时间,而且文章的发布时间晚于用户的注册时间,就进行标红处理 if mapHistroyArticleId[v.ArticleId] == 0 && user.CreatedTime.Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) { list[k].IsRed = true } } else { if utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) { list[k].IsRed = true } list[k].IsFollow = false } list[k].UpdateTime = utils.TimeRemoveHms(mapUPdateTime[v.IndustrialManagementId]) if userId > 0 { //如果文章没有阅读,而且,文章的发布时间晚于项目的上线时间,而且文章的发布时间晚于用户的注册时间,就进行标红处理 if mapHistroyArticleId[v.ArticleId] == 0 && user.CreatedTime.Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) { list[k].IsRed = true } } else { if utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) { list[k].IsRed = true } list[k].IsFollow = false } // 关联报告发布时间均在3个月内则标记New if v.MinReportTime != "" { t, e := time.Parse(utils.FormatDateTime, v.MinReportTime) if e != nil { err = errors.New("报告最早发布时间有误,GetindustryVideo " + e.Error()) return } if t.After(threeMonBefore) { list[k].IsNew = true } } } items = list return }