Browse Source

映射残差

gmy 4 months ago
parent
commit
d8079467c0

+ 3 - 9
controllers/residual_analysis/residual_analysis.go

@@ -161,7 +161,7 @@ func (this *ResidualAnalysisController) SaveResidualAnalysisConfig() {
 		return
 	}
 
-	var req residual_analysis_model.ResidualAnalysisIndexSaveReq
+	var req residual_analysis_model.ResidualAnalysisReq
 	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
@@ -169,16 +169,10 @@ func (this *ResidualAnalysisController) SaveResidualAnalysisConfig() {
 		return
 	}
 
-	if req.ClassifyId == 0 {
-		br.Msg = "分类id不能为空"
-		br.ErrMsg = "分类id不能为空"
-		return
-	}
-
-	err = residual_analysis_service.SaveResidualAnalysis(req, sysUser)
+	err = residual_analysis_service.SaveResidualAnalysisConfig(req, sysUser)
 	if err != nil {
 		br.Ret = 408
-		br.Msg = "获取失败"
+		br.Msg = "保存失败"
 		br.ErrMsg = err.Error()
 		return
 	}

+ 56 - 1
models/residual_analysis_model/calculate_residual_analysis_config.go

@@ -1,6 +1,7 @@
 package residual_analysis_model
 
 import (
+	"eta/eta_api/models/data_manage"
 	"github.com/beego/beego/v2/client/orm"
 )
 
@@ -20,7 +21,8 @@ func init() {
 type ResidualAnalysisReq struct {
 	EdbInfoIdA       int     `description:"指标A"`
 	EdbInfoIdB       int     `description:"指标B"`
-	DateType         int     `description:"时间类型 0-自定义时间 1-至今 n-枚举时间(近n年)"`
+	EdbInfoId        int     `description:"残差指标id"`
+	DateType         int     `description:"时间类型 -1-自定义时间 0-至今 n-枚举时间(近n年)"`
 	StartDate        string  `description:"自定义开始日期"`
 	EndDate          string  `description:"自定义结束日期"`
 	IsOrder          bool    `description:"true:正序,false:逆序"`
@@ -119,3 +121,56 @@ type ResidualAnalysisIndexSaveReq struct {
 	ResidualType int                    `orm:"column(residual_type)" description:"残差类型: 1-映射残差 2-拟合残差"`
 	DataList     []ResidualAnalysisData `description:"指标数据"`
 }
+
+// ResidualAnalysisConfigVo 残差分析配置vo
+type ResidualAnalysisConfigVo struct {
+	DateType         int     `description:"时间类型 -1-自定义时间 0-至今 n-枚举时间(近n年)"`
+	StartDate        string  `description:"自定义开始日期"`
+	EndDate          string  `description:"自定义结束日期"`
+	IsOrder          bool    `description:"true:正序,false:逆序"`
+	IndexType        int     `description:"1-标准指标 2-领先指标"`
+	LeadValue        int     `description:"领先值"`
+	LeadFrequency    string  `description:"领先频度"`
+	LeftIndexMin     float64 `description:"指标A左侧下限"`
+	LeftIndexMax     float64 `description:"指标A左侧上限"`
+	RightIndexMin    float64 `description:"指标B右侧下限"`
+	RightIndexMax    float64 `description:"指标B右侧上限"`
+	ResidualIndexMin float64 `description:"残差指标下限"`
+	ResidualIndexMax float64 `description:"残差指标上限"`
+	ContrastIndexMin float64 `description:"对比指标下限"`
+	ContrastIndexMax float64 `description:"对比指标上限"`
+}
+
+// ResidualAnalysisDetailResp 详情响应接口
+type ResidualAnalysisDetailResp struct {
+	ConfigInfo  *CalculateResidualAnalysisConfig
+	EdbInfoList []*data_manage.EdbInfoList
+}
+
+// GetResidualAnalysisConfigById 根据配置id查询配置信息
+func GetResidualAnalysisConfigById(configId int) (residualAnalysisConfig CalculateResidualAnalysisConfig, err error) {
+	o := orm.NewOrm()
+	sql := "SELECT * FROM residual_analysis_config WHERE calculate_residual_analysis_config_id=?"
+	err = o.Raw(sql, configId).QueryRow(&residualAnalysisConfig)
+	return residualAnalysisConfig, nil
+}
+
+// UpdateResidualAnalysisConfig 更新配置信息
+func UpdateResidualAnalysisConfig(config CalculateResidualAnalysisConfig) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(config)
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+// SaveResidualAnalysisConfig 保存配置信息
+func SaveResidualAnalysisConfig(config CalculateResidualAnalysisConfig) (id int64, err error) {
+	o := orm.NewOrm()
+	id, err = o.Insert(config)
+	if err != nil {
+		return 0, err
+	}
+	return id, nil
+}

+ 81 - 6
services/residual_analysis_service/residual_analysis_service.go

@@ -1,6 +1,7 @@
 package residual_analysis_service
 
 import (
+	"encoding/json"
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/residual_analysis_model"
 	"eta/eta_api/models/system"
@@ -388,7 +389,7 @@ func SaveResidualAnalysis(req residual_analysis_model.ResidualAnalysisIndexSaveR
 	return nil
 }
 
-func ResidualAnalysisDetail(edbInfoId int) ([]*data_manage.EdbInfoList, error) {
+func ResidualAnalysisDetail(edbInfoId int) (residual_analysis_model.ResidualAnalysisDetailResp, error) {
 	// 通过指标配置映射表 拿到配置id,再获取关联的所有指标信息
 	var condition string
 	var pars []interface{}
@@ -398,18 +399,18 @@ func ResidualAnalysisDetail(edbInfoId int) ([]*data_manage.EdbInfoList, error) {
 
 	mappingList, err := residual_analysis_model.GetConfigMappingListByCondition(condition, pars)
 	if err != nil {
-		return []*data_manage.EdbInfoList{}, err
+		return residual_analysis_model.ResidualAnalysisDetailResp{}, err
 	}
 
 	if len(mappingList) <= 0 {
-		return []*data_manage.EdbInfoList{}, fmt.Errorf("指标不存在", nil)
+		return residual_analysis_model.ResidualAnalysisDetailResp{}, fmt.Errorf("指标不存在", nil)
 	}
 
 	mapping := mappingList[0]
 
 	configMappingList, err := residual_analysis_model.GetConfigMappingListByConfigId(mapping.CalculateResidualAnalysisConfigId)
 	if err != nil {
-		return []*data_manage.EdbInfoList{}, err
+		return residual_analysis_model.ResidualAnalysisDetailResp{}, err
 	}
 
 	var edbInfoIdList []int64
@@ -427,8 +428,82 @@ func ResidualAnalysisDetail(edbInfoId int) ([]*data_manage.EdbInfoList, error) {
 
 	edbInfoList, err := data_manage.GetEdbInfoListByCond(condition, pars)
 	if err != nil {
-		return []*data_manage.EdbInfoList{}, err
+		return residual_analysis_model.ResidualAnalysisDetailResp{}, err
 	}
 
-	return edbInfoList, nil
+	// 获取配置
+	configInfo, err := residual_analysis_model.GetResidualAnalysisConfigById(mapping.CalculateResidualAnalysisConfigId)
+	if err != nil {
+		return residual_analysis_model.ResidualAnalysisDetailResp{}, err
+	}
+
+	resp := residual_analysis_model.ResidualAnalysisDetailResp{
+		ConfigInfo:  &configInfo,
+		EdbInfoList: edbInfoList,
+	}
+
+	return resp, nil
+}
+
+func SaveResidualAnalysisConfig(req residual_analysis_model.ResidualAnalysisReq, sysUser *system.Admin) error {
+
+	config := residual_analysis_model.ResidualAnalysisConfigVo{
+		DateType:         req.DateType,
+		StartDate:        req.StartDate,
+		EndDate:          req.EndDate,
+		IsOrder:          req.IsOrder,
+		IndexType:        req.IndexType,
+		LeadValue:        req.LeadValue,
+		LeadFrequency:    req.LeadFrequency,
+		LeftIndexMin:     req.LeftIndexMin,
+		LeftIndexMax:     req.LeftIndexMax,
+		RightIndexMin:    req.RightIndexMin,
+		RightIndexMax:    req.RightIndexMax,
+		ResidualIndexMin: req.ResidualIndexMin,
+		ResidualIndexMax: req.ResidualIndexMax,
+		ContrastIndexMin: req.ContrastIndexMin,
+		ContrastIndexMax: req.ContrastIndexMax,
+	}
+
+	// 转换为json格式
+	configJson, err := json.Marshal(config)
+	if err != nil {
+		return err
+	}
+
+	var condition string
+	var pars []interface{}
+	// 新增or更新
+	if req.EdbInfoId > 0 {
+		condition += " and edb_info_id=?"
+		pars = append(pars, req.EdbInfoId)
+		configMappings, err := residual_analysis_model.GetConfigMappingListByCondition(condition, pars)
+		if err != nil {
+			return err
+		}
+		if len(configMappings) > 0 {
+			mapping := configMappings[0]
+			configInfo, err := residual_analysis_model.GetResidualAnalysisConfigById(mapping.CalculateResidualAnalysisConfigId)
+			if err != nil {
+				return err
+			}
+			configInfo.Config = string(configJson)
+			err = residual_analysis_model.UpdateResidualAnalysisConfig(configInfo)
+			if err != nil {
+				return err
+			}
+		}
+	}
+
+	analysisConfig := residual_analysis_model.CalculateResidualAnalysisConfig{
+		Config:    string(configJson),
+		SysUserId: sysUser.AdminId,
+	}
+
+	_, err = residual_analysis_model.SaveResidualAnalysisConfig(analysisConfig)
+	if err != nil {
+		return err
+	}
+
+	return nil
 }