Browse Source

Merge branch 'feature/gn_edb' into dm

hsun 5 months ago
parent
commit
3426f5a9e8

+ 21 - 7
controllers/data_manage/edb_classify.go

@@ -1228,7 +1228,7 @@ func (this *EdbClassifyController) ClassifyTree() {
 	}()
 	// 分类来源筛选
 	classifyType, _ := this.GetInt("ClassifyType", utils.EdbClassifyTypeBase) // 默认指标库的
-	if classifyType != utils.EdbClassifyTypeBase && classifyType != utils.EdbClassifyTypeCalculate {
+	if classifyType != utils.EdbClassifyTypeBase && classifyType != utils.EdbClassifyTypeCalculate && classifyType != utils.EdbClassifyTypeOrigin {
 		br.Msg = "参数有误"
 		br.ErrMsg = fmt.Sprintf("指标分类类型有误, ClassifyType: %d", classifyType)
 		return
@@ -1238,13 +1238,27 @@ func (this *EdbClassifyController) ClassifyTree() {
 	//	edbType = utils.EdbTypeCalculate
 	//}
 
-	//allList, err := data_manage.GetNormalEdbClassifyAll()
-	allList, err := data_manage.GetAllEdbClassifyByType(classifyType)
-	if err != nil && !utils.IsErrNoRow(err) {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取数据失败,Err:" + err.Error()
-		return
+	allList := make([]*data_manage.EdbClassifyItems, 0)
+	if classifyType == utils.EdbClassifyTypeOrigin {
+		// 基础指标+计算指标
+		list, e := data_manage.GetEdbClassifyByClassifyTypes([]int{utils.EdbClassifyTypeBase, utils.EdbClassifyTypeCalculate})
+		if e != nil && !utils.IsErrNoRow(e) {
+			br.Msg = "获取失败"
+			br.ErrMsg = fmt.Sprintf("获取分类失败, %v", e)
+			return
+		}
+		allList = list
+	} else {
+		// 单一类型
+		list, err := data_manage.GetAllEdbClassifyByType(classifyType)
+		if err != nil && !utils.IsErrNoRow(err) {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
+			return
+		}
+		allList = list
 	}
+
 	nodeAll := make([]*data_manage.EdbClassifyItems, 0)
 	var sortList data_manage.EdbClassifyItemList
 

+ 83 - 62
controllers/data_manage/edb_collect.go

@@ -142,70 +142,8 @@ func (this *EdbCollectController) List() {
 		resp.List = append(resp.List, data_manage.FormatEdbInfo2CollectItem(v))
 	}
 
-	// 指标权限
-	//{
-	//	var edbClassifyIds []int
-	//	for _, v := range list {
-	//		edbClassifyIds = append(edbClassifyIds, v.ClassifyId)
-	//	}
-	//	classifyMap := make(map[int]*data_manage.EdbClassify)
-	//	classifyList, e := data_manage.GetEdbClassifyByIdList(edbClassifyIds)
-	//	if e != nil {
-	//		br.Msg = "获取失败"
-	//		br.ErrMsg = fmt.Sprintf("获取指标分类列表失败, %v", e)
-	//		return
-	//	}
-	//	for _, v := range classifyList {
-	//		classifyMap[v.ClassifyId] = v
-	//	}
-	//
-	//	// 获取所有有权限的指标和分类
-	//	authEdbIds, authEdbClassifyIds, e := data_manage_permission.GetUserEdbAndClassifyPermissionList(sysUser.AdminId, 0, 0)
-	//	if e != nil {
-	//		br.Msg = "获取失败"
-	//		br.ErrMsg = fmt.Sprintf("获取有权限的指标和分类失败, %v", e)
-	//		return
-	//	}
-	//
-	//	// 已被供应商暂停的指标编码
-	//	stopIndexCodes := make(map[string]bool)
-	//	{
-	//		var indexCodes []string
-	//		for _, v := range list {
-	//			if v.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
-	//				indexCodes = append(indexCodes, v.EdbCode)
-	//			}
-	//		}
-	//		if len(indexCodes) > 0 {
-	//			stopIndexes, e := data_manage.GetNotIsSupplierStopIndexByCodeList(indexCodes, 1)
-	//			if e != nil {
-	//				br.Msg = "获取失败"
-	//				br.ErrMsg = fmt.Sprintf("获取供应商停更的指标失败, %v", e)
-	//				return
-	//			}
-	//			for _, v := range stopIndexes {
-	//				stopIndexCodes[v.IndexCode] = true
-	//			}
-	//		}
-	//	}
-	//
-	//	for _, v := range list {
-	//		// 权限按钮
-	//		if c, ok := classifyMap[v.ClassifyId]; ok {
-	//			v.HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, c.IsJoinPermission, v.EdbInfoId, v.ClassifyId, authEdbIds, authEdbClassifyIds)
-	//			v.Button = data.GetEdbOpButton(sysUser, v.SysUserId, v.EdbType, v.EdbInfoType, v.HaveOperaAuth)
-	//		}
-	//		// 供应商停用
-	//		if v.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
-	//			if _, ok := stopIndexCodes[v.EdbCode]; ok {
-	//				v.IsSupplierStop = 1
-	//			}
-	//		}
-	//	}
-	//}
 	page = paging.GetPaging(currentIndex, pageSize, int(dataCount))
 	resp.Paging = page
-	//resp.List = list
 
 	br.Data = resp
 	br.Ret = 200
@@ -343,3 +281,86 @@ func (this *EdbCollectController) CancelCollect() {
 	br.Success = true
 	br.Msg = "操作成功"
 }
+
+// Move
+// @Title 移动收藏
+// @Description 移动收藏
+// @Success 200 {object} data_manage.EdbCollectMoveReq
+// @router /edb_collect/move [post]
+func (this *EdbCollectController) Move() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	var req data_manage.EdbCollectMoveReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
+		return
+	}
+
+	var newSort int
+	if req.PrevEdbInfoId <= 0 {
+		firstOne, err := data_manage.GetEdbCollectSort(sysUser.AdminId, req.ClassifyId, 0)
+		if err != nil {
+			br.Msg = "获取数据失败!"
+			br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
+			return
+		}
+		newSort = firstOne.Sort - 1
+	} else if req.NextEdbInfoId <= 0 {
+		lastOne, err := data_manage.GetEdbCollectSort(sysUser.AdminId, req.ClassifyId, 1)
+		if err != nil {
+			br.Msg = "获取数据失败!"
+			br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
+			return
+		}
+		newSort = lastOne.Sort + 1
+	} else {
+		preMapItem, err := data_manage.GetEdbCollectByEdbInfoId(sysUser.AdminId, req.PrevEdbInfoId, req.ClassifyId)
+		if err != nil {
+			br.Msg = "获取数据失败!"
+			br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
+			return
+		}
+		nextMapItem, err := data_manage.GetEdbCollectByEdbInfoId(sysUser.AdminId, req.NextEdbInfoId, req.ClassifyId)
+		if err != nil {
+			br.Msg = "获取数据失败!"
+			br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
+			return
+		}
+		newSort = (preMapItem.Sort + nextMapItem.Sort) / 2
+
+		newSort = preMapItem.Sort + 1
+		var updateSortStr string
+		if preMapItem.Sort == nextMapItem.Sort {
+			updateSortStr = `sort + 2`
+		} else if nextMapItem.Sort-preMapItem.Sort == 1 {
+			updateSortStr = `sort + 1`
+		}
+		if updateSortStr != `` {
+			_ = data_manage.UpdateEdbCollectSortByClassifyId(req.ClassifyId, preMapItem.Sort, preMapItem.EdbCollectId, updateSortStr)
+		}
+	}
+	if e := data_manage.UpdateEdbCollectMove(newSort, sysUser.AdminId, req.EdbInfoId, req.ClassifyId); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("更新指标收藏失败, %v", e)
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 83 - 23
controllers/data_manage/edb_collect_classify.go

@@ -404,7 +404,7 @@ func (this *EdbCollectClassifyController) Remove() {
 	br.Msg = "操作成功"
 }
 
-// TODO:Move
+// Move
 // @Title 移动分类
 // @Description 移动分类
 // @Param	request	body data_manage.EdbCollectClassifyMoveReq true "type json string"
@@ -426,28 +426,88 @@ func (this *EdbCollectClassifyController) Move() {
 		br.Ret = 408
 		return
 	}
-	//var req data_manage.BaseFromThsHfClassifyMoveReq
-	//if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
-	//	br.Msg = "参数解析异常"
-	//	br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
-	//	return
-	//}
-	//if req.ClassifyId <= 0 && req.ItemId <= 0 {
-	//	br.Msg = "请选择分类或指标"
-	//	return
-	//}
-	//
-	//err, errMsg := data.ThsHfMoveClassify(req, sysUser)
-	//if errMsg != `` {
-	//	br.Msg = errMsg
-	//	br.ErrMsg = errMsg
-	//	if err != nil {
-	//		br.ErrMsg = err.Error()
-	//	} else {
-	//		br.IsSendEmail = false
-	//	}
-	//	return
-	//}
+	var req data_manage.EdbCollectClassifyMoveReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
+		return
+	}
+
+	classifyOb := new(data_manage.EdbCollectClassify)
+	item, e := classifyOb.GetItemById(req.ClassifyId)
+	if e != nil {
+		if utils.IsErrNoRow(e) {
+			br.Msg = "分类不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取分类失败, %v", e)
+		return
+	}
+
+	updateCol := make([]string, 0)
+	//如果有传入 上一个兄弟节点分类id
+	if req.PrevClassifyId > 0 {
+		prevClassify, err := data_manage.GetEdbCollectClassifyById(sysUser.AdminId, req.PrevClassifyId)
+		if err != nil {
+			br.Msg = "移动失败"
+			br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
+			return
+		}
+
+		//如果是移动在两个兄弟节点之间
+		if req.NextClassifyId > 0 {
+			//下一个兄弟节点
+			nextClassify, err := data_manage.GetEdbCollectClassifyById(sysUser.AdminId, req.NextClassifyId)
+			if err != nil {
+				br.Msg = "移动失败"
+				br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
+				return
+			}
+			//如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
+			if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == item.Sort {
+				//变更兄弟节点的排序
+				updateSortStr := `sort + 2`
+				_ = data_manage.UpdateEdbCollectClassifySortByClassifyId(sysUser.AdminId, prevClassify.EdbCollectClassifyId, prevClassify.Sort, updateSortStr)
+			} else {
+				//如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
+				if nextClassify.Sort-prevClassify.Sort == 1 {
+					//变更兄弟节点的排序
+					updateSortStr := `sort + 1`
+					_ = data_manage.UpdateEdbCollectClassifySortByClassifyId(sysUser.AdminId, 0, prevClassify.Sort, updateSortStr)
+				}
+			}
+		}
+
+		item.Sort = prevClassify.Sort + 1
+		item.ModifyTime = time.Now()
+		updateCol = append(updateCol, "Sort", "ModifyTime")
+	} else {
+		firstClassify, err := data_manage.GetFirstEdbCollectClassifyByAdminId(sysUser.AdminId)
+		if err != nil && !utils.IsErrNoRow(err) {
+			br.Msg = "移动失败"
+			br.ErrMsg = "获取获取当前账号下的排序第一条的分类信息失败,Err:" + err.Error()
+			return
+		}
+
+		//如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
+		if firstClassify != nil && firstClassify.Sort == 0 {
+			updateSortStr := ` sort + 1 `
+			_ = data_manage.UpdateEdbCollectClassifySortByClassifyId(sysUser.AdminId, firstClassify.EdbCollectClassifyId-1, 0, updateSortStr)
+		}
+
+		item.Sort = 0 //那就是排在第一位
+		item.ModifyTime = time.Now()
+		updateCol = append(updateCol, "Sort", "ModifyTime")
+	}
+
+	if len(updateCol) > 0 {
+		if e = item.Update(updateCol); e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("更新分类失败, %v", e)
+			return
+		}
+	}
 
 	br.Ret = 200
 	br.Success = true

+ 11 - 0
models/data_manage/edb_classify.go

@@ -751,3 +751,14 @@ func GetIsJoinPermissionEdbClassifyIdList(classifyType int) (list []int, err err
 
 	return
 }
+
+// GetEdbClassifyByClassifyTypes 根据类型IDs获取分类
+func GetEdbClassifyByClassifyTypes(classifyTypes []int) (items []*EdbClassifyItems, err error) {
+	if len(classifyTypes) == 0 {
+		return
+	}
+	o := global.DmSQL["data"]
+	sql := `SELECT * FROM edb_classify WHERE classify_type IN (?) ORDER BY classify_type ASC, sort ASC, classify_id ASC`
+	err = o.Raw(sql, classifyTypes).Scan(&items).Error
+	return
+}

+ 41 - 1
models/data_manage/edb_collect.go

@@ -229,7 +229,7 @@ MAX(b."modify_time") "modify_time"
  FROM edb_collect AS a JOIN edb_info AS b ON a.edb_info_id = b.edb_info_id
 	  WHERE 1=1 %s
 	  GROUP BY b.edb_info_id
-ORDER  BY collect_time DESC LIMIT ?,?`, condition)
+ORDER BY a.sort ASC, collect_time DESC LIMIT ?,?`, condition)
 	pars = append(pars, startSize, pageSize)
 	err = global.DmSQL["data"].Raw(sql, pars...).Scan(&list).Error
 	return
@@ -295,3 +295,43 @@ type CollectEdbInfoListResp struct {
 	Paging *paging.PagingItem
 	List   []*CollectEdbInfoItem
 }
+
+// EdbCollectMoveReq 移动收藏
+type EdbCollectMoveReq struct {
+	EdbInfoId     int `description:"收藏的指标ID(分类下指标ID唯一)"`
+	PrevEdbInfoId int `description:"前一个收藏的指标ID"`
+	NextEdbInfoId int `description:"后一个收藏的指标ID"`
+	ClassifyId    int `description:"当前分类ID"`
+}
+
+func GetEdbCollectSort(adminId, classifyId, sort int) (item *EdbCollect, err error) {
+	sql := ` SELECT * FROM edb_collect WHERE 1=1 AND sys_user_id = ? AND edb_collect_classify_id = ? `
+	if sort == 1 {
+		sql += ` ORDER BY sort DESC, edb_collect_id ASC LIMIT 1 `
+	} else {
+		sql += ` ORDER BY sort ASC, edb_collect_id DESC LIMIT 1 `
+	}
+	err = global.DmSQL["data"].Raw(sql, adminId, classifyId).First(&item).Error
+	return
+}
+
+func GetEdbCollectByEdbInfoId(adminId, edbInfoId, classifyId int) (item *EdbCollect, err error) {
+	sql := `SELECT * FROM edb_collect WHERE sys_user_id = ? AND edb_info_id = ? AND edb_collect_classify_id=? `
+	err = global.DmSQL["data"].Raw(sql, adminId, edbInfoId, classifyId).First(&item).Error
+	return
+}
+
+func UpdateEdbCollectSortByClassifyId(classifyId, nowSort int, prevMyChartClassifyMappingId int, updateSort string) (err error) {
+	sql := ` update edb_collect set sort = ` + updateSort + ` WHERE edb_collect_classify_id = ?  `
+	if prevMyChartClassifyMappingId > 0 {
+		sql += ` AND ( sort > ? or ( edb_collect_id < ? and sort=? )) `
+	}
+	err = global.DmSQL["data"].Exec(sql, classifyId, nowSort, prevMyChartClassifyMappingId, nowSort).Error
+	return
+}
+
+func UpdateEdbCollectMove(sort, adminId, edbInfoId, myChartClassifyId int) (err error) {
+	sql := ` UPDATE edb_collect SET sort = ?,modify_time=NOW() WHERE sys_user_id=? AND edb_info_id=? AND edb_collect_classify_id=? `
+	err = global.DmSQL["data"].Exec(sql, sort, adminId, edbInfoId, myChartClassifyId).Error
+	return
+}

+ 31 - 0
models/data_manage/edb_collect_classify.go

@@ -247,3 +247,34 @@ func (m *EdbCollectClassify) RemoveClassifyAndCollect(classifyIds []int) (err er
 	}
 	return
 }
+
+// EdbCollectClassifyMoveReq 移动分类
+type EdbCollectClassifyMoveReq struct {
+	ClassifyId     int `description:"分类ID"`
+	PrevClassifyId int `description:"上一个兄弟节点分类ID"`
+	NextClassifyId int `description:"下一个兄弟节点分类ID"`
+}
+
+// GetEdbCollectClassifyById 获取分类
+func GetEdbCollectClassifyById(adminId, classifyId int) (item *EdbCollectClassify, err error) {
+	sql := `SELECT * FROM edb_collect_classify WHERE sys_user_id = ? AND edb_collect_classify_id = ? `
+	err = global.DmSQL["data"].Raw(sql, adminId, classifyId).First(&item).Error
+	return
+}
+
+// GetFirstEdbCollectClassifyByAdminId 获取当前账号下,排序第一条的分类数据
+func GetFirstEdbCollectClassifyByAdminId(adminId int) (item *EdbCollectClassify, err error) {
+	sql := `SELECT * FROM edb_collect_classify WHERE sys_user_id = ? ORDER BY sort ASC, edb_collect_classify_id ASC LIMIT 1`
+	err = global.DmSQL["data"].Raw(sql, adminId).First(&item).Error
+	return
+}
+
+// UpdateEdbCollectClassifySortByClassifyId 更新排序
+func UpdateEdbCollectClassifySortByClassifyId(adminId, classifyId, nowSort int, updateSort string) (err error) {
+	sql := fmt.Sprintf(`UPDATE edb_collect_classify SET sort = %d WHERE sys_user_id = ? and sort > ? `, updateSort)
+	if classifyId > 0 {
+		sql += ` OR ( edb_collect_classify_id > ` + fmt.Sprint(classifyId) + ` AND sort = ` + fmt.Sprint(nowSort) + `)`
+	}
+	err = global.DmSQL["data"].Exec(sql, adminId, nowSort).Error
+	return
+}

+ 9 - 0
routers/commentsRouter.go

@@ -3958,6 +3958,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:EdbCollectController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:EdbCollectController"],
+        beego.ControllerComments{
+            Method: "Move",
+            Router: `/edb_collect/move`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:EdbInfoController"],
         beego.ControllerComments{
             Method: "BaiinfoClassify",

+ 4 - 3
utils/constants.go

@@ -482,9 +482,10 @@ const MultiAddNum = 500
 const EdbClassifyMaxLevel = 9 // 指标库分类最大层级
 
 const (
-	EdbClassifyTypeBase      = 0 // 指标分类-指标库
-	EdbClassifyTypePredict   = 1 // 指标分类-预测指标
-	EdbClassifyTypeCalculate = 2 // 指标分类-计算指标
+	EdbClassifyTypeBase      = 0  // 指标分类-指标库
+	EdbClassifyTypePredict   = 1  // 指标分类-预测指标
+	EdbClassifyTypeCalculate = 2  // 指标分类-计算指标
+	EdbClassifyTypeOrigin    = -1 // 指标分类-原(基础+计算)指标
 )
 
 const (