|
@@ -284,7 +284,11 @@ 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
|
|
|
+ }
|
|
|
if calendar == "农历" {
|
|
|
if len(dataList) <= 0 {
|
|
|
result := new(models.EdbDataResult)
|
|
@@ -296,7 +300,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- quarterDataList, tErr := GetSeasonEdbInfoDataListByXDateNong(result, latestDateStr, seasonExtraConfig, calendarPreYear)
|
|
|
+ quarterDataList, tErr := GetSeasonEdbInfoDataListByXDateNong(result, latestDate, seasonExtraConfig, calendarPreYear)
|
|
|
if tErr != nil {
|
|
|
err = errors.New("获取季节性图表数据失败,Err:" + tErr.Error())
|
|
|
return
|
|
@@ -305,7 +309,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
- quarterDataList, tErr := GetSeasonEdbInfoDataListByXDate(dataList, latestDateStr, seasonExtraConfig)
|
|
|
+ quarterDataList, tErr := GetSeasonEdbInfoDataListByXDate(dataList, latestDate, seasonExtraConfig)
|
|
|
if tErr != nil {
|
|
|
err = errors.New("获取季节性图表数据失败,Err:" + tErr.Error())
|
|
|
return
|
|
@@ -324,7 +328,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
}
|
|
|
|
|
|
// GetSeasonEdbInfoDataListByXDate 季节性图的指标数据根据横轴展示
|
|
|
-func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateStr string, seasonExtraConfig string) (quarterDataListSort models.QuarterDataList, err error) {
|
|
|
+func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDate time.Time, seasonExtraConfig string) (quarterDataListSort models.QuarterDataList, err error) {
|
|
|
xStartDate := "01-01"
|
|
|
xEndDate := "12-31"
|
|
|
jumpYear := 0
|
|
@@ -348,12 +352,14 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateS
|
|
|
if length == 0 {
|
|
|
return
|
|
|
}
|
|
|
- legendMap := make(map[string]string)
|
|
|
+ legendMap := make(map[string]string, 0)
|
|
|
if len(legends) > 0 {
|
|
|
for _, v := range legends {
|
|
|
legendMap[v.Name] = v.Value
|
|
|
}
|
|
|
}
|
|
|
+ latestDateStr := latestDate.Format(utils.FormatDate)
|
|
|
+
|
|
|
//判断横轴的两个时间之间是不是跨年了,如果跨年了,则横轴截止年份比起始年份+1,如果不跨年,截止年份等于起始年份
|
|
|
//根据数据确定最早的年份,和最近年份
|
|
|
//根据横轴的日期,汇总所有的年份
|
|
@@ -364,9 +370,6 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateS
|
|
|
return
|
|
|
}
|
|
|
startYear := startDateT.Year()
|
|
|
- if jumpYear == 1 {
|
|
|
- startYear = startYear - 1
|
|
|
- }
|
|
|
//获取数据的最新日期
|
|
|
lastDate := dataList[length-1].DataTime
|
|
|
lastDateT, tmpErr := time.Parse(utils.FormatDate, lastDate)
|
|
@@ -375,10 +378,11 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateS
|
|
|
return
|
|
|
}
|
|
|
endYear := lastDateT.Year()
|
|
|
- dataMap := make(map[string]models.QuarterXDateItem)
|
|
|
+ nowYear := time.Now().Year()
|
|
|
+ dataMap := make(map[string]models.QuarterXDateItem, 0)
|
|
|
|
|
|
quarterDataList := make([]*models.QuarterData, 0)
|
|
|
- quarterMap := make(map[string][]*models.EdbDataList)
|
|
|
+ quarterMap := make(map[string][]*models.EdbDataList, 0)
|
|
|
|
|
|
//整理出日期
|
|
|
leftNameFlag := true
|
|
@@ -408,12 +412,15 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateS
|
|
|
//如果最新的日期在起始日之前,则跳出循环
|
|
|
break
|
|
|
}
|
|
|
-
|
|
|
if startT.Before(lastDateT) && endT.After(lastDateT) {
|
|
|
if endYear > currentStartYear {
|
|
|
leftNameFlag = false
|
|
|
}
|
|
|
}
|
|
|
+ if endT.Year() > nowYear {
|
|
|
+ //如果最新的日期比真实年份要大,则数据全部按照最大的年份补齐
|
|
|
+ nowYear = endT.Year()
|
|
|
+ }
|
|
|
item := models.QuarterXDateItem{
|
|
|
StartDate: startT,
|
|
|
EndDate: endT,
|
|
@@ -421,7 +428,6 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateS
|
|
|
}
|
|
|
dataMap[name] = item
|
|
|
}
|
|
|
-
|
|
|
for k, v := range dataMap {
|
|
|
if leftNameFlag {
|
|
|
v.ChartLegend = strconv.Itoa(v.StartDate.Year())
|
|
@@ -431,12 +437,18 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateS
|
|
|
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 {
|
|
|
+ tmpVal := models.EdbDataList{
|
|
|
+ EdbDataId: v.EdbDataId,
|
|
|
+ EdbInfoId: v.EdbInfoId,
|
|
|
+ DataTime: v.DataTime,
|
|
|
+ DataTimestamp: v.DataTimestamp,
|
|
|
+ Value: v.Value,
|
|
|
+ }
|
|
|
if (dateItem.StartDate.Before(dataTimeT) && dateItem.EndDate.After(dataTimeT)) || dateItem.StartDate == dataTimeT || dateItem.EndDate == dataTimeT {
|
|
|
if jumpYear == 1 {
|
|
|
//计算前一年最大的日期, 只补齐数据到去年
|
|
@@ -444,27 +456,31 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateS
|
|
|
beforeYearMaxDateT, _ := time.Parse(utils.FormatDate, beforeYearMaxDate)
|
|
|
if dataTimeT.Before(beforeYearMaxDateT) || dataTimeT == beforeYearMaxDateT {
|
|
|
newItemDate = dataTimeT.AddDate(nowYear-year-1, 0, 0)
|
|
|
+ } else {
|
|
|
+ newItemDate = dataTimeT.AddDate(nowYear-year, 0, 0)
|
|
|
}
|
|
|
+ } else {
|
|
|
+ newItemDate = dataTimeT.AddDate(nowYear-year, 0, 0)
|
|
|
}
|
|
|
timestamp := newItemDate.UnixNano() / 1e6
|
|
|
- v.DataTimestamp = timestamp
|
|
|
+ tmpVal.DataTimestamp = timestamp
|
|
|
+ tmpV := &tmpVal
|
|
|
if findVal, ok := quarterMap[k]; !ok {
|
|
|
- findVal = append(findVal, v)
|
|
|
+ findVal = append(findVal, tmpV)
|
|
|
quarterMap[k] = findVal
|
|
|
} else {
|
|
|
- findVal = append(findVal, v)
|
|
|
+ findVal = append(findVal, tmpV)
|
|
|
quarterMap[k] = findVal
|
|
|
}
|
|
|
|
|
|
if v.DataTime == latestDateStr {
|
|
|
- dateItem.CuttingDataTimestamp = v.DataTimestamp
|
|
|
+ dateItem.CuttingDataTimestamp = timestamp
|
|
|
dataMap[k] = dateItem
|
|
|
}
|
|
|
- break
|
|
|
+ //break
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- latestDate, _ := time.Parse(utils.FormatDate, latestDateStr)
|
|
|
for k, v := range dataMap {
|
|
|
itemList := quarterMap[k]
|
|
|
quarterItem := new(models.QuarterData)
|
|
@@ -473,7 +489,6 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateS
|
|
|
if le, ok := legendMap[v.ShowName]; ok {
|
|
|
quarterItem.ChartLegend = le
|
|
|
}
|
|
|
- quarterItem.Year = quarterItem.ChartLegend
|
|
|
quarterItem.DataList = itemList
|
|
|
quarterItem.CuttingDataTimestamp = v.CuttingDataTimestamp
|
|
|
|
|
@@ -487,7 +502,6 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateS
|
|
|
quarterDataList = append(quarterDataList, quarterItem)
|
|
|
}
|
|
|
|
|
|
- // todo 处理图例名称
|
|
|
if len(quarterDataList) > 0 {
|
|
|
quarterDataListSort = quarterDataList
|
|
|
sort.Sort(quarterDataListSort)
|
|
@@ -496,7 +510,7 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDateS
|
|
|
}
|
|
|
|
|
|
// GetSeasonEdbInfoDataListByXDateNong 季节性图的指标数据根据横轴选择农历时展示
|
|
|
-func GetSeasonEdbInfoDataListByXDateNong(result *models.EdbDataResult, latestDateStr string, seasonExtraConfig string, calendarPreYear int) (quarterDataListSort models.QuarterDataList, err error) {
|
|
|
+func GetSeasonEdbInfoDataListByXDateNong(result *models.EdbDataResult, latestDate time.Time, seasonExtraConfig string, calendarPreYear int) (quarterDataListSort models.QuarterDataList, err error) {
|
|
|
xStartDate := "01-01"
|
|
|
xEndDate := "12-31"
|
|
|
jumpYear := 0
|
|
@@ -520,21 +534,22 @@ func GetSeasonEdbInfoDataListByXDateNong(result *models.EdbDataResult, latestDat
|
|
|
if length == 0 {
|
|
|
return
|
|
|
}
|
|
|
- legendMap := make(map[string]string)
|
|
|
+ legendMap := make(map[string]string, 0)
|
|
|
if len(legends) > 0 {
|
|
|
for _, v := range legends {
|
|
|
legendMap[v.Name] = v.Value
|
|
|
}
|
|
|
}
|
|
|
+ latestDateYear := latestDate.Year()
|
|
|
//判断横轴的两个时间之间是不是跨年了,如果跨年了,则横轴截止年份比起始年份+1,如果不跨年,截止年份等于起始年份
|
|
|
//根据数据确定最早的年份,和最近年份
|
|
|
//根据横轴的日期,汇总所有的年份
|
|
|
startYear := result.List[0].Year
|
|
|
- if jumpYear == 1 {
|
|
|
+ /*if jumpYear == 1 {
|
|
|
if startYear != calendarPreYear {
|
|
|
startYear = startYear - 1
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
itemLength := len(result.List[length-1].Items)
|
|
|
//获取数据的最新日期
|
|
|
lastDate := result.List[length-1].Items[itemLength-1].DataTime
|
|
@@ -544,11 +559,13 @@ func GetSeasonEdbInfoDataListByXDateNong(result *models.EdbDataResult, latestDat
|
|
|
return
|
|
|
}
|
|
|
endYear := lastDateT.Year()
|
|
|
- dataMap := make(map[string]models.QuarterXDateItem)
|
|
|
+ nowYear := time.Now().Year()
|
|
|
+ dataMap := make(map[string]models.QuarterXDateItem, 0)
|
|
|
|
|
|
quarterDataList := make([]*models.QuarterData, 0)
|
|
|
resultData := make([]*models.QuarterData, 0)
|
|
|
- quarterMap := make(map[string][]*models.EdbDataList)
|
|
|
+ quarterMap := make(map[string][]*models.EdbDataList, 0)
|
|
|
+
|
|
|
//整理出日期
|
|
|
leftNameFlag := true
|
|
|
for currentStartYear := startYear; currentStartYear <= endYear; currentStartYear++ {
|
|
@@ -576,12 +593,15 @@ func GetSeasonEdbInfoDataListByXDateNong(result *models.EdbDataResult, latestDat
|
|
|
//如果最新的日期在起始日之前,则跳出循环
|
|
|
break
|
|
|
}
|
|
|
-
|
|
|
- if (startT.Before(lastDateT) && endT.After(lastDateT)) || startT == lastDateT || endT == lastDateT {
|
|
|
+ if startT.Before(lastDateT) && endT.After(lastDateT) {
|
|
|
if endYear > currentStartYear {
|
|
|
leftNameFlag = false
|
|
|
}
|
|
|
}
|
|
|
+ if endT.Year() > nowYear {
|
|
|
+ //如果最新的日期比真实年份要大,则数据全部按照最大的年份补齐
|
|
|
+ nowYear = endT.Year()
|
|
|
+ }
|
|
|
item := models.QuarterXDateItem{
|
|
|
StartDate: startT,
|
|
|
EndDate: endT,
|
|
@@ -598,7 +618,7 @@ func GetSeasonEdbInfoDataListByXDateNong(result *models.EdbDataResult, latestDat
|
|
|
dataMap[k] = v
|
|
|
}
|
|
|
|
|
|
- yearDataListMap := make(map[int]*models.EdbDataItems)
|
|
|
+ yearDataListMap := make(map[int]*models.EdbDataItems, 0)
|
|
|
|
|
|
for _, lv := range result.List {
|
|
|
yearDataListMap[lv.Year] = lv
|
|
@@ -625,33 +645,93 @@ func GetSeasonEdbInfoDataListByXDateNong(result *models.EdbDataResult, latestDat
|
|
|
|
|
|
for name, dateItem := range dataMap {
|
|
|
lv, ok1 := yearDataListMap[dateItem.EndDate.Year()]
|
|
|
+ if dateItem.EndDate.Year() > maxY {
|
|
|
+ lv, ok1 = yearDataListMap[dateItem.StartDate.Year()]
|
|
|
+ }
|
|
|
if !ok1 {
|
|
|
- break
|
|
|
+ continue
|
|
|
}
|
|
|
-
|
|
|
for _, item := range lv.Items {
|
|
|
+ tmpVal := models.EdbDataList{
|
|
|
+ EdbDataId: item.EdbDataId,
|
|
|
+ EdbInfoId: item.EdbInfoId,
|
|
|
+ DataTime: item.DataTime,
|
|
|
+ DataTimestamp: item.DataTimestamp,
|
|
|
+ Value: item.Value,
|
|
|
+ }
|
|
|
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
|
|
|
+ year := dataTimeT.Year()
|
|
|
+ newItemDate := dataTimeT.AddDate(nowYear-year, 0, 0)
|
|
|
+ if dateItem.EndDate.Year() > maxY {
|
|
|
+ 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)
|
|
|
+ } else {
|
|
|
+ newItemDate = dataTimeT.AddDate(nowYear-year, 0, 0)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ newItemDate = dataTimeT.AddDate(nowYear-year, 0, 0)
|
|
|
+ }
|
|
|
+ timestamp := newItemDate.UnixNano() / 1e6
|
|
|
+ tmpVal.DataTimestamp = timestamp
|
|
|
+ tmpV := &tmpVal
|
|
|
+ if findVal, ok := quarterMap[name]; !ok {
|
|
|
+ findVal = append(findVal, tmpV)
|
|
|
+ quarterMap[name] = findVal
|
|
|
+ } else {
|
|
|
+ findVal = append(findVal, tmpV)
|
|
|
+ quarterMap[name] = findVal
|
|
|
+ }
|
|
|
+ if lv.Year >= latestDateYear {
|
|
|
+ // 切割的日期时间字符串
|
|
|
+ cuttingDataTimeStr := latestDate.AddDate(0, 0, lv.BetweenDay).Format(utils.FormatDate)
|
|
|
+ if item.DataTime == cuttingDataTimeStr {
|
|
|
+ dateItem.CuttingDataTimestamp = timestamp
|
|
|
+ dataMap[name] = dateItem
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- // todo 统计截止日
|
|
|
- if lv.Year == endYear && item.DataTime == latestDateStr {
|
|
|
- if dv, ok1 := dataMap[name]; ok1 {
|
|
|
- dv.CuttingDataTimestamp = item.DataTimestamp
|
|
|
- dataMap[name] = dv
|
|
|
+ } else {
|
|
|
+ if (startTmpT.Before(dataTimeT) && endTmpT.After(dataTimeT)) || startTmpT == dataTimeT || endTmpT == dataTimeT {
|
|
|
+ if jumpYear == 1 {
|
|
|
+ //计算前一年最大的日期, 只补齐数据到去年
|
|
|
+ beforeYearMaxDate := fmt.Sprintf("%d-12-31", startTmpT.Year())
|
|
|
+ beforeYearMaxDateT, _ := time.Parse(utils.FormatDate, beforeYearMaxDate)
|
|
|
+ if dataTimeT.Before(beforeYearMaxDateT) || dataTimeT == beforeYearMaxDateT {
|
|
|
+ newItemDate = dataTimeT.AddDate(nowYear-year-1, 0, 0)
|
|
|
+ } else {
|
|
|
+ newItemDate = dataTimeT.AddDate(nowYear-year, 0, 0)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ newItemDate = dataTimeT.AddDate(nowYear-year, 0, 0)
|
|
|
+ }
|
|
|
+ timestamp := newItemDate.UnixNano() / 1e6
|
|
|
+ tmpVal.DataTimestamp = timestamp
|
|
|
+ tmpV := &tmpVal
|
|
|
+ if findVal, ok := quarterMap[name]; !ok {
|
|
|
+ findVal = append(findVal, tmpV)
|
|
|
+ quarterMap[name] = findVal
|
|
|
+ } else {
|
|
|
+ findVal = append(findVal, tmpV)
|
|
|
+ quarterMap[name] = findVal
|
|
|
+ }
|
|
|
+ if lv.Year >= latestDateYear {
|
|
|
+ // 切割的日期时间字符串
|
|
|
+ cuttingDataTimeStr := latestDate.AddDate(0, 0, lv.BetweenDay).Format(utils.FormatDate)
|
|
|
+ if item.DataTime == cuttingDataTimeStr {
|
|
|
+ dateItem.CuttingDataTimestamp = timestamp
|
|
|
+ dataMap[name] = dateItem
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- latestDate, _ := time.Parse(utils.FormatDate, latestDateStr)
|
|
|
+ }
|
|
|
for k, v := range dataMap {
|
|
|
itemList := quarterMap[k]
|
|
|
quarterItem := new(models.QuarterData)
|
|
@@ -660,24 +740,16 @@ func GetSeasonEdbInfoDataListByXDateNong(result *models.EdbDataResult, latestDat
|
|
|
if le, ok := legendMap[v.ShowName]; ok {
|
|
|
quarterItem.ChartLegend = le
|
|
|
}
|
|
|
- quarterItem.Year = quarterItem.ChartLegend
|
|
|
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 || jumpYear == 1 {
|
|
|
+ if result.List[0].Year != calendarPreYear {
|
|
|
itemList := make([]*models.EdbDataList, 0)
|
|
|
items := new(models.QuarterData)
|
|
|
- //、items.Year = calendarPreYear
|
|
|
+ //items.Year = calendarPreYear
|
|
|
items.DataList = itemList
|
|
|
|
|
|
newResult := make([]*models.QuarterData, 0)
|