|
@@ -363,7 +363,11 @@ func RefreshAllCalculate(edbInfoIdArr []*EdbInfo, edbInfoId, source int, edbCode
|
|
|
func refreshAllCalculate(to orm.TxOrmer, edbInfoIdArr []*EdbInfo, edbInfoId, source int, edbCode, formulaStr, startDate, endDate string, edbInfoIdBytes []string) (err error) {
|
|
|
realSaveDataMap := make(map[string]map[int]float64)
|
|
|
saveDataMap := make(map[string]map[int]float64)
|
|
|
- dateList := make([]string, 0)
|
|
|
+
|
|
|
+ // 最小的结束日期 , 最晚的数据开始日期
|
|
|
+ var minLatestDate, maxStartDate time.Time
|
|
|
+ dateList := make([]string, 0) // 第一个指标的日期数据
|
|
|
+
|
|
|
for edbInfoIndex, v := range edbInfoIdArr {
|
|
|
var condition string
|
|
|
var pars []interface{}
|
|
@@ -382,6 +386,9 @@ func refreshAllCalculate(to orm.TxOrmer, edbInfoIdArr []*EdbInfo, edbInfoId, sou
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
+
|
|
|
+ lenData := len(dataList)
|
|
|
+
|
|
|
for _, dv := range dataList {
|
|
|
if val, ok := realSaveDataMap[dv.DataTime]; ok {
|
|
|
if _, ok := val[v.EdbInfoId]; !ok {
|
|
@@ -409,10 +416,22 @@ func refreshAllCalculate(to orm.TxOrmer, edbInfoIdArr []*EdbInfo, edbInfoId, sou
|
|
|
dateList = append(dateList, dv.DataTime)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if lenData > 0 {
|
|
|
+ tmpLatestDate, _ := time.ParseInLocation(utils.FormatDate, dataList[lenData-1].DataTime, time.Local)
|
|
|
+ if minLatestDate.IsZero() || minLatestDate.After(tmpLatestDate) {
|
|
|
+ minLatestDate = tmpLatestDate
|
|
|
+ }
|
|
|
+
|
|
|
+ tmpStartDate, _ := time.ParseInLocation(utils.FormatDate, dataList[0].DataTime, time.Local)
|
|
|
+ if maxStartDate.IsZero() || maxStartDate.Before(tmpStartDate) {
|
|
|
+ maxStartDate = tmpStartDate
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//数据处理,将日期内不全的数据做补全
|
|
|
- handleDateSaveDataMap(dateList, realSaveDataMap, saveDataMap, edbInfoIdArr)
|
|
|
+ handleDateSaveDataMap(dateList, maxStartDate, minLatestDate, realSaveDataMap, saveDataMap, edbInfoIdArr)
|
|
|
|
|
|
formulaMap := utils.CheckFormula(formulaStr)
|
|
|
addSql := ` INSERT INTO edb_data_calculate(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
|
|
@@ -650,8 +669,18 @@ func CheckFormula2(edbInfoArr []*EdbInfo, formulaMap map[string]string, formulaS
|
|
|
}
|
|
|
|
|
|
// 处理整个数据
|
|
|
-func handleDateSaveDataMap(dateList []string, realSaveDataMap, saveDataMap map[string]map[int]float64, edbInfoIdArr []*EdbInfo) {
|
|
|
+func handleDateSaveDataMap(dateList []string, maxStartDate, minLatestDate time.Time, realSaveDataMap, saveDataMap map[string]map[int]float64, edbInfoIdArr []*EdbInfo) {
|
|
|
for _, date := range dateList {
|
|
|
+ dateTime, _ := time.ParseInLocation(utils.FormatDate, date, time.Local)
|
|
|
+ // 如果当前日期早于数据的最大开始日期,那么不处理,进入下一个循环
|
|
|
+ if dateTime.Before(maxStartDate) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ // 如果当前日期晚于数据的最小结束日期,那么不处理,直接返回了
|
|
|
+ if dateTime.After(minLatestDate) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
tmpDataMap := realSaveDataMap[date]
|
|
|
for _, edbInfo := range edbInfoIdArr {
|
|
|
tmpEdbInfoId := edbInfo.EdbInfoId // 当前指标id
|