|
@@ -11,6 +11,7 @@ import (
|
|
|
"github.com/shopspring/decimal"
|
|
|
"math"
|
|
|
"sort"
|
|
|
+ "strconv"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -61,7 +62,7 @@ func GetLeadUnitEn(unit string) (unitEn string) {
|
|
|
}
|
|
|
|
|
|
// GetChartEdbData 获取图表的指标数据
|
|
|
-func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate string, mappingList []*models.ChartEdbInfoMapping, extraConfigStr string) (edbList []*models.ChartEdbInfoMapping, xEdbIdValue []int, yDataList []models.YData, dataResp interface{}, err error, errMsg string) {
|
|
|
+func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate string, mappingList []*models.ChartEdbInfoMapping, extraConfigStr, seasonExtraConfig string) (edbList []*models.ChartEdbInfoMapping, xEdbIdValue []int, yDataList []models.YData, dataResp interface{}, err error, errMsg string) {
|
|
|
edbList = make([]*models.ChartEdbInfoMapping, 0)
|
|
|
// 指标对应的所有数据
|
|
|
xEdbIdValue = make([]int, 0)
|
|
@@ -102,7 +103,7 @@ func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate st
|
|
|
}
|
|
|
|
|
|
// 指标对应的所有数据
|
|
|
- edbDataListMap, edbList, err := getEdbDataMapList(chartInfoId, chartType, calendar, startDate, endDate, mappingList)
|
|
|
+ edbDataListMap, edbList, err := getEdbDataMapList(chartInfoId, chartType, calendar, startDate, endDate, mappingList, seasonExtraConfig)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -137,13 +138,13 @@ func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate st
|
|
|
}
|
|
|
|
|
|
// GetEdbDataMapList 获取指标最后的基础数据
|
|
|
-func GetEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate string, mappingList []*models.ChartEdbInfoMapping) (edbDataListMap map[int][]*models.EdbDataList, edbList []*models.ChartEdbInfoMapping, err error) {
|
|
|
- edbDataListMap, edbList, err = getEdbDataMapList(chartInfoId, chartType, calendar, startDate, endDate, mappingList)
|
|
|
+func GetEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate string, mappingList []*models.ChartEdbInfoMapping, seasonExtraConfig string) (edbDataListMap map[int][]*models.EdbDataList, edbList []*models.ChartEdbInfoMapping, err error) {
|
|
|
+ edbDataListMap, edbList, err = getEdbDataMapList(chartInfoId, chartType, calendar, startDate, endDate, mappingList, seasonExtraConfig)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// getEdbDataMapList 获取指标最后的基础数据
|
|
|
-func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate string, mappingList []*models.ChartEdbInfoMapping) (edbDataListMap map[int][]*models.EdbDataList, edbList []*models.ChartEdbInfoMapping, err error) {
|
|
|
+func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate string, mappingList []*models.ChartEdbInfoMapping, seasonExtraConfig string) (edbDataListMap map[int][]*models.EdbDataList, edbList []*models.ChartEdbInfoMapping, err error) {
|
|
|
// 指标对应的所有数据
|
|
|
edbDataListMap = make(map[int][]*models.EdbDataList)
|
|
|
|
|
@@ -284,13 +285,6 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
|
|
|
if chartType == 2 {
|
|
|
latestDateStr := v.LatestDate //实际数据的截止日期
|
|
|
- latestDate, tmpErr := time.Parse(utils.FormatDate, v.LatestDate)
|
|
|
- if tmpErr != nil {
|
|
|
- err = errors.New(fmt.Sprint("获取最后实际数据的日期失败,Err:" + tmpErr.Error() + ";LatestDate:" + v.LatestDate))
|
|
|
- return
|
|
|
- }
|
|
|
- latestDateYear := latestDate.Year() //实际数据截止年份
|
|
|
-
|
|
|
if calendar == "农历" {
|
|
|
if len(dataList) <= 0 {
|
|
|
result := new(models.EdbDataResult)
|
|
@@ -302,89 +296,19 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // 处理季节图的截止日期
|
|
|
- for k, edbDataItems := range result.List {
|
|
|
- var cuttingDataTimestamp int64
|
|
|
-
|
|
|
- // 切割的日期时间字符串
|
|
|
- cuttingDataTimeStr := latestDate.AddDate(0, 0, edbDataItems.BetweenDay).Format(utils.FormatDate)
|
|
|
- //如果等于最后的实际日期,那么遍历找到该日期对应的时间戳,并将其赋值为 切割时间戳
|
|
|
- if edbDataItems.Year >= latestDateYear {
|
|
|
- for _, tmpData := range edbDataItems.Items {
|
|
|
- if tmpData.DataTime == cuttingDataTimeStr {
|
|
|
- cuttingDataTimestamp = tmpData.DataTimestamp
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- edbDataItems.CuttingDataTimestamp = cuttingDataTimestamp
|
|
|
- result.List[k] = edbDataItems
|
|
|
- }
|
|
|
-
|
|
|
- if result.List[0].Year != calendarPreYear {
|
|
|
- itemList := make([]*models.EdbDataList, 0)
|
|
|
- items := new(models.EdbDataItems)
|
|
|
- //items.Year = calendarPreYear
|
|
|
- items.Items = itemList
|
|
|
-
|
|
|
- newResult := new(models.EdbDataResult)
|
|
|
- newResult.List = append(newResult.List, items)
|
|
|
- newResult.List = append(newResult.List, result.List...)
|
|
|
- item.DataList = newResult
|
|
|
- } else {
|
|
|
- item.DataList = result
|
|
|
+ quarterDataList, tErr := GetSeasonEdbInfoDataListByXDateNong(result, latestDateStr, seasonExtraConfig, calendarPreYear)
|
|
|
+ if tErr != nil {
|
|
|
+ err = errors.New("获取季节性图表数据失败,Err:" + tErr.Error())
|
|
|
+ return
|
|
|
}
|
|
|
+ item.DataList = quarterDataList
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
- currentYear := time.Now().Year()
|
|
|
-
|
|
|
- quarterDataList := make([]*models.QuarterData, 0)
|
|
|
- quarterMap := make(map[int][]*models.EdbDataList)
|
|
|
- var quarterArr []int
|
|
|
-
|
|
|
- for _, v := range dataList {
|
|
|
- itemDate, tmpErr := time.Parse(utils.FormatDate, v.DataTime)
|
|
|
- if tmpErr != nil {
|
|
|
- err = errors.New("季度指标日期转换,Err:" + tmpErr.Error() + ";DataTime:" + v.DataTime)
|
|
|
- return
|
|
|
- }
|
|
|
- year := itemDate.Year()
|
|
|
- newItemDate := itemDate.AddDate(currentYear-year, 0, 0)
|
|
|
- timestamp := newItemDate.UnixNano() / 1e6
|
|
|
- v.DataTimestamp = timestamp
|
|
|
- if findVal, ok := quarterMap[year]; !ok {
|
|
|
- quarterArr = append(quarterArr, year)
|
|
|
- findVal = append(findVal, v)
|
|
|
- quarterMap[year] = findVal
|
|
|
- } else {
|
|
|
- findVal = append(findVal, v)
|
|
|
- quarterMap[year] = findVal
|
|
|
- }
|
|
|
- }
|
|
|
- for _, v := range quarterArr {
|
|
|
- itemList := quarterMap[v]
|
|
|
- quarterItem := new(models.QuarterData)
|
|
|
- quarterItem.Year = v
|
|
|
- quarterItem.DataList = itemList
|
|
|
-
|
|
|
- //如果等于最后的实际日期,那么将切割时间戳记录
|
|
|
- if v == latestDateYear {
|
|
|
- var cuttingDataTimestamp int64
|
|
|
- for _, tmpData := range itemList {
|
|
|
- if tmpData.DataTime == latestDateStr {
|
|
|
- cuttingDataTimestamp = tmpData.DataTimestamp
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- quarterItem.CuttingDataTimestamp = cuttingDataTimestamp
|
|
|
- } else if v > latestDateYear {
|
|
|
- //如果大于最后的实际日期,那么第一个点就是切割的时间戳
|
|
|
- if len(itemList) > 0 {
|
|
|
- quarterItem.CuttingDataTimestamp = itemList[0].DataTimestamp - 100
|
|
|
- }
|
|
|
- }
|
|
|
- quarterDataList = append(quarterDataList, quarterItem)
|
|
|
+ quarterDataList, tErr := GetSeasonEdbInfoDataListByXDate(dataList, latestDateStr, seasonExtraConfig)
|
|
|
+ if tErr != nil {
|
|
|
+ err = errors.New("获取季节性图表数据失败,Err:" + tErr.Error())
|
|
|
+ return
|
|
|
}
|
|
|
item.DataList = quarterDataList
|
|
|
}
|
|
@@ -399,6 +323,371 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+// GetSeasonEdbInfoDataListByXDate 季节性图的指标数据根据横轴展示
|
|
|
+func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateStr string, seasonExtraConfig string) (quarterDataListSort models.QuarterDataList, err error) {
|
|
|
+ xStartDate := "01-01"
|
|
|
+ xEndDate := "12-31"
|
|
|
+ jumpYear := 0
|
|
|
+ legends := make([]models.SeasonChartLegend, 0)
|
|
|
+ var seasonExtra models.SeasonExtraItem
|
|
|
+ if seasonExtraConfig != "" {
|
|
|
+ err = json.Unmarshal([]byte(seasonExtraConfig), &seasonExtra)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if seasonExtra.XStartDate != "" {
|
|
|
+ xStartDate = seasonExtra.XStartDate
|
|
|
+ xEndDate = seasonExtra.XEndDate
|
|
|
+ jumpYear = seasonExtra.JumpYear
|
|
|
+ legends = seasonExtra.ChartLegend
|
|
|
+ }
|
|
|
+
|
|
|
+ length := len(dataList)
|
|
|
+ if length == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ legendMap := make(map[string]string)
|
|
|
+ if len(legends) > 0 {
|
|
|
+ for _, v := range legends {
|
|
|
+ legendMap[v.Name] = v.Value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //判断横轴的两个时间之间是不是跨年了,如果跨年了,则横轴截止年份比起始年份+1,如果不跨年,截止年份等于起始年份
|
|
|
+ //根据数据确定最早的年份,和最近年份
|
|
|
+ //根据横轴的日期,汇总所有的年份
|
|
|
+ startDate := dataList[0].DataTime
|
|
|
+ startDateT, tmpErr := time.Parse(utils.FormatDate, startDate)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ return
|
|
|
+ }
|
|
|
+ startYear := startDateT.Year()
|
|
|
+ //获取数据的最新日期
|
|
|
+ lastDate := dataList[length-1].DataTime
|
|
|
+ lastDateT, tmpErr := time.Parse(utils.FormatDate, lastDate)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ return
|
|
|
+ }
|
|
|
+ endYear := lastDateT.Year()
|
|
|
+ dataMap := make(map[string]models.QuarterXDateItem)
|
|
|
+
|
|
|
+ quarterDataList := make([]*models.QuarterData, 0)
|
|
|
+ quarterMap := make(map[string][]*models.EdbDataList)
|
|
|
+
|
|
|
+ //整理出日期
|
|
|
+ leftNameFlag := true
|
|
|
+ for currentStartYear := startYear; currentStartYear <= endYear; currentStartYear++ {
|
|
|
+ startStr := fmt.Sprintf("%d-%s", currentStartYear, xStartDate)
|
|
|
+ currentEndYear := currentStartYear
|
|
|
+ if jumpYear == 1 {
|
|
|
+ currentEndYear = currentStartYear + 1
|
|
|
+ }
|
|
|
+ endStr := fmt.Sprintf("%d-%s", currentEndYear, xEndDate)
|
|
|
+ name := fmt.Sprintf("%s_%s", startStr, endStr)
|
|
|
+ showName := fmt.Sprintf("%d_%d", currentStartYear, currentEndYear)
|
|
|
+
|
|
|
+ startT, tEr := time.Parse(utils.FormatDate, startStr)
|
|
|
+ if tEr != nil {
|
|
|
+ err = tEr
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ endT, tEr := time.Parse(utils.FormatDate, endStr)
|
|
|
+ if tEr != nil {
|
|
|
+ err = tEr
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if lastDateT.Before(startT) {
|
|
|
+ //如果最新的日期在起始日之前,则跳出循环
|
|
|
+ break
|
|
|
+ }
|
|
|
+
|
|
|
+ if startT.Before(lastDateT) && endT.After(lastDateT) {
|
|
|
+ if endYear > currentStartYear {
|
|
|
+ leftNameFlag = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item := models.QuarterXDateItem{
|
|
|
+ StartDate: startT,
|
|
|
+ EndDate: endT,
|
|
|
+ ShowName: showName,
|
|
|
+ }
|
|
|
+ dataMap[name] = item
|
|
|
+ }
|
|
|
+
|
|
|
+ for k, v := range dataMap {
|
|
|
+ if leftNameFlag {
|
|
|
+ v.ChartLegend = strconv.Itoa(v.StartDate.Year())
|
|
|
+ } else {
|
|
|
+ v.ChartLegend = strconv.Itoa(v.EndDate.Year())
|
|
|
+ }
|
|
|
+ dataMap[k] = v
|
|
|
+ }
|
|
|
+
|
|
|
+ nowYear := time.Now().Year()
|
|
|
+ for _, v := range dataList {
|
|
|
+ dataTimeT, _ := time.Parse(utils.FormatDate, v.DataTime)
|
|
|
+ year := dataTimeT.Year()
|
|
|
+ newItemDate := dataTimeT.AddDate(nowYear-year, 0, 0)
|
|
|
+ for k, dateItem := range dataMap {
|
|
|
+ if (dateItem.StartDate.Before(dataTimeT) && dateItem.EndDate.After(dataTimeT)) || dateItem.StartDate == dataTimeT || dateItem.EndDate == dataTimeT {
|
|
|
+ if jumpYear == 1 {
|
|
|
+ //计算前一年最大的日期, 只补齐数据到去年
|
|
|
+ beforeYearMaxDate := fmt.Sprintf("%d-12-31", dateItem.StartDate.Year())
|
|
|
+ beforeYearMaxDateT, _ := time.Parse(utils.FormatDate, beforeYearMaxDate)
|
|
|
+ if dataTimeT.Before(beforeYearMaxDateT) || dataTimeT == beforeYearMaxDateT {
|
|
|
+ newItemDate = dataTimeT.AddDate(nowYear-year-1, 0, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ timestamp := newItemDate.UnixNano() / 1e6
|
|
|
+ v.DataTimestamp = timestamp
|
|
|
+ if findVal, ok := quarterMap[k]; !ok {
|
|
|
+ findVal = append(findVal, v)
|
|
|
+ quarterMap[k] = findVal
|
|
|
+ } else {
|
|
|
+ findVal = append(findVal, v)
|
|
|
+ quarterMap[k] = findVal
|
|
|
+ }
|
|
|
+
|
|
|
+ if v.DataTime == latestDateStr {
|
|
|
+ dateItem.CuttingDataTimestamp = v.DataTimestamp
|
|
|
+ dataMap[k] = dateItem
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ latestDate, _ := time.Parse(utils.FormatDate, latestDateStr)
|
|
|
+ for k, v := range dataMap {
|
|
|
+ itemList := quarterMap[k]
|
|
|
+ quarterItem := new(models.QuarterData)
|
|
|
+ quarterItem.Years = v.ShowName
|
|
|
+ quarterItem.ChartLegend = v.ChartLegend
|
|
|
+ if le, ok := legendMap[v.ShowName]; ok {
|
|
|
+ quarterItem.ChartLegend = le
|
|
|
+ }
|
|
|
+ quarterItem.DataList = itemList
|
|
|
+ quarterItem.CuttingDataTimestamp = v.CuttingDataTimestamp
|
|
|
+
|
|
|
+ //如果等于最后的实际日期,那么将切割时间戳记录
|
|
|
+ if quarterItem.CuttingDataTimestamp == 0 {
|
|
|
+ //如果大于最后的实际日期,那么第一个点就是切割的时间戳
|
|
|
+ if latestDate.Before(v.StartDate) && len(itemList) > 0 {
|
|
|
+ quarterItem.CuttingDataTimestamp = itemList[0].DataTimestamp - 100
|
|
|
+ }
|
|
|
+ }
|
|
|
+ quarterDataList = append(quarterDataList, quarterItem)
|
|
|
+ }
|
|
|
+
|
|
|
+ // todo 处理图例名称
|
|
|
+ if len(quarterDataList) > 0 {
|
|
|
+ quarterDataListSort = quarterDataList
|
|
|
+ sort.Sort(quarterDataListSort)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// GetSeasonEdbInfoDataListByXDateNong 季节性图的指标数据根据横轴选择农历时展示
|
|
|
+func GetSeasonEdbInfoDataListByXDateNong(result *models.EdbDataResult, latestDateStr string, seasonExtraConfig string, calendarPreYear int) (quarterDataListSort models.QuarterDataList, err error) {
|
|
|
+ xStartDate := "01-01"
|
|
|
+ xEndDate := "12-31"
|
|
|
+ jumpYear := 0
|
|
|
+ legends := make([]models.SeasonChartLegend, 0)
|
|
|
+ var seasonExtra models.SeasonExtraItem
|
|
|
+ if seasonExtraConfig != "" {
|
|
|
+ err = json.Unmarshal([]byte(seasonExtraConfig), &seasonExtra)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if seasonExtra.XStartDate != "" {
|
|
|
+ xStartDate = seasonExtra.XStartDate
|
|
|
+ xEndDate = seasonExtra.XEndDate
|
|
|
+ jumpYear = seasonExtra.JumpYear
|
|
|
+ legends = seasonExtra.ChartLegend
|
|
|
+ }
|
|
|
+
|
|
|
+ length := len(result.List)
|
|
|
+ if length == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ legendMap := make(map[string]string)
|
|
|
+ if len(legends) > 0 {
|
|
|
+ for _, v := range legends {
|
|
|
+ legendMap[v.Name] = v.Value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //判断横轴的两个时间之间是不是跨年了,如果跨年了,则横轴截止年份比起始年份+1,如果不跨年,截止年份等于起始年份
|
|
|
+ //根据数据确定最早的年份,和最近年份
|
|
|
+ //根据横轴的日期,汇总所有的年份
|
|
|
+ startYear := calendarPreYear
|
|
|
+ itemLength := len(result.List[length-1].Items)
|
|
|
+ //获取数据的最新日期
|
|
|
+ lastDate := result.List[length-1].Items[itemLength-1].DataTime
|
|
|
+ lastDateT, tmpErr := time.Parse(utils.FormatDate, lastDate)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ return
|
|
|
+ }
|
|
|
+ endYear := lastDateT.Year()
|
|
|
+ dataMap := make(map[string]models.QuarterXDateItem)
|
|
|
+
|
|
|
+ quarterDataList := make([]*models.QuarterData, 0)
|
|
|
+ resultData := make([]*models.QuarterData, 0)
|
|
|
+ quarterMap := make(map[string][]*models.EdbDataList)
|
|
|
+ //整理出日期
|
|
|
+ leftNameFlag := true
|
|
|
+ for currentStartYear := startYear; currentStartYear <= endYear; currentStartYear++ {
|
|
|
+ startStr := fmt.Sprintf("%d-%s", currentStartYear, xStartDate)
|
|
|
+ currentEndYear := currentStartYear
|
|
|
+ if jumpYear == 1 {
|
|
|
+ currentEndYear = currentStartYear + 1
|
|
|
+ }
|
|
|
+ endStr := fmt.Sprintf("%d-%s", currentEndYear, xEndDate)
|
|
|
+ showName := fmt.Sprintf("%d_%d", currentStartYear, currentEndYear)
|
|
|
+
|
|
|
+ startT, tEr := time.Parse(utils.FormatDate, startStr)
|
|
|
+ if tEr != nil {
|
|
|
+ err = tEr
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ endT, tEr := time.Parse(utils.FormatDate, endStr)
|
|
|
+ if tEr != nil {
|
|
|
+ err = tEr
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if lastDateT.Before(startT) {
|
|
|
+ //如果最新的日期在起始日之前,则跳出循环
|
|
|
+ break
|
|
|
+ }
|
|
|
+
|
|
|
+ if (startT.Before(lastDateT) && endT.After(lastDateT)) || startT == lastDateT || endT == lastDateT {
|
|
|
+ if endYear > currentStartYear {
|
|
|
+ leftNameFlag = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item := models.QuarterXDateItem{
|
|
|
+ StartDate: startT,
|
|
|
+ EndDate: endT,
|
|
|
+ ShowName: showName,
|
|
|
+ }
|
|
|
+ dataMap[showName] = item
|
|
|
+ }
|
|
|
+ for k, v := range dataMap {
|
|
|
+ if leftNameFlag {
|
|
|
+ v.ChartLegend = strconv.Itoa(v.StartDate.Year())
|
|
|
+ } else {
|
|
|
+ v.ChartLegend = strconv.Itoa(v.EndDate.Year())
|
|
|
+ }
|
|
|
+ dataMap[k] = v
|
|
|
+ }
|
|
|
+
|
|
|
+ yearDataListMap := make(map[int]*models.EdbDataItems)
|
|
|
+
|
|
|
+ for _, lv := range result.List {
|
|
|
+ yearDataListMap[lv.Year] = lv
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断哪些点应该落在同一条时间线上
|
|
|
+ maxY := 0
|
|
|
+ for _, lv := range result.List {
|
|
|
+ for _, item := range lv.Items {
|
|
|
+ dataTimeT, _ := time.Parse(utils.FormatDate, item.DataTime)
|
|
|
+ if dataTimeT.Year() > maxY {
|
|
|
+ maxY = dataTimeT.Year()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ endTmp := fmt.Sprintf("%d-%s", maxY, xEndDate)
|
|
|
+ endTmpT, _ := time.Parse(utils.FormatDate, endTmp)
|
|
|
+ minY := maxY
|
|
|
+ if jumpYear == 1 {
|
|
|
+ minY = maxY - 1
|
|
|
+ }
|
|
|
+ startTmp := fmt.Sprintf("%d-%s", minY, xStartDate)
|
|
|
+ startTmpT, _ := time.Parse(utils.FormatDate, startTmp)
|
|
|
+
|
|
|
+ for name, dateItem := range dataMap {
|
|
|
+ lv, ok1 := yearDataListMap[dateItem.EndDate.Year()]
|
|
|
+ if result.List[0].Year == calendarPreYear {
|
|
|
+ lv, ok1 = yearDataListMap[dateItem.StartDate.Year()]
|
|
|
+ }
|
|
|
+ if !ok1 {
|
|
|
+ break
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, item := range lv.Items {
|
|
|
+ dataTimeT, _ := time.Parse(utils.FormatDate, item.DataTime)
|
|
|
+ //查出当前年份里最大的数据的年份,和第二大的年份
|
|
|
+ if (startTmpT.Before(dataTimeT) && endTmpT.After(dataTimeT)) || startTmpT == dataTimeT || endTmpT == dataTimeT {
|
|
|
+ if findVal, ok := quarterMap[name]; !ok {
|
|
|
+ findVal = append(findVal, item)
|
|
|
+ quarterMap[name] = findVal
|
|
|
+ } else {
|
|
|
+ findVal = append(findVal, item)
|
|
|
+ quarterMap[name] = findVal
|
|
|
+ }
|
|
|
+ // todo 统计截止日
|
|
|
+ if lv.Year == endYear && item.DataTime == latestDateStr {
|
|
|
+ if dv, ok1 := dataMap[name]; ok1 {
|
|
|
+ dv.CuttingDataTimestamp = item.DataTimestamp
|
|
|
+ dataMap[name] = dv
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ latestDate, _ := time.Parse(utils.FormatDate, latestDateStr)
|
|
|
+ for k, v := range dataMap {
|
|
|
+ itemList := quarterMap[k]
|
|
|
+ quarterItem := new(models.QuarterData)
|
|
|
+ quarterItem.Years = v.ShowName
|
|
|
+ quarterItem.ChartLegend = v.ChartLegend
|
|
|
+ if le, ok := legendMap[v.ShowName]; ok {
|
|
|
+ quarterItem.ChartLegend = le
|
|
|
+ }
|
|
|
+ quarterItem.DataList = itemList
|
|
|
+ quarterItem.CuttingDataTimestamp = v.CuttingDataTimestamp
|
|
|
+
|
|
|
+ //如果等于最后的实际日期,那么将切割时间戳记录
|
|
|
+ if quarterItem.CuttingDataTimestamp == 0 {
|
|
|
+ //如果大于最后的实际日期,那么第一个点就是切割的时间戳
|
|
|
+ if latestDate.Before(v.StartDate) && len(itemList) > 0 {
|
|
|
+ quarterItem.CuttingDataTimestamp = itemList[0].DataTimestamp - 100
|
|
|
+ }
|
|
|
+ }
|
|
|
+ quarterDataList = append(quarterDataList, quarterItem)
|
|
|
+ }
|
|
|
+
|
|
|
+ if result.List[0].Year != calendarPreYear {
|
|
|
+ itemList := make([]*models.EdbDataList, 0)
|
|
|
+ items := new(models.QuarterData)
|
|
|
+ //items.Year = calendarPreYear
|
|
|
+ items.DataList = itemList
|
|
|
+
|
|
|
+ newResult := make([]*models.QuarterData, 0)
|
|
|
+ newResult = append(newResult, items)
|
|
|
+ newResult = append(newResult, quarterDataList...)
|
|
|
+ resultData = newResult
|
|
|
+ } else {
|
|
|
+ resultData = quarterDataList
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(quarterDataList) > 0 {
|
|
|
+ quarterDataListSort = resultData
|
|
|
+ sort.Sort(quarterDataListSort)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
// BarChartData 柱方图的数据处理
|
|
|
func BarChartData(mappingList []*models.ChartEdbInfoMapping, edbDataListMap map[int][]*models.EdbDataList, barChartInfoDateList []data_manage.BarChartInfoDateReq, barChartInfoSort data_manage.BarChartInfoSortReq) (edbIdList []int, yDataList []models.YData, err error) {
|
|
|
// 指标数据数组(10086:{"2022-12-02":100.01,"2022-12-01":102.3})
|