Browse Source

修改分类父级,转移事件

xyxie 5 months ago
parent
commit
8aec4de3d5

+ 24 - 6
controllers/knowledge/classify.go

@@ -202,13 +202,31 @@ func (this *ClassifyController) Delete() {
 		br.ErrMsg = "删除失败,Err:" + err.Error()
 		return
 	}
+	// 获取父级分类下的子分类数量
+	/*	if item.ParentId > 0 {
+		childClassifyCount, err := knowledgeObj.GetCountClassifyChildByParentId(req.ClassifyId)
+		if err != nil {
+			br.Msg = "获取父级分类的子分类信息失败"
+			br.ErrMsg = "获取父级分类的子分类信息失败,Err:" + err.Error()
+			return
+		}
+		if childClassifyCount <= 0 {
+			parentClassifyItem, err := knowledgeObj.GetClassifyById(item.ParentId)
+			if err != nil {
+				br.Msg = "获取父级分类信息失败"
+				br.ErrMsg = "获取父级分类信息失败,Err:" + err.Error()
+				return
+			}
+			parentClassifyItem.HasChild = 0
+			err = parentClassifyItem.Update([]string{"HasChild"})
+			if err != nil {
+				br.Msg = "更新父级分类信息失败"
+				br.ErrMsg = "更新父级分类信息失败,Err:" + err.Error()
+				return
+			}
+		}
+	}*/
 
-	// 被删除是二级分类且关联电话会时, 同步FICC活动分类
-	//if item.ParentId > 0 && item.RelateTel == 1 {
-	//	go func() {
-	//		_ = yb.SyncClassifyAndFiccActivityType()
-	//	}()
-	//}
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "删除成功"

+ 28 - 3
controllers/knowledge/resource.go

@@ -77,8 +77,27 @@ func (this *ResourceController) List() {
 	pars = append(pars, resourceType)
 
 	if keyWord != "" {
-		condition += ` AND (title LIKE ?) `
-		pars = utils.GetLikeKeywordPars(pars, keyWord, 2)
+		//按照空格划分为关键词数组
+		keyWordArr := strings.Split(keyWord, " ")
+		lengthKey := len(keyWordArr)
+		if lengthKey == 1 {
+			condition += ` AND (title LIKE ?) `
+			pars = utils.GetLikeKeywordPars(pars, keyWord, 1)
+		} else if lengthKey > 1 {
+			for k, v := range keyWordArr {
+				if k == 0 {
+					condition += ` AND (title LIKE ? `
+					pars = utils.GetLikeKeywordPars(pars, v, 1)
+				} else if k == lengthKey-1 {
+					condition += ` OR title LIKE ? ) `
+					pars = utils.GetLikeKeywordPars(pars, v, 1)
+				} else {
+					condition += ` OR title LIKE ? `
+					pars = utils.GetLikeKeywordPars(pars, v, 1)
+				}
+			}
+		}
+
 	}
 	if classifyIds != "" {
 		//转成数组,并把类型转成int
@@ -124,7 +143,7 @@ func (this *ResourceController) List() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
-	listTmp, err := knowledge.GetKnowledgeResourceList(condition, pars, startSize, pageSize)
+	listTmp, err := knowledge.GetKnowledgeResourcePageList(condition, pars, startSize, pageSize)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -436,6 +455,8 @@ func (this *ResourceController) Detail() {
 		br.Msg = "参数错误"
 		return
 	}
+	resourceType, _ := this.GetInt("ResourceType")
+
 	resourceObj := new(knowledge.KnowledgeResource)
 	item, err := resourceObj.GetById(knowledgeResourceId)
 	if err != nil {
@@ -447,6 +468,10 @@ func (this *ResourceController) Detail() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
+	if item.ResourceType != resourceType {
+		br.Msg = "事件类型错误"
+		return
+	}
 	item.Content = html.UnescapeString(item.Content)
 
 	resp := &knowledge.KnowledgeResourceDetailView{

+ 1 - 1
models/knowledge/knowledge_classify.go

@@ -17,7 +17,7 @@ type KnowledgeClassify struct {
 	Enabled      int       `gorm:"column:enabled;default:1;type:tinyint"`
 	Level        int       `gorm:"column:level;default:0;type:bigint"`
 	ResourceType int       `gorm:"column:resource_type;default:0;not null;type:tinyint"`
-	HasChild     int       `gorm:"column:has_child;default:0;type:int"`
+	//HasChild     int       `gorm:"column:has_child;default:0;type:int"`
 }
 
 func (k *KnowledgeClassify) TableName() string {

+ 21 - 1
models/knowledge/knowledge_resource.go

@@ -78,7 +78,7 @@ type KnowledgeResourceListResp struct {
 	Paging *paging.PagingItem `description:"分页数据"`
 }
 
-func GetKnowledgeResourceList(condition string, pars []interface{}, startSize, pageSize int) (items []*KnowledgeResource, err error) {
+func GetKnowledgeResourcePageList(condition string, pars []interface{}, startSize, pageSize int) (items []*KnowledgeResource, err error) {
 	sql := `SELECT * FROM knowledge_resource WHERE 1=1  `
 	if condition != "" {
 		sql += condition
@@ -90,6 +90,16 @@ func GetKnowledgeResourceList(condition string, pars []interface{}, startSize, p
 	return
 }
 
+func GetKnowledgeResourceIdList(condition string, pars []interface{}) (items []int, err error) {
+	sql := `SELECT knowledge_resource_id FROM knowledge_resource WHERE 1=1  `
+	if condition != "" {
+		sql += condition
+	}
+	sql += `ORDER BY modify_time DESC`
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
+	return
+}
+
 func GetKnowledgeResourceListCount(condition string, pars []interface{}) (count int, err error) {
 	sql := `SELECT COUNT(1) AS count  FROM knowledge_resource WHERE 1=1 `
 	if condition != "" {
@@ -271,3 +281,13 @@ func (m *KnowledgeResource) GetAdmins(keyword string, resourceType int) (items [
 	err = global.DmSQL["rddp"].Raw(sql, resourceType).Scan(&items).Error
 	return
 }
+
+// UpdateClassifySortByParentId 根据父类id更新排序
+func (m *KnowledgeResource) UpdateClassifyIdByIds(ids []int, classifyId int, resourceType int) (err error) {
+	var pars []interface{}
+	sql := ` UPDATE %s set classify_id =? WHERE resource_type=? AND knowledge_resource_id in (?) `
+	pars = append(pars, classifyId, resourceType, ids)
+	sql = fmt.Sprintf(sql, m.TableName())
+	err = global.DmSQL["rddp"].Exec(sql, pars...).Error
+	return
+}

+ 0 - 1
models/knowledge/knowledge_tag.go

@@ -10,7 +10,6 @@ import (
 type KnowledgeTag struct {
 	TagId        int       `gorm:"primaryKey;autoIncrement;column:tag_id"`
 	TagName      string    `gorm:"column:tag_name;default:'';type:varchar(100);not null"`
-	TagType      int       `gorm:"column:tag_type;default:0;type:tinyint"`
 	Sort         int       `gorm:"column:sort;default:0;type:tinyint"`
 	ResourceType int       `gorm:"column:resource_type;default:0;not null;type:tinyint"`
 	CreateTime   time.Time `gorm:"column:create_time;default:CURRENT_TIMESTAMP"`

+ 74 - 41
services/knowledge/classify.go

@@ -3,6 +3,7 @@ package knowledge
 import (
 	"errors"
 	"eta_gn/eta_api/models/knowledge"
+	"eta_gn/eta_api/services/alarm_msg"
 	"eta_gn/eta_api/utils"
 	"fmt"
 	"sort"
@@ -272,16 +273,15 @@ func AddKnowledgeClassify(classifyName string, parentId, resourceType int) (err
 	fmt.Println(classify.ClassifyId)
 	// 如果父级分类不为空的话,那么就标记有子级分类,同时
 	if parentClassifyItem != nil {
-		parentClassifyItem.HasChild = 1
+		/*parentClassifyItem.HasChild = 1
 		err = parentClassifyItem.Update([]string{"HasChild"})
 		if err != nil {
 			return
 		}
-
+		*/
 		// 如果以前没有子级分类,那么就继承父级分类下的章节类型(创建新的章节与分类的关系)
 		if childClassifyCount <= 0 {
-			// todo 修改分类下的资源报告
-			moveResourceByAddClassify(parentClassifyItem, classify)
+			moveResourceByAddClassify(parentClassifyItem, classify, resourceType)
 		}
 	}
 	return
@@ -295,10 +295,12 @@ func AddKnowledgeClassify(classifyName string, parentId, resourceType int) (err
 // @param parentClassifyInfo *knowledge.KnowledgeClassify
 // @param currClassifyInfo *knowledge.KnowledgeClassify
 // @return err error
-func moveResourceByAddClassify(parentClassifyInfo, currClassifyInfo *knowledge.KnowledgeClassify) (err error) {
-	/*defer func() {
+func moveResourceByAddClassify(parentClassifyInfo, currClassifyInfo *knowledge.KnowledgeClassify, resourceType int) (err error) {
+	defer func() {
 		if err != nil {
-			utils.FileLog.Error(fmt.Sprint("历史报告更改分类失败,父级分类ID:", parentClassifyInfo.ClassifyId, ";当前分类ID:", currClassifyInfo.ClassifyId, ";错误信息:", err.Error()))
+			msg := fmt.Sprint("历史事件更改分类失败,父级分类ID:", parentClassifyInfo.ClassifyId, ";当前分类ID:", currClassifyInfo.ClassifyId, ";错误信息:", err.Error())
+			utils.FileLog.Error(msg)
+			go alarm_msg.SendAlarmMsg(msg, 3)
 		}
 	}()
 	if currClassifyInfo.Level > 3 {
@@ -307,40 +309,34 @@ func moveResourceByAddClassify(parentClassifyInfo, currClassifyInfo *knowledge.K
 	}
 
 	// 报告的分类归属调整,转为下一级的分类
-
-	var condition, updateStr string
+	var condition string
 	pars := make([]interface{}, 0)
-	switch currClassifyInfo.Level {
-	case 3: // 当前分类是3级分类
-		updateStr += ` classify_id_third = ?,classify_name_third = ?`
-		condition += ` AND classify_id_second = ? `
-	case 2: // 当前分类是2级分类
-		updateStr += ` classify_id_second = ?,classify_name_second = ?`
-		condition += ` AND classify_id_first = ? `
-	default:
-		err = errors.New("错误的分类层级")
-		return
-	}
-
-	pars = append(pars, currClassifyInfo.ClassifyId, currClassifyInfo.ClassifyName, parentClassifyInfo.ClassifyId)
-
-	// 获取当前分类下的所有章节类型
-	currReportChapterTypeList, err := knowledgeObj.GetAllReportChapterTypeListByClassifyId(currClassifyInfo.ClassifyId)
+	condition += ` AND resource_type = ? `
+	pars = append(pars, resourceType)
+	// 查询是需要转移的资源数量
+	condition += ` AND classify_id = ? `
+	pars = append(pars, parentClassifyInfo.ClassifyId)
+	idList, err := knowledge.GetKnowledgeResourceIdList(condition, pars)
 	if err != nil {
+		err = fmt.Errorf("查询需要转移的资源数量失败,Err: %s", err.Error())
 		return
 	}
-	// 当前的章节类型ID ---> 继承的章节类型ID
-	chapterTypeIdMap := make(map[int]int)
-	for _, v := range currReportChapterTypeList {
-		chapterTypeIdMap[v.ReportChapterTypeId] = v.InheritReportChapterTypeId
-	}
-
-	// 报告转移后,历史章节报告中的type_id也要修复成最新的type_id
-	err = knowledgeObj.ModifyKnowledgeClassifyAndReportChapterTypeByCondition(condition, pars, updateStr, chapterTypeIdMap, parentClassifyInfo.ClassifyId, currClassifyInfo.ClassifyId, currClassifyInfo.ClassifyName)
-	if err != nil {
+	if len(idList) == 0 { //没有需要转移的资源
 		return
-	}*/
+	}
 
+	newClassifyId := currClassifyInfo.ClassifyId
+	if currClassifyInfo.Level == 2 {
+		//查询排名第一的子分类
+		classifyObj := new(knowledge.KnowledgeClassify)
+		childClassify, e := classifyObj.GetFirstClassifyByParentId(currClassifyInfo.ClassifyId)
+		if e == nil {
+			newClassifyId = childClassify.ClassifyId
+		}
+	}
+	resourceObj := new(knowledge.KnowledgeResource)
+	// 批量事件的分类ID
+	err = resourceObj.UpdateClassifyIdByIds(idList, newClassifyId, resourceType)
 	return
 }
 
@@ -368,11 +364,24 @@ func EditKnowledgeClassify(classifyId, parentId int, classifyName string, resour
 		errMsg = "不允许修改分类层级"
 		return
 	}
+	// 父级分类
+	var parentClassifyItem *knowledge.KnowledgeClassify
+	// 父级分类下的子分类数量
+	var childClassifyCount int
+
 	if parentId > 0 {
-		parentClassifyItem, e := knowledgeObj.GetClassifyById(parentId)
-		if e != nil {
-			errMsg = "获取父级分类失败"
-			err = errors.New("获取父级分类失败, Err: " + e.Error())
+		// 获取父级分类信息
+		parentClassifyItem, err = knowledgeObj.GetClassifyById(parentId)
+		if err != nil {
+			errMsg = "获取父级分类信息失败"
+			if utils.IsErrNoRow(err) {
+				errMsg = "父级分类不存在"
+			}
+			return
+		}
+		if parentClassifyItem.ResourceType != resourceType {
+			errMsg = "父级分类与当前分类类型不一致"
+			err = fmt.Errorf(errMsg)
 			return
 		}
 		if parentClassifyItem.Level != item.Level {
@@ -380,7 +389,21 @@ func EditKnowledgeClassify(classifyId, parentId int, classifyName string, resour
 			err = errors.New("不允许修改分类层级")
 			return
 		}
+		level := parentClassifyItem.Level + 1
+
+		if level > 3 {
+			errMsg = "分类层级不可超过三级"
+			isSendEmail = false
+			return
+		}
+		// 获取父级分类下的子分类数量
+		childClassifyCount, err = knowledgeObj.GetCountClassifyChildByParentId(parentId)
+		if err != nil {
+			errMsg = "获取父级分类的子分类信息失败"
+			return
+		}
 	}
+
 	//originName := item.ClassifyName
 
 	// 重名校验
@@ -398,8 +421,6 @@ func EditKnowledgeClassify(classifyId, parentId int, classifyName string, resour
 	}
 	item.ClassifyName = classifyName
 
-	// ETA1.8.3:不允许修改上级分类  2024-6-17 13:21:01
-	//
 	// todo 修改父级,修改level,只允许修改同级别
 	item.ParentId = parentId
 	item.ModifyTime = time.Now().Local()
@@ -410,7 +431,19 @@ func EditKnowledgeClassify(classifyId, parentId int, classifyName string, resour
 		return
 	}
 	// todo 修改父级分类下相关的事件,找到当前分类的最小分类,把上一级的报告挪到最小分类上
+	// 如果父级分类不为空的话,那么就标记有子级分类,同时
+	if parentClassifyItem != nil {
+		/*parentClassifyItem.HasChild = 1
+		err = parentClassifyItem.Update([]string{"HasChild"})
+		if err != nil {
+			return
+		}*/
 
+		// 如果以前没有子级分类,那么就继承父级分类下的章节类型(创建新的章节与分类的关系)
+		if childClassifyCount <= 0 {
+			moveResourceByAddClassify(parentClassifyItem, item, resourceType)
+		}
+	}
 	return
 }
 

+ 27 - 2
services/knowledge/resource.go

@@ -96,7 +96,20 @@ func AddResource(req *knowledge.AddReq, sysUser *system.Admin) (item *knowledge.
 		return
 	}
 
-	// todo 校验标签
+	// 校验标签
+	if req.TagId > 0 {
+		tagObj := new(knowledge.KnowledgeTag)
+		_, e := tagObj.GetTagById(req.TagId)
+		if e != nil {
+			if utils.IsErrNoRow(e) {
+				err = fmt.Errorf("标签不存在,Err:" + e.Error())
+				errMsg = "标签不存在"
+				return
+			}
+			err = fmt.Errorf("获取标签失败,Err:" + e.Error())
+			return
+		}
+	}
 
 	item = new(knowledge.KnowledgeResource)
 	item.ClassifyId = req.ClassifyId
@@ -224,7 +237,19 @@ func EditResource(resourceInfo *knowledge.KnowledgeResource, req knowledge.EditR
 		err = fmt.Errorf("错误分类")
 		return
 	}
-
+	if req.TagId > 0 {
+		tagObj := new(knowledge.KnowledgeTag)
+		_, e := tagObj.GetTagById(req.TagId)
+		if e != nil {
+			if utils.IsErrNoRow(e) {
+				err = fmt.Errorf("标签不存在,Err:" + e.Error())
+				errMsg = "标签不存在"
+				return
+			}
+			err = fmt.Errorf("获取标签失败,Err:" + e.Error())
+			return
+		}
+	}
 	resourceInfo.ClassifyId = req.ClassifyId
 	resourceInfo.SourceFrom = req.SourceFrom
 	resourceInfo.TagId = req.TagId