Browse Source

活动-列表新标签

hsun 2 years ago
parent
commit
768fa5d0ac

+ 19 - 0
controllers/activity.go

@@ -3397,12 +3397,17 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 		itemList.ImgUrlBg = "https://hzstatic.hzinsights.com/static/temp/20220427202204/20220427/OkunjfKEgo5KRLifzwwLX8cDZnnN.png"
 		list = append(list, itemList)
 	}
+
 	//获取对应活动的数量并排序
+	activityIds := make([]int, 0)	// 用于查询活动【新】标签Map
 	intArr := make([]int, 0)
 	var items []*models.ActivityTypeHome
 	for _, v := range list {
 		item := new(models.ActivityTypeHome)
 		if len(v.List) > 0 {
+			for i := range v.List {
+				activityIds = append(activityIds, v.List[i].ActivityId)
+			}
 			item.List = v.List
 			item.ActivityTypeName = v.ActivityTypeName
 			item.ActivityTypeId = v.ActivityTypeId
@@ -3414,6 +3419,20 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 		}
 	}
 	sort.Sort(sort.Reverse(sort.IntSlice(intArr)))
+
+	// 活动【新】标签Map
+	newLabelMap, e := services.GetActivityNewLabelMap(activityIds)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取活动【新】标签Map失败, Err: " + e.Error()
+		return
+	}
+	for k := range list {
+		for k2 := range list[k].List {
+			list[k].List[k2].IsNew = newLabelMap[list[k].List[k2].ActivityId]
+		}
+	}
+
 	var itemsNew []*models.ActivityTypeHome
 	activityMap := make(map[int]int)
 	for _, v := range intArr {

+ 2 - 1
models/activity.go

@@ -597,12 +597,13 @@ type CygxActivityLabelList struct {
 	IsShowSubjectName int    `description:"小程序内是否展示标的名称 1是 ,0否 默认0 "`
 	Resource          int    `description:"位置 ,1:活动 ,2:专项产业调研"`
 	TemporaryLabel    string `description:"临时标签"`
+	IsNew             bool   `description:"是否为新:活动存在关联的的产业所关联的报告均在3个月内/无报告则标记新"`
 }
 
 //主题列表
 func GetActivityLabelListAll(condition, sortTime string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityLabelList, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT	label,temporary_label,is_show_subject_name, MAX( art.activity_time ) AS timesort, MIn( art.activity_time ) AS mintimesort 
+	sql := `SELECT	activity_id, label,temporary_label,is_show_subject_name, MAX( art.activity_time ) AS timesort, MIn( art.activity_time ) AS mintimesort 
 		FROM cygx_activity as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition

+ 17 - 0
models/industrial_activity_group_management.go

@@ -66,3 +66,20 @@ func AddCygxActiuvityGroupMulti(items []*CygxIndustrialActivityGroupManagement,
 	}
 	return
 }
+
+// GetActivityIndustryRelationList 获取活动与产业关联列表
+func GetActivityIndustryRelationList(condition string, pars []interface{}) (list []*CygxIndustrialActivityGroupManagement, err error) {
+	sql := `SELECT
+				a.activity_id,
+				b.industrial_management_id
+			FROM
+				cygx_activity AS a
+			JOIN cygx_industrial_activity_group_management AS b ON a.activity_id = b.activity_id
+			WHERE
+				1 = 1 `
+	if condition != `` {
+		sql += condition
+	}
+	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	return
+}

+ 26 - 0
models/industrial_article_group_management.go

@@ -37,3 +37,29 @@ func GetIndustryArtCountByCondition(condition string, pars []interface{}) (list
 	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
 	return
 }
+
+// IndustryArticleMinMaxPublishTime 产业文章最大最小发布时间
+type IndustryArticleMinMaxPublishTime struct {
+	IndustrialManagementId int       `description:"产业ID"`
+	MinPublishTime         time.Time `description:"文章最小发布时间"`
+	MaxPublishTime         time.Time `description:"文章最大发布时间"`
+}
+
+// GetIndustryArticleMinMaxPublishTime 获取产业文章最大最小发布时间
+func GetIndustryArticleMinMaxPublishTime(condition string, pars []interface{}) (list []*IndustryArticleMinMaxPublishTime, err error) {
+	sql := `SELECT
+				a.industrial_management_id,
+				MIN(b.publish_date) AS min_publish_time,
+				MAX(b.publish_date) AS max_publish_time
+			FROM
+				cygx_industrial_article_group_management AS a
+			JOIN cygx_article AS b ON a.article_id = b.article_id
+			WHERE
+				1 = 1`
+	if condition != `` {
+		sql += condition
+	}
+	sql += `GROUP BY a.industrial_management_id`
+	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	return
+}

+ 61 - 0
services/activity.go

@@ -2,6 +2,7 @@ package services
 
 import (
 	"context"
+	"errors"
 	"fmt"
 	"github.com/tealeg/xlsx"
 	"hongze/hongze_cygx/models"
@@ -1381,3 +1382,63 @@ func ActivityButtonShow(item *models.ActivityDetail) (articleDetail *models.Acti
 
 	return
 }
+
+// GetActivityNewLabelMap 获取活动【新】标签Map
+func GetActivityNewLabelMap(activityIds []int) (labelMap map[int]bool, err error) {
+	labelMap = make(map[int]bool, 0)
+	if len(activityIds) == 0 {
+		return
+	}
+
+	// 获取活动关联的产业
+	var groupCond string
+	var groupPars []interface{}
+	groupCond += ` AND a.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)`
+	groupPars = append(groupPars, activityIds)
+	groups, e := models.GetActivityIndustryRelationList(groupCond, groupPars)
+	if e != nil {
+		err = errors.New("获取活动产业关联列表失败, Err: " + e.Error())
+		return
+	}
+	activityIndustryMap := make(map[int][]int, 0)
+	industryIds := make([]int, 0)
+	for i := range groups {
+		industryIds = append(industryIds, groups[i].IndustrialManagementId)
+		activityIndustryMap[groups[i].ActivityId] = append(activityIndustryMap[groups[i].ActivityId], groups[i].IndustrialManagementId)
+	}
+	industryIdLen := len(industryIds)
+
+	// 获取产业关联的报告最早发布时间及最近的发布时间
+	var timeCond string
+	var timePars []interface{}
+	timeCond += ` AND b.publish_status = 1`
+	if industryIdLen > 0 {
+		timeCond += ` AND a.industrial_management_id IN (` + utils.GetOrmInReplace(industryIdLen) + `)`
+		timePars = append(timePars, industryIds)
+	}
+	industryTimeList, e := models.GetIndustryArticleMinMaxPublishTime(timeCond, timePars)
+	if e != nil {
+		err = errors.New("获取产业文章最大最小发布时间失败, Err: " + e.Error())
+		return
+	}
+
+	// 判断产业是否为新
+	nowTime := time.Now().Local()
+	threeMonthBefore := nowTime.AddDate(0, -3, 0)
+	nullTime, _ := time.Parse(utils.FormatDateTime, "0001-01-01 00:00:00")
+	for i := range industryTimeList {
+		// 最早发布时间为空 / 最早发布时间在三个月前之后
+		if industryTimeList[i].MinPublishTime == nullTime || (industryTimeList[i].MinPublishTime.After(threeMonthBefore)) {
+			for k, v := range activityIndustryMap {
+				if labelMap[k] {
+					continue
+				}
+				if utils.InArrayByInt(v, industryTimeList[i].IndustrialManagementId) {
+					labelMap[k] = true
+				}
+			}
+		}
+	}
+
+	return
+}