|
@@ -654,3 +654,69 @@ func GetChartPredictEdbInfoDataListByRuleTrendsHC(edbInfoId, configId int, start
|
|
}
|
|
}
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+func GetChartPredictEdbInfoDataListByRuleFinalValueHc(edbInfoId int, finalValue float64, startDate, endDate time.Time, frequency string, realPredictEdbInfoData, predictEdbInfoData []*edbDataModel.EdbDataList, existMap map[string]float64) (newPredictEdbInfoData []*edbDataModel.EdbDataList, minValue, maxValue float64) {
|
|
|
|
+ allDataList := make([]*edbDataModel.EdbDataList, 0)
|
|
|
|
+ allDataList = append(allDataList, realPredictEdbInfoData...)
|
|
|
|
+ allDataList = append(allDataList, predictEdbInfoData...)
|
|
|
|
+ newPredictEdbInfoData = predictEdbInfoData
|
|
|
|
+
|
|
|
|
+ index := len(allDataList)
|
|
|
|
+
|
|
|
|
+ dayList := getPredictEdbDayList(startDate, endDate, frequency)
|
|
|
|
+ lenDay := len(dayList)
|
|
|
|
+ if lenDay <= 0 {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var hcValue float64
|
|
|
|
+ lastValueDeciamal := decimal.NewFromFloat(allDataList[index-1].Value)
|
|
|
|
+ finalValueDeciamal := decimal.NewFromFloat(finalValue)
|
|
|
|
+ dayDecimal := decimal.NewFromInt(int64(lenDay))
|
|
|
|
+ hcValue, _ = finalValueDeciamal.Sub(lastValueDeciamal).Div(dayDecimal).Float64()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ predictEdbInfoData = make([]*edbDataModel.EdbDataList, 0)
|
|
|
|
+ lastK := lenDay - 1
|
|
|
|
+ for k, currentDate := range dayList {
|
|
|
|
+ tmpK := index + k - 1
|
|
|
|
+
|
|
|
|
+ var val float64
|
|
|
|
+
|
|
|
|
+ if k == lastK {
|
|
|
|
+ val = finalValue
|
|
|
|
+ } else {
|
|
|
|
+ val = HczDiv(allDataList[tmpK].Value, hcValue)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ currentDateStr := currentDate.Format(utils.FormatDate)
|
|
|
|
+ tmpData := &edbDataModel.EdbDataList{
|
|
|
|
+ EdbDataId: edbInfoId + 10000000000 + index + k,
|
|
|
|
+ EdbInfoId: edbInfoId,
|
|
|
|
+ DataTime: currentDateStr,
|
|
|
|
+ Value: val,
|
|
|
|
+ DataTimestamp: (currentDate.UnixNano() / 1e6) + 1000,
|
|
|
|
+ }
|
|
|
|
+ newPredictEdbInfoData = append(newPredictEdbInfoData, tmpData)
|
|
|
|
+ allDataList = append(allDataList, tmpData)
|
|
|
|
+ existMap[currentDateStr] = val
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if val < minValue {
|
|
|
|
+ minValue = val
|
|
|
|
+ }
|
|
|
|
+ if val > maxValue {
|
|
|
|
+ maxValue = val
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return
|
|
|
|
+}
|