|
@@ -90,13 +90,23 @@ func RefreshAllCalculateResidualAnalysis(edbInfoId, source, subSource, formulaIn
|
|
|
// refreshAllCalculateResidualAnalysis 刷新所有残差分析
|
|
|
func refreshAllCalculateResidualAnalysis(edbInfoId, source, subSource, formulaInt, moveType int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate, moveFrequency string, configMapping []CalculateResidualAnalysisConfigMapping) (err error) {
|
|
|
fmt.Println("refreshAllCalculateResidualAnalysis startDate:", startDate)
|
|
|
-
|
|
|
+ configMap := make(map[int64]CalculateResidualAnalysisConfigMapping, len(configMapping))
|
|
|
+ for _, v := range configMapping {
|
|
|
+ configMap[v.EdbInfoId] = v
|
|
|
+ }
|
|
|
calculateMappingList, err := GetCalculateMappingListByEdbInfoId(edbInfoId)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
- edbInfoIdA := calculateMappingList[0].FromEdbInfoId
|
|
|
- edbInfoIdB := calculateMappingList[1].FromEdbInfoId
|
|
|
+ //这里顺序和之前的不一致导致的计算错误
|
|
|
+ var edbInfoIdA, edbInfoIdB int
|
|
|
+ if configMap[int64(calculateMappingList[0].FromEdbInfoId)].IndexType == 3 {
|
|
|
+ edbInfoIdA = calculateMappingList[0].FromEdbInfoId
|
|
|
+ edbInfoIdB = calculateMappingList[1].FromEdbInfoId
|
|
|
+ } else {
|
|
|
+ edbInfoIdA = calculateMappingList[1].FromEdbInfoId
|
|
|
+ edbInfoIdB = calculateMappingList[0].FromEdbInfoId
|
|
|
+ }
|
|
|
|
|
|
mappingList, err := GetEdbInfoListByIds([]int{edbInfoIdA, edbInfoIdB})
|
|
|
if err != nil {
|
|
@@ -168,54 +178,54 @@ func refreshAllCalculateResidualAnalysis(edbInfoId, source, subSource, formulaIn
|
|
|
residualEdbList, _, err := fillResidualChartInfo(config, fromEdbInfo, edbInfoMappingA, edbInfoMappingB, mappingEdbList)
|
|
|
|
|
|
// 映射指标 与 残差指标 同步刷新
|
|
|
- for _, mapping := range configMapping {
|
|
|
- var edbDataResidualAnalysisList []edbDataResidualAnalysis
|
|
|
- if mapping.IndexType == 1 {
|
|
|
- edbInfo, err := GetEdbInfoById(int(mapping.EdbInfoId))
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
+ //for _, mapping := range configMapping {
|
|
|
+ mapping := configMap[int64(edbInfoId)]
|
|
|
+ var edbDataResidualAnalysisList []edbDataResidualAnalysis
|
|
|
+ if mapping.IndexType == 1 {
|
|
|
+ edbInfo, err := GetEdbInfoById(int(mapping.EdbInfoId))
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
|
|
|
- for _, edbData := range mappingEdbList[1].DataList {
|
|
|
- value, _ := strconv.ParseFloat(edbData.Value, 64)
|
|
|
- edbDataResidualAnalysisList = append(edbDataResidualAnalysisList, edbDataResidualAnalysis{
|
|
|
- EdbInfoId: int(mapping.EdbInfoId),
|
|
|
- EdbCode: edbInfo.EdbCode,
|
|
|
- DataTime: edbData.DataTime,
|
|
|
- Value: value,
|
|
|
- CreateTime: time.Now(),
|
|
|
- ModifyTime: time.Now(),
|
|
|
- DataTimeStamp: edbData.DataTimestamp,
|
|
|
- })
|
|
|
- }
|
|
|
+ for _, edbData := range mappingEdbList[0].DataList {
|
|
|
+ value, _ := strconv.ParseFloat(edbData.Value, 64)
|
|
|
+ edbDataResidualAnalysisList = append(edbDataResidualAnalysisList, edbDataResidualAnalysis{
|
|
|
+ EdbInfoId: int(mapping.EdbInfoId),
|
|
|
+ EdbCode: edbInfo.EdbCode,
|
|
|
+ DataTime: edbData.DataTime,
|
|
|
+ Value: value,
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ ModifyTime: time.Now(),
|
|
|
+ DataTimeStamp: edbData.DataTimestamp,
|
|
|
+ })
|
|
|
+ }
|
|
|
|
|
|
- _, err = AddResidualAnalysisData(edbDataResidualAnalysisList)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- } else if mapping.IndexType == 2 {
|
|
|
- edbInfo, err := GetEdbInfoById(int(mapping.EdbInfoId))
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
+ _, err = AddResidualAnalysisData(edbDataResidualAnalysisList)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ } else if mapping.IndexType == 2 {
|
|
|
+ edbInfo, err := GetEdbInfoById(int(mapping.EdbInfoId))
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
|
|
|
- for _, edbData := range residualEdbList[1].DataList {
|
|
|
- value, _ := strconv.ParseFloat(edbData.Value, 64)
|
|
|
- edbDataResidualAnalysisList = append(edbDataResidualAnalysisList, edbDataResidualAnalysis{
|
|
|
- EdbInfoId: int(mapping.EdbInfoId),
|
|
|
- EdbCode: edbInfo.EdbCode,
|
|
|
- DataTime: edbData.DataTime,
|
|
|
- Value: value,
|
|
|
- CreateTime: time.Now(),
|
|
|
- ModifyTime: time.Now(),
|
|
|
- DataTimeStamp: edbData.DataTimestamp,
|
|
|
- })
|
|
|
- }
|
|
|
+ for _, edbData := range residualEdbList[0].DataList {
|
|
|
+ value, _ := strconv.ParseFloat(edbData.Value, 64)
|
|
|
+ edbDataResidualAnalysisList = append(edbDataResidualAnalysisList, edbDataResidualAnalysis{
|
|
|
+ EdbInfoId: int(mapping.EdbInfoId),
|
|
|
+ EdbCode: edbInfo.EdbCode,
|
|
|
+ DataTime: edbData.DataTime,
|
|
|
+ Value: value,
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ ModifyTime: time.Now(),
|
|
|
+ DataTimeStamp: edbData.DataTimestamp,
|
|
|
+ })
|
|
|
+ }
|
|
|
|
|
|
- _, err = AddResidualAnalysisData(edbDataResidualAnalysisList)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
+ _, err = AddResidualAnalysisData(edbDataResidualAnalysisList)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -325,10 +335,20 @@ func fillResidualChartInfo(config ResidualAnalysisConfig, req *EdbInfo, edbInfoM
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ //reverse(mappingEdb)
|
|
|
return mappingEdb, R2, nil
|
|
|
}
|
|
|
|
|
|
+// 双指针法
|
|
|
+func reverse(slice []EdbInfoList) {
|
|
|
+ left, right := 0, len(slice)-1
|
|
|
+ for left < right {
|
|
|
+ // 交换元素
|
|
|
+ slice[left], slice[right] = slice[right], slice[left]
|
|
|
+ left++
|
|
|
+ right--
|
|
|
+ }
|
|
|
+}
|
|
|
func fillMappingChartInfo(config ResidualAnalysisConfig, req *EdbInfo, edbInfoMappingA *EdbInfoList, edbInfoMappingB *EdbInfoList, originalEdbList []EdbInfoList, indexADataMap map[string]*EdbData, startDate string, endDate string, fullADataList []*EdbDataList, fullBDataList []*EdbDataList) ([]EdbInfoList, float64, float64, float64, error) {
|
|
|
// 计算公式:Y=aX+b,Y为映射后的指标,X为自变量指标
|
|
|
// 正序:a=(L2-L1)/(R2-R1) b=L2-R2*a
|