Browse Source

修改英文分类名

xyxie 1 year ago
parent
commit
3bbc074877

+ 16 - 14
controllers/english_report/english_classify.go

@@ -367,35 +367,37 @@ func (this *EnglishReportController) EditClassify() {
 		IsShow:       1,
 	}
 	{
-		//更新相关联的路演视频里的分类名称
-		err = services.UpdateEnglishVideoClassifyId(oldItem, item, parent, classifyId)
+		// 更新研报里的分类名称
+		err = services.UpdateEnglishReportClassifyId(oldItem, item, classifyId)
 		if err != nil {
 			br.Msg = err.Error()
 			return
 		}
-		// 更新研报里的分类名称
-		err = services.UpdateEnglishReportClassifyId(oldItem, item, parent, classifyId)
+
+		//更新相关联的路演视频里的分类名称
+		err = services.UpdateEnglishVideoClassifyId(oldItem, item, classifyId)
 		if err != nil {
 			br.Msg = err.Error()
 			return
 		}
-		// 更新子分类里的rootID
 	}
-
 	err = models.ModifyEnglishClassify(item)
 	if err != nil {
 		br.Msg = "保存失败"
 		br.ErrMsg = "保存失败,Err:" + err.Error()
 		return
 	}
-
-	if item.RootId != oldItem.RootId {
-		err = models.UpdateEnglishClassifyRootIdByParentId(item.Id, item.RootId)
-		if err != nil {
-			br.Msg = "保存失败"
-			br.ErrMsg = "保存失败,Err:" + err.Error()
-			return
-		}
+	err = models.UpdateEnglishReportClassifyByFirstSecondClassifyId(classifyId, parentId)
+	if err != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		return
+	}
+	err = models.UpdateEnglishVideoClassifyByFirstSecondClassifyId(classifyId, parentId)
+	if err != nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		return
 	}
 	br.Ret = 200
 	br.Success = true

+ 40 - 0
models/english_report.go

@@ -324,6 +324,17 @@ func GetEnglishReportByCondition(condition string, pars []interface{}) (items []
 	return
 }
 
+func GetEnglishReportCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT count(*) 
+        FROM english_report WHERE 1=1  `
+	if condition != "" {
+		sql += condition
+	}
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
 // 发布报告
 func PublishEnglishReportById(reportId int, publishTime string) (err error) {
 	o := orm.NewOrmUsingDB("rddp")
@@ -654,6 +665,35 @@ func UpdateEnglishReportByClassifyId(classifyFirstName, classifySecondName strin
 	return
 }
 
+func UpdateEnglishReportClassifyByFirstSecondClassifyId(classifyId, parentId int) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	// 更新相关联的二级分类的parentId,和classify_name_second
+	sql := `update english_report r
+LEFT JOIN english_classify c ON r.classify_id_second = c.id
+SET r.classify_id_first=c.parent_id, r.classify_name_second=c.classify_name
+where (r.classify_id_first != c.parent_id or r.classify_name_second != c.classify_name) and r.classify_id_second =?`
+	_, err = o.Raw(sql, classifyId).Exec()
+	if err != nil {
+		return
+	}
+	//更新一级分类名
+	sql = `update english_report r
+    LEFT JOIN english_classify c ON r.classify_id_first = c.id
+    SET r.classify_name_first=c.classify_name
+where r.classify_name_first	!= c.classify_name and r.classify_id_first=?`
+	_, err = o.Raw(sql, parentId).Exec()
+	if err != nil {
+		return
+	}
+	//更新一级分类名
+	sql = `update english_report r
+    LEFT JOIN english_classify c ON r.classify_id_first = c.id
+    SET r.classify_name_first=c.classify_name
+where r.classify_name_first	!= c.classify_name and r.classify_id_first=?`
+	_, err = o.Raw(sql, classifyId).Exec()
+	return
+}
+
 // FetchEnglishReportById 主键获取英文报告
 func FetchEnglishReportById(reportId int) (item *EnglishReport, err error) {
 	o := orm.NewOrmUsingDB("rddp")

+ 24 - 8
models/english_video.go

@@ -240,16 +240,32 @@ func DeleteEnglishVideo(Id int) (err error) {
 	return
 }
 
-func GetEnglishVideoDetailByClassifyId(classifyIdFirst, classifyIdSecond int) (item *EnglishVideo, err error) {
+func UpdateEnglishVideoClassifyByFirstSecondClassifyId(classifyId, parentId int) (err error) {
 	o := orm.NewOrmUsingDB("rddp")
-	sql := ` SELECT * FROM english_video WHERE 1=1 `
-	if classifyIdSecond > 0 {
-		sql = sql + ` AND classify_id_second=?   ORDER BY stage DESC LIMIT 1`
-		err = o.Raw(sql, classifyIdSecond).QueryRow(&item)
-	} else {
-		sql = sql + ` AND classify_id_first=?   ORDER BY stage DESC LIMIT 1`
-		err = o.Raw(sql, classifyIdFirst).QueryRow(&item)
+	// 更新相关联的二级分类的parentId,和classify_name_second
+	sql := `update english_video r
+LEFT JOIN english_classify c ON r.classify_id_second = c.id
+SET r.classify_id_first=c.parent_id, r.classify_name_second=c.classify_name
+where (r.classify_id_first != c.parent_id or r.classify_name_second != c.classify_name) and r.classify_id_second =?`
+	_, err = o.Raw(sql, classifyId).Exec()
+	if err != nil {
+		return
+	}
+	//更新一级分类名
+	sql = `update english_video r
+    LEFT JOIN english_classify c ON r.classify_id_first = c.id
+    SET r.classify_name_first=c.classify_name
+where r.classify_name_first	!= c.classify_name and r.classify_id_first=?`
+	_, err = o.Raw(sql, parentId).Exec()
+	if err != nil {
+		return
 	}
+	//更新一级分类名
+	sql = `update english_video r
+    LEFT JOIN english_classify c ON r.classify_id_first = c.id
+    SET r.classify_name_first=c.classify_name
+where r.classify_name_first	!= c.classify_name and r.classify_id_first=?`
+	_, err = o.Raw(sql, classifyId).Exec()
 	return
 }
 

+ 76 - 102
services/english_report.go

@@ -395,8 +395,7 @@ func UpdateEnglishVideoEs(videoId int, publishState int) (err error) {
 	return
 }
 
-func UpdateEnglishReportClassifyId(oldItem, newItem, newParent *models.EnglishClassify, classifyId int) (err error) {
-	//一级分类改为二级分类
+func UpdateEnglishReportClassifyId(oldItem, newItem *models.EnglishClassify, classifyId int) (err error) {
 	defer func() {
 		if err != nil {
 			go alarm_msg.SendAlarmMsg("英文报告分类改名-同步更新报告表字段及权限表关键词失败3, Err:"+err.Error(), 3)
@@ -406,64 +405,51 @@ func UpdateEnglishReportClassifyId(oldItem, newItem, newParent *models.EnglishCl
 	//如果二级分类更换了父级分类,则更新报告中的父级分类ID
 	//如果一级分类更换了名称,则更新所有报告中的一级分类名称
 	//如果二级分类更换了名称,则更新所有报告中的二级分类名称
-	if oldItem.ParentId != newItem.ParentId {
-		parentClassifyName := ""
-		parentId := 0
-
-		//二级分类改为一级分类, 或者二级分类的一级分类有变更
-		if newItem.ParentId > 0 {
-			parentClassifyName = newParent.ClassifyName
-			parentId = newParent.Id
-		}
-
-		// 更新报告表分类字段
-		var condition string
-		var pars []interface{}
-
-		condition += ` AND classify_id_second = ? `
-		pars = append(pars, classifyId)
-		list, e := models.GetEnglishReportByCondition(condition, pars)
-		if e != nil {
-			err = e
-			return
-		}
-		if len(list) > 0 {
-			//二级分类改为一级分类
-			if oldItem.ParentId > 0 && newItem.ParentId == 0 {
-				//查询该二级分类下是否存在关联报告,如果存在则不允许变更
-				err = fmt.Errorf("该分类有关联的报告,不允许变更为一级分类")
-				return
-			}
-		}
-		var idSlice []string
-		for _, report := range list {
-			idSlice = append(idSlice, strconv.Itoa(report.Id))
-		}
-		ids := strings.Join(idSlice, ",")
-		if ids != "" {
-			if err = models.UpdateEnglishReportByClassifyId(parentClassifyName, newItem.ClassifyName, parentId, oldItem.Id, ids); err != nil {
-				return
-			}
-		}
-	} else if oldItem.ClassifyName != newItem.ClassifyName {
-		if oldItem.ParentId > 0 {
-			//只对二级分类名称作了修改
-			// 更新报告表分类字段
-			if err = models.UpdateEnglishReportSecondClassifyNameByClassifyId(classifyId, newItem.ClassifyName); err != nil {
-				return
+	if oldItem.ParentId > 0 && oldItem.ParentId != newItem.ParentId {
+		//二级分类下的三级分类如果有报告,则该二级分类不允许改成一级分类
+		if oldItem.ParentId > 0 && oldItem.ParentId == oldItem.RootId {
+			if newItem.ParentId == 0 {
+				// 更新报告表分类字段
+				var condition string
+				var pars []interface{}
+
+				condition += ` AND classify_id_first = ? `
+				pars = append(pars, classifyId)
+				count, e := models.GetEnglishReportCountByCondition(condition, pars)
+				if e != nil {
+					err = e
+					return
+				}
+				if count > 0 {
+					err = fmt.Errorf("该分类有关联的报告,不允许变更为一级分类")
+					return
+				}
 			}
-		} else if oldItem.ParentId == 0 {
-			//只对一级分类名称作了修改
-			// 更新报告表分类字段
-			if err = models.UpdateEnglishReportFirstClassifyNameByClassifyId(classifyId, newItem.ClassifyName); err != nil {
-				return
+		} else if oldItem.ParentId > 0 && oldItem.ParentId != oldItem.RootId {
+			//三级分类下如果有报告,则该三级分类不允许改成二级或或者一级分类
+			if (newItem.ParentId > 0 && newItem.ParentId == newItem.RootId) || newItem.ParentId == 0 {
+				// 更新报告表分类字段
+				var condition string
+				var pars []interface{}
+
+				condition += ` AND classify_id_second = ? `
+				pars = append(pars, classifyId)
+				count, e := models.GetEnglishReportCountByCondition(condition, pars)
+				if e != nil {
+					err = e
+					return
+				}
+				if count > 0 {
+					err = fmt.Errorf("该分类有关联的报告,不允许变更为二级分类或者一级分类")
+					return
+				}
 			}
 		}
 	}
 	return
 }
 
-func UpdateEnglishVideoClassifyId(oldItem, newItem, newParent *models.EnglishClassify, classifyId int) (err error) {
+func UpdateEnglishVideoClassifyId(oldItem, newItem *models.EnglishClassify, classifyId int) (err error) {
 	//一级分类改为二级分类
 	defer func() {
 		if err != nil {
@@ -474,56 +460,44 @@ func UpdateEnglishVideoClassifyId(oldItem, newItem, newParent *models.EnglishCla
 	//如果二级分类更换了父级分类,则更新报告中的父级分类ID
 	//如果一级分类更换了名称,则更新所有报告中的一级分类名称
 	//如果二级分类更换了名称,则更新所有报告中的二级分类名称
-	if oldItem.ParentId != newItem.ParentId {
-		parentClassifyName := ""
-		parentId := 0
-		//二级分类改为一级分类, 或者二级分类的一级分类有变更
-		if newItem.ParentId > 0 {
-			parentClassifyName = newParent.ClassifyName
-			parentId = newParent.Id
-		}
-
-		// 更新报告表分类字段
-		var condition string
-		var pars []interface{}
-
-		condition += ` AND classify_id_second = ? `
-		pars = append(pars, classifyId)
-		list, e := models.GetEnglishVideoByCondition(condition, pars)
-		if e != nil {
-			err = e
-			return
-		}
-		if len(list) > 0 {
-			//二级分类改为一级分类
-			if oldItem.ParentId > 0 && newItem.ParentId == 0 {
-				//查询该二级分类下是否存在关联报告,如果存在则不允许变更
-				err = fmt.Errorf("该分类有关联的视频,不允许变更为一级分类")
-				return
+	if oldItem.ParentId > 0 && oldItem.ParentId != newItem.ParentId {
+		//二级分类下的三级分类如果有报告,则该二级分类不允许改成一级分类
+		if oldItem.ParentId > 0 && oldItem.ParentId == oldItem.RootId {
+			if newItem.ParentId == 0 {
+				// 更新报告表分类字段
+				var condition string
+				var pars []interface{}
+
+				condition += ` AND classify_id_first = ? `
+				pars = append(pars, classifyId)
+				count, e := models.GetEnglishVideoListCount(condition, pars)
+				if e != nil {
+					err = e
+					return
+				}
+				if count > 0 {
+					err = fmt.Errorf("该分类有关联的视频,不允许变更为一级分类")
+					return
+				}
 			}
-		}
-		var idSlice []string
-		for _, report := range list {
-			idSlice = append(idSlice, strconv.Itoa(report.Id))
-		}
-		ids := strings.Join(idSlice, ",")
-		if ids != "" {
-			if err = models.UpdateEnglishVideoByClassifyId(parentClassifyName, newItem.ClassifyName, parentId, oldItem.Id, ids); err != nil {
-				return
-			}
-		}
-	} else if oldItem.ClassifyName != newItem.ClassifyName {
-		if oldItem.ParentId > 0 {
-			//只对二级分类名称作了修改
-			// 更新报告表分类字段
-			if err = models.UpdateEnglishVideoSecondClassifyNameByClassifyId(classifyId, newItem.ClassifyName); err != nil {
-				return
-			}
-		} else if oldItem.ParentId == 0 {
-			//只对一级分类名称作了修改
-			// 更新报告表分类字段
-			if err = models.UpdateEnglishVideoFirstClassifyNameByClassifyId(classifyId, newItem.ClassifyName); err != nil {
-				return
+		} else if oldItem.ParentId > 0 && oldItem.ParentId != oldItem.RootId {
+			//三级分类下如果有报告,则该三级分类不允许改成二级或或者一级分类
+			if (newItem.ParentId > 0 && newItem.ParentId == newItem.RootId) || newItem.ParentId == 0 {
+				// 更新报告表分类字段
+				var condition string
+				var pars []interface{}
+
+				condition += ` AND classify_id_second = ? `
+				pars = append(pars, classifyId)
+				count, e := models.GetEnglishVideoListCount(condition, pars)
+				if e != nil {
+					err = e
+					return
+				}
+				if count > 0 {
+					err = fmt.Errorf("该分类有关联的视频,不允许变更为二级分类或者一级分类")
+					return
+				}
 			}
 		}
 	}