Răsfoiți Sursa

英文分类

xyxie 1 an în urmă
părinte
comite
3f2f2e83e5
2 a modificat fișierele cu 126 adăugiri și 69 ștergeri
  1. 89 47
      controllers/english_report/english_classify.go
  2. 37 22
      models/english_report.go

+ 89 - 47
controllers/english_report/english_classify.go

@@ -2,12 +2,12 @@ package english_report
 
 import (
 	"encoding/json"
-	"fmt"
-	"github.com/rdlucklib/rdluck_tools/paging"
 	"eta/eta_api/controllers"
 	"eta/eta_api/models"
 	"eta/eta_api/services"
 	"eta/eta_api/utils"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
 	"sort"
 	"time"
 )
@@ -35,7 +35,6 @@ func (this *EnglishReportController) ListClassify() {
 	pageSize, _ := this.GetInt("PageSize")
 	currentIndex, _ := this.GetInt("CurrentIndex")
 	keyWord := this.GetString("KeyWord")
-	classifyType, _ := this.GetInt("ClassifyType", 0)
 
 	var startSize int
 	if pageSize <= 0 {
@@ -50,13 +49,21 @@ func (this *EnglishReportController) ListClassify() {
 	page := paging.GetPaging(currentIndex, pageSize, 0)
 	resp := new(models.EnglishClassifyListResp)
 
-	list, err := models.GetEnglishClassifyList(startSize, pageSize, keyWord, classifyType)
+	// 处理一级分类分页的情况
+	rootList, err := models.GetEnglishClassifyRootId(startSize, pageSize, keyWord)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
-	total, err := models.GetEnglishClassifyListCount(keyWord, classifyType)
+	var ids []int
+	var rootIds []int
+	rootMap := make(map[int]struct{}, 0)
+	for _, v := range rootList {
+		rootIds = append(rootIds, v.Id)
+		rootMap[v.Id] = struct{}{}
+	}
+	total, err := models.GetEnglishClassifyListCount(keyWord)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -72,65 +79,100 @@ func (this *EnglishReportController) ListClassify() {
 		br.Msg = "获取成功"
 		return
 	}
-	var parentIds []int
-	for _, v := range list {
-		parentIds = append(parentIds, v.Id)
-	}
+	page = paging.GetPaging(currentIndex, pageSize, total)
 
-	childMap := make(map[int][]*models.EnglishClassifyList)
-	tmpList, err := models.GetEnglishClassifyChildByParentIds(parentIds, keyWord, classifyType)
+	//获取相关的分类ID
+	idList, err := models.GetEnglishClassifyListByRootId(rootIds, keyWord)
 	if err != nil {
-		br.Msg = "获取二级分类失败"
-		br.ErrMsg = "获取二级分类失败,Err:" + err.Error()
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
-
-	// 二级分类-品种权限
+	secondListMap := make(map[int][]*models.EnglishClassifyList)
+	thirdListMap := make(map[int][]*models.EnglishClassifyList)
+	var thirdIds []int
+	var sortChildList models.RSChildClassifyList
+	// 三级分类-品种权限
 	permissionMap := make(map[int][]int)
-	{
-		classifyIds := make([]int, 0)
+
+	if len(idList) > 0 {
+		childIdMap := make(map[int]struct{}, 0)
+		for _, v := range idList {
+			if _, ok := childIdMap[v.ParentId]; !ok {
+				ids = append(ids, v.ParentId)
+			}
+			if _, ok := childIdMap[v.Id]; !ok {
+				ids = append(ids, v.Id)
+			}
+		}
+		tmpList, err := models.GetEnglishClassifyChildByIds(ids)
+		if err != nil {
+			br.Msg = "获取二级分类失败"
+			br.ErrMsg = "获取二级分类失败,Err:" + err.Error()
+			return
+		}
 		for _, v := range tmpList {
-			classifyIds = append(classifyIds, v.Id)
+			if _, ok := rootMap[v.ParentId]; !ok {
+				thirdIds = append(thirdIds, v.Id)
+			}
 		}
-		if len(classifyIds) > 0 {
-			cond := fmt.Sprintf(` AND %s IN (%s)`, models.EnClassifyPermissionColumns.EnClassifyId, utils.GetOrmInReplace(len(classifyIds)))
-			pars := make([]interface{}, 0)
-			pars = append(pars, classifyIds)
-			ob := new(models.EnClassifyPermission)
-			items, e := ob.GetItemsByCondition(cond, pars, []string{}, "")
-			if e != nil {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取客户权限列表失败, Err: " + e.Error()
-				return
+		{
+			classifyIds := thirdIds
+			if len(classifyIds) > 0 {
+				cond := fmt.Sprintf(` AND %s IN (%s)`, models.EnClassifyPermissionColumns.EnClassifyId, utils.GetOrmInReplace(len(classifyIds)))
+				pars := make([]interface{}, 0)
+				pars = append(pars, classifyIds)
+				ob := new(models.EnClassifyPermission)
+				items, e := ob.GetItemsByCondition(cond, pars, []string{}, "")
+				if e != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取客户权限列表失败, Err: " + e.Error()
+					return
+				}
+				for _, v := range items {
+					if permissionMap[v.EnClassifyId] == nil {
+						permissionMap[v.EnClassifyId] = make([]int, 0)
+					}
+					permissionMap[v.EnClassifyId] = append(permissionMap[v.EnClassifyId], v.EnPermissionId)
+				}
 			}
-			for _, v := range items {
-				if permissionMap[v.EnClassifyId] == nil {
-					permissionMap[v.EnClassifyId] = make([]int, 0)
+		}
+		// 处理三级分类
+		for _, v := range tmpList {
+			if _, ok := rootMap[v.ParentId]; !ok {
+				if p, ok1 := permissionMap[v.Id]; ok1 {
+					v.EnPermissions = p
 				}
-				permissionMap[v.EnClassifyId] = append(permissionMap[v.EnClassifyId], v.EnPermissionId)
+				thirdListMap[v.ParentId] = append(thirdListMap[v.ParentId], v)
 			}
 		}
-	}
 
-	for _, v := range tmpList {
-		v.EnPermissions = permissionMap[v.Id]
-		childMap[v.ParentId] = append(childMap[v.ParentId], v)
-	}
-	for _, v := range list {
-		if child, ok := childMap[v.Id]; ok {
-			v.Child = child
+		//处理二级分类
+		for _, v := range tmpList {
+			if _, ok := rootMap[v.ParentId]; ok {
+				if child, ok1 := thirdListMap[v.Id]; ok1 {
+					sortChildList = child
+					sort.Sort(sortChildList)
+					v.Child = sortChildList
+				}
+				secondListMap[v.ParentId] = append(secondListMap[v.ParentId], v)
+			}
 		}
 	}
+
+	//处理一级分类
 	var sortList models.RSClassifyList
-	sortList = list
+	for _, v := range rootList {
+		if child, ok := secondListMap[v.Id]; ok {
+			sortChildList = child
+			sort.Sort(sortChildList)
+			v.Child = sortChildList
+		}
+		sortList = append(sortList, v)
+	}
+
 	sort.Sort(sortList)
 
-	for _, item := range sortList {
-		var sortChildList models.RSChildClassifyList
-		sortChildList = item.Child
-		sort.Sort(sortChildList)
-		item.Child = sortChildList
-	}
 	resp.List = sortList
 	resp.Paging = page
 

+ 37 - 22
models/english_report.go

@@ -386,6 +386,7 @@ type EnglishClassifyList struct {
 	ClassifyName  string    `description:"分类名称"`
 	Sort          int       `description:"排序"`
 	ParentId      int       `description:"父级分类id"`
+	RootId        int       `description:"一级分类ID"`
 	CreateTime    time.Time `description:"创建时间"`
 	ModifyTime    time.Time `description:"修改时间"`
 	ClassifyLabel string    `description:"分类标签"`
@@ -401,50 +402,69 @@ type EnglishClassifyListResp struct {
 	Paging *paging.PagingItem `description:"分页数据"`
 }
 
-// 获取分类列表
-func GetEnglishClassifyList(startSize, pageSize int, keyWord string, classifyType int) (items []*EnglishClassifyList, err error) {
+// GetEnglishClassifyRootId 获取一级分类列表
+func GetEnglishClassifyRootId(startSize, pageSize int, keyWord string) (items []*EnglishClassifyList, err error) {
 	sql := ``
 	o := orm.NewOrmUsingDB("rddp")
 	if keyWord != "" {
 		sql = `SELECT * FROM (
-                   SELECT * FROM english_classify
-                   WHERE parent_id=0 AND classify_name LIKE '%` + keyWord + `%' AND classify_type = ?
+			                   SELECT * FROM english_classify
+                   WHERE root_id=0 AND classify_name LIKE '%` + keyWord + `%'
                    UNION
                    SELECT * FROM english_classify
                    WHERE id IN(SELECT parent_id FROM english_classify
-                   WHERE parent_id>0 AND classify_name LIKE '%` + keyWord + `%') AND classify_type = ?
+                   WHERE root_id>0 AND classify_name LIKE '%` + keyWord + `%')
                    )AS t
                    ORDER BY sort ASC,create_time ASC
                    LIMIT ?,? `
-		_, err = o.Raw(sql, classifyType, classifyType, startSize, pageSize).QueryRows(&items)
+		_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
 	} else {
-		sql = `SELECT * FROM english_classify WHERE parent_id=0 AND classify_type = ? ORDER BY sort ASC,create_time ASC LIMIT ?,? `
-		_, err = o.Raw(sql, classifyType, startSize, pageSize).QueryRows(&items)
+		sql = `SELECT * FROM english_classify WHERE root_id=0 ORDER BY sort ASC,create_time ASC LIMIT ?,? `
+		_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
 	}
 	return
 }
 
-func GetEnglishClassifyListCount(keyWord string, classifyType int) (count int, err error) {
+func GetEnglishClassifyListCount(keyWord string) (count int, err error) {
 	sqlCount := ``
 	o := orm.NewOrmUsingDB("rddp")
 	if keyWord != "" {
 		sqlCount = `SELECT  COUNT(1) AS count FROM (
                SELECT * FROM english_classify
-               WHERE parent_id=0 AND classify_name LIKE '%` + keyWord + `%' AND classify_type = ?
+               WHERE root_id=0 AND classify_name LIKE '%` + keyWord + `%'
                UNION
                SELECT * FROM english_classify
                WHERE id IN(SELECT parent_id FROM english_classify
-               WHERE parent_id>0 AND classify_name LIKE '%` + keyWord + `%' AND classify_type = ?)
+               WHERE root_id>0 AND classify_name LIKE '%` + keyWord + `%')
                )AS t `
-		err = o.Raw(sqlCount, classifyType, classifyType).QueryRow(&count)
+		err = o.Raw(sqlCount).QueryRow(&count)
 	} else {
-		sqlCount = `SELECT COUNT(1) AS count FROM english_classify WHERE parent_id=0 AND classify_type = ?`
-		err = o.Raw(sqlCount, classifyType).QueryRow(&count)
+		sqlCount = `SELECT COUNT(1) AS count FROM english_classify WHERE root_id=0`
+		err = o.Raw(sqlCount).QueryRow(&count)
 	}
 
 	return
 }
 
+func GetEnglishClassifyListByRootId(rootIds []int, keyWord string) (items []*EnglishClassifyList, err error) {
+	sql := ``
+	o := orm.NewOrmUsingDB("rddp")
+	if keyWord != "" {
+		sql = `SELECT
+	a.*
+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.classify_name LIKE '%` + keyWord + `%' and a.root_id IN (` + utils.GetOrmInReplace(len(rootIds)) + `)`
+		_, err = o.Raw(sql, rootIds).QueryRows(&items)
+	} else {
+		sql = `SELECT * FROM english_classify WHERE root_id IN (` + utils.GetOrmInReplace(len(rootIds)) + `) `
+		_, err = o.Raw(sql, rootIds).QueryRows(&items)
+	}
+	return
+}
+
 func GetEnglishClassifyChild(parentId int, keyWord string, classifyType int) (items []*EnglishClassify, err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := ``
@@ -457,15 +477,10 @@ func GetEnglishClassifyChild(parentId int, keyWord string, classifyType int) (it
 	return
 }
 
-func GetEnglishClassifyChildByParentIds(parentIds []int, keyWord string, classifyType int) (items []*EnglishClassifyList, err error) {
+func GetEnglishClassifyChildByIds(ids []int) (items []*EnglishClassifyList, err error) {
 	o := orm.NewOrmUsingDB("rddp")
-	sql := ``
-	if keyWord != "" {
-		sql = `SELECT * FROM english_classify WHERE parent_id IN (` + utils.GetOrmInReplace(len(parentIds)) + `) AND classify_type = ? AND classify_name LIKE '%` + keyWord + `%' ORDER BY create_time ASC `
-	} else {
-		sql = `SELECT * FROM english_classify WHERE parent_id IN (` + utils.GetOrmInReplace(len(parentIds)) + `) AND classify_type = ? ORDER BY create_time ASC `
-	}
-	_, err = o.Raw(sql, parentIds, classifyType).QueryRows(&items)
+	sql := `SELECT * FROM english_classify WHERE id IN (` + utils.GetOrmInReplace(len(ids)) + `) ORDER BY create_time ASC `
+	_, err = o.Raw(sql, ids).QueryRows(&items)
 	return
 }