Răsfoiți Sursa

修改英文分类

xyxie 1 an în urmă
părinte
comite
9ccff43593

+ 81 - 26
controllers/english_report/english_classify.go

@@ -197,19 +197,34 @@ func (this *EnglishReportController) AddClassify() {
 	}()
 	classifyName := this.GetString("ClassifyName")
 	parentId, _ := this.GetInt("ParentId")
-	classifyType, _ := this.GetInt("ClassifyType", 0)
 	sort, _ := this.GetInt("Sort")
 
+	// 查新父级分类是否存在
+	rootId := 0
+	if parentId > 0 {
+		parentClassify, err := models.GetEnglishReportClassifyById(parentId)
+		if err != nil {
+			if err.Error() == utils.ErrNoRow() {
+				br.Msg = "上级分类不存在"
+				return
+			}
+			br.Msg = "查询上级分类信息失败"
+			br.ErrMsg = "查询上级分类信息失败,Err:" + err.Error()
+			return
+		}
+		rootId = parentClassify.RootId
+	}
+
 	item := &models.EnglishClassify{
 		ClassifyName: classifyName,
 		Sort:         sort,
 		ParentId:     parentId,
+		RootId:       rootId,
 		CreateTime:   time.Now(),
 		ModifyTime:   time.Now(),
-		ClassifyType: classifyType,
 		IsShow:       1,
 	}
-	counts, err := models.GetEnglishClassifyCountsByName(classifyName, parentId, classifyType)
+	counts, err := models.GetEnglishClassifyCountsByName(classifyName, parentId)
 	if err != nil {
 		br.Msg = "查询失败"
 		br.ErrMsg = "查询失败,Err:" + err.Error()
@@ -265,26 +280,35 @@ func (this *EnglishReportController) EditClassify() {
 	}
 
 	oldItem, err := models.GetEnglishReportClassifyById(classifyId)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取信息失败,Err:" + err.Error()
-		return
-	}
-	parent, err := models.GetEnglishReportClassifyById(parentId)
-	if err != nil && err.Error() != utils.ErrNoRow() {
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "当前分类不存在"
+			return
+		}
 		br.Msg = "获取信息失败"
 		br.ErrMsg = "获取信息失败,Err:" + err.Error()
 		return
 	}
-
 	if oldItem.ParentId == 0 && parentId > 0 {
 		// 一级分类变更为二级分类,禁止
 		br.Msg = "一级分类不允许更改为二级分类"
 		return
 	}
 
+	var parent *models.EnglishClassify
+	if parentId > 0 {
+		parent, err = models.GetEnglishReportClassifyById(parentId)
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "上级分类不存在"
+			return
+		}
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取信息失败,Err:" + err.Error()
+		return
+	}
+
 	//判断是否已存在同个名称的分类
-	existItem, e := models.GetEnglishClassifyByClassifyNameParentId(classifyName, parentId, oldItem.ClassifyType)
+	existItem, e := models.GetEnglishClassifyByClassifyNameParentId(classifyName, parentId)
 	if e != nil {
 		if e.Error() != utils.ErrNoRow() {
 			br.Msg = "查询已存在的分类出错"
@@ -296,29 +320,23 @@ func (this *EnglishReportController) EditClassify() {
 		br.Msg = "分类名称:" + classifyName + "已存在"
 		return
 	}
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取信息失败,Err:" + err.Error()
-		return
-	}
 
-	//oldParentId := item.ParentId
 	item := &models.EnglishClassify{
 		Id:           oldItem.Id,
 		ClassifyName: classifyName,
 		Sort:         sort,
 		ParentId:     parentId,
+		RootId:       parent.RootId,
 		ModifyTime:   time.Now(),
-		ClassifyType: oldItem.ClassifyType,
 		IsShow:       1,
 	}
-	if oldItem.ClassifyType == 1 {
+	{
+		//更新相关联的路演视频里的分类名称
 		err = services.UpdateEnglishVideoClassifyId(oldItem, item, parent, classifyId)
 		if err != nil {
 			br.Msg = err.Error()
 			return
 		}
-	} else {
 		// 更新研报里的分类名称
 		err = services.UpdateEnglishReportClassifyId(oldItem, item, parent, classifyId)
 		if err != nil {
@@ -433,7 +451,6 @@ func (this *EnglishReportController) FistListClassify() {
 	}()
 	pageSize, _ := this.GetInt("PageSize")
 	currentIndex, _ := this.GetInt("CurrentIndex")
-	classifyType, _ := this.GetInt("ClassifyType", 0)
 
 	var startSize int
 	if pageSize <= 0 {
@@ -444,22 +461,60 @@ func (this *EnglishReportController) FistListClassify() {
 	}
 
 	startSize = utils.StartIndex(currentIndex, pageSize)
-	list, err := models.GetEnglishFirstClassifyList(classifyType, startSize, pageSize)
+	tmpList, err := models.GetEnglishFirstSecondClassifyList(startSize, pageSize)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
-	total, err := models.GetEnglishFirstClassifyListCount(classifyType)
+	total, err := models.GetEnglishFirstSecondClassifyListCount()
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
-
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	resp := new(models.EnglishClassifyListResp)
-	resp.List = list
+
+	if total == 0 {
+		resp.List = make([]*models.EnglishClassifyList, 0)
+		resp.Paging = page
+
+		br.Data = resp
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		return
+	}
+	rootMap := make(map[int]struct{}, 0)
+	for _, v := range tmpList {
+		if v.RootId == 0 {
+			rootMap[v.Id] = struct{}{}
+		}
+	}
+	secondListMap := make(map[int][]*models.EnglishClassifyList)
+	//处理二级分类
+	for _, v := range tmpList {
+		if _, ok := rootMap[v.ParentId]; ok {
+			secondListMap[v.ParentId] = append(secondListMap[v.ParentId], v)
+		}
+	}
+
+	//处理一级分类
+	var sortList models.RSClassifyList
+	var sortChildList models.RSChildClassifyList
+	for _, v := range tmpList {
+		if child, ok := secondListMap[v.Id]; ok {
+			sortChildList = child
+			sort.Sort(sortChildList)
+			v.Child = sortChildList
+		}
+		sortList = append(sortList, v)
+	}
+
+	sort.Sort(sortList)
+
+	resp.List = sortList
 	resp.Paging = page
 
 	br.Data = resp

+ 34 - 11
controllers/english_report/report.go

@@ -288,8 +288,8 @@ func (this *EnglishReportController) Detail() {
 // @Param   StartDate   query   string  true       "开始时间"
 // @Param   EndDate   query   string  true       "结束时间"
 // @Param   Frequency   query   string  true       "频度"
-// @Param   ClassifyNameFirst   query   string  true       "一级分类名称"
-// @Param   ClassifyNameSecond   query   string  true       "二级分类名称"
+// @Param   ClassifyIdFirst   query   string  true       "一级分类id"
+// @Param   ClassifyIdSecond   query   string  true       "二级分类id"
 // @Param   State   query   int  true       "状态"
 // @Param   KeyWord   query   string  true       "搜索关键词"
 // @Param   PublishSort   query   string  true       "desc:降序,asc 升序(预留)"
@@ -317,8 +317,8 @@ func (this *EnglishReportController) ListReport() {
 	startDate := this.GetString("StartDate")
 	endDate := this.GetString("EndDate")
 	frequency := this.GetString("Frequency")
-	classifyNameFirst := this.GetString("ClassifyNameFirst")
-	classifyNameSecond := this.GetString("ClassifyNameSecond")
+	classifyIdFirst, _ := this.GetInt("ClassifyIdFirst")
+	classifyIdSecond, _ := this.GetInt("ClassifyIdSecond")
 	state, _ := this.GetInt("State")
 	keyWord := this.GetString("KeyWord")
 	companyType := this.GetString("CompanyType")
@@ -362,14 +362,14 @@ func (this *EnglishReportController) ListReport() {
 		condition += ` AND frequency = ? `
 		pars = append(pars, frequency)
 	}
-	if classifyNameFirst != "" {
-		condition += ` AND classify_name_first = ? `
-		pars = append(pars, classifyNameFirst)
+	if classifyIdFirst != 0 {
+		condition += ` AND classify_id_first = ? `
+		pars = append(pars, classifyIdFirst)
 	}
 
-	if classifyNameSecond != "" {
-		condition += ` AND classify_name_second = ? `
-		pars = append(pars, classifyNameSecond)
+	if classifyIdSecond != 0 {
+		condition += ` AND classify_id_second = ? `
+		pars = append(pars, classifyIdSecond)
 	}
 	if state > 0 {
 		condition += ` AND state = ? `
@@ -512,7 +512,25 @@ func (this *EnglishReportController) ListReport() {
 		br.ErrMsg = errOther.Error()
 		return
 	}
-
+	// 查询分类信息
+	var classifyIdSecondSlice []int
+	for _, item := range list {
+		classifyIdSecondSlice = append(classifyIdSecondSlice, item.ClassifyIdSecond)
+	}
+	nameList, err := models.GetEnglishClassifyFullNameByIds(classifyIdSecondSlice)
+	if err != nil {
+		br.Msg = "获取分类名称失败"
+		br.ErrMsg = "获取分类名称失败, ERR:" + err.Error()
+		return
+	}
+	classifyNameMap := make(map[int]string)
+	for _, v := range nameList {
+		if v.RootId == 0 {
+			classifyNameMap[v.Id] = strings.Join([]string{v.ParentName, v.ClassifyName}, "/")
+		} else {
+			classifyNameMap[v.Id] = strings.Join([]string{v.RootName, v.ParentName, v.ClassifyName}, "/")
+		}
+	}
 	for _, item := range list {
 		if item.State == 2 {
 			item.ShareUrl = "https://share.hzinsights.com/reportEn?code=" + item.ReportCode
@@ -553,6 +571,11 @@ func (this *EnglishReportController) ListReport() {
 		} else {
 			item.Editor = ret.Editor
 		}
+
+		//处理分类名
+		if n, ok := classifyNameMap[item.ClassifyIdSecond]; ok {
+			item.FullClassifyName = n
+		}
 	}
 
 	page := paging.GetPaging(currentIndex, pageSize, total)

+ 44 - 18
models/english_report.go

@@ -259,6 +259,7 @@ type EnglishReportList struct {
 	FromReportId       int       `description:"继承的报告ID(英文策略报告ID)"`
 	AdminId            int       `description:"创建者账号"`
 	AdminRealName      string    `description:"创建者姓名"`
+	FullClassifyName   string    `description:"顶级分类名/父级分类名/当前分类名"`
 }
 
 type EnglishReportListResp struct {
@@ -521,6 +522,7 @@ type EnglishClassify 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:"分类标签"`
@@ -542,9 +544,10 @@ func ModifyEnglishClassify(item *EnglishClassify) (err error) {
 	classify_name = ?,
 	sort = ?,
 	parent_id = ?,
+	root_id = ?,
 	modify_time = ? 
 	WHERE id = ? `
-	_, err = o.Raw(sql, item.ClassifyName, item.Sort, item.ParentId, item.ModifyTime, item.Id).Exec()
+	_, err = o.Raw(sql, item.ClassifyName, item.Sort, item.ParentId, item.RootId, item.ModifyTime, item.Id).Exec()
 	return
 }
 
@@ -583,30 +586,25 @@ func GetEnglishReportCounts(classifyId, parentId int) (count int, err error) {
 	return
 }
 
-func GetEnglishClassifyCountsByName(name string, parentId int, classifyType int) (count int, err error) {
+func GetEnglishClassifyCountsByName(name string, parentId int) (count int, err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := `SELECT COUNT(1) AS count FROM english_classify WHERE classify_name=? AND parent_id = ? AND classify_type = ? `
-	err = o.Raw(sql, name, parentId, classifyType).QueryRow(&count)
+	err = o.Raw(sql, name, parentId).QueryRow(&count)
 	return
 }
 
-// 获取分类列表
-func GetEnglishFirstClassifyList(classifyType, startSize, pageSize int) (items []*EnglishClassifyList, err error) {
-	sql := ``
-
-	sql = `SELECT * FROM english_classify WHERE parent_id=0 AND classify_type = ?  ORDER BY sort ASC,create_time ASC LIMIT ?,? `
-
+// GetEnglishFirstSecondClassifyList 获取一级、二级分类列表
+func GetEnglishFirstSecondClassifyList(startSize, pageSize int) (items []*EnglishClassifyList, err error) {
 	o := orm.NewOrmUsingDB("rddp")
-	_, err = o.Raw(sql, classifyType, startSize, pageSize).QueryRows(&items)
+	sql := `SELECT * FROM english_classify WHERE root_id=0 or (root_id>0 and root_id=parent_id) ORDER BY sort ASC,create_time ASC LIMIT ?,? `
+	_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
 	return
 }
 
-func GetEnglishFirstClassifyListCount(classifyType int) (count int, err error) {
-	sqlCount := ``
-	sqlCount = `SELECT COUNT(1) AS count FROM english_classify WHERE parent_id=0 AND classify_type = ? `
-
+func GetEnglishFirstSecondClassifyListCount() (count int, err error) {
 	o := orm.NewOrmUsingDB("rddp")
-	err = o.Raw(sqlCount, classifyType).QueryRow(&count)
+	sqlCount := `SELECT COUNT(1) AS count FROM english_classify WHERE root_id=0 or (root_id>0 and root_id=parent_id)`
+	err = o.Raw(sqlCount).QueryRow(&count)
 	return
 }
 
@@ -743,9 +741,37 @@ func (m RSChildClassifyList) Swap(i, j int) {
 }
 
 // GetEnglishClassifyByClassifyNameParentId 获取英文分类
-func GetEnglishClassifyByClassifyNameParentId(classifyName string, parentId, classifyType int) (item *Classify, err error) {
+func GetEnglishClassifyByClassifyNameParentId(classifyName string, parentId int) (item *Classify, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := ` SELECT * FROM english_classify where classify_name = ? and parent_id = ? `
+	err = o.Raw(sql, classifyName, parentId).QueryRow(&item)
+	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 GetEnglishClassifyFullNameByIds(classifyIds []int) (list []*EnglishClassifyFullName, err error) {
 	o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT * FROM english_classify where classify_name = ? and parent_id = ? and classify_type = ? `
-	err = o.Raw(sql, classifyName, parentId, classifyType).QueryRow(&item)
+	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 (` + utils.GetOrmInReplace(len(classifyIds)) + `)`
+	_, err = o.Raw(sql, classifyIds).QueryRows(&list)
 	return
 }