Преглед изворни кода

fix:修复研报列表筛选

zqbao пре 11 месеци
родитељ
комит
2fbcde42ae
3 измењених фајлова са 134 додато и 16 уклоњено
  1. 88 9
      controllers/report.go
  2. 8 0
      models/classify.go
  3. 38 7
      models/report.go

+ 88 - 9
controllers/report.go

@@ -62,9 +62,34 @@ func (this *ReportController) List() {
 		currentIndex = 1
 	}
 	startSize = utils.StartIndex(currentIndex, pageSize)
-
+	classifyList, err := models.GetClassifyList()
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	classifyMap := make(map[int]*models.ClassifyView)
+	isHas := false
+	for _, v := range classifyList {
+		if v.Id == classifyId && classifyId != 0 {
+			isHas = true
+		}
+		classifyMap[v.Id] = v
+	}
+	if !isHas && classifyId != 0 {
+		br.Msg = "分类不存在"
+		return
+	}
+	leafClassifyIds := getLeafClassifyIds(classifyMap, classifyId)
+	classifyIdMap := make(map[int]struct{})
+	for _, v := range leafClassifyIds {
+		classifyIdMap[v] = struct{}{}
+	}
 	var total int
 	var reportList []*models.ReportList
+	classifyFirstIds := make([]int, 0)
+	classifySecondIds := make([]int, 0)
+	classifyThirdIds := make([]int, 0)
 	switch level {
 	case 2:
 		classifyIds, err := models.GetClassifyIdsListById(chartPermissionId)
@@ -78,26 +103,44 @@ func (this *ReportController) List() {
 			br.ErrMsg = "获取数据失败,品种id:" + strconv.Itoa(chartPermissionId)
 			return
 		}
+
+		classifyIds = utils.Unique(classifyIds)
 		// 根据分类筛选报告
 		var selectedClassifyId []int
 		if classifyId > 0 {
 			for _, v := range classifyIds {
-				if v == classifyId {
+				if _, ok := classifyIdMap[v]; ok {
 					selectedClassifyId = append(selectedClassifyId, v)
-					break
 				}
 			}
 		} else {
 			selectedClassifyId = classifyIds
 		}
-		tmptotal, err := models.GetReportCountByClassifyIds(selectedClassifyId, condition)
+
+		classifyList, err := models.GetClassifyListByIds(selectedClassifyId)
+		if err != nil {
+			br.Msg = "获取报告列表失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range classifyList {
+			switch v.Level {
+			case 1:
+				classifyFirstIds = append(classifyFirstIds, v.Id)
+			case 2:
+				classifySecondIds = append(classifySecondIds, v.Id)
+			case 3:
+				classifyThirdIds = append(classifyThirdIds, v.Id)
+			}
+		}
+		tmptotal, err := models.GetReportCountByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition)
 		if err != nil {
 			br.Msg = "获取数据失败"
 			br.ErrMsg = "获取数据失败,Err:" + err.Error()
 			return
 		}
 		total = tmptotal
-		tmpReportList, err := models.GetReportListByClassifyIds(selectedClassifyId, condition, startSize, pageSize)
+		tmpReportList, err := models.GetReportListByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition, startSize, pageSize)
 		if err != nil {
 			br.Msg = "获取报告列表失败"
 			br.ErrMsg = "获取数据失败,Err:" + err.Error()
@@ -126,26 +169,43 @@ func (this *ReportController) List() {
 			br.Msg = "该品种下没有绑定分类"
 			return
 		}
+		classifyIds = utils.Unique(classifyIds)
 		// 根据分类筛选报告
 		var selectedClassifyId []int
 		if classifyId > 0 {
 			for _, v := range classifyIds {
-				if v == classifyId {
+				if _, ok := classifyIdMap[v]; ok {
 					selectedClassifyId = append(selectedClassifyId, v)
-					break
 				}
 			}
 		} else {
 			selectedClassifyId = classifyIds
 		}
-		tmptotal, err := models.GetReportCountByClassifyIds(selectedClassifyId, condition)
+
+		classifyList, err := models.GetClassifyListByIds(selectedClassifyId)
+		if err != nil {
+			br.Msg = "获取报告列表失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range classifyList {
+			switch v.Level {
+			case 1:
+				classifyFirstIds = append(classifyFirstIds, v.Id)
+			case 2:
+				classifySecondIds = append(classifySecondIds, v.Id)
+			case 3:
+				classifyThirdIds = append(classifyThirdIds, v.Id)
+			}
+		}
+		tmptotal, err := models.GetReportCountByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition)
 		if err != nil {
 			br.Msg = "获取数据失败"
 			br.ErrMsg = "获取数据失败,Err:" + err.Error()
 			return
 		}
 		total = tmptotal
-		tmpReportList, err := models.GetReportListByClassifyIds(selectedClassifyId, condition, startSize, pageSize)
+		tmpReportList, err := models.GetReportListByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition, startSize, pageSize)
 		if err != nil {
 			br.Msg = "获取报告列表失败"
 			br.ErrMsg = "获取报告列表失败,Err:" + err.Error()
@@ -168,6 +228,25 @@ func (this *ReportController) List() {
 	br.Data = resp
 }
 
+func getLeafClassifyIds(classifyMap map[int]*models.ClassifyView, keyId int) []int {
+	var leafClassifyIds []int
+	curClassify := classifyMap[keyId]
+	if curClassify.HasChild == 0 {
+		leafClassifyIds = append(leafClassifyIds, curClassify.Id)
+		return leafClassifyIds
+	}
+	for _, v := range classifyMap {
+		if v.ParentId == curClassify.Id {
+			if v.HasChild == 0 {
+				leafClassifyIds = append(leafClassifyIds, v.Id)
+			} else {
+				leafClassifyIds = append(leafClassifyIds, getLeafClassifyIds(classifyMap, v.Id)...)
+			}
+		}
+	}
+	return leafClassifyIds
+}
+
 // @Title 研报详情
 // @Description 研报详情接口
 // @Param   ReportId   query   int  true       "报告id"

+ 8 - 0
models/classify.go

@@ -25,6 +25,7 @@ type ClassifyView struct {
 	CreateTime   time.Time       `description:"创建时间"`
 	ModifyTime   time.Time       `description:"修改时间"`
 	Level        int             `description:"分类层级"`
+	HasChild     int             `description:"是否有子分类0:下面没有子分类,1:下面有子分类"`
 	Child        []*ClassifyView `description:"子分类"`
 }
 
@@ -63,3 +64,10 @@ func GetClassifyById(id int) (item *ClassifyView, err error) {
 	err = o.Raw(sql, id).QueryRow(&item)
 	return
 }
+
+func GetClassifyList() (items []*ClassifyView, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM classify`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 38 - 7
models/report.go

@@ -91,7 +91,30 @@ func GetReportRecentList(startSize, pageSize int) (items []*ReportList, err erro
 	return
 }
 
-func GetReportCountByClassifyIds(classifyIds []int, condition string) (count int, err error) {
+func GetReportCountByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds []int, condition string) (count int, err error) {
+	if len(classifyFirstIds) == 0 && len(classifySecondIds) == 0 && len(classifyThirdIds) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT  COUNT(*) AS count  FROM report AS a WHERE (a.state=2 OR a.state=6)  `
+
+	if len(classifyFirstIds) > 0 {
+		sql += fmt.Sprintf(" OR a.classify_id_first IN (%s) ", utils.GetOrmReplaceHolder(len(classifyFirstIds)))
+	}
+	if len(classifySecondIds) > 0 {
+		sql += fmt.Sprintf(" OR a.classify_id_second IN (%s) ", utils.GetOrmReplaceHolder(len(classifySecondIds)))
+	}
+	if len(classifyThirdIds) > 0 {
+		sql += fmt.Sprintf(" OR a.classify_id_third IN (%s) ", utils.GetOrmReplaceHolder(len(classifyThirdIds)))
+	}
+	if condition != "" {
+		sql += condition
+	}
+	err = o.Raw(sql, classifyFirstIds, classifySecondIds, classifyThirdIds).QueryRow(&count)
+	return
+}
+
+func GetReportByClassifyIds(classifyIds []int, condition string) (count int, err error) {
 	if len(classifyIds) == 0 {
 		return
 	}
@@ -106,8 +129,8 @@ func GetReportCountByClassifyIds(classifyIds []int, condition string) (count int
 	return
 }
 
-func GetReportListByClassifyIds(classifyIds []int, condition string, startSize, pageSize int) (items []*ReportList, err error) {
-	if len(classifyIds) == 0 {
+func GetReportListByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds []int, condition string, startSize, pageSize int) (items []*ReportList, err error) {
+	if len(classifyFirstIds) == 0 && len(classifySecondIds) == 0 && len(classifyThirdIds) == 0 {
 		return
 	}
 	o := orm.NewOrmUsingDB("rddp")
@@ -117,14 +140,22 @@ func GetReportListByClassifyIds(classifyIds []int, condition string, startSize,
             CASE WHEN DATE(a.modify_time)=DATE(NOW()) THEN 1 ELSE 0 END AS is_current_date
             FROM report AS a
 			INNER JOIN  classify AS b ON a.classify_id_second=b.id
-			WHERE (a.state=2 OR a.state=6) AND a.classify_id_second IN (%s) `
-
-	sql = fmt.Sprintf(sql, utils.GetOrmReplaceHolder(len(classifyIds)))
+			WHERE (a.state=2 OR a.state=6) `
+	// AND (a.classify_id_first IN (%s) OR a.classify_id_second IN (%s) OR a.classify_id_third IN (%s)) `
+	if len(classifyFirstIds) > 0 {
+		sql += fmt.Sprintf(" OR a.classify_id_first IN (%s) ", utils.GetOrmReplaceHolder(len(classifyFirstIds)))
+	}
+	if len(classifySecondIds) > 0 {
+		sql += fmt.Sprintf(" OR a.classify_id_second IN (%s) ", utils.GetOrmReplaceHolder(len(classifySecondIds)))
+	}
+	if len(classifyThirdIds) > 0 {
+		sql += fmt.Sprintf(" OR a.classify_id_third IN (%s) ", utils.GetOrmReplaceHolder(len(classifyThirdIds)))
+	}
 	if condition != "" {
 		sql += condition
 	}
 	sql += ` ORDER BY  a.publish_time DESC LIMIT ?,? `
-	_, err = o.Raw(sql, classifyIds, startSize, pageSize).QueryRows(&items)
+	_, err = o.Raw(sql, classifyFirstIds, classifySecondIds, classifyThirdIds, startSize, pageSize).QueryRows(&items)
 	return
 }