|
@@ -52,22 +52,30 @@ func RefreshAllCalculateResidualAnalysis(edbInfoId, source, subSource, formulaIn
|
|
|
_ = to.Commit()
|
|
|
}
|
|
|
}()*/
|
|
|
+ //只清空残差分析数据自身指标的数据
|
|
|
configMapping, err := GetConfigMappingListByConditionNotBase(edbInfoId)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
-
|
|
|
- var edbInfoIdList []int64
|
|
|
- for _, v := range configMapping {
|
|
|
- edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
|
|
|
- }
|
|
|
+ //if err != nil {
|
|
|
+ // return err
|
|
|
+ //}
|
|
|
+ //
|
|
|
+ //var edbInfoIdList []int64
|
|
|
+ //for _, v := range configMapping {
|
|
|
+ // edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
|
|
|
+ //}
|
|
|
|
|
|
//清空原有数据
|
|
|
- sql := ` DELETE FROM edb_data_residual_analysis WHERE edb_info_id in (` + utils.GetOrmInReplace(len(edbInfoIdList)) + `) `
|
|
|
+ //sql := ` DELETE FROM edb_data_residual_analysis WHERE edb_info_id in (` + utils.GetOrmInReplace(len(edbInfoIdList)) + `) `
|
|
|
+ //var params []interface{}
|
|
|
+ //for _, i := range edbInfoIdList {
|
|
|
+ // params = append(params, i)
|
|
|
+ //}
|
|
|
var params []interface{}
|
|
|
- for _, i := range edbInfoIdList {
|
|
|
- params = append(params, i)
|
|
|
- }
|
|
|
+ sql := ` DELETE FROM edb_data_residual_analysis WHERE edb_info_id = ?`
|
|
|
+ params = append(params, edbInfoId)
|
|
|
+ //var params []interface{}
|
|
|
+ //for _, i := range edbInfoIdList {
|
|
|
+ // params = append(params, i)
|
|
|
+ //}
|
|
|
_, err = to.Raw(sql, params...).Exec()
|
|
|
if err != nil {
|
|
|
return
|
|
@@ -82,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 {
|
|
@@ -126,10 +144,10 @@ func refreshAllCalculateResidualAnalysis(edbInfoId, source, subSource, formulaIn
|
|
|
|
|
|
// 时间处理
|
|
|
switch config.DateType {
|
|
|
- case 0:
|
|
|
+ case -1:
|
|
|
startDate = config.StartDate
|
|
|
endDate = config.EndDate
|
|
|
- case 1:
|
|
|
+ case 0:
|
|
|
startDate = config.StartDate
|
|
|
endDate = ""
|
|
|
default:
|
|
@@ -160,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
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -317,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
|
|
@@ -579,7 +607,7 @@ func fillOriginalChart(config ResidualAnalysisConfig, req *EdbInfo, mappingList
|
|
|
|
|
|
if v.EdbInfoId == edbInfoMappingB.EdbInfoId {
|
|
|
// 领先指标 dataList进行数据处理
|
|
|
- if config.IndexType == 1 {
|
|
|
+ if config.IndexType == 2 {
|
|
|
if config.LeadValue < 0 {
|
|
|
return nil, nil, nil, fmt.Errorf("领先值不能小于0")
|
|
|
} else if config.LeadValue > 0 {
|