|
@@ -191,9 +191,11 @@ func GenerateStlEdbData(req *request.StlConfigReq, adminId int) (resp *response.
|
|
func formatEdbData(items []*data_manage.EdbData) []*response.EdbData {
|
|
func formatEdbData(items []*data_manage.EdbData) []*response.EdbData {
|
|
res := make([]*response.EdbData, 0, len(items))
|
|
res := make([]*response.EdbData, 0, len(items))
|
|
for _, item := range items {
|
|
for _, item := range items {
|
|
|
|
+ t, _ := time.Parse(utils.FormatDate, item.DataTime)
|
|
res = append(res, &response.EdbData{
|
|
res = append(res, &response.EdbData{
|
|
- DataTime: item.DataTime,
|
|
|
|
- Value: strconv.FormatFloat(item.Value, 'f', -1, 64),
|
|
|
|
|
|
+ DataTime: item.DataTime,
|
|
|
|
+ Value: strconv.FormatFloat(item.Value, 'f', -1, 64),
|
|
|
|
+ DataTimestamp: t.UnixMilli(),
|
|
})
|
|
})
|
|
}
|
|
}
|
|
return res
|
|
return res
|
|
@@ -219,17 +221,20 @@ func ParseStlExcel(excelPath string) (TrendChart, SeasonalChart, ResidualChart r
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
var date string
|
|
var date string
|
|
|
|
+ var dataTimestamp int64
|
|
if row.Cells[0].Type() == xlsx.CellTypeNumeric {
|
|
if row.Cells[0].Type() == xlsx.CellTypeNumeric {
|
|
dataNum, _ := strconv.ParseFloat(row.Cells[0].Value, 64)
|
|
dataNum, _ := strconv.ParseFloat(row.Cells[0].Value, 64)
|
|
tmpTime := xlsx.TimeFromExcelTime(dataNum, false)
|
|
tmpTime := xlsx.TimeFromExcelTime(dataNum, false)
|
|
date = tmpTime.Format(utils.FormatDate)
|
|
date = tmpTime.Format(utils.FormatDate)
|
|
|
|
+ dataTimestamp = tmpTime.UnixMilli()
|
|
} else {
|
|
} else {
|
|
- date = row.Cells[0].String()
|
|
|
|
- date = strings.Split(date, " ")[0]
|
|
|
|
|
|
+ timeDate, _ := time.Parse(utils.FormatDateTime, date)
|
|
|
|
+ date = timeDate.Format(utils.FormatDate)
|
|
|
|
+ dataTimestamp = timeDate.UnixMilli()
|
|
}
|
|
}
|
|
fv, _ := row.Cells[1].Float()
|
|
fv, _ := row.Cells[1].Float()
|
|
value := strconv.FormatFloat(fv, 'f', 4, 64)
|
|
value := strconv.FormatFloat(fv, 'f', 4, 64)
|
|
- SeasonalChart.DataList = append(SeasonalChart.DataList, &response.EdbData{DataTime: date, Value: value})
|
|
|
|
|
|
+ SeasonalChart.DataList = append(SeasonalChart.DataList, &response.EdbData{DataTime: date, Value: value, DataTimestamp: dataTimestamp})
|
|
}
|
|
}
|
|
case "趋势":
|
|
case "趋势":
|
|
for i, row := range sheet.Rows {
|
|
for i, row := range sheet.Rows {
|
|
@@ -237,17 +242,20 @@ func ParseStlExcel(excelPath string) (TrendChart, SeasonalChart, ResidualChart r
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
var date string
|
|
var date string
|
|
|
|
+ var dataTimestamp int64
|
|
if row.Cells[0].Type() == xlsx.CellTypeNumeric {
|
|
if row.Cells[0].Type() == xlsx.CellTypeNumeric {
|
|
dataNum, _ := strconv.ParseFloat(row.Cells[0].Value, 64)
|
|
dataNum, _ := strconv.ParseFloat(row.Cells[0].Value, 64)
|
|
tmpTime := xlsx.TimeFromExcelTime(dataNum, false)
|
|
tmpTime := xlsx.TimeFromExcelTime(dataNum, false)
|
|
date = tmpTime.Format(utils.FormatDate)
|
|
date = tmpTime.Format(utils.FormatDate)
|
|
|
|
+ dataTimestamp = tmpTime.UnixMilli()
|
|
} else {
|
|
} else {
|
|
- date = row.Cells[0].String()
|
|
|
|
- date = strings.Split(date, " ")[0]
|
|
|
|
|
|
+ timeDate, _ := time.Parse(utils.FormatDateTime, date)
|
|
|
|
+ date = timeDate.Format(utils.FormatDate)
|
|
|
|
+ dataTimestamp = timeDate.UnixMilli()
|
|
}
|
|
}
|
|
fv, _ := row.Cells[1].Float()
|
|
fv, _ := row.Cells[1].Float()
|
|
value := strconv.FormatFloat(fv, 'f', 4, 64)
|
|
value := strconv.FormatFloat(fv, 'f', 4, 64)
|
|
- TrendChart.DataList = append(TrendChart.DataList, &response.EdbData{DataTime: date, Value: value})
|
|
|
|
|
|
+ TrendChart.DataList = append(TrendChart.DataList, &response.EdbData{DataTime: date, Value: value, DataTimestamp: dataTimestamp})
|
|
}
|
|
}
|
|
case "残差":
|
|
case "残差":
|
|
for i, row := range sheet.Rows {
|
|
for i, row := range sheet.Rows {
|
|
@@ -255,17 +263,20 @@ func ParseStlExcel(excelPath string) (TrendChart, SeasonalChart, ResidualChart r
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
var date string
|
|
var date string
|
|
|
|
+ var dataTimestamp int64
|
|
if row.Cells[0].Type() == xlsx.CellTypeNumeric {
|
|
if row.Cells[0].Type() == xlsx.CellTypeNumeric {
|
|
dataNum, _ := strconv.ParseFloat(row.Cells[0].Value, 64)
|
|
dataNum, _ := strconv.ParseFloat(row.Cells[0].Value, 64)
|
|
tmpTime := xlsx.TimeFromExcelTime(dataNum, false)
|
|
tmpTime := xlsx.TimeFromExcelTime(dataNum, false)
|
|
date = tmpTime.Format(utils.FormatDate)
|
|
date = tmpTime.Format(utils.FormatDate)
|
|
|
|
+ dataTimestamp = tmpTime.UnixMilli()
|
|
} else {
|
|
} else {
|
|
- date = row.Cells[0].String()
|
|
|
|
- date = strings.Split(date, " ")[0]
|
|
|
|
|
|
+ timeDate, _ := time.Parse(utils.FormatDateTime, date)
|
|
|
|
+ date = timeDate.Format(utils.FormatDate)
|
|
|
|
+ dataTimestamp = timeDate.UnixMilli()
|
|
}
|
|
}
|
|
fv, _ := row.Cells[1].Float()
|
|
fv, _ := row.Cells[1].Float()
|
|
value := strconv.FormatFloat(fv, 'f', 4, 64)
|
|
value := strconv.FormatFloat(fv, 'f', 4, 64)
|
|
- ResidualChart.DataList = append(ResidualChart.DataList, &response.EdbData{DataTime: date, Value: value})
|
|
|
|
|
|
+ ResidualChart.DataList = append(ResidualChart.DataList, &response.EdbData{DataTime: date, Value: value, DataTimestamp: dataTimestamp})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -881,6 +892,50 @@ func SaveStlEdbInfo(req *request.SaveStlEdbInfoReq, adminId int, adminRealName,
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func GetStlConfig(configId int) (resp *response.StlConfigResp, msg string, err error) {
|
|
|
|
+ conf, err := stl.GetCalculateStlConfigById(configId)
|
|
|
|
+ if err != nil {
|
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
|
+ msg = "未找到配置,请刷新后重试"
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ msg = "获取失败"
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ var req request.StlConfigReq
|
|
|
|
+ if err = json.Unmarshal([]byte(conf.Config), &req); err != nil {
|
|
|
|
+ msg = "获取失败"
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ edbInfo, err := data_manage.GetEdbInfoById(req.EdbInfoId)
|
|
|
|
+ if err != nil {
|
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
|
+ msg = "未找到指标,请刷新后重试"
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ msg = "获取失败"
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ resp = &response.StlConfigResp{
|
|
|
|
+ CalculateStlConfigId: conf.CalculateStlConfigId,
|
|
|
|
+ EdbInfoId: req.EdbInfoId,
|
|
|
|
+ EdbInfoName: edbInfo.EdbName,
|
|
|
|
+ DataRangeType: req.DataRangeType,
|
|
|
|
+ StartDate: req.StartDate,
|
|
|
|
+ EndDate: req.EndDate,
|
|
|
|
+ LastNYear: req.LastNYear,
|
|
|
|
+ Period: req.Period,
|
|
|
|
+ Seasonal: req.Seasonal,
|
|
|
|
+ Trend: req.Trend,
|
|
|
|
+ Fraction: req.Fraction,
|
|
|
|
+ Robust: req.Robust,
|
|
|
|
+ TrendDeg: req.TrendDeg,
|
|
|
|
+ SeasonalDeg: req.SeasonalDeg,
|
|
|
|
+ LowPassDeg: req.LowPassDeg,
|
|
|
|
+ }
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
func CheckDulplicateEdbInfoName(edbName, lang string) (ok bool, err error) {
|
|
func CheckDulplicateEdbInfoName(edbName, lang string) (ok bool, err error) {
|
|
var count int
|
|
var count int
|
|
var condition string
|
|
var condition string
|