|
@@ -91,7 +91,7 @@ func EditPredictCalculate(edbInfo *EdbInfo, calculateMappingList []*EdbInfoCalcu
|
|
}
|
|
}
|
|
|
|
|
|
// AddPredictCalculateData 新增预测计算(运算)指标的数据
|
|
// AddPredictCalculateData 新增预测计算(运算)指标的数据
|
|
-func AddPredictCalculateData(edbInfoIdList []*EdbInfo, edbInfoId int, edbCode, formulaStr string, edbInfoIdBytes []string) (latestDateStr string, latestValue float64, err error) {
|
|
|
|
|
|
+func AddPredictCalculateDataBak(edbInfoIdList []*EdbInfo, edbInfoId int, edbCode, formulaStr string, edbInfoIdBytes []string) (latestDateStr string, latestValue float64, err error) {
|
|
o := orm.NewOrm()
|
|
o := orm.NewOrm()
|
|
defer func() {
|
|
defer func() {
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -100,8 +100,11 @@ func AddPredictCalculateData(edbInfoIdList []*EdbInfo, edbInfoId int, edbCode, f
|
|
}()
|
|
}()
|
|
|
|
|
|
var minLatestDate time.Time
|
|
var minLatestDate time.Time
|
|
|
|
+ oldSaveDataMap := make(map[string]map[int]float64)
|
|
saveDataMap := make(map[string]map[int]float64)
|
|
saveDataMap := make(map[string]map[int]float64)
|
|
- for _, v := range edbInfoIdList {
|
|
|
|
|
|
+ dateList := make([]string, 0)
|
|
|
|
+
|
|
|
|
+ for edbInfoIndex, v := range edbInfoIdList {
|
|
tmpLatestDate, tmpErr := time.ParseInLocation(utils.FormatDate, v.LatestDate, time.Local)
|
|
tmpLatestDate, tmpErr := time.ParseInLocation(utils.FormatDate, v.LatestDate, time.Local)
|
|
if tmpErr != nil {
|
|
if tmpErr != nil {
|
|
err = errors.New(`最近的日期格式化失败;日期:` + v.LatestDate + `;err:` + tmpErr.Error())
|
|
err = errors.New(`最近的日期格式化失败;日期:` + v.LatestDate + `;err:` + tmpErr.Error())
|
|
@@ -120,6 +123,18 @@ func AddPredictCalculateData(edbInfoIdList []*EdbInfo, edbInfoId int, edbCode, f
|
|
}
|
|
}
|
|
dataMap := make(map[string]float64)
|
|
dataMap := make(map[string]float64)
|
|
for _, dv := range dataList {
|
|
for _, dv := range dataList {
|
|
|
|
+ // 现有实际数据
|
|
|
|
+ if val, ok := oldSaveDataMap[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
|
|
|
|
+ oldSaveDataMap[dv.DataTime] = temp
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 待处理的数据
|
|
if val, ok := saveDataMap[dv.DataTime]; ok {
|
|
if val, ok := saveDataMap[dv.DataTime]; ok {
|
|
if _, ok := val[v.EdbInfoId]; !ok {
|
|
if _, ok := val[v.EdbInfoId]; !ok {
|
|
val[v.EdbInfoId] = dv.Value
|
|
val[v.EdbInfoId] = dv.Value
|
|
@@ -129,11 +144,20 @@ func AddPredictCalculateData(edbInfoIdList []*EdbInfo, edbInfoId int, edbCode, f
|
|
temp[v.EdbInfoId] = dv.Value
|
|
temp[v.EdbInfoId] = dv.Value
|
|
saveDataMap[dv.DataTime] = temp
|
|
saveDataMap[dv.DataTime] = temp
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ // 以第一个指标的日期作为基准日期
|
|
|
|
+ if edbInfoIndex == 0 {
|
|
|
|
+ dateList = append(dateList, dv.DataTime)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
item := new(PredictCalculateItems)
|
|
item := new(PredictCalculateItems)
|
|
item.EdbInfoId = v.EdbInfoId
|
|
item.EdbInfoId = v.EdbInfoId
|
|
item.DataMap = dataMap
|
|
item.DataMap = dataMap
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ //数据处理,将日期内不全的数据做补全
|
|
|
|
+ handleDateSaveDataMap(dateList, oldSaveDataMap, saveDataMap, edbInfoIdList)
|
|
|
|
+
|
|
formulaMap := services.CheckFormula(formulaStr)
|
|
formulaMap := services.CheckFormula(formulaStr)
|
|
addSql := ` INSERT INTO edb_data_predict_calculate (edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
|
|
addSql := ` INSERT INTO edb_data_predict_calculate (edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
|
|
nowStr := time.Now().Format(utils.FormatDateTime)
|
|
nowStr := time.Now().Format(utils.FormatDateTime)
|
|
@@ -193,6 +217,25 @@ func AddPredictCalculateData(edbInfoIdList []*EdbInfo, edbInfoId int, edbCode, f
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func AddPredictCalculateData(edbInfoIdList []*EdbInfo, edbInfo *EdbInfo, edbCode, formulaStr string, edbInfoIdBytes []string) (latestDateStr string, latestValue float64, err error) {
|
|
|
|
+ o := orm.NewOrm()
|
|
|
|
+ to, err := o.Begin()
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ defer func() {
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("AddPredictCalculateData Calculate,Err:" + err.Error())
|
|
|
|
+ _ = to.Rollback()
|
|
|
|
+ } else {
|
|
|
|
+ _ = to.Commit()
|
|
|
|
+ }
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ latestDateStr, latestValue, err = refreshAllPredictCalculate(to, edbInfoIdList, edbInfo.EdbInfoId, edbInfo.Source, edbCode, formulaStr, "", edbInfoIdBytes)
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
// RefreshAllPredictCalculate 刷新预测计算指标的全部数据
|
|
// RefreshAllPredictCalculate 刷新预测计算指标的全部数据
|
|
func RefreshAllPredictCalculate(edbInfoIdList []*EdbInfo, edbInfoId, source int, edbCode, formulaStr, startDate string, edbInfoIdBytes []string) (latestDateStr string, latestValue float64, err error) {
|
|
func RefreshAllPredictCalculate(edbInfoIdList []*EdbInfo, edbInfoId, source int, edbCode, formulaStr, startDate string, edbInfoIdBytes []string) (latestDateStr string, latestValue float64, err error) {
|
|
o := orm.NewOrm()
|
|
o := orm.NewOrm()
|
|
@@ -210,9 +253,21 @@ func RefreshAllPredictCalculate(edbInfoIdList []*EdbInfo, edbInfoId, source int,
|
|
}()
|
|
}()
|
|
fmt.Println(startDate)
|
|
fmt.Println(startDate)
|
|
|
|
|
|
|
|
+ latestDateStr, latestValue, err = refreshAllPredictCalculate(to, edbInfoIdList, edbInfoId, source, edbCode, formulaStr, startDate, edbInfoIdBytes)
|
|
|
|
+
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// refreshAllPredictCalculate 刷新预测计算指标的全部数据
|
|
|
|
+func refreshAllPredictCalculate(to orm.TxOrmer, edbInfoIdList []*EdbInfo, edbInfoId, source int, edbCode, formulaStr, startDate string, edbInfoIdBytes []string) (latestDateStr string, latestValue float64, err error) {
|
|
|
|
+ fmt.Println(startDate)
|
|
|
|
+
|
|
var minLatestDate time.Time
|
|
var minLatestDate time.Time
|
|
|
|
+ realSaveDataMap := make(map[string]map[int]float64)
|
|
saveDataMap := make(map[string]map[int]float64)
|
|
saveDataMap := make(map[string]map[int]float64)
|
|
- for _, v := range edbInfoIdList {
|
|
|
|
|
|
+ dateList := make([]string, 0)
|
|
|
|
+
|
|
|
|
+ for edbInfoIndex, v := range edbInfoIdList {
|
|
tmpLatestDate, tmpErr := time.ParseInLocation(utils.FormatDate, v.LatestDate, time.Local)
|
|
tmpLatestDate, tmpErr := time.ParseInLocation(utils.FormatDate, v.LatestDate, time.Local)
|
|
if tmpErr != nil {
|
|
if tmpErr != nil {
|
|
err = errors.New(`最近的日期格式化失败;日期:` + v.LatestDate + `;err:` + tmpErr.Error())
|
|
err = errors.New(`最近的日期格式化失败;日期:` + v.LatestDate + `;err:` + tmpErr.Error())
|
|
@@ -229,7 +284,18 @@ func RefreshAllPredictCalculate(edbInfoIdList []*EdbInfo, edbInfoId, source int,
|
|
return
|
|
return
|
|
}
|
|
}
|
|
dataMap := make(map[string]float64)
|
|
dataMap := make(map[string]float64)
|
|
- for _, dv := range dataList {
|
|
|
|
|
|
+ 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 val, ok := saveDataMap[dv.DataTime]; ok {
|
|
if _, ok := val[v.EdbInfoId]; !ok {
|
|
if _, ok := val[v.EdbInfoId]; !ok {
|
|
val[v.EdbInfoId] = dv.Value
|
|
val[v.EdbInfoId] = dv.Value
|
|
@@ -239,12 +305,20 @@ func RefreshAllPredictCalculate(edbInfoIdList []*EdbInfo, edbInfoId, source int,
|
|
temp[v.EdbInfoId] = dv.Value
|
|
temp[v.EdbInfoId] = dv.Value
|
|
saveDataMap[dv.DataTime] = temp
|
|
saveDataMap[dv.DataTime] = temp
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ // 以第一个指标的日期作为基准日期
|
|
|
|
+ if edbInfoIndex == 0 {
|
|
|
|
+ dateList = append(dateList, dv.DataTime)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
item := new(CalculateItems)
|
|
item := new(CalculateItems)
|
|
item.EdbInfoId = v.EdbInfoId
|
|
item.EdbInfoId = v.EdbInfoId
|
|
item.DataMap = dataMap
|
|
item.DataMap = dataMap
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ //数据处理,将日期内不全的数据做补全
|
|
|
|
+ handleDateSaveDataMap(dateList, realSaveDataMap, saveDataMap, edbInfoIdList)
|
|
|
|
+
|
|
formulaMap := services.CheckFormula(formulaStr)
|
|
formulaMap := services.CheckFormula(formulaStr)
|
|
addSql := ` INSERT INTO edb_data_predict_calculate (edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
|
|
addSql := ` INSERT INTO edb_data_predict_calculate (edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
|
|
var isAdd bool
|
|
var isAdd bool
|
|
@@ -257,7 +331,7 @@ func RefreshAllPredictCalculate(edbInfoIdList []*EdbInfo, edbInfoId, source int,
|
|
dataTableName := GetEdbDataTableName(source)
|
|
dataTableName := GetEdbDataTableName(source)
|
|
sql := `SELECT * FROM %s WHERE edb_info_id=? `
|
|
sql := `SELECT * FROM %s WHERE edb_info_id=? `
|
|
sql = fmt.Sprintf(sql, dataTableName)
|
|
sql = fmt.Sprintf(sql, dataTableName)
|
|
- _, err = o.Raw(sql, edbInfoId).QueryRows(&dataList)
|
|
|
|
|
|
+ _, err = to.Raw(sql, edbInfoId).QueryRows(&dataList)
|
|
if err != nil {
|
|
if err != nil {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
@@ -320,7 +394,7 @@ func RefreshAllPredictCalculate(edbInfoIdList []*EdbInfo, edbInfoId, source int,
|
|
if existStr != saveValue {
|
|
if existStr != saveValue {
|
|
sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
|
|
sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
|
|
sql = fmt.Sprintf(sql, dataTableName)
|
|
sql = fmt.Sprintf(sql, dataTableName)
|
|
- _, err = o.Raw(sql, saveValue, edbInfoId, sk).Exec()
|
|
|
|
|
|
+ _, err = to.Raw(sql, saveValue, edbInfoId, sk).Exec()
|
|
if err != nil {
|
|
if err != nil {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
@@ -335,7 +409,7 @@ func RefreshAllPredictCalculate(edbInfoIdList []*EdbInfo, edbInfoId, source int,
|
|
|
|
|
|
if isAdd {
|
|
if isAdd {
|
|
addSql = strings.TrimRight(addSql, ",")
|
|
addSql = strings.TrimRight(addSql, ",")
|
|
- _, err = o.Raw(addSql).Exec()
|
|
|
|
|
|
+ _, err = to.Raw(addSql).Exec()
|
|
if err != nil {
|
|
if err != nil {
|
|
fmt.Println("RefreshAllCalculate add Err", err.Error())
|
|
fmt.Println("RefreshAllCalculate add Err", err.Error())
|
|
return
|
|
return
|
|
@@ -349,7 +423,7 @@ func RefreshAllPredictCalculate(edbInfoIdList []*EdbInfo, edbInfoId, source int,
|
|
tableName := GetEdbDataTableName(source)
|
|
tableName := GetEdbDataTableName(source)
|
|
sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
|
|
sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
|
|
|
|
|
|
- _, err = o.Raw(sql, edbInfoId).Exec()
|
|
|
|
|
|
+ _, err = to.Raw(sql, edbInfoId).Exec()
|
|
if err != nil {
|
|
if err != nil {
|
|
err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
|
|
err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
|
|
return
|
|
return
|