Browse Source

数据源wind指标查询

xyxie 9 months ago
parent
commit
6c2c237502

+ 323 - 0
controllers/data_manage/wind_data.go

@@ -0,0 +1,323 @@
+package data_manage
+
+import (
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/response"
+	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"sort"
+)
+
+// WindClassify
+// @Title wind指标分类
+// @Description wind指标分类
+// @Success 200 {object} data_manage.BaseFromYongyiClassify
+// @router /wind/classify [get]
+func (this *EdbInfoController) WindClassify() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	// 默认查一级分类和一级分类下的指标信息,
+	// 如果是 子级分类,查询该子级分类的下一级分类和指标信息
+	// 增加标识判断是文件夹还是指标列表
+	parentId, _ := this.GetInt("ParentId")
+	// 特殊处理顶级分类
+	rootList, err := data_manage.GetEdbClassifyByParentId(parentId, 0)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	realRootMap := make(map[int]struct{})
+	if parentId == 0 {
+		// 查询wind指标的所有一级分类
+		classifyIdList, e := data_manage.GetEdbClassifyIdListBySource(utils.DATA_SOURCE_WIND)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取分类列表失败,Err:" + e.Error()
+			return
+		}
+		if len(classifyIdList) == 0 {
+			resp := new(data_manage.EdbClassifyListResp)
+			br.Ret = 200
+			br.Success = true
+			br.Msg = "获取成功"
+			br.Data = resp
+			return
+		}
+		// 查询wind指标的所有一级分类下的指标信息
+		rootIds, e := data_manage.GetEdbClassifyRootIdsByClassifyIds(classifyIdList)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取分类列表失败,Err:" + e.Error()
+			return
+		}
+		for _, v := range rootIds {
+			realRootMap[v] = struct{}{}
+		}
+	}
+	nodeAll := make([]*data_manage.EdbClassifyItems, 0)
+
+	var sortList data_manage.EdbClassifyItemList
+	if parentId > 0 {
+		// 查询挂在当前分类上的指标列表
+		// 获取当前账号的不可见指标
+		obj := data_manage.EdbInfoNoPermissionAdmin{}
+		confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
+			return
+		}
+		noPermissionEdbInfoIdMap := make(map[int]bool)
+		for _, v := range confList {
+			noPermissionEdbInfoIdMap[v.EdbInfoId] = true
+		}
+		allEdbInfo, err := data_manage.GetEdbInfoByClassifyIdAndSource(parentId, 0, utils.DATA_SOURCE_WIND)
+		if err != nil {
+			br.Msg = "获取指标数据失败"
+			br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
+			return
+		}
+
+		if len(allEdbInfo) > 0 {
+			// 查询当前分类信息
+			/*currClassify, err := data_manage.GetEdbClassifyById(parentId)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取当前分类信息失败,Err:" + err.Error()
+				return
+			}
+			// 获取所有有权限的指标和分类
+			permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
+				return
+			}*/
+			for _, v := range allEdbInfo {
+				// 如果指标不可见,那么就不返回该指标
+				if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
+					continue
+				}
+				//v.HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, currClassify.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+				/*button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE, v.HaveOperaAuth)
+				button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+				v.Button = button*/
+				v.Children = make([]*data_manage.EdbClassifyItems, 0)
+				v.ParentId = parentId
+				nodeAll = append(nodeAll, v)
+			}
+		}
+
+	}
+	if len(rootList) > 0 {
+		// 已授权分类id
+		/*permissionClassifyIdList, err := data_manage_permission.GetUserEdbClassifyPermissionList(this.SysUser.AdminId, 0)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+			return
+		}*/
+
+		for _, v := range rootList {
+			// 数据权限
+			/*v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+			// 按钮权限
+			button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
+			v.Button = button*/
+			if _, ok := realRootMap[v.ClassifyId]; !ok && parentId == 0 { //查询一级分类时,过滤
+				continue
+			}
+			v.Children = make([]*data_manage.EdbClassifyItems, 0)
+			nodeAll = append(nodeAll, v)
+		}
+	}
+	if len(nodeAll) > 0 {
+		//根据sort值排序
+		sortList = nodeAll
+		sort.Sort(sortList)
+	}
+
+	language := `CN`
+	// 指标显示的语言
+	{
+		configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
+		if configDetail != nil {
+			language = configDetail.ConfigValue
+		} else {
+			configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
+			if configDetail != nil {
+				language = configDetail.ConfigValue
+			}
+		}
+	}
+
+	resp := new(data_manage.EdbClassifyListResp)
+	resp.AllNodes = sortList
+	resp.Language = language
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// WindEdbInfoList
+// @Title wind指标列表接口
+// @Description wind指标列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   ClassifyId   query   int  true       "分类id"
+// @Success 200 {object} response.EdbInfoChartListResp
+// @router /wind/index [get]
+func (this *EdbInfoController) WindEdbInfoList() {
+	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
+	}
+
+	// 分页
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	var total int
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+
+	// wind基础指标
+	var condition string
+	var pars []interface{}
+	condition += ` AND edb_info_type = ? AND source =? AND edb_type=?`
+	pars = append(pars, 0, utils.DATA_SOURCE_WIND, 1)
+
+	// 分类筛选
+	classifyId, _ := this.GetInt("ClassifyId")
+	if classifyId > 0 {
+		childClassify, e, _ := data.GetChildClassifyByClassifyId(classifyId)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取分类信息失败, GetEdbClassify,Err:" + e.Error()
+			return
+		}
+		var classifyIds []int
+		for _, v := range childClassify {
+			classifyIds = append(classifyIds, v.ClassifyId)
+		}
+		condition += fmt.Sprintf(` AND classify_id IN (%s) `, utils.GetOrmInReplace(len(classifyIds)))
+		pars = append(pars, classifyIds)
+	}
+
+	// 获取当前账号的不可见指标
+	obj := data_manage.EdbInfoNoPermissionAdmin{}
+	confList, e := obj.GetAllListByAdminId(this.SysUser.AdminId)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取不可见指标配置数据失败,Err:" + e.Error()
+		return
+	}
+	noPermissionEdbInfoIdList := make([]int, 0)
+	for _, v := range confList {
+		noPermissionEdbInfoIdList = append(noPermissionEdbInfoIdList, v.EdbInfoId)
+	}
+	noPermissionEdbInfoIdNum := len(noPermissionEdbInfoIdList)
+	if noPermissionEdbInfoIdNum > 0 {
+		condition += ` AND edb_info_id NOT IN (` + utils.GetOrmInReplace(noPermissionEdbInfoIdNum) + `) `
+		pars = append(pars, noPermissionEdbInfoIdList)
+	}
+	list := make([]*data_manage.WindEdbInfoList, 0)
+	// 获取指标信息
+	dataCount, edbList, e := data_manage.GetEdbInfoFilterList(condition, pars, startSize, pageSize)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取普通指标列表失败, Err:" + e.Error()
+		return
+	}
+	page = paging.GetPaging(currentIndex, pageSize, int(dataCount))
+	if len(edbList) > 0 {
+		classifyMap := make(map[int]*data_manage.EdbClassify)
+		targetClassifyList := make([]*data_manage.EdbClassifyItems, 0)
+		if classifyId > 0 { // todo 当没有传入分类ID时,如何处理 同一个分类ID,顶级分类是一样的
+			targetClassify, err := data_manage.GetEdbClassifyById(classifyId)
+			if err != nil {
+				if err.Error() == utils.ErrNoRow() {
+					br.Msg = "当前分类不存在"
+					return
+				}
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
+				return
+			}
+			targetClassifyList, err = data_manage.GetEdbClassifyByRootIdLevel(targetClassify.RootId, targetClassify.ClassifyType, "")
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
+				return
+			}
+			classifyIds := make([]int, 0)
+			for _, v := range edbList {
+				classifyIds = append(classifyIds, v.ClassifyId)
+			}
+			//查询分类信息
+			classifyList, err := data_manage.GetEdbClassifyByIdList(classifyIds)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
+				return
+			}
+			for _, v := range classifyList {
+				classifyMap[v.ClassifyId] = v
+			}
+		}
+		for _, v := range edbList {
+			//查询目录
+			targetClassify, ok := classifyMap[v.ClassifyId]
+			if !ok {
+				br.Msg = "当前分类不存在"
+				return
+			}
+			classifyList, err, errMsg := data.GetFullClassifyByRootId(targetClassify, targetClassifyList)
+			if err != nil {
+				br.Msg = err.Error()
+				br.ErrMsg = errMsg
+				return
+			}
+			tmp := &data_manage.WindEdbInfoList{
+				EdbInfoList:  v,
+				ClassifyList: classifyList,
+			}
+			list = append(list, tmp)
+		}
+	}
+
+	resp := response.WindEdbInfoListResp{
+		Paging: page,
+		List:   list,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 8 - 0
models/data_manage/edb_classify.go

@@ -643,3 +643,11 @@ func GetEdbClassifyByClassifyTypeAndIsJoinPermission(classifyType, isJoinPermiss
 	_, err = o.Raw(sql, classifyType, isJoinPermission).QueryRows(&items)
 	return
 }
+
+// GetEdbClassifyRootIdsByClassifyIds 获取普通指标的顶级分类列表
+func GetEdbClassifyRootIdsByClassifyIds(classifyIds []int) (items []int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT distinct root_id FROM edb_classify WHERE classify_type=0 and classify_id in (` + utils.GetOrmInReplace(len(classifyIds)) + `)`
+	_, err = o.Raw(sql, classifyIds).QueryRows(&items)
+	return
+}

+ 24 - 0
models/data_manage/edb_info.go

@@ -415,6 +415,11 @@ type EdbInfoListResp struct {
 	ClassifyList []*EdbClassifyIdItems
 }
 
+type WindEdbInfoList struct {
+	*EdbInfoList
+	ClassifyList []*EdbClassifyIdItems
+}
+
 func GetEdbInfoByCondition(condition string, pars []interface{}) (item *EdbInfoList, err error) {
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM edb_info WHERE 1=1 `
@@ -1651,3 +1656,22 @@ func getAllDataByMongo(edbInfoId, source, subSource int, startDataTime string) (
 
 	return
 }
+
+// GetEdbClassifyIdListBySource 获取普通指标的分类列表
+func GetEdbClassifyIdListBySource(source int) (items []int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT distinct classify_id FROM edb_info WHERE source = ? and edb_info_type=0`
+	_, err = o.Raw(sql, source).QueryRows(&items)
+	return
+}
+
+// GetEdbInfoByClassifyIdAndSource 用于分类展示
+func GetEdbInfoByClassifyIdAndSource(classifyId, edbInfoType, source int) (items []*EdbClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT edb_info_id,classify_id,edb_name AS classify_name,edb_name_en AS classify_name_en,unique_code,source_name,source,sys_user_id,sys_user_real_name,start_date,edb_code,edb_type, sort,is_join_permission FROM edb_info WHERE classify_id = ? AND edb_info_type = ? AND source =?`
+
+	pars := []interface{}{classifyId, edbInfoType, source}
+	sql += ` order by sort asc,edb_info_id asc `
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 6 - 0
models/data_manage/response/edb_info.go

@@ -10,3 +10,9 @@ type EdbInfoChartListResp struct {
 	Paging *paging.PagingItem
 	List   []*data_manage.EdbInfoList
 }
+
+// WindEdbInfoListResp wind指标列表返回数据
+type WindEdbInfoListResp struct {
+	Paging *paging.PagingItem
+	List   []*data_manage.WindEdbInfoList
+}

+ 18 - 0
routers/commentsRouter.go

@@ -4228,6 +4228,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"],
+        beego.ControllerComments{
+            Method: "WindClassify",
+            Router: `/wind/classify`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"],
+        beego.ControllerComments{
+            Method: "WindEdbInfoList",
+            Router: `/wind/index`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"],
         beego.ControllerComments{
             Method: "YongyiClassify",

+ 46 - 0
services/data/edb_classify.go

@@ -127,6 +127,52 @@ func GetFullClassifyByClassifyId(targetClassifyId int) (targetList []*data_manag
 	return
 }
 
+// GetFullClassifyByRootId 查询指标列表里的分类信息
+func GetFullClassifyByRootId(targetClassify *data_manage.EdbClassify, tmpList []*data_manage.EdbClassifyItems) (targetList []*data_manage.EdbClassifyIdItems, err error, errMsg string) {
+	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
+		targetItem.ClassifyName = targetClassify.ClassifyName
+		targetItem.IsJoinPermission = targetClassify.IsJoinPermission
+		targetList = append(targetList, targetItem)
+		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
+				targetItem.IsJoinPermission = v.IsJoinPermission
+				targetList = append(targetList, targetItem)
+			}
+		}
+	}
+	return
+}
+
 func GetChildClassifyByClassifyId(targetClassifyId int) (targetList []*data_manage.EdbClassifyIdItems, err error, errMsg string) {
 	//判断是否是挂在顶级目录下
 	targetClassify, err := data_manage.GetEdbClassifyById(targetClassifyId)