|
@@ -363,7 +363,16 @@ func GetEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
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)
|
|
|
-
|
|
|
+ // 设置季节性图的左右轴
|
|
|
+ seasonXStartDateWithYear := ""
|
|
|
+ seasonXEndDateWithYear := ""
|
|
|
+ // 如果是季节性图则进入特殊排序
|
|
|
+ if chartType == 2 {
|
|
|
+ // 根据设置的左右轴,对mappingList进行排序,1左轴排在前面,0右轴排在前面
|
|
|
+ sort.Slice(mappingList, func(i, j int) bool {
|
|
|
+ return mappingList[i].IsAxis > mappingList[j].IsAxis
|
|
|
+ })
|
|
|
+ }
|
|
|
for _, v := range mappingList {
|
|
|
//fmt.Println("v:", v.EdbInfoId)
|
|
|
item := new(models.ChartEdbInfoMapping)
|
|
@@ -397,6 +406,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
item.ChartStyle = ""
|
|
|
item.ChartColor = ""
|
|
|
item.ChartWidth = 0
|
|
|
+ item.ChartScale = 0
|
|
|
item.MaxData = v.MaxValue
|
|
|
item.MinData = v.MinValue
|
|
|
} else {
|
|
@@ -410,6 +420,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
item.ChartStyle = v.ChartStyle
|
|
|
item.ChartColor = v.ChartColor
|
|
|
item.ChartWidth = v.ChartWidth
|
|
|
+ item.ChartScale = v.ChartScale
|
|
|
item.IsOrder = v.IsOrder
|
|
|
item.MaxData = v.MaxData
|
|
|
item.MinData = v.MinData
|
|
@@ -436,7 +447,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
} else {
|
|
|
if v.EdbInfoType == 0 && v.LeadUnit != "" && v.LeadValue > 0 { //领先指标
|
|
|
var startTimeRealTemp time.Time
|
|
|
- startDateParse, _ := time.Parse(utils.FormatDate, startDate)
|
|
|
+ startDateParse, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
|
|
|
switch v.LeadUnit {
|
|
|
case "天":
|
|
|
startTimeRealTemp = startDateParse.AddDate(0, 0, -v.LeadValue)
|
|
@@ -457,8 +468,8 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
diffSeconds = 0
|
|
|
}
|
|
|
|
|
|
- // todo 预测指标的开始日期也要偏移
|
|
|
- /*{
|
|
|
+ // 预测指标的开始日期也要偏移
|
|
|
+ {
|
|
|
day, tmpErr := utils.GetDaysBetween2Date(utils.FormatDate, startDate, startDateReal)
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
@@ -470,7 +481,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
return
|
|
|
}
|
|
|
item.MoveLatestDate = moveLatestDateTime.AddDate(0, 0, day).Format(utils.FormatDate)
|
|
|
- }*/
|
|
|
+ }
|
|
|
} else {
|
|
|
startDateReal = startDate
|
|
|
}
|
|
@@ -489,8 +500,6 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
dataList := make([]*models.EdbDataList, 0)
|
|
|
dataList, err = GetEdbDataList(v.EdbInfoId, v.EdbType, startDateReal, endDate)
|
|
|
if err != nil {
|
|
|
- // 获取指标数据失败
|
|
|
- err = fmt.Errorf("获取指标数据失败 GetEdbDataList error, %v", err)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -531,7 +540,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
}
|
|
|
|
|
|
if chartType == 2 && item.IsAxis == 1 {
|
|
|
- latestDate, tmpErr := time.Parse(utils.FormatDate, v.LatestDate)
|
|
|
+ latestDate, tmpErr := time.ParseInLocation(utils.FormatDate, v.LatestDate, time.Local)
|
|
|
if tmpErr != nil {
|
|
|
//item.DataList = dataList
|
|
|
item.IsNullData = true
|
|
@@ -551,42 +560,87 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
err = errors.New("获取农历数据失败,Err:" + tmpErr.Error())
|
|
|
return
|
|
|
}
|
|
|
- quarterDataList, tErr := GetSeasonEdbInfoDataListByXDateNong(result, latestDate, seasonExtraConfig, calendarPreYear)
|
|
|
+ quarterDataList, seasonXStartDateWithYearTmp, seasonXEndDateWithYearTmp, tErr := GetSeasonEdbInfoDataListByXDateNong(result, latestDate, seasonExtraConfig, calendarPreYear)
|
|
|
if tErr != nil {
|
|
|
err = errors.New("获取季节性图表数据失败,Err:" + tErr.Error())
|
|
|
return
|
|
|
}
|
|
|
item.DataList = quarterDataList
|
|
|
+ seasonXStartDateWithYear = seasonXStartDateWithYearTmp
|
|
|
+ seasonXEndDateWithYear = seasonXEndDateWithYearTmp
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
- quarterDataList, tErr := GetSeasonEdbInfoDataListByXDate(dataList, latestDate, seasonExtraConfig)
|
|
|
+ quarterDataList, seasonXStartDateWithYearTmp, seasonXEndDateWithYearTmp, tErr := GetSeasonEdbInfoDataListByXDate(dataList, latestDate, seasonExtraConfig)
|
|
|
if tErr != nil {
|
|
|
err = errors.New("获取季节性图表数据失败,Err:" + tErr.Error())
|
|
|
return
|
|
|
}
|
|
|
item.DataList = quarterDataList
|
|
|
+ seasonXStartDateWithYear = seasonXStartDateWithYearTmp
|
|
|
+ seasonXEndDateWithYear = seasonXEndDateWithYearTmp
|
|
|
}
|
|
|
|
|
|
} else if chartType == 2 && item.IsAxis == 0 {
|
|
|
- // 右轴数据处理,只要最新一年
|
|
|
- latestDate, tmpErr := time.Parse(utils.FormatDate, v.LatestDate)
|
|
|
- if tmpErr != nil {
|
|
|
- //item.DataList = dataList
|
|
|
- item.IsNullData = true
|
|
|
- edbList = append(edbList, item)
|
|
|
- continue
|
|
|
- err = errors.New(fmt.Sprint("获取最后实际数据的日期失败,Err:" + tmpErr.Error() + ";LatestDate:" + v.LatestDate))
|
|
|
- return
|
|
|
- }
|
|
|
+ // 右轴数据处理
|
|
|
+ // xStartDate := "01-01"
|
|
|
+
|
|
|
+ // jumpYear := 0
|
|
|
+ // var seasonExtra models.SeasonExtraItem
|
|
|
+ // if seasonExtraConfig != "" {
|
|
|
+ // err = json.Unmarshal([]byte(seasonExtraConfig), &seasonExtra)
|
|
|
+ // if err != nil {
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+ // if seasonExtra.XStartDate != "" {
|
|
|
+ // xStartDate = seasonExtra.XStartDate
|
|
|
+ // jumpYear = seasonExtra.JumpYear
|
|
|
+ // }
|
|
|
+
|
|
|
+ // length := len(dataList)
|
|
|
+ // if length == 0 {
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // latestDate, tmpErr := time.Parse(utils.FormatDate, v.LatestDate)
|
|
|
+ // if tmpErr != nil {
|
|
|
+ // //item.DataList = dataList
|
|
|
+ // item.IsNullData = true
|
|
|
+ // edbList = append(edbList, item)
|
|
|
+ // continue
|
|
|
+ // err = errors.New(fmt.Sprint("获取最后实际数据的日期失败,Err:" + tmpErr.Error() + ";LatestDate:" + v.LatestDate))
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+
|
|
|
+ // var rightAxisDate time.Time
|
|
|
+ // if jumpYear == 1 {
|
|
|
+ // latestDate = latestDate.AddDate(-1, 0, 0)
|
|
|
+ // }
|
|
|
+ // latestDateStr := fmt.Sprintf("%d-%s", latestDate.Year(), xStartDate)
|
|
|
+ // rightAxisDate, err = time.Parse(utils.FormatDate, latestDateStr)
|
|
|
+ // if err != nil {
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // nowYear := time.Now().Year()
|
|
|
newDataList := make([]*models.EdbDataList, 0)
|
|
|
+ seasonXStartDateWithYearT, _ := time.ParseInLocation(utils.FormatDate, seasonXStartDateWithYear, time.Local)
|
|
|
+ seasonXEndDateWithYearT, _ := time.ParseInLocation(utils.FormatDate, seasonXEndDateWithYear, time.Local)
|
|
|
for _, v := range dataList {
|
|
|
- dataTime, e := time.Parse(utils.FormatDate, v.DataTime)
|
|
|
+ dataTime, e := time.ParseInLocation(utils.FormatDate, v.DataTime, time.Local)
|
|
|
if e != nil {
|
|
|
err = errors.New("季节性图处理右轴指标数据转换日期失败,Err:" + e.Error())
|
|
|
return
|
|
|
}
|
|
|
- if dataTime.Year() == latestDate.Year() {
|
|
|
+ //dataTimeT, _ := time.Parse(utils.FormatDate, v.DataTime)
|
|
|
+ // year := dataTimeT.Year()
|
|
|
+ // newItemDate := dataTimeT.AddDate(nowYear-year, 0, 0)
|
|
|
+ // v.DataTimestamp = newItemDate.UnixNano() / 1e6
|
|
|
+ // if dataTime.Equal(rightAxisDate) || dataTime.After(rightAxisDate) {
|
|
|
+ // newDataList = append(newDataList, v)
|
|
|
+ // }
|
|
|
+ // 如果数据时间在横轴的开始日期和结束日期之间,则加入到数据列表中
|
|
|
+ if (dataTime.After(seasonXStartDateWithYearT) && dataTime.Before(seasonXEndDateWithYearT)) || dataTime.Equal(seasonXStartDateWithYearT) || dataTime.Equal(seasonXEndDateWithYearT) {
|
|
|
newDataList = append(newDataList, v)
|
|
|
}
|
|
|
}
|
|
@@ -603,7 +657,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
|
|
|
}
|
|
|
|
|
|
// GetSeasonEdbInfoDataListByXDate 季节性图的指标数据根据横轴展示
|
|
|
-func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDate time.Time, seasonExtraConfig string) (quarterDataListSort models.QuarterDataList, err error) {
|
|
|
+func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDate time.Time, seasonExtraConfig string) (quarterDataListSort models.QuarterDataList, xStartDateWithYear string, xEndDateWithYear string, err error) {
|
|
|
xStartDate := "01-01"
|
|
|
xEndDate := "12-31"
|
|
|
jumpYear := 0
|
|
@@ -639,7 +693,7 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDate
|
|
|
//根据数据确定最早的年份,和最近年份
|
|
|
//根据横轴的日期,汇总所有的年份
|
|
|
startDate := dataList[0].DataTime
|
|
|
- startDateT, tmpErr := time.Parse(utils.FormatDate, startDate)
|
|
|
+ startDateT, tmpErr := time.ParseInLocation(utils.FormatDate, startDate,time.Local)
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
|
return
|
|
@@ -647,13 +701,14 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDate
|
|
|
startYear := startDateT.Year()
|
|
|
//获取数据的最新日期
|
|
|
lastDate := dataList[length-1].DataTime
|
|
|
- lastDateT, tmpErr := time.Parse(utils.FormatDate, lastDate)
|
|
|
+ lastDateT, tmpErr := time.ParseInLocation(utils.FormatDate, lastDate,time.Local)
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
|
return
|
|
|
}
|
|
|
endYear := lastDateT.Year()
|
|
|
- nowYear := time.Now().Year()
|
|
|
+ nowYear := endYear
|
|
|
+ chartLegendMaxYear := 0
|
|
|
dataMap := make(map[string]models.QuarterXDateItem, 0)
|
|
|
|
|
|
quarterDataList := make([]*models.QuarterData, 0)
|
|
@@ -672,13 +727,13 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDate
|
|
|
name := fmt.Sprintf("%s_%s", startStr, endStr)
|
|
|
showName := fmt.Sprintf("%d_%d", currentStartYear, currentEndYear)
|
|
|
|
|
|
- startT, tEr := time.Parse(utils.FormatDate, startStr)
|
|
|
+ startT, tEr := time.ParseInLocation(utils.FormatDate, startStr,time.Local)
|
|
|
if tEr != nil {
|
|
|
err = tEr
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- endT, tEr := time.Parse(utils.FormatDate, endStr)
|
|
|
+ endT, tEr := time.ParseInLocation(utils.FormatDate, endStr,time.Local)
|
|
|
if tEr != nil {
|
|
|
err = tEr
|
|
|
return
|
|
@@ -699,25 +754,32 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDate
|
|
|
EndDate: endT,
|
|
|
ShowName: showName,
|
|
|
}
|
|
|
+ chartLegendMaxYear = endT.Year()
|
|
|
dataMap[name] = item
|
|
|
chartLegendMap[name] = idx
|
|
|
idx++
|
|
|
fmt.Println("年份" + showName + "日期" + startStr + " " + endStr)
|
|
|
+ xStartDateWithYear = startStr
|
|
|
+ xEndDateWithYear = endStr
|
|
|
if lastDateT.Before(endT) {
|
|
|
//如果最新的日期在起始日之前,则跳出循环
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
lenYear := len(dataMap)
|
|
|
+ if chartLegendMaxYear > endYear {
|
|
|
+ chartLegendMaxYear = endYear
|
|
|
+ }
|
|
|
for k, v := range dataMap {
|
|
|
if i, ok := chartLegendMap[k]; ok {
|
|
|
- v.ChartLegend = strconv.Itoa(endYear - lenYear + i)
|
|
|
+ //v.ChartLegend = strconv.Itoa(endYear - lenYear + i)
|
|
|
+ v.ChartLegend = strconv.Itoa(chartLegendMaxYear - lenYear + i)
|
|
|
}
|
|
|
dataMap[k] = v
|
|
|
}
|
|
|
|
|
|
for _, v := range dataList {
|
|
|
- dataTimeT, _ := time.Parse(utils.FormatDate, v.DataTime)
|
|
|
+ dataTimeT, _ := time.ParseInLocation(utils.FormatDate, v.DataTime,time.Local)
|
|
|
year := dataTimeT.Year()
|
|
|
newItemDate := dataTimeT.AddDate(nowYear-year, 0, 0)
|
|
|
for k, dateItem := range dataMap {
|
|
@@ -732,7 +794,7 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDate
|
|
|
if jumpYear == 1 {
|
|
|
//计算前一年最大的日期, 只补齐数据到去年
|
|
|
beforeYearMaxDate := fmt.Sprintf("%d-12-31", dateItem.StartDate.Year())
|
|
|
- beforeYearMaxDateT, _ := time.Parse(utils.FormatDate, beforeYearMaxDate)
|
|
|
+ beforeYearMaxDateT, _ := time.ParseInLocation(utils.FormatDate, beforeYearMaxDate,time.Local)
|
|
|
if dataTimeT.Before(beforeYearMaxDateT) || dataTimeT == beforeYearMaxDateT {
|
|
|
newItemDate = dataTimeT.AddDate(nowYear-year-1, 0, 0)
|
|
|
} else {
|
|
@@ -762,6 +824,9 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDate
|
|
|
}
|
|
|
for k, v := range dataMap {
|
|
|
itemList := quarterMap[k]
|
|
|
+ /*if len(itemList) == 0 {
|
|
|
+ continue
|
|
|
+ }*/
|
|
|
quarterItem := new(models.QuarterData)
|
|
|
quarterItem.Years = v.ShowName
|
|
|
quarterItem.ChartLegend = v.ChartLegend
|
|
@@ -791,7 +856,7 @@ func GetSeasonEdbInfoDataListByXDate(dataList []*models.EdbDataList, latestDate
|
|
|
}
|
|
|
|
|
|
// GetSeasonEdbInfoDataListByXDateNong 季节性图的指标数据根据横轴选择农历时展示
|
|
|
-func GetSeasonEdbInfoDataListByXDateNong(result *data.EdbDataResult, latestDate time.Time, seasonExtraConfig string, calendarPreYear int) (quarterDataListSort models.QuarterDataList, err error) {
|
|
|
+func GetSeasonEdbInfoDataListByXDateNong(result *data.EdbDataResult, latestDate time.Time, seasonExtraConfig string, calendarPreYear int) (quarterDataListSort models.QuarterDataList, xStartDateWithYear string, xEndDateWithYear string, err error) {
|
|
|
xStartDate := "01-01"
|
|
|
xEndDate := "12-31"
|
|
|
jumpYear := 0
|
|
@@ -837,13 +902,14 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data.EdbDataResult, latestDate
|
|
|
//获取数据的最新日期
|
|
|
lastDate := result.List[length-1].Items[itemLength-1].DataTime
|
|
|
maxY := result.List[length-1].Year
|
|
|
- lastDateT, tmpErr := time.Parse(utils.FormatDate, lastDate)
|
|
|
+ lastDateT, tmpErr := time.ParseInLocation(utils.FormatDate, lastDate,time.Local)
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
|
return
|
|
|
}
|
|
|
endYear := lastDateT.Year()
|
|
|
- nowYear := time.Now().Year()
|
|
|
+ nowYear := endYear
|
|
|
+ chartLegendMaxYear := 0
|
|
|
dataMap := make(map[string]models.QuarterXDateItem, 0)
|
|
|
|
|
|
quarterDataList := make([]*models.QuarterData, 0)
|
|
@@ -863,13 +929,13 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data.EdbDataResult, latestDate
|
|
|
endStr := fmt.Sprintf("%d-%s", currentEndYear, xEndDate)
|
|
|
showName := fmt.Sprintf("%d_%d", currentStartYear, currentEndYear)
|
|
|
|
|
|
- startT, tEr := time.Parse(utils.FormatDate, startStr)
|
|
|
+ startT, tEr := time.ParseInLocation(utils.FormatDate, startStr,time.Local)
|
|
|
if tEr != nil {
|
|
|
err = tEr
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- endT, tEr := time.Parse(utils.FormatDate, endStr)
|
|
|
+ endT, tEr := time.ParseInLocation(utils.FormatDate, endStr,time.Local)
|
|
|
if tEr != nil {
|
|
|
err = tEr
|
|
|
return
|
|
@@ -888,21 +954,28 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data.EdbDataResult, latestDate
|
|
|
EndDate: endT,
|
|
|
ShowName: showName,
|
|
|
}
|
|
|
+ chartLegendMaxYear = endT.Year()
|
|
|
dataMap[showName] = item
|
|
|
fmt.Println("年份" + showName + "日期" + startStr + " " + endStr)
|
|
|
startTmpT = startT
|
|
|
endTmpT = endT
|
|
|
chartLegendMap[showName] = idx
|
|
|
idx++
|
|
|
+ xStartDateWithYear = startStr
|
|
|
+ xEndDateWithYear = endStr
|
|
|
if lastDateT.Before(endT) {
|
|
|
//如果最新的日期在起始日之前,则跳出循环
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
lenYear := len(dataMap)
|
|
|
+ if chartLegendMaxYear > endYear {
|
|
|
+ chartLegendMaxYear = endYear
|
|
|
+ }
|
|
|
for k, v := range dataMap {
|
|
|
if i, ok := chartLegendMap[k]; ok {
|
|
|
- v.ChartLegend = strconv.Itoa(endYear - lenYear + i)
|
|
|
+ //v.ChartLegend = strconv.Itoa(endYear - lenYear + i)
|
|
|
+ v.ChartLegend = strconv.Itoa(chartLegendMaxYear - lenYear + i)
|
|
|
}
|
|
|
dataMap[k] = v
|
|
|
}
|
|
@@ -955,7 +1028,11 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data.EdbDataResult, latestDate
|
|
|
DataTimestamp: item.DataTimestamp,
|
|
|
Value: item.Value,
|
|
|
}
|
|
|
- dataTimeT, _ := time.Parse(utils.FormatDate, item.DataTime)
|
|
|
+ dataTimeT, _ := time.ParseInLocation(utils.FormatDate, item.DataTime,time.Local)
|
|
|
+ // year := dataTimeT.Year()
|
|
|
+ // newItemDate := dataTimeT.AddDate(nowYear-year, 0, 0)
|
|
|
+ // timestamp := newItemDate.UnixNano() / 1e6
|
|
|
+ // tmpVal.DataTimestamp = timestamp
|
|
|
if (startTmpT.Before(dataTimeT) && endTmpT.After(dataTimeT)) || startTmpT == dataTimeT || endTmpT == dataTimeT {
|
|
|
tmpV := &tmpVal
|
|
|
if findVal, ok := quarterMap[name]; !ok {
|
|
@@ -979,6 +1056,9 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data.EdbDataResult, latestDate
|
|
|
|
|
|
for k, v := range dataMap {
|
|
|
itemList := quarterMap[k]
|
|
|
+ /*if len(itemList) == 0 {
|
|
|
+ continue
|
|
|
+ }*/
|
|
|
quarterItem := new(models.QuarterData)
|
|
|
quarterItem.Years = v.ShowName
|
|
|
quarterItem.ChartLegend = v.ChartLegend
|