Bläddra i källkod

fix: 同花顺高频批量删除

hsun 7 månader sedan
förälder
incheckning
f7ba72a161
2 ändrade filer med 85 tillägg och 19 borttagningar
  1. 74 19
      controllers/data_manage/base_from_ths_hf.go
  2. 11 0
      models/data_manage/base_from_ths_hf.go

+ 74 - 19
controllers/data_manage/base_from_ths_hf.go

@@ -1231,9 +1231,27 @@ func (this *BaseFromThsHfController) MultiOpt() {
 		br.Msg = "请选择刷新方式"
 		return
 	}
+	resp := new(data_manage.ThsHfIndexMultiOptResp)
 
-	// 批量移动
+	// 指标名称
 	indexOb := new(data_manage.BaseFromThsHfIndex)
+	indexMap := make(map[int]*data_manage.BaseFromThsHfIndex)
+	{
+		cond := fmt.Sprintf(" AND %s IN (%s)", indexOb.Cols().PrimaryId, utils.GetOrmInReplace(len(params.IndexIds)))
+		pars := make([]interface{}, 0)
+		pars = append(pars, params.IndexIds)
+		list, e := indexOb.GetItemsByCondition(cond, pars, []string{indexOb.Cols().PrimaryId, indexOb.Cols().IndexCode, indexOb.Cols().IndexName}, "")
+		if e != nil {
+			br.Msg = "删除失败"
+			br.ErrMsg = fmt.Sprintf("获取源指标列表失败, %v", e)
+			return
+		}
+		for _, v := range list {
+			indexMap[v.BaseFromThsHfIndexId] = v
+		}
+	}
+
+	// 批量移动
 	if params.OptType == 1 {
 		if e := indexOb.UpdateClassifyMulti(params.IndexIds, params.MoveClassifyId); e != nil {
 			br.Msg = "移动失败"
@@ -1244,37 +1262,73 @@ func (this *BaseFromThsHfController) MultiOpt() {
 
 	// 批量删除
 	if params.OptType == 2 {
-		// 校验是否被引用
-		edbMappingOb := new(data_manage.BaseFromEdbMapping)
+		// 被引用的指标需要提示出来, 未被引用的直接删除
+		usedIndexIds := make([]int, 0)
 		{
+			edbMappingOb := new(data_manage.BaseFromEdbMapping)
 			cond := fmt.Sprintf(" AND %s IN (%s)", edbMappingOb.Cols().BaseFromIndexId, utils.GetOrmInReplace(len(params.IndexIds)))
 			pars := make([]interface{}, 0)
 			pars = append(pars, params.IndexIds)
-			count, e := edbMappingOb.GetCountByCondition(cond, pars)
+			list, e := edbMappingOb.GetItemsByCondition(cond, pars, []string{}, "")
 			if e != nil {
 				br.Msg = "删除失败"
 				br.ErrMsg = fmt.Sprintf("获取源指标关联失败, %v", e)
 				return
 			}
-			if count > 0 {
-				br.Msg = "存在指标被引用, 不允许删除"
-				return
+			for _, v := range list {
+				if !utils.InArrayByInt(usedIndexIds, v.BaseFromIndexId) {
+					usedIndexIds = append(usedIndexIds, v.BaseFromIndexId)
+				}
 			}
 		}
 
-		if e := indexOb.MultiRemove(params.IndexIds); e != nil {
-			br.Msg = "删除失败"
-			br.ErrMsg = fmt.Sprintf("批量删除指标失败, %v", e)
-			return
+		// 可删除的指标
+		removeIndexIds := params.IndexIds
+		if len(usedIndexIds) > 0 {
+			removeIndexIds = utils.MinusInt(params.IndexIds, usedIndexIds)
+
+			// 标记不允许删除的
+			for _, v := range usedIndexIds {
+				t := indexMap[v]
+				if t == nil {
+					continue
+				}
+				resp.Fail = append(resp.Fail, &data_manage.ThsHfIndexBaseInfo{
+					IndexId:   v,
+					IndexCode: t.IndexCode,
+					IndexName: t.IndexName,
+				})
+			}
 		}
-		dataOb := new(data_manage.BaseFromThsHfData)
-		cond := fmt.Sprintf(" %s IN (%s)", dataOb.Cols().BaseFromThsHfIndexId, utils.GetOrmInReplace(len(params.IndexIds)))
-		pars := make([]interface{}, 0)
-		pars = append(pars, params.IndexIds)
-		if e := dataOb.RemoveByCondition(cond, pars); e != nil {
-			br.Msg = "删除失败"
-			br.ErrMsg = fmt.Sprintf("批量删除指标数据失败, %v", e)
-			return
+
+		if len(removeIndexIds) > 0 {
+			if e := indexOb.MultiRemove(removeIndexIds); e != nil {
+				br.Msg = "删除失败"
+				br.ErrMsg = fmt.Sprintf("批量删除指标失败, %v", e)
+				return
+			}
+			dataOb := new(data_manage.BaseFromThsHfData)
+			cond := fmt.Sprintf(" %s IN (%s)", dataOb.Cols().BaseFromThsHfIndexId, utils.GetOrmInReplace(len(removeIndexIds)))
+			pars := make([]interface{}, 0)
+			pars = append(pars, removeIndexIds)
+			if e := dataOb.RemoveByCondition(cond, pars); e != nil {
+				br.Msg = "删除失败"
+				br.ErrMsg = fmt.Sprintf("批量删除指标数据失败, %v", e)
+				return
+			}
+
+			// 标记删除成功的
+			for _, v := range removeIndexIds {
+				t := indexMap[v]
+				if t == nil {
+					continue
+				}
+				resp.Success = append(resp.Success, &data_manage.ThsHfIndexBaseInfo{
+					IndexId:   v,
+					IndexCode: t.IndexCode,
+					IndexName: t.IndexName,
+				})
+			}
 		}
 	}
 
@@ -1294,6 +1348,7 @@ func (this *BaseFromThsHfController) MultiOpt() {
 		}
 	}
 
+	br.Data = resp
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 11 - 0
models/data_manage/base_from_ths_hf.go

@@ -496,3 +496,14 @@ type ThsHfIndexMultiSave2EdbResp struct {
 	Success []*ThsHfIndexMultiSave2EdbPreItem `description:"添加成功的指标"`
 	Fail    []*ThsHfIndexMultiSave2EdbPreItem `description:"添加失败的指标"`
 }
+
+type ThsHfIndexMultiOptResp struct {
+	Success []*ThsHfIndexBaseInfo `description:"操作成功的指标"`
+	Fail    []*ThsHfIndexBaseInfo `description:"操作失败的指标"`
+}
+
+type ThsHfIndexBaseInfo struct {
+	IndexId   int    `description:"指标ID"`
+	IndexCode string `description:"指标编码"`
+	IndexName string `description:"指标名称"`
+}