|
@@ -49,10 +49,13 @@ func RefreshCalculateByRuleBy9(rule CalculateRule) (err error) {
|
|
|
|
|
|
// CalculateByRuleBy9 动态环差规则计算入库
|
|
|
func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (err error) {
|
|
|
+ realSaveDataMap := make(map[string]map[int]float64)
|
|
|
saveDataMap := make(map[string]map[int]float64)
|
|
|
+ dateList := make([]string, 0)
|
|
|
+
|
|
|
formulaStr := strings.ToUpper(rule.Formula)
|
|
|
// 获取关联指标数据
|
|
|
- for _, v := range rule.EdbInfoList {
|
|
|
+ for edbInfoIndex, v := range rule.EdbInfoList {
|
|
|
dataList, tmpErr := GetPredictEdbDataListAll(v, 1)
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
@@ -60,6 +63,18 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (err error) {
|
|
|
}
|
|
|
dataMap := make(map[string]float64)
|
|
|
for _, dv := range dataList {
|
|
|
+ // 现有实际数据
|
|
|
+ if val, ok := realSaveDataMap[dv.DataTime]; ok {
|
|
|
+ if _, ok := val[v.EdbInfoId]; !ok {
|
|
|
+ val[v.EdbInfoId] = dv.Value
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ temp := make(map[int]float64)
|
|
|
+ temp[v.EdbInfoId] = dv.Value
|
|
|
+ realSaveDataMap[dv.DataTime] = temp
|
|
|
+ }
|
|
|
+
|
|
|
+ // 待处理的数据
|
|
|
if val, ok := saveDataMap[dv.DataTime]; ok {
|
|
|
if _, ok := val[v.EdbInfoId]; !ok {
|
|
|
val[v.EdbInfoId] = dv.Value
|
|
@@ -69,12 +84,20 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (err error) {
|
|
|
temp[v.EdbInfoId] = dv.Value
|
|
|
saveDataMap[dv.DataTime] = temp
|
|
|
}
|
|
|
+
|
|
|
+ // 以第一个指标的日期作为基准日期
|
|
|
+ if edbInfoIndex == 0 {
|
|
|
+ dateList = append(dateList, dv.DataTime)
|
|
|
+ }
|
|
|
}
|
|
|
item := new(CalculateItems)
|
|
|
item.EdbInfoId = v.EdbInfoId
|
|
|
item.DataMap = dataMap
|
|
|
}
|
|
|
|
|
|
+ //数据处理,将日期内不全的数据做补全
|
|
|
+ handleDateSaveDataMap(dateList, realSaveDataMap, saveDataMap, rule.EdbInfoList)
|
|
|
+
|
|
|
// 添加数据
|
|
|
addDataList := make([]*PredictEdbRuleData, 0)
|
|
|
|