zwxi před 8 měsíci
rodič
revize
92d5ef2e75
2 změnil soubory, kde provedl 89 přidání a 27 odebrání
  1. 42 17
      models/data_manage/chart_info.go
  2. 47 10
      services/data/chart_info.go

+ 42 - 17
models/data_manage/chart_info.go

@@ -1479,31 +1479,55 @@ type MaxMinLimits struct {
 
 // 自定义同期均线
 type SamePeriodAverage struct {
-	Color     string  `description:"颜色"`
-	Year      int     `description:"均线取值范围"`
-	Legend    string  `description:"图例名称"`
-	LineType  string  `description:"线型"`
-	LineWidth int     `description:"线宽"`
-	Value     float64 `description:"均线值"`
-	IsShow    bool    `description:"是否显示"`
+	Color     string `description:"颜色"`
+	Year      int    `description:"均线取值范围"`
+	Legend    string `description:"图例名称"`
+	LineType  string `description:"线型"`
+	LineWidth int    `description:"线宽"`
+	IsShow    bool   `description:"是否显示"`
+}
+
+// 自定义同期均线
+type SamePeriodAverageResp struct {
+	Color     string                   `description:"颜色"`
+	Year      int                      `description:"均线取值范围"`
+	Legend    string                   `description:"图例名称"`
+	LineType  string                   `description:"线型"`
+	LineWidth int                      `description:"线宽"`
+	IsShow    bool                     `description:"是否显示"`
+	List      []*SamePeriodAverageData `description:"自定义均线列表"`
+}
+
+type SamePeriodAverageData struct {
+	DataTime      string  `description:"数据日期"`
+	DataTimestamp int64   `description:"数据日期时间戳"`
+	Value         float64 `description:"均值"`
 }
 
 // 自定义同期标准差
 type SamePeriodStandardDeviation struct {
-	Color    string  `description:"颜色"`
-	Year     int     `description:"标准差取值范围"`
-	Legend   string  `description:"图例名称"`
-	Multiple int     `description:"标准差倍数"`
-	MaxValue float64 `description:"上限"`
-	MinValue float64 `description:"上限"`
-	IsShow   bool    `description:"是否显示"`
+	Color    string `description:"颜色"`
+	Year     int    `description:"标准差取值范围"`
+	Legend   string `description:"图例名称"`
+	Multiple int    `description:"标准差倍数"`
+	IsShow   bool   `description:"是否显示"`
+}
+
+type SamePeriodStandardDeviationResp struct {
+	Color    string              `description:"颜色"`
+	Year     int                 `description:"标准差取值范围"`
+	Legend   string              `description:"图例名称"`
+	Multiple int                 `description:"标准差倍数"`
+	IsShow   bool                `description:"是否显示"`
+	List     []*MaxMinLimitsData `description:"自定义标准差列表"`
 }
 
 type SeasonChartResp struct {
-	MaxMinLimits                MaxMinLimitsResp            `description:"自定义上下限"`
-	SamePeriodAverage           SamePeriodAverage           `description:"自定义同期均线"`
-	SamePeriodStandardDeviation SamePeriodStandardDeviation `description:"自定义同期标准差线"`
+	MaxMinLimits                MaxMinLimitsResp                `description:"自定义上下限"`
+	SamePeriodAverage           SamePeriodAverageResp           `description:"自定义同期均线"`
+	SamePeriodStandardDeviation SamePeriodStandardDeviationResp `description:"自定义同期标准差线"`
 }
+
 type MaxMinLimitsResp struct {
 	List   []*MaxMinLimitsData `description:"自定义上下限列表"`
 	Color  string              `description:"颜色"`
@@ -1511,6 +1535,7 @@ type MaxMinLimitsResp struct {
 	Legend string              `description:"图例名称"`
 	IsShow bool                `description:"是否显示"`
 }
+
 type MaxMinLimitsData struct {
 	DataTime      string  `description:"数据日期"`
 	DataTimestamp int64   `description:"数据日期时间戳"`

+ 47 - 10
services/data/chart_info.go

@@ -3330,24 +3330,61 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
 
 		// 自定义同期均线
 		if seasonConfig.SamePeriodAverage.Year > 0 {
-			totalDataTimeList := make([]string, 0)
 			handleDataMap := make(map[string]float64)
+			dataTimeMap := make(map[time.Time]time.Time)
+			dataTimeList := make([]string, 0)
+			valueMap := make(map[time.Time]float64)
 
-			for i := len(quarterDataList); i > seasonConfig.SamePeriodAverage.Year && i > 0; i-- {
+			averageDataList := make([]*data_manage.SamePeriodAverageData, 0)
+			for i := len(quarterDataList) - 1 ; i > len(quarterDataList) - seasonConfig.SamePeriodAverage.Year && i > 0; i-- {
 				// 插值成日度
-				dataTimeList, _, e := HandleDataByLinearRegressionToList(quarterDataList[i].DataList, handleDataMap)
-				if e != nil {
-					err = errors.New("插值处理数据异常, Err:" + e.Error())
+				dataTimeList, _, err = HandleDataByLinearRegressionToList(quarterDataList[i].DataList, handleDataMap)
+				if err != nil {
+					err = errors.New("插值处理数据异常, Err:" + err.Error())
 					return
 				}
-				totalDataTimeList = append(totalDataTimeList, dataTimeList...)
+				for _, date := range dataTimeList {
+					dateTime, e := time.Parse(utils.FormatDate, date)
+					if e != nil {
+						err = errors.New("时间格式化异常, Err:" + e.Error())
+						return
+					}
+					newDate := dateTime.AddDate(time.Now().Year()-dateTime.Year(), 0, 0)
+					// 处理均值
+					if value, ok := valueMap[newDate]; ok {
+						valueMap[newDate] = (handleDataMap[date] + value)/2
+					} else {
+						valueMap[newDate] = handleDataMap[date]
+					}
+
+					dataTimeMap[newDate] = newDate
+				}
 			}
 
-			var totalvalue float64
-			for _, v := range totalDataTimeList {
-				totalvalue += handleDataMap[v]
+			for _, v := range dataTimeMap {
+				averageItem := &data_manage.SamePeriodAverageData{}
+				if value, ok := valueMap[v]; ok {
+					averageItem.Value = value
+				}
+				averageItem.DataTime = v.Format(utils.FormatDate)
+				averageItem.DataTimestamp = v.UnixNano() / 1e6
+
+				averageDataList = append(averageDataList, averageItem)
+
 			}
-			dataResp.SamePeriodAverage.Value = totalvalue / float64(len(totalDataTimeList))
+
+			// 排序
+			sort.Slice(averageDataList, func(i, j int) bool {
+				return averageDataList[i].DataTime < averageDataList[j].DataTime
+			})
+
+			dataResp.SamePeriodAverage.List = averageDataList
+			dataResp.SamePeriodAverage.Year = seasonConfig.SamePeriodAverage.Year
+			dataResp.SamePeriodAverage.Color = seasonConfig.SamePeriodAverage.Color
+			dataResp.SamePeriodAverage.Legend = seasonConfig.SamePeriodAverage.Legend
+			dataResp.SamePeriodAverage.IsShow = seasonConfig.SamePeriodAverage.IsShow
+			dataResp.SamePeriodAverage.LineType = seasonConfig.SamePeriodAverage.LineType
+			dataResp.SamePeriodAverage.LineWidth = seasonConfig.SamePeriodAverage.LineWidth
 		}
 
 		// 自定义同期标准差