浏览代码

修改英文报告分类

xyxie 1 年之前
父节点
当前提交
132b5c714b

+ 86 - 18
controller/english_report/english_report.go

@@ -36,6 +36,7 @@ func (er *EnglishReportController) List(c *gin.Context) {
 	page.SetPageSize(req.PageSize)
 	page.SetCurrent(req.Current)
 	item := new(english_report.Report)
+	enClassify := new(english_classify.Classify)
 
 	condition := " state=2"
 	var pars []interface{}
@@ -51,6 +52,21 @@ func (er *EnglishReportController) List(c *gin.Context) {
 		condition += " and classify_id_second = ?"
 		pars = append(pars, req.ClassifyIdSecond)
 	}
+	if req.ClassifyIdRoot > 0 && req.ClassifyIdFirst == 0 && req.ClassifyIdSecond == 0 {
+		//查询顶级分类下的所有二级分类
+		secondClassify, err := enClassify.GetSecondChild(req.ClassifyIdRoot)
+		if err != nil {
+			resp.FailMsg("获取分类失败", "获取分类信息失败,Err:"+err.Error(), c)
+			return
+		}
+		var classifyIdFirstSlice []int
+		for _, v := range secondClassify {
+			classifyIdFirstSlice = append(classifyIdFirstSlice, v.Id)
+		}
+
+		condition += " and classify_id_first in (?)"
+		pars = append(pars, classifyIdFirstSlice)
+	}
 	page.AddOrderItem(base.OrderItem{Column: "publish_time", Asc: false})
 	page.AddOrderItem(base.OrderItem{Column: "id", Asc: false})
 	total, tmpList, err = item.SelectPage(page, condition, pars)
@@ -59,7 +75,25 @@ func (er *EnglishReportController) List(c *gin.Context) {
 		return
 	}
 	if len(tmpList) > 0 {
+		var thirdIds []int
+		for _, v := range tmpList {
+			thirdIds = append(thirdIds, v.ClassifyIdSecond)
+		}
+		//查询分类详情
+		nameList, err := enClassify.GetEnglishClassifyFullNameByIds(thirdIds)
+		if err != nil {
+			resp.FailMsg("获取分类失败", "获取分类信息失败,Err:"+err.Error(), c)
+			return
+		}
+		classifyMap := make(map[int]*english_classify.EnglishClassifyFullName)
+		for _, v := range nameList {
+			classifyMap[v.Id] = v
+		}
 		for _, v := range tmpList {
+			classifyInfo := new(english_classify.EnglishClassifyFullName)
+			if cv, ok := classifyMap[v.ClassifyIdSecond]; ok {
+				classifyInfo = cv
+			}
 			tmp := &english_report.ReportListItem{
 				Id:                 v.Id,
 				AddType:            v.AddType,
@@ -73,6 +107,7 @@ func (er *EnglishReportController) List(c *gin.Context) {
 				Frequency:          v.Frequency,
 				PublishTime:        utils.TimeTransferString(utils.FormatDateTime, v.PublishTime),
 				Stage:              v.Stage,
+				Overview:           v.Overview,
 				VideoUrl:           v.VideoUrl,
 				VideoName:          v.VideoName,
 				VideoPlaySeconds:   v.VideoPlaySeconds,
@@ -80,6 +115,8 @@ func (er *EnglishReportController) List(c *gin.Context) {
 				ShareUrl:           "https://share.hzinsights.com/reportEn?code=" + v.ReportCode,
 				CreateTime:         utils.TimeTransferString(utils.FormatDateTime, v.CreateTime),
 				ModifyTime:         utils.TimeTransferString(utils.FormatDateTime, v.ModifyTime),
+				ClassifyIdRoot:     classifyInfo.RootId,
+				ClassifyNameRoot:   classifyInfo.RootName,
 			}
 			list = append(list, tmp)
 		}
@@ -92,7 +129,7 @@ func (er *EnglishReportController) List(c *gin.Context) {
 }
 
 func (er *EnglishReportController) Classify(c *gin.Context) {
-	req := new(english_classify.ClassifyReq)
+	/*req := new(english_classify.ClassifyReq)
 	err := c.BindQuery(&req)
 	if err != nil {
 		errs, ok := err.(validator.ValidationErrors)
@@ -102,34 +139,64 @@ func (er *EnglishReportController) Classify(c *gin.Context) {
 		}
 		resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
 		return
-	}
+	}*/
 	item := new(english_classify.Classify)
-	parentList, err := item.GetParent(req.ClassifyType)
+	parentList, err := item.GetParent()
 	if err != nil {
 		resp.FailMsg("获取失败", "获取失败,Err:"+err.Error(), c)
 		return
 	}
-	childList, err := item.GetChild(req.ClassifyType)
+	childList, err := item.GetChild()
 	if err != nil {
 		resp.FailMsg("获取失败", "获取失败,Err:"+err.Error(), c)
 		return
 	}
-	parentMap := make(map[int][]*english_classify.ClassifyItem, 0)
+	rootMap := make(map[int][]*english_classify.ClassifyListItem, 0)
+	secondMap := make(map[int][]*english_classify.ClassifyListItem, 0)
+
 	for _, v := range childList {
-		tmp := &english_classify.ClassifyItem{
-			Id:            v.Id,
-			ClassifyName:  v.ClassifyName,
-			Sort:          v.Sort,
-			ParentId:      v.ParentId,
-			ClassifyLabel: v.ClassifyLabel,
-			ShowType:      v.ShowType,
-			ClassifyType:  v.ClassifyType,
-			IsShow:        v.IsShow,
-			CreateTime:    utils.TimeTransferString(utils.FormatDateTime, v.CreateTime),
-			ModifyTime:    utils.TimeTransferString(utils.FormatDateTime, v.ModifyTime),
+		if v.ParentId != v.RootId { //三级分类
+			tmp := &english_classify.ClassifyListItem{
+				Id:            v.Id,
+				ClassifyName:  v.ClassifyName,
+				Sort:          v.Sort,
+				ParentId:      v.ParentId,
+				RootId:        v.RootId,
+				ClassifyLabel: v.ClassifyLabel,
+				ShowType:      v.ShowType,
+				ClassifyType:  v.ClassifyType,
+				IsShow:        v.IsShow,
+				CreateTime:    utils.TimeTransferString(utils.FormatDateTime, v.CreateTime),
+				ModifyTime:    utils.TimeTransferString(utils.FormatDateTime, v.ModifyTime),
+			}
+			secondMap[v.ParentId] = append(secondMap[v.ParentId], tmp)
 		}
-		parentMap[v.ParentId] = append(parentMap[v.ParentId], tmp)
 	}
+
+	for _, v := range childList {
+		if v.ParentId == v.RootId { //二级分类
+			tmp := &english_classify.ClassifyListItem{
+				Id:            v.Id,
+				ClassifyName:  v.ClassifyName,
+				Sort:          v.Sort,
+				ParentId:      v.ParentId,
+				RootId:        v.RootId,
+				ClassifyLabel: v.ClassifyLabel,
+				ShowType:      v.ShowType,
+				ClassifyType:  v.ClassifyType,
+				IsShow:        v.IsShow,
+				CreateTime:    utils.TimeTransferString(utils.FormatDateTime, v.CreateTime),
+				ModifyTime:    utils.TimeTransferString(utils.FormatDateTime, v.ModifyTime),
+			}
+			if child, ok := secondMap[v.Id]; ok {
+				tmp.Child = child
+			} else {
+				continue
+			}
+			rootMap[v.ParentId] = append(rootMap[v.ParentId], tmp)
+		}
+	}
+
 	list := make([]*english_classify.ClassifyListItem, 0)
 	for _, v := range parentList {
 		tmp := &english_classify.ClassifyListItem{
@@ -137,6 +204,7 @@ func (er *EnglishReportController) Classify(c *gin.Context) {
 			ClassifyName:  v.ClassifyName,
 			Sort:          v.Sort,
 			ParentId:      v.ParentId,
+			RootId:        v.RootId,
 			ClassifyLabel: v.ClassifyLabel,
 			ShowType:      v.ShowType,
 			ClassifyType:  v.ClassifyType,
@@ -144,7 +212,7 @@ func (er *EnglishReportController) Classify(c *gin.Context) {
 			CreateTime:    utils.TimeTransferString(utils.FormatDateTime, v.CreateTime),
 			ModifyTime:    utils.TimeTransferString(utils.FormatDateTime, v.ModifyTime),
 		}
-		if child, ok := parentMap[v.Id]; ok {
+		if child, ok := rootMap[v.Id]; ok {
 			tmp.Child = child
 		} else {
 			continue

+ 17 - 0
controller/english_report/english_video.go

@@ -6,6 +6,7 @@ import (
 	"hongze/hongze_yb_en_api/controller/resp"
 	"hongze/hongze_yb_en_api/global"
 	"hongze/hongze_yb_en_api/models/base"
+	"hongze/hongze_yb_en_api/models/english_classify"
 	"hongze/hongze_yb_en_api/models/english_report"
 	"hongze/hongze_yb_en_api/models/english_video"
 	"hongze/hongze_yb_en_api/services"
@@ -38,6 +39,7 @@ func (er *EnglishVideoController) List(c *gin.Context) {
 	var total int64
 	var tmpList []*english_video.EnglishVideo
 	list := make([]*english_video.VideoListItem, 0)
+	enClassify := new(english_classify.Classify)
 
 	if req.ClassifyIdFirst > 0 {
 		condition += " and classify_id_first = ?"
@@ -47,6 +49,21 @@ func (er *EnglishVideoController) List(c *gin.Context) {
 		condition += " and classify_id_second = ?"
 		pars = append(pars, req.ClassifyIdSecond)
 	}
+	if req.ClassifyIdRoot > 0 && req.ClassifyIdFirst == 0 && req.ClassifyIdSecond == 0 {
+		//查询顶级分类下的所有二级分类
+		secondClassify, err := enClassify.GetSecondChild(req.ClassifyIdRoot)
+		if err != nil {
+			resp.FailMsg("获取分类失败", "获取分类信息失败,Err:"+err.Error(), c)
+			return
+		}
+		var classifyIdFirstSlice []int
+		for _, v := range secondClassify {
+			classifyIdFirstSlice = append(classifyIdFirstSlice, v.Id)
+		}
+
+		condition += " and classify_id_first in (?)"
+		pars = append(pars, classifyIdFirstSlice)
+	}
 	page.AddOrderItem(base.OrderItem{Column: "publish_time", Asc: false})
 	page.AddOrderItem(base.OrderItem{Column: "id", Asc: false})
 	total, tmpList, err = item.SelectPage(page, condition, pars)

+ 51 - 31
models/english_classify/classify.go

@@ -10,55 +10,75 @@ type Classify struct {
 	ClassifyName  string `gorm:"column:classify_name" json:"classify_name"` //分类名称
 	Sort          int8   `gorm:"column:sort" json:"sort"`                   //排序
 	ParentId      int    `gorm:"column:parent_id" json:"parent_id"`         //父级分类id
+	RootId        int    `gorm:"column:root_id" json:"root_id"`             //父级分类id
 	ClassifyLabel string `gorm:"column:classify_label" json:"classify_label"`
 	ShowType      uint8  `gorm:"column:show_type" json:"show_type"`         //展示类型:1-列表 2-专栏
 	ClassifyType  uint8  `gorm:"column:classify_type" json:"classify_type"` //分类类型:0英文报告,1英文线上路演
 	IsShow        int8   `gorm:"column:is_show" json:"is_show"`             //是否展示报告:1,展示该分类下的报告,0隐藏分类下的报告
 	base.TimeBase
 }
+
 // TableName get sql table name.获取数据库表名
 func (c *Classify) TableName() string {
 	return "english_classify"
 }
 
-type ClassifyItem struct {
-	Id            int    `json:"id"`
-	ClassifyName  string `json:"classify_name"` //分类名称
-	Sort          int8   `json:"sort"`          //排序
-	ParentId      int    `json:"parent_id"`     //父级分类id
-	ClassifyLabel string `json:"classify_label"`
-	ShowType      uint8  `json:"show_type"`   //展示类型:1-列表 2-专栏
-	ClassifyType  uint8  `json:"classify_type"` //分类类型:0英文报告,1英文线上路演
-	IsShow        int8   `json:"is_show"`     //是否展示报告:1,展示该分类下的报告,0隐藏分类下的报告
-	CreateTime    string `json:"create_time"` //创建时间
-	ModifyTime    string `json:"modify_time"` //最后更新时间
-}
-
 type ClassifyListItem struct {
-	Id            int             `json:"id"`
-	ClassifyName  string          `json:"classify_name"` //分类名称
-	Sort          int8            `json:"sort"`          //排序
-	ParentId      int             `json:"parent_id"`     //父级分类id
-	ClassifyLabel string          `json:"classify_label"`
-	ShowType      uint8           `json:"show_type"`     //展示类型:1-列表 2-专栏
-	IsShow        int8            `json:"is_show"`       //是否展示报告:1,展示该分类下的报告,0隐藏分类下的报告
-	ClassifyType  uint8           `json:"classify_type"` //分类类型:0英文报告,1英文线上路演
-	CreateTime    string          `json:"create_time"`   //创建时间
-	ModifyTime    string          `json:"modify_time"`   //最后更新时间
-	Child         []*ClassifyItem `json:"child"`
+	Id            int                 `json:"id"`
+	ClassifyName  string              `json:"classify_name"` //分类名称
+	Sort          int8                `json:"sort"`          //排序
+	ParentId      int                 `json:"parent_id"`     //父级分类id
+	RootId        int                 `json:"root_id"`       //父级分类id
+	ClassifyLabel string              `json:"classify_label"`
+	ShowType      uint8               `json:"show_type"`     //展示类型:1-列表 2-专栏
+	IsShow        int8                `json:"is_show"`       //是否展示报告:1,展示该分类下的报告,0隐藏分类下的报告
+	ClassifyType  uint8               `json:"classify_type"` //分类类型:0英文报告,1英文线上路演
+	CreateTime    string              `json:"create_time"`   //创建时间
+	ModifyTime    string              `json:"modify_time"`   //最后更新时间
+	Child         []*ClassifyListItem `json:"child"`
 }
 
-type ClassifyReq struct {
-	ClassifyType  int `json:"classify_type" form:"classify_type,default=0"`
-}
 // GetParent 获取一级分类列表
-func (c *Classify) GetParent(classifyType int) (list []*Classify, err error) {
-	err = global.DEFAULT_MYSQL.Model(c).Where("parent_id=0 and classify_type=?", classifyType).Order("sort ASC,create_time ASC").Scan(&list).Error
+func (c *Classify) GetParent() (list []*Classify, err error) {
+	err = global.DEFAULT_MYSQL.Model(c).Where("parent_id=0").Order("sort ASC,create_time ASC").Scan(&list).Error
+	return
+}
+
+// GetChild 获取二级分类和三级分类列表
+func (c *Classify) GetChild() (list []*Classify, err error) {
+	err = global.DEFAULT_MYSQL.Model(c).Where("parent_id>0").Order("sort ASC,create_time ASC").Scan(&list).Error
 	return
 }
 
 // GetChild 获取二级分类列表
-func (c *Classify) GetChild(classifyType int) (list []*Classify, err error) {
-	err = global.DEFAULT_MYSQL.Model(c).Where("parent_id>0 and classify_type=?", classifyType).Order("sort ASC,create_time ASC").Scan(&list).Error
+func (c *Classify) GetSecondChild(parentId int) (list []*Classify, err error) {
+	err = global.DEFAULT_MYSQL.Model(c).Where("parent_id=? and parent_id=root_id", parentId).Order("sort ASC,create_time ASC").Scan(&list).Error
+	return
+}
+
+type EnglishClassifyFullName struct {
+	Id           int    `description:"分类ID"`
+	ParentId     int    `description:"父级分类id"`
+	RootId       int    `description:"一级分类ID"`
+	RootName     string `description:"一级分类名"`
+	ParentName   string `description:"二级分类名"`
+	ClassifyName string `description:"分类名称"`
+}
+
+// GetEnglishClassifyFullNameByIds 获取英文分类名一级/二级/三级
+func (c *Classify) GetEnglishClassifyFullNameByIds(classifyIds []int) (list []*EnglishClassifyFullName, err error) {
+	sql := ` SELECT
+	a.id,
+	a.parent_id,
+	a.root_id,
+	a.classify_name,
+	b.classify_name AS root_name,
+	c.classify_name AS parent_name 
+FROM
+	english_classify a
+	LEFT JOIN english_classify b ON a.root_id = b.id
+	LEFT JOIN english_classify c ON a.parent_id = c.id 
+where a.id IN (?)`
+	err = global.DEFAULT_MYSQL.Raw(sql, classifyIds).Scan(&list).Error
 	return
 }

+ 4 - 0
models/english_report/report.go

@@ -45,6 +45,7 @@ func (r *Report) TableName() string {
 type ReportListReq struct {
 	ClassifyIdFirst  int `json:"classify_id_first" form:"classify_id_first"`
 	ClassifyIdSecond int `json:"classify_id_second" form:"classify_id_second"`
+	ClassifyIdRoot   int `json:"classify_id_root" form:"classify_id_root"` //顶级分类ID
 	base.PageReq
 }
 
@@ -61,6 +62,7 @@ type ReportListItem struct {
 	Frequency          string `json:"frequency"`            //频度
 	PublishTime        string `json:"publish_time"`         //发布时间
 	Stage              int    `json:"stage"`                //期数
+	Overview           string `json:"overview"`             //概述
 	VideoUrl           string `json:"video_url"`            //音频文件URL
 	VideoName          string `json:"video_name"`           //音频文件名称
 	VideoPlaySeconds   string `json:"video_play_seconds"`   //音频播放时长
@@ -68,6 +70,8 @@ type ReportListItem struct {
 	ShareUrl           string `json:"share_url"`            //分享url
 	CreateTime         string `json:"create_time"`          //创建时间
 	ModifyTime         string `json:"modify_time"`          //最后更新时间
+	ClassifyIdRoot     int    `json:"classify_id_root"`     //顶级分类ID
+	ClassifyNameRoot   string `json:"classify_name_root"`   //顶级分类名称
 }
 
 type ReportSearchReq struct {