|
@@ -372,10 +372,40 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *models.ChartEdbInfo
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+type RollingCorrelationChartDataResp struct {
|
|
|
+ MaxData float64
|
|
|
+ MinData float64
|
|
|
+ LatestDate string `description:"真实数据的最后日期"`
|
|
|
+ EdbInfoCategoryType int
|
|
|
+ ChartColor string
|
|
|
+ ChartStyle string
|
|
|
+ PredictChartColor string
|
|
|
+ ChartType int
|
|
|
+ ChartWidth int
|
|
|
+ EdbName string
|
|
|
+ EdbNameEn string
|
|
|
+ Unit string
|
|
|
+ UnitEn string
|
|
|
+ IsAxis int
|
|
|
+ DataList []models.EdbDataList
|
|
|
+}
|
|
|
+
|
|
|
// GetRollingCorrelationChartDataByEdbInfo 滚动相关性计算
|
|
|
-func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *models.ChartEdbInfoMapping, leadValue int, leadUnit string, calculateValue int, calculateUnit string, startDate, endDate string) (xDateTimeValue []string, yDataList []models.YData, err error) {
|
|
|
- xDateTimeValue = make([]string, 0)
|
|
|
- yData := make([]float64, 0)
|
|
|
+func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *models.ChartEdbInfoMapping, leadValue int, leadUnit string, calculateValue int, calculateUnit string, startDate, endDate, chartName, chartNameEn string) (dataResp RollingCorrelationChartDataResp, err error) {
|
|
|
+ dataResp = RollingCorrelationChartDataResp{
|
|
|
+ DataList: make([]models.EdbDataList, 0),
|
|
|
+ MaxData: 0,
|
|
|
+ MinData: 0,
|
|
|
+ ChartColor: "#00f",
|
|
|
+ ChartStyle: `spline`,
|
|
|
+ PredictChartColor: `#00f`,
|
|
|
+ ChartType: 0,
|
|
|
+ ChartWidth: 3,
|
|
|
+ EdbName: chartName,
|
|
|
+ EdbNameEn: chartNameEn,
|
|
|
+ IsAxis: 1,
|
|
|
+ }
|
|
|
+ dataList := make([]models.EdbDataList, 0)
|
|
|
|
|
|
// 计算窗口,不包含第一天
|
|
|
startDateTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
|
|
@@ -450,6 +480,8 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *m
|
|
|
endDateTime, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
|
|
|
endDateTime = endDateTime.AddDate(0, 0, -(calculateDay - 1))
|
|
|
|
|
|
+ // 是否开始第一条数据
|
|
|
+ var isStart, isNotFirst bool
|
|
|
for currDay := startDateTime; !currDay.After(endDateTime); currDay = currDay.AddDate(0, 0, 1) {
|
|
|
yCalculateData := make([]float64, 0)
|
|
|
baseCalculateData := make([]float64, 0)
|
|
@@ -472,17 +504,46 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *m
|
|
|
var ratio float64
|
|
|
if len(baseCalculateData) > 0 {
|
|
|
ratio = utils.CalculateCorrelationByIntArr(baseCalculateData, yCalculateData)
|
|
|
+ } else {
|
|
|
+ // 没有数据的话,那就不返回
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ // 过滤前面都是0的数据
|
|
|
+ {
|
|
|
+ if ratio != 0 {
|
|
|
+ isStart = true
|
|
|
+ }
|
|
|
+
|
|
|
+ if !isStart {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ dataTime := currDay.AddDate(0, 0, calculateDay-1)
|
|
|
+ dataList = append(dataList, models.EdbDataList{
|
|
|
+ //EdbDataId: 0,
|
|
|
+ EdbInfoId: 0,
|
|
|
+ DataTime: dataTime.Format(utils.FormatDate),
|
|
|
+ DataTimestamp: dataTime.UnixNano() / 1e6,
|
|
|
+ Value: ratio,
|
|
|
+ })
|
|
|
+
|
|
|
+ if !isNotFirst {
|
|
|
+ dataResp.MinData = ratio
|
|
|
+ dataResp.MaxData = ratio
|
|
|
+ isNotFirst = true
|
|
|
+ }
|
|
|
+ if dataResp.MinData > ratio {
|
|
|
+ dataResp.MinData = ratio
|
|
|
+ }
|
|
|
+ if dataResp.MaxData < ratio {
|
|
|
+ dataResp.MaxData = ratio
|
|
|
}
|
|
|
- yData = append(yData, ratio)
|
|
|
- xDateTimeValue = append(xDateTimeValue, currDay.AddDate(0, 0, calculateDay-1).Format(utils.FormatDate))
|
|
|
}
|
|
|
+
|
|
|
+ dataResp.DataList = dataList
|
|
|
}
|
|
|
|
|
|
- yDataList = make([]models.YData, 0)
|
|
|
- yDate := "0000-00-00"
|
|
|
- yDataList = append(yDataList, models.YData{
|
|
|
- Date: yDate,
|
|
|
- Value: yData,
|
|
|
- })
|
|
|
return
|
|
|
}
|