|
@@ -97,7 +97,7 @@ func ResidualAnalysisPreview(req residual_analysis_model.ResidualAnalysisReq) (r
|
|
|
}
|
|
|
|
|
|
// 残差图表信息
|
|
|
- residualEdbList, R2, err := fillResidualChartInfo(edbInfoMappingA, edbInfoMappingB, mappingEdbList)
|
|
|
+ residualEdbList, R2, err := fillResidualChartInfo(req, edbInfoMappingA, edbInfoMappingB, mappingEdbList)
|
|
|
if err != nil {
|
|
|
return residual_analysis_model.ResidualAnalysisResp{}, err
|
|
|
}
|
|
@@ -131,7 +131,7 @@ func createChartInfoResp(req residual_analysis_model.ResidualAnalysisReq, startD
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func fillResidualChartInfo(edbInfoMappingA *data_manage.ChartEdbInfoMapping, edbInfoMappingB *data_manage.ChartEdbInfoMapping, mappingEdbList []residual_analysis_model.ResidualAnalysisChartEdbInfoMapping) ([]residual_analysis_model.ResidualAnalysisChartEdbInfoMapping, float64, error) {
|
|
|
+func fillResidualChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbInfoMappingA *data_manage.ChartEdbInfoMapping, edbInfoMappingB *data_manage.ChartEdbInfoMapping, mappingEdbList []residual_analysis_model.ResidualAnalysisChartEdbInfoMapping) ([]residual_analysis_model.ResidualAnalysisChartEdbInfoMapping, float64, error) {
|
|
|
// 计算公式 映射残差 = 因变量指标 - 映射指标
|
|
|
var edbInfoA, edbInfoB residual_analysis_model.ResidualAnalysisChartEdbInfoMapping
|
|
|
if mappingEdbList[0].EdbInfoId == edbInfoMappingA.EdbInfoId {
|
|
@@ -227,6 +227,11 @@ func fillResidualChartInfo(edbInfoMappingA *data_manage.ChartEdbInfoMapping, edb
|
|
|
if mapping.EdbInfoId != edbInfoMappingA.EdbInfoId {
|
|
|
mappingEdb[i].DataList = edbDataResp
|
|
|
mappingEdb[i].EdbName = edbInfoMappingA.EdbName + "映射残差/" + edbInfoMappingB.EdbName
|
|
|
+ if req.IndexType == 2 {
|
|
|
+ if req.LeadValue > 0 {
|
|
|
+ mappingEdb[i].EdbName = edbInfoMappingA.EdbName + "映射残差/" + edbInfoMappingB.EdbName + "(领先" + strconv.Itoa(req.LeadValue) + req.LeadFrequency + ")"
|
|
|
+ }
|
|
|
+ }
|
|
|
mappingEdb[i].IsAxis = 1
|
|
|
mappingEdb[i].ChartColor = `#00F`
|
|
|
mappingEdb[i].IsOrder = false
|
|
@@ -264,28 +269,22 @@ func fillMappingChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbIn
|
|
|
return nil, a, b, r, fmt.Errorf("数据类型转换失败")
|
|
|
}
|
|
|
|
|
|
- // 领先指标 dataList进行数据处理
|
|
|
- /*if req.IndexType == 2 {
|
|
|
- if req.LeadValue < 0 {
|
|
|
- return nil, a, b, r, fmt.Errorf("领先值不能小于0")
|
|
|
- } else if req.LeadValue > 0 {
|
|
|
- for _, indexData := range dataList {
|
|
|
- switch req.LeadFrequency {
|
|
|
- case "天":
|
|
|
- indexData.DataTime = utils.GetNextDayN(indexData.DataTime, req.LeadValue)
|
|
|
- case "周":
|
|
|
- indexData.DataTime = utils.GetNextDayN(indexData.DataTime, req.LeadValue*7)
|
|
|
- case "月":
|
|
|
- indexData.DataTime = utils.TimeToString(utils.AddDate(utils.StringToTime(indexData.DataTime), 0, req.LeadValue), utils.YearMonthDay)
|
|
|
- case "季":
|
|
|
- indexData.DataTime = utils.TimeToString(utils.AddDate(utils.StringToTime(indexData.DataTime), 0, req.LeadValue*3), utils.YearMonthDay)
|
|
|
- case "年":
|
|
|
- indexData.DataTime = utils.TimeToString(utils.AddDate(utils.StringToTime(indexData.DataTime), req.LeadValue, 0), utils.YearMonthDay)
|
|
|
+ // 拟合残差 计算a,b
|
|
|
+ var coordinateList []utils.Coordinate
|
|
|
+ if req.ResidualType == 2 {
|
|
|
+ for _, indexData := range dataList {
|
|
|
+ if _, ok := indexADataMap[indexData.DataTime]; ok {
|
|
|
+
|
|
|
+ coordinate := utils.Coordinate{
|
|
|
+ X: indexData.Value,
|
|
|
+ Y: indexADataMap[indexData.DataTime].Value,
|
|
|
}
|
|
|
- indexData.DataTimestamp = utils.StringToTime(indexData.DataTime).UnixMilli()
|
|
|
+ coordinateList = append(coordinateList, coordinate)
|
|
|
}
|
|
|
}
|
|
|
- }*/
|
|
|
+ a, b = utils.GetLinearResult(coordinateList)
|
|
|
+ r = utils.CalculationDecisive(coordinateList)
|
|
|
+ }
|
|
|
|
|
|
// 指标B数据补充
|
|
|
// 新建一个切片来保存补充的数据
|
|
@@ -324,23 +323,6 @@ func fillMappingChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbIn
|
|
|
// 排序
|
|
|
sort.Sort(ByDataTime(dataList))
|
|
|
|
|
|
- // 拟合残差 计算a,b
|
|
|
- var coordinateList []utils.Coordinate
|
|
|
- if req.ResidualType == 2 {
|
|
|
- for _, indexData := range dataList {
|
|
|
- if _, ok := indexADataMap[indexData.DataTime]; ok {
|
|
|
-
|
|
|
- coordinate := utils.Coordinate{
|
|
|
- X: indexData.Value,
|
|
|
- Y: indexADataMap[indexData.DataTime].Value,
|
|
|
- }
|
|
|
- coordinateList = append(coordinateList, coordinate)
|
|
|
- }
|
|
|
- }
|
|
|
- a, b = utils.GetLinearResult(coordinateList)
|
|
|
- r = utils.CalculationDecisive(coordinateList)
|
|
|
- }
|
|
|
-
|
|
|
// 根据指标A的时间key,在B的映射指标中筛选出对应的值
|
|
|
var dataBList []*data_manage.EdbDataList
|
|
|
|
|
@@ -381,6 +363,11 @@ func fillMappingChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbIn
|
|
|
mappingEdbList[i].EdbCode = ""
|
|
|
mappingEdbList[i].IsAxis = 1
|
|
|
mappingEdbList[i].EdbName = edbInfoMappingB.EdbName + "映射" + edbInfoMappingA.EdbName
|
|
|
+ if req.IndexType == 2 {
|
|
|
+ if req.LeadValue > 0 {
|
|
|
+ mappingEdbList[i].EdbName = edbInfoMappingB.EdbName + "映射" + edbInfoMappingA.EdbName + "(领先" + strconv.Itoa(req.LeadValue) + req.LeadFrequency + ")"
|
|
|
+ }
|
|
|
+ }
|
|
|
mappingEdbList[i].DataList = dataBList
|
|
|
mappingEdbList[i].MinValue = indexMin
|
|
|
mappingEdbList[i].MaxValue = indexMax
|
|
@@ -453,12 +440,14 @@ func fillOriginalChart(req residual_analysis_model.ResidualAnalysisReq, mappingL
|
|
|
edbInfoMapping.IsAxis = 0
|
|
|
edbInfoMapping.ChartColor = `#F00`
|
|
|
edbInfoMapping.ChartWidth = 1
|
|
|
+ edbInfoMapping.EdbName = v.EdbName
|
|
|
|
|
|
// 领先指标 dataList进行数据处理
|
|
|
if req.IndexType == 2 {
|
|
|
if req.LeadValue < 0 {
|
|
|
return nil, fmt.Errorf("领先值不能小于0")
|
|
|
} else if req.LeadValue > 0 {
|
|
|
+ edbInfoMapping.EdbName = v.EdbName + "(领先" + strconv.Itoa(req.LeadValue) + req.LeadFrequency + ")"
|
|
|
for _, indexData := range dataList {
|
|
|
switch req.LeadFrequency {
|
|
|
case "天":
|
|
@@ -482,7 +471,6 @@ func fillOriginalChart(req residual_analysis_model.ResidualAnalysisReq, mappingL
|
|
|
edbInfoMappingA.DataList = dataList
|
|
|
}
|
|
|
edbInfoMapping.EdbInfoId = v.EdbInfoId
|
|
|
- edbInfoMapping.EdbName = v.EdbName
|
|
|
edbInfoMapping.EdbCode = v.EdbCode
|
|
|
edbInfoMapping.Unit = v.Unit
|
|
|
edbInfoMapping.Frequency = v.Frequency
|