package data_manage import ( "encoding/json" "eta_gn/eta_api/controllers" "eta_gn/eta_api/models" "eta_gn/eta_api/models/data_manage" "eta_gn/eta_api/models/data_manage/request" "eta_gn/eta_api/models/data_manage/response" "eta_gn/eta_api/services/data/data_manage_permission" "eta_gn/eta_api/services/elastic" "eta_gn/eta_api/utils" "github.com/rdlucklib/rdluck_tools/paging" "strings" "time" ) // EdbInfoShareController 数据管理 type EdbInfoShareController struct { controllers.BaseAuthController } // UserList // @Title 获取指标设置共享的详情 // @Description 获取指标详情接口 // @Param EdbInfoId query int true "指标id" // @Success 200 {object} data_manage.EdbInfo // @router /edb_info/share/user_list [get] func (c *EdbInfoShareController) UserList() { 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 } edbInfoId, _ := c.GetInt("EdbInfoId") if edbInfoId <= 0 { br.Msg = "参数错误" br.ErrMsg = "参数错误" return } _, err := data_manage.GetEdbInfoById(edbInfoId) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取指标信息失败,Err:" + err.Error() return } //// TODO 权限校验 //{ // classifyMap := make(map[int]*data_manage.EdbClassifyIdItems) // for _, v := range classifyList { // classifyMap[v.ClassifyId] = v // } // if currClassify, ok := classifyMap[edbInfo.ClassifyId]; ok { // haveOperaAuth, err := data_manage_permission.CheckEdbPermission(edbInfo.IsJoinPermission, currClassify.IsJoinPermission, c.SysUser.AdminId, edbInfo.EdbInfoId, edbInfo.ClassifyId) // if err != nil { // br.Msg = err.Error() // br.ErrMsg = "校验指标权限失败,err:" + err.Error() // return // } // resp.HaveOperaAuth = haveOperaAuth // } //} resp := response.EdbInfoShareUserResp{} obj := data_manage.EdbInfoShare{} list, err := obj.GetListByEdbInfoId(edbInfoId) if err != nil { br.Msg = `获取失败` br.ErrMsg = `获取失败:` + err.Error() return } resp.List = list if len(list) > 0 { resp.ShareType = list[0].ShareType } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // Save // @Title 保存指标指标设置共享的详情 // @Description 获取指标详情接口 // @Param request body request.SetEdbInfoShareReq true "type json string" // @Success 200 {object} data_manage.EdbInfo // @router /edb_info/share/save [post] func (c *EdbInfoShareController) Save() { 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 request.SetEdbInfoShareReq err := json.Unmarshal(c.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } resp := response.EdbInfoShareUserResp{} obj := data_manage.EdbInfoShare{} err = obj.SaveEdbInfoShare([]int{req.EdbInfoId}, req.UserIdList, req.ShareType) if err != nil { br.Msg = `保存失败` br.ErrMsg = `保存失败:` + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "保存成功" br.Data = resp } // EdbInfoFilterByEs // @Title 指标筛选接口 // @Description 指标筛选接口 // @Param KeyWord query string false "搜索关键词:指标ID/指标名称" // @Param FilterSource query int false "搜索来源:1:其他搜索,2:累计值转月值搜索,3:变频,4:基础指标,5:同比" // @Param Frequency query string false "频度" // @Param IsAddPredictEdb query bool false "是否查询添加预测指标" // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param EdbType query int false "指标类型:0-基础和计算;1-基础指标;2-计算指标" // @Success 200 {object} data_manage.EdbInfoList // @router /edb_info/share [get] func (c *EdbInfoShareController) EdbInfoFilterByEs() { br := new(models.BaseResponse).Init() defer func() { c.Data["json"] = br c.ServeJSON() }() pageSize, _ := c.GetInt("PageSize") currentIndex, _ := c.GetInt("CurrentIndex") var total int64 var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = paging.StartIndex(currentIndex, pageSize) keyWord := c.GetString("KeyWord") keyWord = strings.TrimSpace(keyWord) //移除字符串首尾空格 filterSource, _ := c.GetInt("FilterSource") if filterSource <= 0 { filterSource = 1 } //指标来源 source, _ := c.GetInt("Source") frequency := c.GetString("Frequency") //频度 isAddPredictEdb, _ := c.GetBool("IsAddPredictEdb") //是否查询添加预测指标 edbType, _ := c.GetInt("EdbType", 0) // 指标类型:0-基础和计算;1-基础指标;2-计算指标 var edbInfoList []*data_manage.EdbInfoList var err error // 无权限指标 和 无权限指标分类id noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, err := data_manage_permission.GetUserAllEdbAndClassifyNoPermissionList(c.SysUser.AdminId, utils.EDB_INFO_TYPE, edbType) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error() return } // 是否走ES isEs := false if keyWord != "" { var keyWordArr []string keyWordArr = append(keyWordArr, keyWord) newKeyWord := strings.Split(keyWord, " ") keyWordArr = append(keyWordArr, newKeyWord...) // 普通的搜索 if !isAddPredictEdb { total, edbInfoList, err = elastic.SearchEdbInfoData(utils.DATA_INDEX_NAME, keyWord, startSize, pageSize, filterSource, source, 0, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, edbType) } else { // 允许添加预测指标的搜索 total, edbInfoList, err = elastic.SearchAddPredictEdbInfoData(utils.DATA_INDEX_NAME, keyWord, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, startSize, pageSize, edbType) } isEs = true } else { var condition string var pars []interface{} // 普通指标 condition += ` AND edb_info_type = ? ` pars = append(pars, 0) // 无权限指标id lenNoPermissionEdbInfoIdList := len(noPermissionEdbInfoIdList) if lenNoPermissionEdbInfoIdList > 0 { condition += ` AND edb_info_id not in (` + utils.GetOrmInReplace(lenNoPermissionEdbInfoIdList) + `) ` pars = append(pars, noPermissionEdbInfoIdList) } // 无权限指标分类id lenNoPermissionEdbClassifyIdList := len(noPermissionEdbClassifyIdList) if lenNoPermissionEdbClassifyIdList > 0 { condition += ` AND classify_id not in (` + utils.GetOrmInReplace(lenNoPermissionEdbClassifyIdList) + `) ` pars = append(pars, noPermissionEdbClassifyIdList) } switch filterSource { case 2: condition += ` AND frequency='月度' ` case 3: condition += ` AND frequency <> '日度' ` case 4: condition += ` AND edb_type = 1 ` case 5: condition += ` AND source = 6 ` //来源(同比值) case 6: condition += ` AND frequency != ? ` pars = append(pars, "年度") } //频度 if frequency != "" { condition += ` AND frequency = ? ` pars = append(pars, frequency) } if source > 0 && filterSource != 5 { condition += ` AND source = ? ` pars = append(pars, source) } // 查询只允许添加预测指标的搜索 if isAddPredictEdb { condition += ` AND frequency in ("日度","周度","月度") ` } // 基础指标/计算指标 if edbType > 0 { condition += ` AND edb_type = ? ` pars = append(pars, edbType) } total, edbInfoList, err = data_manage.GetEdbInfoFilterList(condition, pars, startSize, pageSize) } if err != nil { edbInfoList = make([]*data_manage.EdbInfoList, 0) } page := paging.GetPaging(currentIndex, pageSize, int(total)) edbInfoListLen := len(edbInfoList) classifyIdList := make([]int, 0) for i := 0; i < edbInfoListLen; i++ { edbInfoList[i].ConvertToResp() edbInfoList[i].EdbNameAlias = edbInfoList[i].EdbName classifyIdList = append(classifyIdList, edbInfoList[i].ClassifyId) } // 当前列表中的分类map classifyMap := make(map[int]*data_manage.EdbClassify) if edbInfoListLen > 0 { classifyList, err := data_manage.GetEdbClassifyByIdList(classifyIdList) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取分类列表失败,Err:" + err.Error() return } for _, v := range classifyList { classifyMap[v.ClassifyId] = v } // 获取所有有权限的指标和分类 permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(c.SysUser.AdminId, 0, 0) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error() return } // 如果是ES的话,需要重新查一下指标的信息,主要是为了把是否授权字段找出来 if isEs { edbInfoIdList := make([]int, 0) for i := 0; i < edbInfoListLen; i++ { edbInfoIdList = append(edbInfoIdList, edbInfoList[i].EdbInfoId) tmpEdbInfo := edbInfoList[i] if currClassify, ok := classifyMap[tmpEdbInfo.ClassifyId]; ok { edbInfoList[i].HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(tmpEdbInfo.IsJoinPermission, currClassify.IsJoinPermission, tmpEdbInfo.EdbInfoId, tmpEdbInfo.ClassifyId, permissionEdbIdList, permissionClassifyIdList) } } tmpEdbList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error() return } edbInfoMap := make(map[int]*data_manage.EdbInfo) for _, v := range tmpEdbList { edbInfoMap[v.EdbInfoId] = v } for i := 0; i < edbInfoListLen; i++ { tmpEdbInfo, ok := edbInfoMap[edbInfoList[i].EdbInfoId] if !ok { continue } edbInfoList[i].IsJoinPermission = tmpEdbInfo.IsJoinPermission } } // 权限校验 for i := 0; i < edbInfoListLen; i++ { tmpEdbInfoItem := edbInfoList[i] if currClassify, ok := classifyMap[tmpEdbInfoItem.ClassifyId]; ok { edbInfoList[i].HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(tmpEdbInfoItem.IsJoinPermission, currClassify.IsJoinPermission, tmpEdbInfoItem.EdbInfoId, tmpEdbInfoItem.ClassifyId, permissionEdbIdList, permissionClassifyIdList) } } } for i := 0; i < edbInfoListLen; i++ { for j := 0; j < edbInfoListLen; j++ { if (edbInfoList[i].EdbNameAlias == edbInfoList[j].EdbNameAlias) && (edbInfoList[i].EdbInfoId != edbInfoList[j].EdbInfoId) && !(strings.Contains(edbInfoList[i].EdbName, edbInfoList[i].SourceName)) { edbInfoList[i].EdbName = edbInfoList[i].EdbName + "(" + edbInfoList[i].SourceName + ")" } } } //新增搜索词记录 { searchKeyword := new(data_manage.SearchKeyword) searchKeyword.KeyWord = keyWord searchKeyword.CreateTime = time.Now() go data_manage.AddSearchKeyword(searchKeyword) } // 不返回无权限的指标 respList := make([]*data_manage.EdbInfoList, 0) for _, v := range edbInfoList { if v.HaveOperaAuth { respList = append(respList, v) } } resp := data_manage.EdbInfoFilterDataResp{ Paging: page, List: respList, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp }