|
@@ -3,6 +3,7 @@ package residual_analysis_service
|
|
|
import (
|
|
|
"eta/eta_api/models/data_manage"
|
|
|
"eta/eta_api/models/residual_analysis_model"
|
|
|
+ "eta/eta_api/models/system"
|
|
|
"eta/eta_api/utils"
|
|
|
"fmt"
|
|
|
"time"
|
|
@@ -300,3 +301,134 @@ func ContrastPreview(indexCode string) (residual_analysis_model.ResidualAnalysis
|
|
|
resp.DataList = dataList
|
|
|
return resp, nil
|
|
|
}
|
|
|
+
|
|
|
+func SaveResidualAnalysis(req residual_analysis_model.ResidualAnalysisIndexSaveReq, sysUser *system.Admin) error {
|
|
|
+
|
|
|
+ // 验证分类是否存在
|
|
|
+ classifyCount, err := data_manage.GetEdbClassifyCountById(req.ClassifyId)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if classifyCount <= 0 {
|
|
|
+ return fmt.Errorf("分类不存在", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新or新增
|
|
|
+ if req.EdbCode != "" {
|
|
|
+ // 查询指标库指标
|
|
|
+ edbInfo, err := data_manage.GetEdbInfoByEdbCode(utils.DATA_SOURCE_RESIDUAL_ANALYSIS, req.EdbCode)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if edbInfo == nil {
|
|
|
+ return fmt.Errorf("指标不存在", nil)
|
|
|
+ }
|
|
|
+ // todo 须补充更新指标最大值,最小值,数据最新时间,
|
|
|
+ err = edbInfo.Update([]string{"min_value", "max_value", "latest_date", "latest_value"})
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除对应得指标数据
|
|
|
+ err = residual_analysis_model.DeleteResidualAnalysisDataByEdbCode(req.EdbCode)
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("删除指标数据失败", nil)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 新增指标
|
|
|
+ edbCode, err := utils.GenerateEdbCode(1, "")
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ _, err = data_manage.AddEdbInfo(&data_manage.EdbInfo{
|
|
|
+ EdbCode: edbCode,
|
|
|
+ EdbName: req.EdbName,
|
|
|
+ EdbNameEn: req.EdbNameEn,
|
|
|
+ EdbType: req.EdbType,
|
|
|
+ Unit: req.Unit,
|
|
|
+ UnitEn: req.UnitEn,
|
|
|
+ Frequency: req.Frequency,
|
|
|
+ Source: utils.DATA_SOURCE_RESIDUAL_ANALYSIS,
|
|
|
+ SourceName: "残差分析",
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 新增数据
|
|
|
+ edbInfoId, err := residual_analysis_model.AddResidualAnalysisData(req.DataList)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新保存指标和配置的映射关系
|
|
|
+ mappingList, err := residual_analysis_model.GetConfigMappingListByConfigId(req.ConfigId)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ flag := true
|
|
|
+ for _, mapping := range mappingList {
|
|
|
+ if mapping.CalculateResidualAnalysisConfigId == req.ConfigId {
|
|
|
+ flag = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if flag {
|
|
|
+ _, err = residual_analysis_model.SaveConfigMapping(residual_analysis_model.CalculateResidualAnalysisConfigMapping{
|
|
|
+ CalculateResidualAnalysisConfigId: req.ConfigId,
|
|
|
+ EdbInfoId: edbInfoId,
|
|
|
+ ResidualType: req.ResidualType,
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func ResidualAnalysisDetail(edbInfoId int) ([]*data_manage.EdbInfoList, error) {
|
|
|
+ // 通过指标配置映射表 拿到配置id,再获取关联的所有指标信息
|
|
|
+ var condition string
|
|
|
+ var pars []interface{}
|
|
|
+
|
|
|
+ condition += " and edb_info_id=?"
|
|
|
+ pars = append(pars, edbInfoId)
|
|
|
+
|
|
|
+ mappingList, err := residual_analysis_model.GetConfigMappingListByCondition(condition, pars)
|
|
|
+ if err != nil {
|
|
|
+ return []*data_manage.EdbInfoList{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(mappingList) <= 0 {
|
|
|
+ return []*data_manage.EdbInfoList{}, fmt.Errorf("指标不存在", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ mapping := mappingList[0]
|
|
|
+
|
|
|
+ configMappingList, err := residual_analysis_model.GetConfigMappingListByConfigId(mapping.CalculateResidualAnalysisConfigId)
|
|
|
+ if err != nil {
|
|
|
+ return []*data_manage.EdbInfoList{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ var edbInfoIdList []int64
|
|
|
+ for _, v := range configMappingList {
|
|
|
+ edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
|
|
|
+ }
|
|
|
+
|
|
|
+ condition = ""
|
|
|
+ pars = []interface{}{}
|
|
|
+
|
|
|
+ condition += ` and edb_info_id in(` + utils.GetOrmInReplace(len(edbInfoIdList)) + `)`
|
|
|
+ for _, id := range edbInfoIdList {
|
|
|
+ pars = append(pars, id)
|
|
|
+ }
|
|
|
+
|
|
|
+ edbInfoList, err := data_manage.GetEdbInfoListByCond(condition, pars)
|
|
|
+ if err != nil {
|
|
|
+ return []*data_manage.EdbInfoList{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return edbInfoList, nil
|
|
|
+}
|