|
@@ -149,6 +149,7 @@ func GenerateStlEdbData(req *request.StlConfigReq, adminId int) (resp *response.
|
|
|
result, err := execStlPythonCode(loadFilePath, saveFilePath, confReq.Period, confReq.Seasonal, confReq.Trend, confReq.TrendDeg, confReq.SeasonalDeg, confReq.LowPassDeg, confReq.Fraction, confReq.Robust)
|
|
|
if err != nil {
|
|
|
msg = "计算失败,请重新选择指标和参数后计算"
|
|
|
+ return
|
|
|
}
|
|
|
trendChart, seasonalChart, residualChart, err := ParseStlExcel(saveFilePath)
|
|
|
if err != nil {
|
|
@@ -158,18 +159,26 @@ func GenerateStlEdbData(req *request.StlConfigReq, adminId int) (resp *response.
|
|
|
defer os.Remove(saveFilePath)
|
|
|
resp = new(response.StlPreviewResp)
|
|
|
resp.OriginEdbInfo.Title = edbInfo.EdbName
|
|
|
+ resp.OriginEdbInfo.MaxData = edbInfo.MaxValue
|
|
|
+ resp.OriginEdbInfo.MinData = edbInfo.MinValue
|
|
|
resp.OriginEdbInfo.Frequency = edbInfo.Frequency
|
|
|
resp.OriginEdbInfo.Unit = edbInfo.Unit
|
|
|
resp.OriginEdbInfo.DataList = formatEdbData(edbData)
|
|
|
resp.TrendChartInfo.DataList = trendChart.DataList
|
|
|
+ resp.TrendChartInfo.MaxData = trendChart.MaxData
|
|
|
+ resp.TrendChartInfo.MinData = trendChart.MinData
|
|
|
resp.TrendChartInfo.Title = edbInfo.EdbName + "Trend"
|
|
|
resp.TrendChartInfo.Frequency = edbInfo.Frequency
|
|
|
resp.TrendChartInfo.Unit = edbInfo.Unit
|
|
|
resp.SeasonalChartInfo.DataList = seasonalChart.DataList
|
|
|
+ resp.SeasonalChartInfo.MaxData = seasonalChart.MaxData
|
|
|
+ resp.SeasonalChartInfo.MinData = seasonalChart.MinData
|
|
|
resp.SeasonalChartInfo.Title = edbInfo.EdbName + "Seasonal"
|
|
|
resp.SeasonalChartInfo.Frequency = edbInfo.Frequency
|
|
|
resp.SeasonalChartInfo.Unit = edbInfo.Unit
|
|
|
resp.ResidualChartInfo.DataList = residualChart.DataList
|
|
|
+ resp.ResidualChartInfo.MaxData = residualChart.MaxData
|
|
|
+ resp.ResidualChartInfo.MinData = residualChart.MinData
|
|
|
resp.ResidualChartInfo.Title = edbInfo.EdbName + "Residual"
|
|
|
resp.ResidualChartInfo.Frequency = edbInfo.Frequency
|
|
|
resp.ResidualChartInfo.Unit = edbInfo.Unit
|
|
@@ -194,7 +203,7 @@ func formatEdbData(items []*data_manage.EdbData) []*response.EdbData {
|
|
|
t, _ := time.Parse(utils.FormatDate, item.DataTime)
|
|
|
res = append(res, &response.EdbData{
|
|
|
DataTime: item.DataTime,
|
|
|
- Value: strconv.FormatFloat(item.Value, 'f', -1, 64),
|
|
|
+ Value: item.Value,
|
|
|
DataTimestamp: t.UnixMilli(),
|
|
|
})
|
|
|
}
|
|
@@ -216,6 +225,7 @@ func ParseStlExcel(excelPath string) (TrendChart, SeasonalChart, ResidualChart r
|
|
|
for _, sheet := range file.Sheets {
|
|
|
switch sheet.Name {
|
|
|
case "季节":
|
|
|
+ var MinData, MaxData float64
|
|
|
for i, row := range sheet.Rows {
|
|
|
if i == 0 {
|
|
|
continue
|
|
@@ -233,10 +243,18 @@ func ParseStlExcel(excelPath string) (TrendChart, SeasonalChart, ResidualChart r
|
|
|
dataTimestamp = timeDate.UnixMilli()
|
|
|
}
|
|
|
fv, _ := row.Cells[1].Float()
|
|
|
- value := strconv.FormatFloat(fv, 'f', 4, 64)
|
|
|
- SeasonalChart.DataList = append(SeasonalChart.DataList, &response.EdbData{DataTime: date, Value: value, DataTimestamp: dataTimestamp})
|
|
|
+ if MinData == 0 || fv < MinData {
|
|
|
+ MinData = fv
|
|
|
+ }
|
|
|
+ if MaxData == 0 || fv > MaxData {
|
|
|
+ MaxData = fv
|
|
|
+ }
|
|
|
+ SeasonalChart.DataList = append(SeasonalChart.DataList, &response.EdbData{DataTime: date, Value: fv, DataTimestamp: dataTimestamp})
|
|
|
}
|
|
|
+ SeasonalChart.MinData = MinData
|
|
|
+ SeasonalChart.MaxData = MaxData
|
|
|
case "趋势":
|
|
|
+ var MinData, MaxData float64
|
|
|
for i, row := range sheet.Rows {
|
|
|
if i == 0 {
|
|
|
continue
|
|
@@ -254,10 +272,18 @@ func ParseStlExcel(excelPath string) (TrendChart, SeasonalChart, ResidualChart r
|
|
|
dataTimestamp = timeDate.UnixMilli()
|
|
|
}
|
|
|
fv, _ := row.Cells[1].Float()
|
|
|
- value := strconv.FormatFloat(fv, 'f', 4, 64)
|
|
|
- TrendChart.DataList = append(TrendChart.DataList, &response.EdbData{DataTime: date, Value: value, DataTimestamp: dataTimestamp})
|
|
|
+ if MinData == 0 || fv < MinData {
|
|
|
+ MinData = fv
|
|
|
+ }
|
|
|
+ if MaxData == 0 || fv > MaxData {
|
|
|
+ MaxData = fv
|
|
|
+ }
|
|
|
+ TrendChart.DataList = append(TrendChart.DataList, &response.EdbData{DataTime: date, Value: fv, DataTimestamp: dataTimestamp})
|
|
|
}
|
|
|
+ TrendChart.MaxData = MaxData
|
|
|
+ TrendChart.MinData = MinData
|
|
|
case "残差":
|
|
|
+ var MinData, MaxData float64
|
|
|
for i, row := range sheet.Rows {
|
|
|
if i == 0 {
|
|
|
continue
|
|
@@ -275,9 +301,16 @@ func ParseStlExcel(excelPath string) (TrendChart, SeasonalChart, ResidualChart r
|
|
|
dataTimestamp = timeDate.UnixMilli()
|
|
|
}
|
|
|
fv, _ := row.Cells[1].Float()
|
|
|
- value := strconv.FormatFloat(fv, 'f', 4, 64)
|
|
|
- ResidualChart.DataList = append(ResidualChart.DataList, &response.EdbData{DataTime: date, Value: value, DataTimestamp: dataTimestamp})
|
|
|
+ if MinData == 0 || fv < MinData {
|
|
|
+ MinData = fv
|
|
|
+ }
|
|
|
+ if MaxData == 0 || fv > MaxData {
|
|
|
+ MaxData = fv
|
|
|
+ }
|
|
|
+ ResidualChart.DataList = append(ResidualChart.DataList, &response.EdbData{DataTime: date, Value: fv, DataTimestamp: dataTimestamp})
|
|
|
}
|
|
|
+ ResidualChart.MaxData = MaxData
|
|
|
+ ResidualChart.MinData = MinData
|
|
|
}
|
|
|
}
|
|
|
return
|
|
@@ -742,7 +775,6 @@ func SaveStlEdbInfo(req *request.SaveStlEdbInfoReq, adminId int, adminRealName,
|
|
|
var startDate, endDate time.Time
|
|
|
for _, v := range edbInfoData {
|
|
|
dataTime, _ := time.Parse(utils.FormatDate, v.DataTime)
|
|
|
- value, _ := strconv.ParseFloat(v.Value, 64)
|
|
|
if startDate.IsZero() || dataTime.Before(startDate) {
|
|
|
startDate = dataTime
|
|
|
}
|
|
@@ -753,7 +785,7 @@ func SaveStlEdbInfo(req *request.SaveStlEdbInfoReq, adminId int, adminRealName,
|
|
|
EdbInfoId: req.EdbInfoId,
|
|
|
EdbCode: edbCode,
|
|
|
DataTime: dataTime,
|
|
|
- Value: value,
|
|
|
+ Value: v.Value,
|
|
|
CreateTime: time.Now(),
|
|
|
ModifyTime: time.Now(),
|
|
|
DataTimestamp: dataTime.UnixMilli(),
|