瀏覽代碼

fix:分类接口新增表格分类获取

Roc 1 年之前
父節點
當前提交
55e9814669

+ 78 - 0
controllers/data_manage/data_manage_permission.go

@@ -0,0 +1,78 @@
+package data_manage
+
+import (
+	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
+)
+
+// DataMangePermissionController 数据权限管理
+type DataMangePermissionController struct {
+	controllers.BaseAuthController
+}
+
+// SetPermissionEdbChart
+// @Title 指标/图表创建人变更接口
+// @Description 指标/图表创建人变更接口
+// @Param	request	body data_manage.MoveEdbChartReq true "type json string"
+// @Success 200 {object} data_manage.ChartListResp
+// @router /edb_chart/change_user [post]
+func (c *DataMangePermissionController) SetPermissionEdbChart() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	var req data_manage.SetPermissionEdbChartReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.Source <= 0 || req.Source > 6 {
+		br.Msg = "错误的来源"
+		br.IsSendEmail = false
+		return
+	}
+
+	// 子来源(目前作用于ETA表格,2024-3-26 14:12:09)
+	if req.Source == 6 && (req.SubSource <= utils.EXCEL_DEFAULT || req.SubSource > utils.CUSTOM_ANALYSIS_TABLE) {
+		br.Msg = "错误的子来源"
+		br.IsSendEmail = false
+		return
+	}
+
+	if !req.IsSelectAll && len(req.DataIdList) <= 0 {
+		br.Msg = "请勾选数据项"
+		br.IsSendEmail = false
+		return
+	}
+
+	err, errMsg := data.SetPermissionEdbChart(req.Source, req.SubSource, req.UserId, req.UserList, req.IsSelectAll, req.DataIdList, req.NoDataIdList, req.Keyword, req.ClassifyId)
+	if err != nil {
+		//br.Success = true
+		br.Msg = "移动失败"
+		if errMsg != `` {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = "移动失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.IsAddLog = true
+	br.Success = true
+	br.Msg = "修改成功"
+}

+ 11 - 3
controllers/data_manage/edb_info.go

@@ -4044,7 +4044,7 @@ func (this *EdbInfoController) MoveEdbChartUser() {
 // EdbChartClassifyList
 // @Title 获取指标/图表分类列表数据接口
 // @Description 获取指标/图表分类列表数据接口
-// @Param   Source   query   int  false       "来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库"
+// @Param   Source   query   int  false       "来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格"
 // @Success 200 {object} data_manage.ChartListResp
 // @router /edb_chart/classify [get]
 func (this *EdbInfoController) EdbChartClassifyList() {
@@ -4062,13 +4062,21 @@ func (this *EdbInfoController) EdbChartClassifyList() {
 	}
 
 	source, _ := this.GetInt("Source")
-	if source <= 0 || source > 5 {
+	if source <= 0 || source > 6 {
 		br.Msg = "错误的来源"
 		br.IsSendEmail = false
 		return
 	}
 
-	list, err := data.GetEdbChartClassifyList(source)
+	// 子来源(目前作用于ETA表格,2024-3-26 14:12:09)
+	subSource, _ := this.GetInt("SubSource")
+	if source == 6 && (subSource <= utils.EXCEL_DEFAULT || subSource > utils.CUSTOM_ANALYSIS_TABLE) {
+		br.Msg = "错误的子来源"
+		br.IsSendEmail = false
+		return
+	}
+
+	list, err := data.GetEdbChartClassifyList(source, subSource)
 	if err != nil {
 		//br.Success = true
 		br.Msg = "获取失败"

+ 119 - 0
models/data_manage/data_manage_permission.go

@@ -0,0 +1,119 @@
+package data_manage
+
+import (
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strconv"
+	"time"
+)
+
+// SetPermissionEdbChartReq
+// @Description: 设置数据权限请求
+type SetPermissionEdbChartReq struct {
+	Source       int      `description:"来源id"`
+	SubSource    int      `description:"子来源id"`
+	UserId       int      `description:"用户筛选"`
+	DataIdList   []string `description:"指标/图表唯一id列表"`
+	NoDataIdList []string `description:"指标/图表唯一id列表"`
+	UserList     []int    `description:"赋权用户id列表,如果为空,说明要给这些指标移除权限管控"`
+	IsSelectAll  bool     `description:"是否选择所有指标"`
+	ClassifyId   string   `description:"分类id,支持多选,用英文,隔开"`
+	Keyword      string   `description:"关键字"`
+}
+
+type EdbInfoPermission struct {
+	PermissionId int64     `json:"permission_id" orm:"column(permission_id);pk"`
+	EdbInfoId    int32     `json:"edb_info_id"` // 指标id
+	SysUserId    int32     `json:"sys_user_id"` // 系统用户id
+	ModifyTime   time.Time `json:"modify_time"` // 变更时间
+	CreateTime   time.Time `json:"create_time"` // 关系建立时间
+}
+
+type EdbClassifyPermission struct {
+	PermissionId  int64     `json:"permission_id" orm:"column(permission_id);pk"`
+	EdbClassifyId int32     `json:"edb_classify_id"` // 分类id
+	SysUserId     int32     `json:"sys_user_id"`     // 系统用户id
+	ModifyTime    time.Time `json:"modify_time"`     // 变更时间
+	CreateTime    time.Time `json:"create_time"`     // 关系建立时间
+}
+
+// SetPermissionEdbChartByEdbIdList 根据指标ID列表设置指标的用户权限
+func SetPermissionEdbChartByEdbIdList(edbIdList []string, userIdList []int) (err error) {
+	edbNum := len(edbIdList)
+	if edbNum <= 0 {
+		return
+	}
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 获取已经配置的指标权限用户
+	edbInfoPermissionList := make([]*EdbInfoPermission, 0)
+	sql := `SELECT * FROM edb_info_permission WHERE edb_info_id in (` + utils.GetOrmInReplace(edbNum) + `) `
+	_, err = o.Raw(sql, edbIdList).QueryRows(&edbInfoPermissionList)
+	if err != nil {
+		return
+	}
+	edbInfoPermissionMap := make(map[string]*EdbInfoPermission)
+	for _, v := range edbInfoPermissionList {
+		edbInfoPermissionMap[fmt.Sprint(v.EdbInfoId, "_", v.SysUserId)] = v
+	}
+
+	// 说明是要给这些指标移除权限管控
+	if len(userIdList) <= 0 {
+		// todo 已经添加或者移除的指标需要记录到消息
+		// 先不管三七二十一,给已经选择的分类挪出配置的用户权限
+		sql = `DELETE FROM edb_info_permission WHERE WHERE edb_info_id in (` + utils.GetOrmInReplace(edbNum) + `) `
+		_, err = o.Raw(sql, edbIdList).Exec()
+		if err != nil {
+			return
+		}
+
+		// 标记指标为不纳入权限管控
+		sql = `UPDATE edb_info SET is_join_permission=?,modify_time=now() WHERE edb_info_id in (` + utils.GetOrmInReplace(edbNum) + `) `
+		_, err = o.Raw(sql, 0, edbIdList).Exec()
+		return
+
+	}
+
+	// 标记指标为纳入权限管控
+	sql = `UPDATE edb_info SET is_join_permission=?,modify_time=now() WHERE edb_info_id in (` + utils.GetOrmInReplace(edbNum) + `) `
+	_, err = o.Raw(sql, 1, edbIdList).Exec()
+
+	// 待添加的配置项
+	addList := make([]*EdbInfoPermission, 0)
+	for _, edbInfoIdStr := range edbIdList {
+		edbInfoId, tmpErr := strconv.ParseInt(edbInfoIdStr, 10, 64)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, userId := range userIdList {
+			key := fmt.Sprint(edbInfoId, "_", userId)
+			if _, ok := edbInfoPermissionMap[key]; ok {
+				// 如果存在那么就移除,说明不需要处理了
+				delete(edbInfoPermissionMap, key)
+			} else {
+				// 如果不存在,那么就提那家
+				addList = append(addList, &EdbInfoPermission{
+					//PermissionId: 0,
+					EdbInfoId:  int32(edbInfoId),
+					SysUserId:  int32(userId),
+					ModifyTime: time.Now(),
+					CreateTime: time.Now(),
+				})
+			}
+		}
+	}
+
+	return
+}

+ 99 - 0
services/data/data_manage_persmission.go

@@ -0,0 +1,99 @@
+package data
+
+// TODO 消息
+
+func SetPermissionEdbChart(source, subSource, userId int, userList []int, isSelectAll bool, dataId, noDataId []string, keyword, classify string) (err error, errMsg string) {
+	// 如果勾选全部数据,那么
+	if isSelectAll {
+		// 找出不要的指标ID列表
+		noDataIdMap := make(map[string]string, 0)
+		for _, v := range noDataId {
+			noDataIdMap[v] = v
+		}
+
+		// 需要转义的指标/图表ID列表
+		dataId = make([]string, 0)
+		// 获取所有指标/图表
+		list, _, tmpErr := GetMoveEdbChartList(source, subSource, userId, keyword, classify, 0, 100000)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+			if _, ok := noDataIdMap[v.DataId]; !ok {
+				dataId = append(dataId, v.DataId)
+			}
+		}
+	}
+
+	if len(userList) <= 0 {
+		// 说明是取消权限管控
+	}
+
+	//switch source {
+	//case 3, 4: //ETA指标库、ETA预测指标
+	//	tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
+	//	if tmpErr != nil {
+	//		err = tmpErr
+	//		return
+	//	}
+	//	if len(tmpList) > 0 {
+	//		for _, v := range tmpList {
+	//			if v.SysUserId == newUserId {
+	//				errMsg = "新创建人不可和原创建人一致"
+	//				err = errors.New(errMsg)
+	//				return
+	//			}
+	//		}
+	//		// 修改创建人
+	//		err = data_manage.ModifyEdbInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
+	//
+	//		// 移除当前用户的不可操作权限
+	//		{
+	//			obj := data_manage.EdbInfoNoPermissionAdmin{}
+	//			for _, v := range dataId {
+	//				edbInfoId, _ := strconv.Atoi(v)
+	//				go obj.DeleteByEdbInfoIdAndAdminId(edbInfoId, adminInfo.AdminId)
+	//			}
+	//		}
+	//	}
+	//case 5: //图库
+	//	tmpList, tmpErr := data_manage.GetChartInfoListGroupByUserId(dataId)
+	//	if tmpErr != nil {
+	//		err = tmpErr
+	//		return
+	//	}
+	//	if len(tmpList) > 0 {
+	//		for _, v := range tmpList {
+	//			if v.SysUserId == newUserId {
+	//				errMsg = "新创建人不可和原创建人一致"
+	//				err = errors.New(errMsg)
+	//				return
+	//			}
+	//		}
+	//		// 修改创建人
+	//		err = data_manage.ModifyChartInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
+	//	}
+	//case 6: // ETA表格
+	//	tmpList, tmpErr := excel.GetNoContentExcelListGroupByUserId(dataId)
+	//	if tmpErr != nil {
+	//		err = tmpErr
+	//		return
+	//	}
+	//	if len(tmpList) > 0 {
+	//		for _, v := range tmpList {
+	//			if v.SysUserId == newUserId {
+	//				errMsg = "新创建人不可和原创建人一致"
+	//				err = errors.New(errMsg)
+	//				return
+	//			}
+	//		}
+	//		// 修改创建人
+	//		err = excel.ModifyExcelInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
+	//	}
+	//default:
+	//	return
+	//}
+
+	return
+}

+ 37 - 140
services/data/edb_info.go

@@ -1972,6 +1972,8 @@ func GetMoveEdbChartList(source, subSource, userId int, keyword, classify string
 	return
 }
 
+// TODO 资产转移要通知到用户(被转移的用户和新用户)
+
 // MoveEdbChart 转移指标/图表创建人
 // @param source 来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
 func MoveEdbChart(source, subSource, oldUserId, newUserId int, isSelectAll bool, dataId, noDataId []string, keyword, classify string) (err error, errMsg string) {
@@ -2107,7 +2109,7 @@ func MoveEdbChart(source, subSource, oldUserId, newUserId int, isSelectAll bool,
 	return
 }
 
-func GetEdbChartClassifyList(source int) (resp data_manage.EdbChartClassifyResp, err error) {
+func GetEdbChartClassifyList(source, subSource int) (resp data_manage.EdbChartClassifyResp, err error) {
 	switch source {
 	case 1: //手工数据指标
 		list, e := models.GetEdbdataClassify(0)
@@ -2194,37 +2196,6 @@ func GetEdbChartClassifyList(source int) (resp data_manage.EdbChartClassifyResp,
 		}
 		resp.List = GetEdbMenuTreeRecursive(classifyAll, 0)
 
-		//rootChildMap := make(map[int][]*data_manage.EdbClassifyItems)
-		//for _, v := range classifyAll {
-		//	rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
-		//}
-		//nodeAll := make([]*data_manage.EdbClassifyItems, 0)
-		//for _, v := range rootList {
-		//	if existItems, ok := rootChildMap[v.ClassifyId]; ok {
-		//		v.Children = existItems
-		//	} else {
-		//		items := make([]*data_manage.EdbClassifyItems, 0)
-		//		v.Children = items
-		//	}
-		//	nodeAll = append(nodeAll, v)
-		//}
-		//
-		//for _, v := range nodeAll {
-		//	item := data_manage.EdbChartClassify{
-		//		ClassifyId:   v.ClassifyId,
-		//		ClassifyName: v.ClassifyName,
-		//		ParentId:     v.ParentId,
-		//	}
-		//	for _, v2 := range v.Children {
-		//		child := data_manage.EdbChartClassify{
-		//			ClassifyId:   v2.ClassifyId,
-		//			ClassifyName: v2.ClassifyName,
-		//			ParentId:     v2.ParentId,
-		//		}
-		//		item.Child = append(item.Child, &child)
-		//	}
-		//	resp.List = append(resp.List, &item)
-		//}
 	case 4: //ETA预测指标
 		// 考虑到后面可以会迭代到10层, 这里直接用递归
 		classifyAll, e := data_manage.GetAllEdbClassifyByType(1)
@@ -2233,66 +2204,7 @@ func GetEdbChartClassifyList(source int) (resp data_manage.EdbChartClassifyResp,
 			return
 		}
 		resp.List = GetEdbMenuTreeRecursive(classifyAll, 0)
-
-		//rootList, e := data_manage.GetEdbClassifyByParentId(0, 1)
-		//if e != nil && e.Error() != utils.ErrNoRow() {
-		//	err = e
-		//	return
-		//}
-		//nodeAll := make([]*data_manage.EdbClassifyItems, 0)
-		//for _, v := range rootList {
-		//	nodeAll = append(nodeAll, v)
-		//}
-		//
-		//for _, v := range nodeAll {
-		//	item := data_manage.EdbChartClassify{
-		//		ClassifyId:   v.ClassifyId,
-		//		ClassifyName: v.ClassifyName,
-		//		ParentId:     v.ParentId,
-		//	}
-		//	for _, v2 := range v.Children {
-		//		child := data_manage.EdbChartClassify{
-		//			ClassifyId:   v2.ClassifyId,
-		//			ClassifyName: v2.ClassifyName,
-		//			ParentId:     v2.ParentId,
-		//		}
-		//		item.Child = append(item.Child, &child)
-		//	}
-		//	resp.List = append(resp.List, &item)
-		//}
 	case 5: //图库
-
-		//判断是否存在缓存,如果存在缓存,那么直接从缓存中获取
-		//key := utils.CACHE_CHART_CLASSIFY
-		//if utils.Re == nil {
-		//	if utils.Re == nil && utils.Rc.IsExist(key) {
-		//		rep := new(data_manage.ChartClassifyListResp)
-		//		if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
-		//			e := json.Unmarshal(data, &rep)
-		//			if e == nil && rep != nil {
-		//				for _, v := range rep.AllNodes {
-		//					item := data_manage.EdbChartClassify{
-		//						ClassifyId:   v.ChartClassifyId,
-		//						ClassifyName: v.ChartClassifyName,
-		//						ParentId:     v.ParentId,
-		//					}
-		//					for _, v2 := range v.Children {
-		//						child := data_manage.EdbChartClassify{
-		//							ClassifyId:   v2.ChartClassifyId,
-		//							ClassifyName: v2.ChartClassifyName,
-		//							ParentId:     v2.ParentId,
-		//						}
-		//						item.Child = append(item.Child, &child)
-		//					}
-		//					resp.List = append(resp.List, &item)
-		//				}
-		//				fmt.Println("source redis")
-		//				return
-		//			}
-		//		}
-		//	}
-		//}
-
 		// 考虑到后面可以会迭代到10层, 这里直接用递归处理
 		classifyAll, e := data_manage.GetAllChartClassifyItemsBySource(1)
 		if e != nil && e.Error() != utils.ErrNoRow() {
@@ -2301,55 +2213,18 @@ func GetEdbChartClassifyList(source int) (resp data_manage.EdbChartClassifyResp,
 		}
 		resp.List = GetChartMenuTreeRecursive(classifyAll, 0)
 
-		//rootList, e := data_manage.GetChartClassifyByParentIdFromETA(0)
-		//if e != nil && e.Error() != utils.ErrNoRow() {
-		//	err = e
-		//	return
-		//}
-		//
-		//classifyAll, e := data_manage.GetChartClassifyAllFromETA()
-		//if e != nil && e.Error() != utils.ErrNoRow() {
-		//	err = e
-		//	return
-		//}
-		//
-		//rootChildMap := make(map[int][]*data_manage.ChartClassifyItems)
-		//for _, v := range classifyAll {
-		//	rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
-		//}
-		//nodeAll := make([]*data_manage.ChartClassifyItems, 0)
-		//for _, v := range rootList {
-		//	if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
-		//		v.Children = existItems
-		//	} else {
-		//		items := make([]*data_manage.ChartClassifyItems, 0)
-		//		v.Children = items
-		//	}
-		//	nodeAll = append(nodeAll, v)
-		//}
-		//
-		//for _, v := range nodeAll {
-		//	item := data_manage.EdbChartClassify{
-		//		ClassifyId:   v.ChartClassifyId,
-		//		ClassifyName: v.ChartClassifyName,
-		//		ParentId:     v.ParentId,
-		//	}
-		//	for _, v2 := range v.Children {
-		//		child := data_manage.EdbChartClassify{
-		//			ClassifyId:   v2.ChartClassifyId,
-		//			ClassifyName: v2.ChartClassifyName,
-		//			ParentId:     v2.ParentId,
-		//		}
-		//		item.Child = append(item.Child, &child)
-		//	}
-		//	resp.List = append(resp.List, &item)
-		//}
-
-		// 将数据加入缓存
-		//if utils.Re == nil {
-		//	utils.Rc.Delete(key)
-		//}
-
+	// 将数据加入缓存
+	//if utils.Re == nil {
+	//	utils.Rc.Delete(key)
+	//}
+	case 6: // ETA表格
+		// 考虑到后面可以会迭代到10层, 这里直接用递归处理
+		classifyAll, e := excel.GetExcelClassifyBySourceOrderByLevel(subSource)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = e
+			return
+		}
+		resp.List = GetExcelMenuTreeRecursive(classifyAll, 0)
 	default:
 		return
 	}
@@ -3000,6 +2875,28 @@ func GetChartMenuTreeRecursive(list []*data_manage.ChartClassifyItems, parentId
 	return res
 }
 
+// GetExcelMenuTreeRecursive
+// @Description: 递归ETA表格菜单树
+// @author: Roc
+// @datetime 2024-03-27 10:30:32
+// @param list []*data_manage.ChartClassifyItems
+// @param parentId int
+// @return []*data_manage.EdbChartClassify
+func GetExcelMenuTreeRecursive(list []*excel.ExcelClassifyItems, parentId int) []*data_manage.EdbChartClassify {
+	res := make([]*data_manage.EdbChartClassify, 0)
+	for _, v := range list {
+		t := new(data_manage.EdbChartClassify)
+		t.ClassifyId = v.ExcelClassifyId
+		t.ClassifyName = v.ExcelClassifyName
+		t.ParentId = v.ParentId
+		if v.ParentId == parentId {
+			t.Child = GetExcelMenuTreeRecursive(list, v.ExcelClassifyId)
+			res = append(res, t)
+		}
+	}
+	return res
+}
+
 func GetTerminalFromBaseIndex(source int, edbCode string) (terminalCode string, sourceIndexName string, err error) {
 	tbName := GetBaseIndexTableName(source)
 	if tbName != "" {