|
@@ -132,8 +132,33 @@ func AddEdbClassify(classifyName string, parentId, level int, classifyType uint8
|
|
|
errMsg = `分类名称已存在,请重新输入`
|
|
|
return
|
|
|
}
|
|
|
+ if level > 6 {
|
|
|
+ errMsg = `最高只支持添加6级分类`
|
|
|
+ return
|
|
|
+ }
|
|
|
//获取该层级下最大的排序数
|
|
|
- maxSort, err := data_manage.GetEdbClassifyMaxSort(parentId, classifyType)
|
|
|
+ maxSort, err := GetEdbClassifyMaxSort(parentId, classifyType)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "获取失败"
|
|
|
+ err = errors.New("查询排序信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //查询顶级rootId
|
|
|
+ rootId := 0
|
|
|
+ if parentId > 0 {
|
|
|
+ parentClassify, tErr := data_manage.GetEdbClassifyById(parentId)
|
|
|
+ if tErr != nil {
|
|
|
+ if tErr.Error() == utils.ErrNoRow() {
|
|
|
+ errMsg = "父级分类不存在"
|
|
|
+ err = errors.New(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ errMsg = "获取失败"
|
|
|
+ err = errors.New("获取分类信息失败,Err:" + tErr.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ rootId = parentClassify.RootId
|
|
|
+ }
|
|
|
|
|
|
timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
|
|
|
classifyInfo = &data_manage.EdbClassify{
|
|
@@ -141,6 +166,7 @@ func AddEdbClassify(classifyName string, parentId, level int, classifyType uint8
|
|
|
ClassifyType: classifyType,
|
|
|
ClassifyName: classifyName,
|
|
|
ParentId: parentId,
|
|
|
+ RootId: rootId,
|
|
|
HasData: 0,
|
|
|
CreateTime: time.Now(),
|
|
|
ModifyTime: time.Now(),
|
|
@@ -148,7 +174,7 @@ func AddEdbClassify(classifyName string, parentId, level int, classifyType uint8
|
|
|
SysUserRealName: sysUserName,
|
|
|
Level: level + 1,
|
|
|
UniqueCode: utils.MD5(utils.DATA_PREFIX + "_" + timestamp),
|
|
|
- Sort: maxSort,
|
|
|
+ Sort: maxSort + 1,
|
|
|
}
|
|
|
_, err = data_manage.AddEdbClassify(classifyInfo)
|
|
|
if err != nil {
|
|
@@ -475,113 +501,366 @@ func Delete(classifyId, edbInfoId int, sysUser *system.Admin, requestBody, reque
|
|
|
}
|
|
|
|
|
|
// MoveEdbClassify 移动指标分类
|
|
|
-func MoveEdbClassify(classifyId, parentClassifyId, prevClassifyId, nextClassifyId int, sysUser *system.Admin) (err error, errMsg string) {
|
|
|
- //判断分类是否存在
|
|
|
- edbClassifyInfo, err := data_manage.GetEdbClassifyById(classifyId)
|
|
|
- if err != nil {
|
|
|
- errMsg = "移动失败"
|
|
|
- err = errors.New("获取分类信息失败,Err:" + err.Error())
|
|
|
- return
|
|
|
+func MoveEdbClassify(req data_manage.MoveEdbClassifyReq, sysUser *system.Admin, classifyType uint8) (err error, errMsg string) {
|
|
|
+ // req.ClassifyId, req.ParentClassifyId, req.PrevClassifyId, req.NextClassifyId
|
|
|
+ classifyId := req.ClassifyId
|
|
|
+ parentClassifyId := req.ParentClassifyId
|
|
|
+ prevClassifyId := req.PrevClassifyId
|
|
|
+ nextClassifyId := req.PrevClassifyId
|
|
|
+
|
|
|
+ edbInfoId := req.EdbInfoId
|
|
|
+ prevEdbInfoId := req.PrevEdbInfoId
|
|
|
+ nextEdbInfoId := req.NextEdbInfoId
|
|
|
+
|
|
|
+ //首先确定移动的对象是分类还是指标
|
|
|
+ //判断上一个节点是分类还是指标
|
|
|
+ //判断下一个节点是分类还是指标
|
|
|
+ //同时更新分类目录下的分类sort和指标sort
|
|
|
+ //更新当前移动的分类或者指标sort
|
|
|
+
|
|
|
+ var parentEdbClassifyInfo *data_manage.EdbClassify
|
|
|
+ if parentClassifyId > 0 {
|
|
|
+ parentEdbClassifyInfo, err = data_manage.GetEdbClassifyById(parentClassifyId)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("获取上级分类信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- // 权限校验
|
|
|
- {
|
|
|
- if edbClassifyInfo.ClassifyType == 0 { // 普通指标
|
|
|
- button := GetEdbClassifyOpButton(sysUser, edbClassifyInfo.SysUserId)
|
|
|
- if !button.MoveButton {
|
|
|
- errMsg = "无操作权限"
|
|
|
- err = errors.New(errMsg)
|
|
|
+ //如果有传入 上一个兄弟节点分类id
|
|
|
+ var (
|
|
|
+ edbClassifyInfo *data_manage.EdbClassify
|
|
|
+ prevClassify *data_manage.EdbClassify
|
|
|
+ nextClassify *data_manage.EdbClassify
|
|
|
+
|
|
|
+ edbInfo *data_manage.EdbInfo
|
|
|
+ prevEdbInfo *data_manage.EdbInfo
|
|
|
+ nextEdbInfo *data_manage.EdbInfo
|
|
|
+ prevSort int
|
|
|
+ nextSort int
|
|
|
+ )
|
|
|
+
|
|
|
+ // 移动对象为分类, 判断权限
|
|
|
+ if edbInfoId == 0 {
|
|
|
+ edbClassifyInfo, err = data_manage.GetEdbClassifyById(classifyId)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
+ errMsg = "当前分类不存在"
|
|
|
+ err = errors.New("获取分类信息失败,Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
- } else if edbClassifyInfo.ClassifyType == 1 { // 预测指标
|
|
|
- button := GetPredictEdbClassifyOpButton(sysUser, edbClassifyInfo.SysUserId)
|
|
|
- if !button.MoveButton {
|
|
|
- errMsg = "无操作权限"
|
|
|
- err = errors.New(errMsg)
|
|
|
- return
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("获取分类信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if parentClassifyId > 0 && parentEdbClassifyInfo.Level == 6 {
|
|
|
+ errMsg = "最高只支持添加6级分类"
|
|
|
+ err = errors.New(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 权限校验
|
|
|
+ {
|
|
|
+ if edbClassifyInfo.ClassifyType == 0 { // 普通指标
|
|
|
+ button := GetEdbClassifyOpButton(sysUser, edbClassifyInfo.SysUserId)
|
|
|
+ if !button.MoveButton {
|
|
|
+ errMsg = "无操作权限"
|
|
|
+ err = errors.New(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else if edbClassifyInfo.ClassifyType == 1 { // 预测指标
|
|
|
+ button := GetPredictEdbClassifyOpButton(sysUser, edbClassifyInfo.SysUserId)
|
|
|
+ if !button.MoveButton {
|
|
|
+ errMsg = "无操作权限"
|
|
|
+ err = errors.New(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ } else {
|
|
|
+ edbInfo, err = data_manage.GetEdbInfoById(req.EdbInfoId)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
+ errMsg = "当前指标不存在"
|
|
|
+ err = errors.New("获取分类信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("获取分类信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if parentClassifyId == 0 {
|
|
|
+ errMsg = "移动失败,指标必须挂在分类下"
|
|
|
+ err = errors.New(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 移动权限校验
|
|
|
+ button := GetEdbOpButton(sysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType)
|
|
|
+ if !button.MoveButton {
|
|
|
+ errMsg = "无操作权限"
|
|
|
+ err = errors.New(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- updateCol := make([]string, 0)
|
|
|
-
|
|
|
- //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
|
|
|
- if edbClassifyInfo.ParentId != parentClassifyId && parentClassifyId != 0 {
|
|
|
- parentEdbClassifyInfo, tmpErr := data_manage.GetEdbClassifyById(parentClassifyId)
|
|
|
- if tmpErr != nil {
|
|
|
+ if prevClassifyId > 0 {
|
|
|
+ prevClassify, err = data_manage.GetEdbClassifyById(prevClassifyId)
|
|
|
+ if err != nil {
|
|
|
errMsg = "移动失败"
|
|
|
- err = errors.New("获取上级分类信息失败,Err:" + tmpErr.Error())
|
|
|
+ err = errors.New("获取上一个兄弟节点分类信息失败,Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
- edbClassifyInfo.ParentId = parentEdbClassifyInfo.ClassifyId
|
|
|
- edbClassifyInfo.Level = parentEdbClassifyInfo.Level + 1
|
|
|
- edbClassifyInfo.ModifyTime = time.Now()
|
|
|
- updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
|
|
|
+ prevSort = prevClassify.Sort
|
|
|
+ } else if prevEdbInfoId > 0 {
|
|
|
+ prevEdbInfo, err = data_manage.GetEdbInfoById(prevEdbInfoId)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("获取上一个兄弟节点分类信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ prevSort = prevEdbInfo.Sort
|
|
|
}
|
|
|
|
|
|
- //如果有传入 上一个兄弟节点分类id
|
|
|
- if prevClassifyId > 0 {
|
|
|
- prevClassify, tmpErr := data_manage.GetEdbClassifyById(prevClassifyId)
|
|
|
- if tmpErr != nil {
|
|
|
+ if nextClassifyId > 0 {
|
|
|
+ //下一个兄弟节点
|
|
|
+ nextClassify, err = data_manage.GetEdbClassifyById(nextClassifyId)
|
|
|
+ if err != nil {
|
|
|
errMsg = "移动失败"
|
|
|
- err = errors.New("获取上一个兄弟节点分类信息失败,Err:" + tmpErr.Error())
|
|
|
+ err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
+ nextSort = nextClassify.Sort
|
|
|
+ } else if nextEdbInfoId > 0 {
|
|
|
+ //下一个兄弟节点
|
|
|
+ nextEdbInfo, err = data_manage.GetEdbInfoById(nextEdbInfoId)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ nextSort = nextEdbInfo.Sort
|
|
|
+ }
|
|
|
+
|
|
|
+ err, errMsg = moveEdbClassify(parentEdbClassifyInfo, edbClassifyInfo, prevClassify, nextClassify, edbInfo, prevEdbInfo, nextEdbInfo, parentClassifyId, prevSort, nextSort, classifyType)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// moveEdbClassify 移动指标分类
|
|
|
+func moveEdbClassify(parentEdbClassifyInfo, edbClassifyInfo, prevClassify, nextClassify *data_manage.EdbClassify, edbInfo, prevEdbInfo, nextEdbInfo *data_manage.EdbInfo, parentClassifyId int, prevSort, nextSort int, classifyType uint8) (err error, errMsg string) {
|
|
|
+ updateCol := make([]string, 0)
|
|
|
+ // 移动对象为分类, 判断分类是否存在
|
|
|
+ if edbClassifyInfo != nil {
|
|
|
+ //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
|
|
|
+ if edbClassifyInfo.ParentId != parentClassifyId && parentClassifyId != 0 {
|
|
|
+ edbClassifyInfo.ParentId = parentEdbClassifyInfo.ClassifyId
|
|
|
+ edbClassifyInfo.RootId = parentEdbClassifyInfo.RootId
|
|
|
+ edbClassifyInfo.Level = parentEdbClassifyInfo.Level + 1
|
|
|
+ edbClassifyInfo.ModifyTime = time.Now()
|
|
|
+ updateCol = append(updateCol, "ParentId", "RootId", "Level", "ModifyTime")
|
|
|
+ }
|
|
|
|
|
|
- //如果是移动在两个兄弟节点之间
|
|
|
- if nextClassifyId > 0 {
|
|
|
- //下一个兄弟节点
|
|
|
- nextClassify, tmpErr := data_manage.GetEdbClassifyById(nextClassifyId)
|
|
|
- if tmpErr != nil {
|
|
|
+ if prevSort > 0 {
|
|
|
+ //如果是移动在两个兄弟节点之间
|
|
|
+ if nextSort > 0 {
|
|
|
+ //下一个兄弟节点
|
|
|
+ //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
|
|
|
+ if prevSort == nextSort || prevSort == edbClassifyInfo.Sort {
|
|
|
+ //变更兄弟节点的排序
|
|
|
+ updateSortStr := `sort + 2`
|
|
|
+
|
|
|
+ //变更分类
|
|
|
+ if prevClassify != nil {
|
|
|
+ _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, prevClassify.ClassifyId, prevClassify.Sort, updateSortStr, classifyType)
|
|
|
+ } else {
|
|
|
+ _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, classifyType)
|
|
|
+ }
|
|
|
+
|
|
|
+ //变更指标
|
|
|
+ if prevEdbInfo != nil {
|
|
|
+ //变更兄弟节点的排序
|
|
|
+ _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, prevEdbInfo.EdbInfoId, updateSortStr)
|
|
|
+ } else {
|
|
|
+ _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
|
|
|
+ if nextSort-prevSort == 1 {
|
|
|
+ //变更兄弟节点的排序
|
|
|
+ updateSortStr := `sort + 1`
|
|
|
+ _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, classifyType)
|
|
|
+ _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ edbClassifyInfo.Sort = prevClassify.Sort + 1
|
|
|
+ edbClassifyInfo.ModifyTime = time.Now()
|
|
|
+ updateCol = append(updateCol, "Sort", "ModifyTime")
|
|
|
+ } else if prevClassify == nil && nextClassify == nil && prevEdbInfo == nil && nextEdbInfo == nil && parentClassifyId > 0 {
|
|
|
+ //处理只拖动到目录里,默认放到目录底部的情况
|
|
|
+ var maxSort int
|
|
|
+ maxSort, err = GetEdbClassifyMaxSort(parentClassifyId, classifyType)
|
|
|
+ if err != nil {
|
|
|
errMsg = "移动失败"
|
|
|
- err = errors.New("获取下一个兄弟节点分类信息失败,Err:" + tmpErr.Error())
|
|
|
+ err = errors.New("查询组内排序信息失败,Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
- //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
|
|
|
- if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == edbClassifyInfo.Sort {
|
|
|
- //变更兄弟节点的排序
|
|
|
- updateSortStr := `sort + 2`
|
|
|
- _ = data_manage.UpdateEdbClassifySortByParentId(prevClassify.ParentId, prevClassify.ClassifyId, prevClassify.Sort, updateSortStr, edbClassifyInfo.ClassifyType)
|
|
|
+ edbClassifyInfo.Sort = maxSort + 1 //那就是排在组内最后一位
|
|
|
+ edbClassifyInfo.ModifyTime = time.Now()
|
|
|
+ updateCol = append(updateCol, "Sort", "ModifyTime")
|
|
|
+ } else {
|
|
|
+ // 拖动到父级分类的第一位
|
|
|
+ firstClassify, tmpErr := data_manage.GetFirstEdbClassifyByParentId(parentClassifyId)
|
|
|
+ if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
|
|
|
+ if firstClassify != nil && firstClassify.Sort == 0 {
|
|
|
+ updateSortStr := ` sort + 1 `
|
|
|
+ _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, firstClassify.ClassifyId-1, 0, updateSortStr, edbClassifyInfo.ClassifyType)
|
|
|
+ //该分类下的所有指标也需要+1
|
|
|
+ _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, 0, 0, updateSortStr)
|
|
|
} else {
|
|
|
- //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
|
|
|
- if nextClassify.Sort-prevClassify.Sort == 1 {
|
|
|
- //变更兄弟节点的排序
|
|
|
- updateSortStr := `sort + 1`
|
|
|
- _ = data_manage.UpdateEdbClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr, edbClassifyInfo.ClassifyType)
|
|
|
+ //如果该分类下存在指标,且第一个指标的排序等于0,那么需要调整排序
|
|
|
+ firstEdb, tErr := data_manage.GetFirstEdbInfoByClassifyId(parentClassifyId)
|
|
|
+ if tErr != nil && tErr.Error() != utils.ErrNoRow() {
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tErr.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
|
|
|
+ if firstEdb != nil && firstEdb.Sort == 0 {
|
|
|
+ updateSortStr := ` sort + 1 `
|
|
|
+ _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, 0, firstEdb.EdbInfoId-1, updateSortStr)
|
|
|
+ _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, 0, updateSortStr, classifyType)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ edbClassifyInfo.Sort = 0 //那就是排在第一位
|
|
|
+ edbClassifyInfo.ModifyTime = time.Now()
|
|
|
+ updateCol = append(updateCol, "Sort", "ModifyTime")
|
|
|
}
|
|
|
|
|
|
- edbClassifyInfo.Sort = prevClassify.Sort + 1
|
|
|
- edbClassifyInfo.ModifyTime = time.Now()
|
|
|
- updateCol = append(updateCol, "Sort", "ModifyTime")
|
|
|
+ //更新
|
|
|
+ if len(updateCol) > 0 {
|
|
|
+ err = edbClassifyInfo.Update(updateCol)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("修改失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
- firstClassify, tmpErr := data_manage.GetFirstEdbClassifyByParentId(edbClassifyInfo.ParentId)
|
|
|
- if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
|
|
|
- errMsg = "移动失败"
|
|
|
- err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
|
|
|
+ if edbInfo == nil {
|
|
|
+ errMsg = "当前指标不存在"
|
|
|
+ err = errors.New(errMsg)
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
- //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
|
|
|
- if firstClassify != nil && firstClassify.Sort == 0 {
|
|
|
- updateSortStr := ` sort + 1 `
|
|
|
- _ = data_manage.UpdateEdbClassifySortByParentId(firstClassify.ParentId, firstClassify.ClassifyId-1, 0, updateSortStr, edbClassifyInfo.ClassifyType)
|
|
|
+ //如果改变了分类,那么移动该指标数据
|
|
|
+ if edbInfo.ClassifyId != parentClassifyId {
|
|
|
+ edbInfo.ClassifyId = parentClassifyId
|
|
|
+ edbInfo.ModifyTime = time.Now()
|
|
|
+ updateCol = append(updateCol, "ClassifyId", "ModifyTime")
|
|
|
}
|
|
|
+ if prevSort > 0 {
|
|
|
+ //如果是移动在两个兄弟节点之间
|
|
|
+ if nextSort > 0 {
|
|
|
+ //下一个兄弟节点
|
|
|
+ //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
|
|
|
+ if prevSort == nextSort || prevSort == edbInfo.Sort {
|
|
|
+ //变更兄弟节点的排序
|
|
|
+ updateSortStr := `sort + 2`
|
|
|
|
|
|
- edbClassifyInfo.Sort = 0 //那就是排在第一位
|
|
|
- edbClassifyInfo.ModifyTime = time.Now()
|
|
|
- updateCol = append(updateCol, "Sort", "ModifyTime")
|
|
|
- }
|
|
|
+ //变更分类
|
|
|
+ if prevClassify != nil {
|
|
|
+ _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, prevClassify.ClassifyId, prevClassify.Sort, updateSortStr, classifyType)
|
|
|
+ } else {
|
|
|
+ _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, classifyType)
|
|
|
+ }
|
|
|
|
|
|
- //更新
|
|
|
- if len(updateCol) > 0 {
|
|
|
- err = edbClassifyInfo.Update(updateCol)
|
|
|
- if err != nil {
|
|
|
- errMsg = "移动失败"
|
|
|
- err = errors.New("修改失败,Err:" + err.Error())
|
|
|
- return
|
|
|
+ //变更指标
|
|
|
+ if prevEdbInfo != nil {
|
|
|
+ //变更兄弟节点的排序
|
|
|
+ _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, prevEdbInfo.EdbInfoId, updateSortStr)
|
|
|
+ } else {
|
|
|
+ _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
|
|
|
+ if nextSort-prevSort == 1 {
|
|
|
+ //变更兄弟节点的排序
|
|
|
+ updateSortStr := `sort + 1`
|
|
|
+ _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, prevSort, updateSortStr, classifyType)
|
|
|
+ _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, prevSort, 0, updateSortStr)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ edbInfo.Sort = prevEdbInfo.Sort + 1
|
|
|
+ edbInfo.ModifyTime = time.Now()
|
|
|
+ updateCol = append(updateCol, "Sort", "ModifyTime")
|
|
|
+ } else if prevClassify == nil && nextClassify == nil && prevEdbInfo == nil && nextEdbInfo == nil && parentClassifyId > 0 {
|
|
|
+ //处理只拖动到目录里,默认放到目录底部的情况
|
|
|
+ var maxSort int
|
|
|
+ maxSort, err = GetEdbClassifyMaxSort(parentClassifyId, classifyType)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("查询组内排序信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ edbInfo.Sort = maxSort + 1 //那就是排在组内最后一位
|
|
|
+ edbInfo.ModifyTime = time.Now()
|
|
|
+ updateCol = append(updateCol, "Sort", "ModifyTime")
|
|
|
+ } else {
|
|
|
+ // 拖动到父级分类的第一位
|
|
|
+ firstClassify, tmpErr := data_manage.GetFirstEdbClassifyByParentId(parentClassifyId)
|
|
|
+ if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
|
|
|
+ if firstClassify != nil && firstClassify.Sort == 0 {
|
|
|
+ updateSortStr := ` sort + 1 `
|
|
|
+ _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, firstClassify.ClassifyId-1, 0, updateSortStr, edbClassifyInfo.ClassifyType)
|
|
|
+ //该分类下的所有指标也需要+1
|
|
|
+ _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, 0, 0, updateSortStr)
|
|
|
+ } else {
|
|
|
+ //如果该分类下存在指标,且第一个指标的排序等于0,那么需要调整排序
|
|
|
+ firstEdb, tErr := data_manage.GetFirstEdbInfoByClassifyId(parentClassifyId)
|
|
|
+ if tErr != nil && tErr.Error() != utils.ErrNoRow() {
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tErr.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
|
|
|
+ if firstEdb != nil && firstEdb.Sort == 0 {
|
|
|
+ updateSortStr := ` sort + 1 `
|
|
|
+ _ = data_manage.UpdateEdbInfoSortByClassifyId(parentClassifyId, 0, firstEdb.EdbInfoId-1, updateSortStr)
|
|
|
+ _ = data_manage.UpdateEdbClassifySortByParentId(parentClassifyId, 0, 0, updateSortStr, classifyType)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ edbInfo.Sort = 0 //那就是排在第一位
|
|
|
+ edbInfo.ModifyTime = time.Now()
|
|
|
+ updateCol = append(updateCol, "Sort", "ModifyTime")
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新
|
|
|
+ if len(updateCol) > 0 {
|
|
|
+ err = edbInfo.Update(updateCol)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "移动失败"
|
|
|
+ err = errors.New("修改失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return
|
|
@@ -648,3 +927,140 @@ func GetPredictEdbClassifyOpButton(sysUser *system.Admin, belongUserId int) (but
|
|
|
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// GetClassifyTreeRecursive 递归获取分类树形结构
|
|
|
+func GetClassifyTreeRecursive(list []*data_manage.EdbClassifyItems, parentId int) []*data_manage.EdbClassifyItems {
|
|
|
+ res := make([]*data_manage.EdbClassifyItems, 0)
|
|
|
+ for _, v := range list {
|
|
|
+ if v.ParentId == parentId {
|
|
|
+ v.Children = GetClassifyTreeRecursive(list, v.ClassifyId)
|
|
|
+ res = append(res, v)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return res
|
|
|
+}
|
|
|
+
|
|
|
+func GetFullClassifyByClassifyId(targetClassifyId int) (targetList []*data_manage.EdbClassifyIdItems, err error, errMsg string) {
|
|
|
+ //判断是否是挂在顶级目录下
|
|
|
+ targetClassify, err := data_manage.GetEdbClassifyById(targetClassifyId)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
+ errMsg = "当前分类不存在"
|
|
|
+ err = errors.New(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ errMsg = "获取失败"
|
|
|
+ err = errors.New("获取分类信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if targetClassify.ParentId == 0 {
|
|
|
+ targetItem := new(data_manage.EdbClassifyIdItems)
|
|
|
+ targetItem.ClassifyId = targetClassify.ClassifyId
|
|
|
+ targetItem.ParentId = targetClassify.ParentId
|
|
|
+ targetItem.RootId = targetClassify.RootId
|
|
|
+ targetItem.UniqueCode = targetClassify.UniqueCode
|
|
|
+ targetItem.Level = targetClassify.Level
|
|
|
+ targetItem.ClassifyName = targetClassify.ClassifyName
|
|
|
+ targetList = append(targetList, targetItem)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ tmpList, err := data_manage.GetEdbClassifyByRootIdLevel(targetClassify.RootId, targetClassify.ClassifyType)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ errMsg = "获取失败"
|
|
|
+ err = errors.New("获取数据失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ idMap := make(map[int]struct{})
|
|
|
+ if len(tmpList) > 0 {
|
|
|
+ for _, v := range tmpList {
|
|
|
+ if v.ClassifyId == targetClassify.ClassifyId {
|
|
|
+ idMap[v.ClassifyId] = struct{}{}
|
|
|
+ idMap[v.ParentId] = struct{}{}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, v := range tmpList {
|
|
|
+ if _, ok := idMap[v.ClassifyId]; ok {
|
|
|
+ idMap[v.ParentId] = struct{}{}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, v := range tmpList {
|
|
|
+ if _, ok := idMap[v.ClassifyId]; ok {
|
|
|
+ targetItem := new(data_manage.EdbClassifyIdItems)
|
|
|
+ targetItem.ClassifyId = v.ClassifyId
|
|
|
+ targetItem.ParentId = v.ParentId
|
|
|
+ targetItem.RootId = v.RootId
|
|
|
+ targetItem.UniqueCode = v.UniqueCode
|
|
|
+ targetItem.Level = v.Level
|
|
|
+ targetItem.ClassifyName = v.ClassifyName
|
|
|
+ targetList = append(targetList, targetItem)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func GetChildClassifyByClassifyId(targetClassifyId int) (targetList []*data_manage.EdbClassifyIdItems, err error, errMsg string) {
|
|
|
+ //判断是否是挂在顶级目录下
|
|
|
+ targetClassify, err := data_manage.GetEdbClassifyById(targetClassifyId)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
+ errMsg = "当前分类不存在"
|
|
|
+ err = errors.New(errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ errMsg = "获取失败"
|
|
|
+ err = errors.New("获取分类信息失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ tmpList, err := data_manage.GetEdbClassifyByRootIdLevel(targetClassify.RootId, targetClassify.ClassifyType)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ errMsg = "获取失败"
|
|
|
+ err = errors.New("获取数据失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ idMap := make(map[int]struct{})
|
|
|
+ if len(tmpList) > 0 {
|
|
|
+ for _, v := range tmpList {
|
|
|
+ if v.ParentId == targetClassify.ClassifyId || v.ClassifyId == targetClassifyId {
|
|
|
+ idMap[v.ClassifyId] = struct{}{}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range tmpList {
|
|
|
+ if _, ok := idMap[v.ParentId]; ok {
|
|
|
+ idMap[v.ClassifyId] = struct{}{}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range tmpList {
|
|
|
+ if _, ok := idMap[v.ClassifyId]; ok {
|
|
|
+ targetItem := new(data_manage.EdbClassifyIdItems)
|
|
|
+ targetItem.ClassifyId = v.ClassifyId
|
|
|
+ targetItem.ParentId = v.ParentId
|
|
|
+ targetItem.RootId = v.RootId
|
|
|
+ targetItem.UniqueCode = v.UniqueCode
|
|
|
+ targetItem.Level = v.Level
|
|
|
+ targetItem.ClassifyName = v.ClassifyName
|
|
|
+ targetList = append(targetList, targetItem)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func GetEdbClassifyMaxSort(parentId int, classifyType uint8) (maxSort int, err error) {
|
|
|
+ //获取该层级下最大的排序数
|
|
|
+ classifyMaxSort, err := data_manage.GetEdbClassifyMaxSort(parentId, classifyType)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ maxSort = classifyMaxSort
|
|
|
+ edbMaxSort, err := data_manage.GetEdbInfoMaxSortByClassifyId(parentId)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if maxSort < edbMaxSort {
|
|
|
+ maxSort = edbMaxSort
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|