123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- 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")
- edbInfoId, _ := this.GetInt("EdbInfoId")
- 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)
- }
- if edbInfoId > 0 {
- condition += ` AND edb_info_id = ?`
- pars = append(pars, edbInfoId)
- }
- // 获取当前账号的不可见指标
- 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 edbInfoId > 0 && classifyId == 0 {
- classifyId = edbList[0].ClassifyId
- }
- 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
- }
|