package controllers import ( "eta/eta_api/models" "eta/eta_api/models/data_manage" "eta/eta_api/utils" "github.com/rdlucklib/rdluck_tools/paging" ) // EdbDetail // @Title 指标列表 // @Description 指标列表 // @Param TradeCode query string true "指标编码" // @Success 200 {object} models.TargetDetailResp // @router /target/edb/detail [get] func (this *TargetController) EdbDetail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请重新登录" return } // 指标编码 tradeCode := this.GetString("TradeCode") if tradeCode == `` { br.Msg = "请输入指标编码" br.IsSendEmail = false return } manualEdbInfo, err := models.GetTargetByTradeCode(tradeCode) if err != nil { br.Msg = "获取指标失败" br.ErrMsg = "获取指标失败,err:" + err.Error() return } // 如果不是超管账号,那么得校验下当前用户是否有该指标的权限 if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN { //获取账户所拥有权限的分类id集合 count, err := models.GetCountManualUserClassify(sysUser.AdminId, manualEdbInfo.ClassifyId) if err != nil { br.Msg = "获取分类数据失败" br.ErrMsg = "获取分类数据失败,err:" + err.Error() return } if count <= 0 { br.Msg = "无权访问" br.ErrMsg = "无权访问" br.IsSendEmail = false return } } classifyList := make([]*models.EdbdataClassify, 0) { classify, err := models.GetManualClassifyByClassifyId(manualEdbInfo.ClassifyId) if err != nil { br.Msg = "获取分类信息失败" br.ErrMsg = "获取分类信息失败,err:" + err.Error() return } parentClassify, err := models.GetManualClassifyByClassifyId(classify.ParentId) if err != nil { br.Msg = "获取分类信息失败" br.ErrMsg = "获取父级分类信息失败,err:" + err.Error() return } classifyList = []*models.EdbdataClassify{ parentClassify, classify, } } dataList, err := models.GetEdbDataListByCode(manualEdbInfo.TradeCode) if err != nil { br.Msg = "获取明细数据失败" br.ErrMsg = "获取明细数据失败,err:" + err.Error() return } manualEdbInfo.DataList = dataList resp := models.TargetDetailResp{ Detail: manualEdbInfo, ClassifyList: classifyList, } br.Ret = 200 br.Success = true br.Msg = "获取成功" //br.Data = resp br.Data = resp } // ClassifyEdbList // @Title 分类指标列表 // @Description 指标列表 // @Param ClassifyId query string true "分类id" // @Success 200 {object} models.TargetDetailResp // @router /target/classify/edb/list [get] func (this *TargetController) ClassifyEdbList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.Ret = 408 return } resp := new(models.EdbdataClassifyResp) classifyId, _ := this.GetInt("ClassifyId") //分类 if classifyId <= 0 { br.Msg = "请传入分类" br.ErrMsg = "请传入分类" br.IsSendEmail = false } var condition string var pars []interface{} // 如果不是超管账号,那么得校验下当前用户是否有该指标的权限 if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN { //获取账户所拥有权限的分类id集合 count, err := models.GetCountManualUserClassify(sysUser.AdminId, classifyId) if err != nil { br.Msg = "获取分类数据失败" br.ErrMsg = "获取分类数据失败,err:" + err.Error() return } if count <= 0 { br.Msg = "无权访问" br.ErrMsg = "无权访问" br.IsSendEmail = false return } } list := make([]*models.EdbdataClassifyList, 0) condition += ` AND a.classify_id = ? ` pars = append(pars, classifyId) tmpList, err := models.GetEdbInfoList(condition, pars, 0, 0) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } for _, v := range tmpList { list = append(list, &models.EdbdataClassifyList{ ClassifyId: 0, ClassifyName: v.SecName, ParentId: v.ClassifyId, Child: nil, TradeCode: v.TradeCode, UniqueCode: utils.MD5(v.TradeCode), }) } resp.List = list br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // EdbSearch // @Title 指标搜索 // @Description 指标搜索 // @Param Keyword query string false "关键字搜索" // @Success 200 {object} models.TargetItemListResp // @router /target/edb/search [get] func (this *TargetController) EdbSearch() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请重新登录" return } pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) //关键字 keyword := this.GetString("Keyword") var condition string var pars []interface{} userId := sysUser.AdminId //超管账号可以查看分类下的所有频度数据 if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN { classifyList, err := models.GetEdbdataClassify(int64(userId)) if err != nil { br.Msg = "获取分类数据失败" br.Msg = "获取拥有的分类数据失败,Err:" + err.Error() return } num := len(classifyList) if num > 0 { classifyIdList := make([]int, 0) for _, v := range classifyList { classifyIdList = append(classifyIdList, v.ClassifyId) } condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(num) + `) ` pars = append(pars, classifyIdList) } } if keyword != "" { condition += ` AND (a.SEC_NAME like ? or a.TRADE_CODE like ? )` pars = utils.GetLikeKeywordPars(pars, keyword, 2) } total, err := models.GetCountEdbInfoList(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } list, err := models.GetEdbInfoList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } for _, v := range list { v.UniqueCode = utils.MD5(v.TradeCode) } resp := models.EdbListResp{ List: list, Paging: paging.GetPaging(currentIndex, pageSize, total), } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // EdbList // @Title 获取研究员指标 // @Description 获取研究员指标 // @Param Frequency query string false "频度;枚举值:日度、周度、月度、季度、半年度、年度" // @Param Keyword query string false "关键字搜索" // @Param TradeCode query string false "指标唯一编码" // @Param ClassifyId query int false "分类id" // @Param EdbShowType query string true "指标展示类型:0,1,2; 0:不管有没有数据,指标都展示出来, 1:只展示有数据的指标, 2:只展示没有数据的指标" // @Success 200 {object} models.TargetItemListResp // @router /target/edb/list [get] func (this *TargetController) EdbList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请重新登录" return } pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) //关键字 keyword := this.GetString("Keyword") //关键字 classifyId, _ := this.GetInt("ClassifyId", 0) var condition string var pars []interface{} userId := sysUser.AdminId //超管账号可以查看分类下的所有频度数据 if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN { classifyList, err := models.GetEdbdataClassify(int64(userId)) if err != nil { br.Msg = "获取分类数据失败" br.Msg = "获取拥有的分类数据失败,Err:" + err.Error() return } num := len(classifyList) if num > 0 { classifyIdList := make([]int, 0) for _, v := range classifyList { classifyIdList = append(classifyIdList, v.ClassifyId) } condition += ` AND a.classify_id in (` + utils.GetOrmInReplace(num) + `) ` pars = append(pars, classifyIdList) } } // 关键词 if keyword != "" { condition += ` AND (a.SEC_NAME like ? or a.TRADE_CODE like ? )` pars = utils.GetLikeKeywordPars(pars, keyword, 2) } // 所属分类 if classifyId > 0 { condition += ` AND a.classify_id = ? ` pars = append(pars, classifyId) } total, err := models.GetCountEdbInfoList(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } list, err := models.GetEdbInfoList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } edbCodeMap := make(map[string]bool) listNum := len(list) if listNum > 0 { tradeCodeList := make([]string, 0) for _, v := range list { v.UniqueCode = utils.MD5(v.TradeCode) tradeCodeList = append(tradeCodeList, v.TradeCode) } // 查找是否加入到指标库 { var edbCondition string var edbPars []interface{} edbCondition = ` AND source = ? AND edb_code in (` + utils.GetOrmInReplace(listNum) + `) ` edbPars = append(pars, utils.DATA_SOURCE_MANUAL, tradeCodeList) edbInfoList, err := data_manage.GetEdbInfoListByCond(edbCondition, edbPars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } for _, v := range edbInfoList { edbCodeMap[v.EdbCode] = true } } for _, v := range list { // 如果能通过指标编码下标找到,那么说明是加到指标库中 if _, ok := edbCodeMap[v.TradeCode]; ok { v.EdbExist = 1 } } } resp := models.EdbListResp{ List: list, Paging: paging.GetPaging(currentIndex, pageSize, total), } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp }