|
@@ -4,7 +4,6 @@ import (
|
|
|
"errors"
|
|
|
"eta/eta_api/models/data_manage"
|
|
|
"eta/eta_api/models/data_manage/supply_analysis"
|
|
|
- "eta/eta_api/services/data"
|
|
|
"eta/eta_api/utils"
|
|
|
"fmt"
|
|
|
"time"
|
|
@@ -57,30 +56,107 @@ func GetChartEdbSeasonalData(varietyEdbId int, calendar, startDate, endDate, lat
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
+ //latestDateStr := edbInfo.LatestDate //实际数据的截止日期
|
|
|
+ latestDate, tmpErr := time.Parse(utils.FormatDate, latestDateStr)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = errors.New(fmt.Sprint("获取最后实际数据的日期失败,Err:" + tmpErr.Error() + ";LatestDate:" + latestDateStr))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ latestDateYear := latestDate.Year() //实际数据截止年份
|
|
|
|
|
|
if calendar == "农历" {
|
|
|
if len(dataList) <= 0 {
|
|
|
resultData = new(data_manage.EdbDataResult)
|
|
|
} else {
|
|
|
- // todo 额外处理
|
|
|
result, tmpErr := data_manage.AddCalculateQuarterV4(dataList)
|
|
|
if tmpErr != nil {
|
|
|
err = errors.New("获取农历数据失败,Err:" + tmpErr.Error())
|
|
|
return
|
|
|
}
|
|
|
- quarterDataList, tErr := data.GetSeasonEdbInfoDataListByXDateNong(result, latestDateStr, "", calendarPreYear)
|
|
|
- if tErr != nil {
|
|
|
- err = errors.New("获取季节性图表数据失败,Err:" + tErr.Error())
|
|
|
+
|
|
|
+ // 处理季节图的截止日期
|
|
|
+ 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([]*data_manage.EdbDataList, 0)
|
|
|
+ items := new(data_manage.EdbDataItems)
|
|
|
+ //items.Year = calendarPreYear
|
|
|
+ items.Items = itemList
|
|
|
+
|
|
|
+ newResult := new(data_manage.EdbDataResult)
|
|
|
+ newResult.List = append(newResult.List, items)
|
|
|
+ newResult.List = append(newResult.List, result.List...)
|
|
|
+ resultData = newResult
|
|
|
+ } else {
|
|
|
+ resultData = result
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ currentYear := time.Now().Year()
|
|
|
+
|
|
|
+ quarterDataList := make([]*data_manage.QuarterData, 0)
|
|
|
+ quarterMap := make(map[int][]*data_manage.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
|
|
|
}
|
|
|
- resultData = quarterDataList
|
|
|
+ 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
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- } else {
|
|
|
- quarterDataList, tErr := data.GetSeasonEdbInfoDataListByXDate(dataList, latestDateStr, "")
|
|
|
- if tErr != nil {
|
|
|
- err = errors.New("获取季节性图表数据失败,Err:" + tErr.Error())
|
|
|
- return
|
|
|
+ for _, v := range quarterArr {
|
|
|
+ itemList := quarterMap[v]
|
|
|
+ quarterItem := new(data_manage.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)
|
|
|
}
|
|
|
resultData = quarterDataList
|
|
|
}
|