|
@@ -4,6 +4,7 @@ import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
edbInfoModel "hongze/hongze_yb/models/tables/edb_info"
|
|
|
+ predictEdbConfCalculateMappingModel "hongze/hongze_yb/models/tables/predict_edb_conf_calculate_mapping"
|
|
|
"hongze/hongze_yb/services/alarm_msg"
|
|
|
"hongze/hongze_yb/utils"
|
|
|
"sort"
|
|
@@ -14,8 +15,7 @@ import (
|
|
|
// @author Roc
|
|
|
// @datetime 2022-09-16 11:04:44
|
|
|
// @description 将原有的单个指标刷新,调整为批量多个指标刷新
|
|
|
-func EdbInfoRefreshAllFromBase(edbInfoIdList []int, refreshAll bool) (err error) {
|
|
|
- var errmsg string
|
|
|
+func EdbInfoRefreshAllFromBase(edbInfoIdList []int, refreshAll bool) (err error, errmsg string) {
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
fmt.Println("EdbInfoRefreshAllFromBaseV2 Err:" + err.Error() + ";errmsg:" + errmsg)
|
|
@@ -25,7 +25,7 @@ func EdbInfoRefreshAllFromBase(edbInfoIdList []int, refreshAll bool) (err error)
|
|
|
}()
|
|
|
|
|
|
// 获取关联的基础指标
|
|
|
- newBaseEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr, err, errmsg := getRefreshEdbInfoListByIds(edbInfoIdList)
|
|
|
+ newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr, err, errmsg := getRefreshEdbInfoListByIds(edbInfoIdList)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -62,16 +62,18 @@ func EdbInfoRefreshAllFromBase(edbInfoIdList []int, refreshAll bool) (err error)
|
|
|
}
|
|
|
startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
|
|
|
}
|
|
|
- result, err := RefreshEdbData(bv.EdbInfoId, bv.Source, bv.EdbCode, startDate)
|
|
|
- if err != nil {
|
|
|
+ result, tmpErr := RefreshEdbData(bv.EdbInfoId, bv.Source, bv.EdbCode, startDate)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err", time.Now())
|
|
|
errmsg = "RefreshBaseEdbData Err:" + err.Error()
|
|
|
- return err
|
|
|
+ return
|
|
|
}
|
|
|
if result.Ret != 200 {
|
|
|
fmt.Println(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
|
|
|
errmsg = fmt.Sprint(bv.EdbInfoId, "RefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
|
|
|
- return fmt.Errorf("刷新失败, err:", errmsg)
|
|
|
+ err = fmt.Errorf("刷新失败, err:", errmsg)
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
//maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
|
|
@@ -94,7 +96,7 @@ func EdbInfoRefreshAllFromBase(edbInfoIdList []int, refreshAll bool) (err error)
|
|
|
for _, v := range calculateArr {
|
|
|
edbInfo := newCalculateMap[v]
|
|
|
if edbInfo == nil {
|
|
|
- return err
|
|
|
+ return
|
|
|
}
|
|
|
startDate = edbInfo.StartDate.Format(utils.FormatDate)
|
|
|
source := edbInfo.Source
|
|
@@ -128,16 +130,18 @@ func EdbInfoRefreshAllFromBase(edbInfoIdList []int, refreshAll bool) (err error)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- result, err := RefreshEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
|
|
|
- if err != nil {
|
|
|
+ result, tmpErr := RefreshEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
|
|
|
errmsg = "RefreshEdbCalculateData Err:" + err.Error()
|
|
|
- return err
|
|
|
+ return
|
|
|
}
|
|
|
if result.Ret != 200 {
|
|
|
fmt.Println(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
|
|
|
errmsg = fmt.Sprint(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
|
|
|
- return fmt.Errorf("刷新失败")
|
|
|
+ err = fmt.Errorf("刷新失败")
|
|
|
+ return
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -145,7 +149,7 @@ func EdbInfoRefreshAllFromBase(edbInfoIdList []int, refreshAll bool) (err error)
|
|
|
for _, v := range predictCalculateArr {
|
|
|
edbInfo := newPredictCalculateMap[v]
|
|
|
if edbInfo == nil {
|
|
|
- return err
|
|
|
+ return
|
|
|
}
|
|
|
startDate = edbInfo.StartDate.Format(utils.FormatDate)
|
|
|
source := edbInfo.Source
|
|
@@ -179,23 +183,110 @@ func EdbInfoRefreshAllFromBase(edbInfoIdList []int, refreshAll bool) (err error)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- result, err := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
|
|
|
- if err != nil {
|
|
|
+ result, tmpErr := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ fmt.Println(v, "RefreshPredictEdbCalculateData err", time.Now())
|
|
|
+ errmsg = "RefreshPredictEdbCalculateData Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if result.Ret != 200 {
|
|
|
+ fmt.Println(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
|
|
|
+ errmsg = fmt.Sprint(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
|
|
|
+ err = fmt.Errorf("刷新失败")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4、更新动态环差值
|
|
|
+ {
|
|
|
+ predictEdbInfoIdList := make([]int, 0)
|
|
|
+ for _, v := range newBasePredictEdbInfoArr {
|
|
|
+ predictEdbInfoIdList = append(predictEdbInfoIdList, v.EdbInfoId)
|
|
|
+ }
|
|
|
+ fmt.Println("predictEdbConfCalculateMappingDetailList:", predictEdbInfoIdList)
|
|
|
+ predictEdbConfCalculateMappingDetailList, tmpErr := predictEdbConfCalculateMappingModel.GetPredictEdbRuleDataList(predictEdbInfoIdList)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ errmsg = fmt.Sprint("更新动态环差值时,获取数据失败:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, bv := range predictEdbConfCalculateMappingDetailList {
|
|
|
+ result, tmpErr := RefreshEdbData(bv.EdbInfoId, utils.DATA_SOURCE_PREDICT, bv.EdbCode, "")
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ fmt.Println(bv.EdbInfoId, "RefreshBasePredictEdbData err", time.Now())
|
|
|
+ errmsg = "RefreshBasePredictEdbData Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if result.Ret != 200 {
|
|
|
+ fmt.Println(bv.EdbInfoId, "RefreshBasePredictEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
|
|
|
+ errmsg = fmt.Sprint(bv.EdbInfoId, "RefreshBasePredictEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
|
|
|
+ err = errors.New("刷新失败:" + errmsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("end predictEdbConfCalculateMappingDetailList:", bv, time.Now())
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //5、刷新相关预测计算指标
|
|
|
+ for _, v := range predictCalculateArr {
|
|
|
+ edbInfo := newPredictCalculateMap[v]
|
|
|
+ if edbInfo == nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ startDate = edbInfo.StartDate.Format(utils.FormatDate)
|
|
|
+ source := edbInfo.Source
|
|
|
+ if edbInfo.StartDate.IsZero() { //如果没有开始日期,说明还没有计算出来数据,那么就往前面推40年吧(也意味着重新计算了)
|
|
|
+ startDate = time.Now().AddDate(-40, 0, 0).Format(utils.FormatDate)
|
|
|
+ } else {
|
|
|
+ if source == utils.DATA_SOURCE_PREDICT_CALCULATE {
|
|
|
+ startDate = ``
|
|
|
+ if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
|
|
|
+ startDate = edbInfo.StartDate.Format(utils.FormatDate)
|
|
|
+ } else {
|
|
|
+ sTime := edbInfo.EndDate
|
|
|
+ frequency := edbInfo.Frequency
|
|
|
+ var limitDay int
|
|
|
+ switch frequency {
|
|
|
+ case "日度":
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT
|
|
|
+ case "周度":
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT * 7
|
|
|
+ case "月度":
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT * 30
|
|
|
+ case "季度":
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT * 90
|
|
|
+ case "年度":
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT * 365
|
|
|
+ default:
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT
|
|
|
+ }
|
|
|
+ startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ result, tmpErr := RefreshPredictEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
fmt.Println(v, "RefreshPredictEdbCalculateData err", time.Now())
|
|
|
errmsg = "RefreshPredictEdbCalculateData Err:" + err.Error()
|
|
|
- return err
|
|
|
+ return
|
|
|
}
|
|
|
if result.Ret != 200 {
|
|
|
fmt.Println(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
|
|
|
errmsg = fmt.Sprint(v, "RefreshPredictEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
|
|
|
- return fmt.Errorf("刷新失败")
|
|
|
+ err = fmt.Errorf("刷新失败")
|
|
|
+ return
|
|
|
}
|
|
|
}
|
|
|
- return err
|
|
|
+
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
// getRefreshEdbInfoList 获取待更新的指标(普通基础指标、普通运算指标,预测运算指标)
|
|
|
-func getRefreshEdbInfoListByIds(edbInfoIdList []int) (newBaseEdbInfoArr []*edbInfoModel.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*edbInfoModel.EdbInfo, calculateArr, predictCalculateArr []int, err error, errMsg string) {
|
|
|
+func getRefreshEdbInfoListByIds(edbInfoIdList []int) (newBaseEdbInfoArr, newBasePredictEdbInfoArr []*edbInfoModel.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*edbInfoModel.EdbInfo, calculateArr, predictCalculateArr []int, err error, errMsg string) {
|
|
|
calculateList, err := edbInfoModel.GetEdbInfoAllCalculateByEdbInfoIdList(edbInfoIdList)
|
|
|
if err != nil && err != utils.ErrNoRow {
|
|
|
err = errors.New("GetEdbInfoAllCalculate Err:" + err.Error())
|
|
@@ -427,6 +518,16 @@ func getRefreshEdbInfoListByIds(edbInfoIdList []int) (newBaseEdbInfoArr []*edbIn
|
|
|
// 普通计算指标的id
|
|
|
sort.Ints(calculateArr)
|
|
|
|
|
|
+ // 普通预测指标去重
|
|
|
+ newBasePredictEdbInfoArr = make([]*edbInfoModel.EdbInfo, 0)
|
|
|
+ basePredictMap := make(map[int]int)
|
|
|
+ for _, v := range basePredictEdbInfoArr {
|
|
|
+ if _, ok := basePredictMap[v.EdbInfoId]; !ok {
|
|
|
+ newBasePredictEdbInfoArr = append(newBasePredictEdbInfoArr, v)
|
|
|
+ }
|
|
|
+ basePredictMap[v.EdbInfoId] = v.EdbInfoId
|
|
|
+ }
|
|
|
+
|
|
|
// 预测计算指标去重
|
|
|
newPredictCalculateMap = make(map[int]*edbInfoModel.EdbInfo)
|
|
|
for _, v := range predictCalculateInfoArr {
|