Browse Source

fix:拟合残差添加返回拟合方程式

Roc 1 year ago
parent
commit
9a6e15df1a

+ 54 - 17
controllers/data_manage/edb_info_calculate.go

@@ -216,8 +216,54 @@ func (this *ChartInfoController) CalculateDetail() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
+
+	fullEdb := new(data_manage.EdbInfoFullClassify)
+	fullEdb.EdbInfo = edbInfo
+
+	// 拟合残差计算相关系数
+	if edbInfo.Source == utils.DATA_SOURCE_CALCULATE_NHCC {
+		var aEdbInfo, bEdbInfo *data_manage.EdbInfoCalculateDetail
+		for _, v := range calculateList {
+			if v.FromTag == "A" {
+				aEdbInfo = v
+				continue
+			}
+			if v.FromTag == "B" {
+				bEdbInfo = v
+				continue
+			}
+		}
+		if aEdbInfo != nil && bEdbInfo != nil {
+			edbInfoFromTagList := []data_manage.EdbInfoFromTag{
+				{
+					EdbInfoId: aEdbInfo.EdbInfoId,
+					FromTag:   aEdbInfo.FromTag,
+					MoveValue: aEdbInfo.MoveValue,
+				}, {
+					EdbInfoId: bEdbInfo.EdbInfoId,
+					FromTag:   bEdbInfo.FromTag,
+					MoveValue: bEdbInfo.MoveValue,
+				},
+			}
+
+			req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
+				AdminId:      sysUser.AdminId,
+				AdminName:    sysUser.RealName,
+				Formula:      edbInfo.CalculateFormula,
+				EdbInfoIdArr: edbInfoFromTagList,
+			}
+
+			// 计算
+			val, err, _ := data.CallCalculateComputeCorrelation(req2)
+			if err == nil {
+				fullEdb.CorrelationStr = val
+			}
+		}
+
+	}
+
 	resp := new(data_manage.CalculateDetailResp)
-	resp.EdbInfoDetail = edbInfo
+	resp.EdbInfoDetail = fullEdb
 	resp.CalculateList = calculateList
 	br.Ret = 200
 	br.Success = true
@@ -1872,25 +1918,16 @@ func (this *ChartInfoController) CalculateComputeCorrelation() {
 		Calendar:     req.Calendar,
 	}
 
-	// 调用指标库去更新
-	reqJson, err := json.Marshal(req2)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-	respItem, err := data.CalculateComputeCorrelation(string(reqJson))
+	val, err, errMsg := data.CallCalculateComputeCorrelation(req2)
 	if err != nil {
-		br.Msg = "新增失败"
-		br.ErrMsg = "新增失败,Err:" + err.Error()
+		br.Msg = "计算失败"
+		if errMsg != `` {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = err.Error()
 		return
 	}
-
-	if respItem.Ret == 200 {
-		br.Data = respItem.Data
-	} else {
-		br.Data = ``
-	}
+	br.Data = val
 
 	br.Ret = 200
 	br.Success = true

+ 49 - 5
controllers/data_manage/predict_edb_info.go

@@ -966,12 +966,56 @@ func (this *PredictEdbInfoController) Detail() {
 		}
 	}
 
+	// 拟合残差计算相关系数
+	var correlationStr string
+	if edbInfo.Source == utils.DATA_SOURCE_PREDICT_CALCULATE_NHCC {
+		var aEdbInfo, bEdbInfo *data_manage.EdbInfoCalculateDetail
+		for _, v := range calculateList {
+			if v.FromTag == "A" {
+				aEdbInfo = v
+				continue
+			}
+			if v.FromTag == "B" {
+				bEdbInfo = v
+				continue
+			}
+		}
+		if aEdbInfo != nil && bEdbInfo != nil {
+			edbInfoFromTagList := []data_manage.EdbInfoFromTag{
+				{
+					EdbInfoId: aEdbInfo.EdbInfoId,
+					FromTag:   aEdbInfo.FromTag,
+					MoveValue: aEdbInfo.MoveValue,
+				}, {
+					EdbInfoId: bEdbInfo.EdbInfoId,
+					FromTag:   bEdbInfo.FromTag,
+					MoveValue: bEdbInfo.MoveValue,
+				},
+			}
+
+			req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
+				AdminId:      sysUser.AdminId,
+				AdminName:    sysUser.RealName,
+				Formula:      edbInfo.CalculateFormula,
+				EdbInfoIdArr: edbInfoFromTagList,
+			}
+
+			// 计算
+			val, err, _ := data.CallCalculateComputeCorrelation(req2)
+			if err == nil {
+				correlationStr = val
+			}
+		}
+
+	}
+
 	resp := response.PredictEdbInfo{
-		EdbInfo:       *edbInfo,
-		RuleType:      ruleType,
-		FixedValue:    fixedValue,
-		CalculateList: calculateList,
-		RuleList:      predictEdbConfList,
+		EdbInfo:        *edbInfo,
+		RuleType:       ruleType,
+		FixedValue:     fixedValue,
+		CalculateList:  calculateList,
+		RuleList:       predictEdbConfList,
+		CorrelationStr: correlationStr,
 	}
 	br.Ret = 200
 	br.Success = true

+ 5 - 0
models/data_manage/edb_info.go

@@ -48,6 +48,11 @@ type EdbInfo struct {
 	ManualSave       int     `description:"是否有手动保存过上下限: 0-否; 1-是"`
 }
 
+type EdbInfoFullClassify struct {
+	*EdbInfo
+	CorrelationStr string `description:"相关性系数字符串"`
+}
+
 func AddEdbInfo(item *EdbInfo) (lastId int64, err error) {
 	o := orm.NewOrmUsingDB("data")
 	lastId, err = o.Insert(item)

+ 1 - 1
models/data_manage/edb_info_calculate.go

@@ -96,7 +96,7 @@ func GetEdbInfoCalculateDetail(edbInfoId, source int) (list []*EdbInfoCalculateD
 }
 
 type CalculateDetailResp struct {
-	EdbInfoDetail *EdbInfo
+	EdbInfoDetail *EdbInfoFullClassify
 	CalculateList []*EdbInfoCalculateDetail
 }
 

+ 5 - 4
models/data_manage/response/predit_edb_info.go

@@ -27,10 +27,11 @@ type PredictEdbInfoDataResp struct {
 // PredictEdbInfo 预测指标详情
 type PredictEdbInfo struct {
 	data_manage.EdbInfo
-	RuleType      int                                   `description:"预测规则,1:最新,2:固定值,3:同比,4:同差,5:环比,6:环差,7:N期移动均值,8:N期段线性外推值"`
-	FixedValue    float64                               `description:"固定值"`
-	CalculateList []*data_manage.EdbInfoCalculateDetail `description:"关联指标"`
-	RuleList      []data_manage.PredictEdbConfDetail    `description:"指标规则配置"`
+	RuleType       int                                   `description:"预测规则,1:最新,2:固定值,3:同比,4:同差,5:环比,6:环差,7:N期移动均值,8:N期段线性外推值"`
+	FixedValue     float64                               `description:"固定值"`
+	CalculateList  []*data_manage.EdbInfoCalculateDetail `description:"关联指标"`
+	RuleList       []data_manage.PredictEdbConfDetail    `description:"指标规则配置"`
+	CorrelationStr string                                `description:"相关性系数字符串"`
 }
 
 // PredictEdbInfoChartDataResp 获取预测指标绘图数据返回

+ 1 - 1
services/data/base_edb_lib.go

@@ -293,7 +293,7 @@ type CalculateComputeCorrelationResp struct {
 	Msg         string
 	ErrMsg      string
 	ErrCode     string
-	Data        float64
+	Data        string
 	Success     bool `description:"true 执行成功,false 执行失败"`
 	IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
 	IsAddLog    bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `

+ 23 - 0
services/data/edb_info_calculate.go

@@ -1,6 +1,7 @@
 package data
 
 import (
+	"encoding/json"
 	"errors"
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/utils"
@@ -683,3 +684,25 @@ func handleDataByLinearRegression(edbInfoDataList []*data_manage.EdbDataList, ha
 
 	return
 }
+
+// CallCalculateComputeCorrelation 调用计算拟合残差的相关系数
+func CallCalculateComputeCorrelation(data *data_manage.EdbInfoCalculateBatchSaveReqByEdbLib) (val string, err error, errMsg string) {
+	errMsg = "计算失败"
+	// 调用指标库去更新
+	reqJson, err := json.Marshal(data)
+	if err != nil {
+		errMsg = "计算相关系数参数解析异常!"
+		err = errors.New("参数解析失败,Err:" + err.Error())
+		return
+	}
+	respItem, err := CalculateComputeCorrelation(string(reqJson))
+	if err != nil {
+		return
+	}
+
+	if respItem.Ret == 200 {
+		val = respItem.Data
+	}
+
+	return
+}