123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444 |
- // Package data
- // @Author gmy 2024/8/22 9:44:00
- package data
- import (
- "eta/eta_api/models/data_manage"
- "eta/eta_api/utils"
- "fmt"
- "github.com/rdlucklib/rdluck_tools/paging"
- )
- // RzdIndexData 获取睿姿得指标数据
- func RzdIndexData(classifyId int, frequency string, currentIndex, startSize, pageSize int) (dataList []*data_manage.BaseFromRzdIndexList, err error) {
- // 获取指标
- var condition string
- var pars []interface{}
- if classifyId >= 0 {
- // 递归查询子集分类
- classifyIdList, err := RzdClassifyRecursiveQuery(classifyId)
- if err != nil {
- return nil, err
- }
- classifyIdList = append(classifyIdList, classifyId)
- interfaceClassifyIdList := make([]interface{}, len(classifyIdList))
- for i, id := range classifyIdList {
- interfaceClassifyIdList[i] = id
- }
- condition += ` AND base_from_rzd_classify_id in (` + utils.GetOrmInReplace(len(classifyIdList)) + `)`
- pars = append(pars, interfaceClassifyIdList...)
- }
- if frequency != "" {
- condition += ` AND frequency=? `
- pars = append(pars, frequency)
- }
- indexes, err := data_manage.GetRzdIndex(condition, pars)
- if err != nil {
- return nil, err
- }
- indexCodes := make([]string, 0)
- for _, v := range indexes {
- indexCodes = append(indexCodes, v.IndexCode)
- }
- indexCounts, e := data_manage.GetRzdIndexDataCountGroup(indexCodes)
- if e != nil {
- return nil, err
- }
- countMap := make(map[string]int)
- for _, v := range indexCounts {
- countMap[v.IndexCode] = v.Count
- }
- // 判断是否存在于指标库
- edbCodeList, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_RZD, indexCodes)
- if err != nil {
- return
- }
- edbCodeMap := make(map[string]*data_manage.EdbInfo)
- for _, v := range edbCodeList {
- edbCodeMap[v.EdbCode] = v
- }
- resultList := make([]*data_manage.BaseFromRzdIndexList, 0)
- for _, v := range indexes {
- product := new(data_manage.BaseFromRzdIndexList)
- product.BaseFromRzdIndexId = v.BaseFromRzdIndexId
- product.BaseFromRzdClassifyId = v.BaseFromRzdClassifyId
- product.Unit = v.Unit
- product.IndexCode = v.IndexCode
- product.IndexName = v.IndexName
- product.Frequency = v.Frequency
- product.CreateTime = v.CreateTime
- product.ModifyTime = v.ModifyTime
- edbInfo := edbCodeMap[v.IndexCode]
- if edbInfo != nil {
- product.EdbInfoId = edbInfo.EdbInfoId
- }
- total := countMap[v.IndexCode]
- page := paging.GetPaging(currentIndex, pageSize, total)
- indexDataList, e := data_manage.GetRzdIndexData(v.IndexCode, startSize, pageSize)
- if e != nil {
- return nil, err
- }
- if indexDataList == nil {
- indexDataList = make([]*data_manage.BaseFromRzdData, 0)
- }
- product.DataList = indexDataList
- product.Paging = page
- resultList = append(resultList, product)
- }
- return resultList, nil
- }
- // RzdClassifyRecursiveQuery 递归查询分类
- func RzdClassifyRecursiveQuery(classifyId int) ([]int, error) {
- var classifyIdList []int
- // 查询当前分类 ID 的子分类
- rzdClassifyList, err := GetRzdClassifyItemByParentId(classifyId)
- if err != nil {
- return nil, err
- }
- // 遍历子分类
- for _, classify := range rzdClassifyList {
- // 将当前子分类的 ID 添加到列表中
- classifyIdList = append(classifyIdList, classify.BaseFromRzdClassifyId)
- // 递归查询当前子分类的子分类
- childIds, err := RzdClassifyRecursiveQuery(classify.BaseFromRzdClassifyId)
- if err != nil {
- return nil, err
- }
- // 合并子分类的 ID
- classifyIdList = append(classifyIdList, childIds...)
- }
- return classifyIdList, nil
- }
- func GetRzdIndexFrequency(classify int) ([]*string, error) {
- classifyIdList, err := RzdClassifyRecursiveQuery(classify)
- if err != nil {
- return nil, err
- }
- classifyIdList = append(classifyIdList, classify)
- frequencyNameList, err := data_manage.GetRzdIndexFrequency(classifyIdList)
- if err != nil {
- return nil, err
- }
- return frequencyNameList, nil
- }
- // RzdIndexAddValidate 指标添加校验
- func RzdIndexAddValidate(req *data_manage.BaseFromRzdIndexBatchAddCheckReq) ([]*data_manage.BaseFromRzdIndexAndData, error) {
- var condition string
- var pars []interface{}
- if req.IsCheckAll {
- if len(req.ClassifyIdList) > 0 {
- condition += ` AND base_from_rzd_classify_id in (` + utils.GetOrmInReplace(len(req.ClassifyIdList)) + `)`
- for _, id := range req.ClassifyIdList {
- pars = append(pars, id)
- }
- }
- if len(req.FrequencyList) > 0 {
- condition += ` AND frequency in (` + utils.GetOrmInReplace(len(req.FrequencyList)) + `)`
- for _, frequency := range req.FrequencyList {
- pars = append(pars, frequency)
- }
- }
- if req.SearchParams != "" {
- condition += ` AND (index_name like ? or index_code like ?)`
- pars = append(pars, "%"+req.SearchParams+"%", "%"+req.SearchParams+"%")
- }
- if len(req.IndexCodes) > 0 {
- condition += ` AND index_code not in (` + utils.GetOrmInReplace(len(req.IndexCodes)) + `)`
- for _, code := range req.IndexCodes {
- pars = append(pars, code)
- }
- }
- } else {
- if len(req.IndexCodes) > 0 {
- condition += ` AND index_code in (` + utils.GetOrmInReplace(len(req.IndexCodes)) + `)`
- for _, code := range req.IndexCodes {
- pars = append(pars, code)
- }
- }
- }
- count, err := data_manage.GetRzdIndexNotExistEdbInfoCount(condition, pars)
- if err != nil {
- return nil, err
- }
- if count > 30 {
- return nil, fmt.Errorf("批量添加指标数量不得超过30个")
- }
- condition += ` ORDER BY base_from_rzd_index_id asc`
- indexList, err := data_manage.GetRzdIndexNotExistEdbInfoPage(condition, pars)
- if err != nil {
- return nil, err
- }
- return indexList, nil
- }
- // RzdIndexNameCheck 指标名称校验
- func RzdIndexNameCheck(indexNames []string, resp []*data_manage.RzdNameCheckResult) ([]*data_manage.RzdNameCheckResult, error) {
- // 重名校验
- edbList, e := data_manage.GetEdbInfoByNameArr(indexNames, utils.EDB_INFO_TYPE)
- if e != nil {
- return nil, e
- }
- nameExists := make(map[string]bool)
- for _, edbInfo := range edbList {
- nameExists[edbInfo.EdbName] = true
- }
- if len(nameExists) > 0 {
- for _, v := range resp {
- v.Exist = nameExists[v.IndexName]
- }
- }
- return resp, nil
- }
- // RzdIndexAdd 批量添加指标
- func RzdIndexAdd(req data_manage.RzdIndexAddReq, lang string) (edb *data_manage.EdbInfo, err error, errMsg string, skip bool) {
- if req.EdbCode == "" {
- err = fmt.Errorf("指标ID为空")
- return
- }
- defer func() {
- if err != nil {
- tips := fmt.Sprintf("ruizide指标数据新增失败, Err: %s", err.Error())
- utils.FileLog.Info(tips)
- }
- }()
- source := utils.DATA_SOURCE_RZD
- // 是否已有指标数据
- dataList, e := data_manage.GetEdbDataAllByEdbCode(req.EdbCode, source, utils.DATA_SUB_SOURCE_EDB, utils.EDB_DATA_LIMIT)
- if e != nil {
- err = fmt.Errorf("获取指标数据失败, Err: %s", e.Error())
- return
- }
- // 新增指标数据
- if len(dataList) == 0 {
- res, e := AddEdbData(source, req.EdbCode, req.Frequency)
- if e != nil {
- err = fmt.Errorf("index_lib: 新增指标数据失败, Err: %s", e.Error())
- return
- }
- if res == nil {
- err = fmt.Errorf("index_lib: 新增指标数据失败, res nil")
- return
- }
- if res.Ret != 200 {
- err = fmt.Errorf("index_lib: 新增指标数据失败, Ret: %d", res.Ret)
- return
- }
- }
- // 是否新增过指标
- exist, e := data_manage.GetEdbInfoByEdbCode(source, req.EdbCode)
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = fmt.Errorf("获取指标是否存在失败, err: %s", e.Error())
- return
- }
- if exist != nil {
- skip = true
- return
- }
- // 开始结束时间
- var startDate, endDate string
- minMax, e := data_manage.GetEdbInfoMaxAndMinInfo(source, utils.DATA_SUB_SOURCE_EDB, req.EdbCode)
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = fmt.Errorf("MinMax: 获取指标极值失败, err: %s", e.Error())
- return
- }
- if minMax != nil {
- startDate = minMax.MinDate
- endDate = minMax.MaxDate
- }
- // 新增指标到指标库
- edbInfo, e, msg, _ := EdbInfoAdd(source, utils.DATA_SUB_SOURCE_EDB, req.ClassifyId, req.EdbCode, req.EdbName, req.Frequency, req.Unit, startDate, endDate, req.AdminId, req.AdminRealName, lang)
- if e != nil {
- errMsg = msg
- err = fmt.Errorf("EdbInfo: 新增指标失败, err: %s", e.Error())
- return
- }
- edb = edbInfo
- // EdbInfoAdd方法已经新增es,这里不需要再新增???
- // 新增es
- // go AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
- return
- }
- // GetRzdIndexInfo 获取指标信息-分页
- func GetRzdIndexInfo(keyWord string, classifyIdList []string, frequencyList []string, currentIndex, startSize, pageSize int) (rzdIndexInfoList *data_manage.BaseFromRzdIndexPage, err error) {
- // 获取指标
- var condition string
- var pars []interface{}
- if keyWord != "" {
- condition += ` AND (index_name like ? or index_code like ?)`
- pars = append(pars, "%"+keyWord+"%", "%"+keyWord+"%")
- }
- if len(classifyIdList) > 0 {
- condition += ` AND base_from_rzd_classify_id IN (`
- for _, v := range classifyIdList {
- condition += `?,`
- pars = append(pars, v)
- }
- condition = condition[:len(condition)-1] + `)`
- }
- if len(frequencyList) > 0 {
- condition += ` AND frequency IN (`
- for _, v := range frequencyList {
- condition += `?,`
- pars = append(pars, v)
- }
- condition = condition[:len(condition)-1] + `)`
- }
- count, err := data_manage.GetRzdIndexInfoCount(condition, pars)
- if err != nil {
- return nil, err
- }
- indexPage := data_manage.BaseFromRzdIndexPage{}
- page := paging.GetPaging(currentIndex, pageSize, count)
- if count <= 0 {
- indexPage.Paging = page
- return &indexPage, nil
- }
- condition += ` ORDER BY base_from_rzd_index_id asc`
- // 分页
- condition += ` LIMIT ?, ?`
- pars = append(pars, startSize, pageSize)
- indexInfoPage, err := data_manage.GetRzdIndexInfoPage(condition, pars)
- if err != nil {
- return nil, err
- }
- var indexCodes []string
- for _, indexInfo := range indexInfoPage {
- indexCodes = append(indexCodes, indexInfo.IndexCode)
- }
- IndexDataList, err := data_manage.GetRzdLastUpdateTimeLastByIndexCode(indexCodes)
- if err != nil {
- return nil, err
- }
- var indexDataMap = make(map[string]*data_manage.BaseFromRzdData, 0)
- for _, data := range IndexDataList {
- indexDataMap[data.IndexCode] = data
- }
- for _, indexInfo := range indexInfoPage {
- if indexDataMap[indexInfo.IndexCode] == nil {
- continue
- }
- indexInfo.ModifyTimeMax = indexDataMap[indexInfo.IndexCode].DataTime
- indexInfo.Value = indexDataMap[indexInfo.IndexCode].Value
- }
- indexPage.List = indexInfoPage
- indexPage.Paging = page
- return &indexPage, nil
- }
- // GetRzdIndexDetail 获取指标详情
- func GetRzdIndexDetail(indexCode string, currentIndex, startSize, pageSize int) (rzdIndexInfoList *data_manage.BaseFromRzdIndexList, err error) {
- // 获取指标
- var condition string
- var pars []interface{}
- if indexCode != "" {
- condition += ` and index_code = ?`
- pars = append(pars, indexCode)
- }
- rzdIndexList, err := data_manage.GetRzdIndex(condition, pars)
- if err != nil {
- return nil, err
- }
- var rzdIndex *data_manage.BaseFromRzdIndexList
- if len(rzdIndexList) > 0 {
- rzdIndex = rzdIndexList[0]
- // 查询指标数据
- var condition string
- var pars []interface{}
- condition += ` and index_code = ?`
- pars = append(pars, indexCode)
- count, err := data_manage.GetBaseFormRzdDataByConditionCount(condition, pars)
- if err != nil {
- return nil, err
- }
- pagingItem := paging.GetPaging(currentIndex, pageSize, count)
- if count <= 0 {
- rzdIndex.Paging = pagingItem
- } else {
- condition += ` ORDER BY data_time desc`
- condition += ` LIMIT ?, ?`
- pars = append(pars, startSize, pageSize)
- dataList, err := data_manage.GetBaseFormRzdDataByCondition(condition, pars)
- if err != nil {
- return nil, err
- }
- rzdIndex.Paging = pagingItem
- rzdIndex.DataList = dataList
- }
- // 查询是否在指标库
- edbInfo, err := data_manage.GetEdbInfoByEdbCode(utils.DATA_SOURCE_RZD, indexCode)
- if err != nil && err.Error() != utils.ErrNoRow() {
- return nil, err
- }
- if edbInfo != nil {
- rzdIndex.EdbInfoId = edbInfo.EdbInfoId
- }
- }
- return rzdIndex, nil
- }
- // GetRzdIndexList 获取指标列表
- func GetRzdIndexList(searchParams string) (rzdIndexInfoList []*data_manage.BaseFromRzdIndexList, err error) {
- // 获取指标
- var condition string
- var pars []interface{}
- if searchParams != "" {
- condition += ` and index_code like ? or index_name like ?`
- pars = append(pars, "%"+searchParams+"%", "%"+searchParams+"%")
- }
- rzdIndexList, err := data_manage.GetRzdIndex(condition, pars)
- if err != nil {
- return nil, err
- }
- return rzdIndexList, nil
- }
|