// Package data // @Author gmy 2024/8/12 16:44:00 package data import ( "eta/eta_api/models/data_manage" "eta/eta_api/utils" "fmt" "github.com/beego/beego/v2/core/logs" "github.com/rdlucklib/rdluck_tools/paging" ) // GetIndexPage 获取指标分页列表 func GetIndexPage(classifyId string, searchParam string, currentIndex, pageSize int) (*data_manage.BaseFromLyIndexPage, error) { count, err := data_manage.GetLyIndexCount(classifyId, searchParam) if err != nil { return nil, err } lyIndexPage := data_manage.BaseFromLyIndexPage{} page := paging.GetPaging(currentIndex, pageSize, count) if count <= 0 { lyIndexPage.Paging = page return &lyIndexPage, nil } lyIndexList, err := data_manage.GetLyIndexPage(classifyId, searchParam, currentIndex, pageSize) if err != nil { return nil, err } // 获取指标编码列表 var indexCodes []string for _, v := range lyIndexList { indexCodes = append(indexCodes, v.IndexCode) } // 获取指标数据 lyIndexData, err := data_manage.GetLyLastUpdateTimeLastByIndexCode(indexCodes) if err != nil { return nil, err } // 将lyIndexData转换为map lyIndexDataMap := make(map[string]*data_manage.BaseFromLyData) for _, v := range lyIndexData { lyIndexDataMap[v.IndexCode] = v } lyData, err := data_manage.GetLyLastDataTimeByIndexCode(indexCodes) if err != nil { return nil, err } // 将lyData转换为map lyDataMap := make(map[string]*data_manage.BaseFromLyData) for _, v := range lyData { lyDataMap[v.IndexCode] = v } // 查询指标库是否已添加 不做另外补偿维护index表中的edb_exist字段,直接去查,因为维护会改变指标库指标添加代码结构 edbInfoList, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_LY, indexCodes) if err != nil { return nil, err } edbInfoMap := make(map[string]*data_manage.EdbInfo) for _, v := range edbInfoList { edbInfoMap[v.EdbCode] = v } if len(lyIndexData) > 0 { for _, v := range lyIndexList { if lyIndexDataMap[v.IndexCode] != nil { toYmd := utils.TimeFormatToYmd(lyIndexDataMap[v.IndexCode].ModifyTime) v.ModifyTimeMax = toYmd } if lyDataMap[v.IndexCode] != nil { v.Value = lyDataMap[v.IndexCode].Value } if edbInfoMap[v.IndexCode] != nil { v.EdbExist = utils.IS_YES } } } lyIndexPage.List = lyIndexList lyIndexPage.Paging = page return &lyIndexPage, nil } // GetIndexDataPage 获取指标分页数据列表 func GetIndexDataPage(indexId, startSize, pageSize int) (*data_manage.BaseFromLyDataPage, error) { count, err := data_manage.GetLyDataCountByIndexId(indexId) if err != nil { return nil, err } lyDataPage := data_manage.BaseFromLyDataPage{} page := paging.GetPaging(startSize, pageSize, count) if count <= 0 { lyDataPage.Paging = page return &lyDataPage, nil } dataList, err := data_manage.GetLyDataPageByIndexId(indexId, startSize, pageSize) if err != nil { return nil, err } lyDataPage.List = dataList lyDataPage.Paging = page return &lyDataPage, nil } // LyIndexAddValidate 指标添加校验 func LyIndexAddValidate(indexCodes []string) (*[]data_manage.IndexCheckData, error) { // 根据指标编码获取指标库 指标信息 edbInfos, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_LY, indexCodes) if err != nil { return nil, err } var respList []data_manage.IndexCheckData if len(edbInfos) > 0 { for _, ebdInfo := range edbInfos { respList = append(respList, data_manage.IndexCheckData{ IndexCode: ebdInfo.EdbCode, IndexName: ebdInfo.EdbName, Unit: ebdInfo.Unit, Frequency: ebdInfo.Frequency, EdbInfoId: ebdInfo.EdbInfoId, ClassifyId: ebdInfo.ClassifyId, UniqueCode: ebdInfo.UniqueCode, }) } } return &respList, nil } // LyIndexNameCheck 指标名称校验 func LyIndexNameCheck(indexNames []string, resp []*data_manage.NameCheckResult) ([]*data_manage.NameCheckResult, 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 } type LyIndexAddReq struct { EdbCode string `description:"指标编码"` EdbName string `description:"指标名称"` Frequency string `description:"频度"` Unit string `description:"单位"` ClassifyId int `description:"分类ID"` AdminId int `description:"管理员ID"` AdminRealName string `description:"管理员名称"` } // LyIndexAdd 批量添加指标 func LyIndexAdd(req LyIndexAddReq, 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("BloombergIndexSource2Edb新增失败, Err: %s", err.Error()) logs.Info(tips) utils.FileLog.Info(tips) } }() source := utils.DATA_SOURCE_LY // 是否已有指标数据 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 // 标记原始指标为已添加 /*err = data_manage.UpdateLyIndexEdbExist(req.EdbCode, utils.IS_YES) if err != nil { err = fmt.Errorf("BaseIndex: 标记已添加指标库失败, err: %s", err.Error()) return }*/ // EdbInfoAdd方法已经新增es,这里不需要再新增??? // 新增es // go AddOrEditEdbInfoToEs(edbInfo.EdbInfoId) return }