|
@@ -3,6 +3,7 @@ package data
|
|
|
import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
+ "hongze/hongze_chart_lib/models"
|
|
|
"hongze/hongze_chart_lib/models/data_manage"
|
|
|
"hongze/hongze_chart_lib/utils"
|
|
|
"sort"
|
|
@@ -136,3 +137,283 @@ func ChartInfoRefreshV1(chartInfoId int) (err error) {
|
|
|
|
|
|
return err
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+func GetFrequencyEn(frequency string) (frequencyEn string) {
|
|
|
+ switch frequency {
|
|
|
+ case "日度":
|
|
|
+ frequencyEn = "day"
|
|
|
+ return
|
|
|
+ case "周度":
|
|
|
+ frequencyEn = "week"
|
|
|
+ return
|
|
|
+ case "旬度":
|
|
|
+ frequencyEn = "ten days"
|
|
|
+ return
|
|
|
+ case "月度":
|
|
|
+ frequencyEn = "month"
|
|
|
+ return
|
|
|
+ case "季度":
|
|
|
+ frequencyEn = "quarter"
|
|
|
+ return
|
|
|
+ case "年度":
|
|
|
+ frequencyEn = "year"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func GetLeadUnitEn(unit string) (unitEn string) {
|
|
|
+ switch unit {
|
|
|
+ case "天":
|
|
|
+ unitEn = "day"
|
|
|
+ return
|
|
|
+ case "周":
|
|
|
+ unitEn = "week"
|
|
|
+ return
|
|
|
+ case "月":
|
|
|
+ unitEn = "month"
|
|
|
+ return
|
|
|
+ case "季":
|
|
|
+ unitEn = "quarter"
|
|
|
+ return
|
|
|
+ case "年":
|
|
|
+ unitEn = "year"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate string, mappingList []*models.ChartEdbInfoMapping) (edbList []*models.ChartEdbInfoMapping, err error) {
|
|
|
+ edbList = make([]*models.ChartEdbInfoMapping, 0)
|
|
|
+
|
|
|
+ for _, v := range mappingList {
|
|
|
+
|
|
|
+ item := new(models.ChartEdbInfoMapping)
|
|
|
+ item.EdbInfoId = v.EdbInfoId
|
|
|
+ item.SourceName = v.SourceName
|
|
|
+ item.Source = v.Source
|
|
|
+ item.EdbCode = v.EdbCode
|
|
|
+ item.EdbName = v.EdbName
|
|
|
+ item.EdbNameEn = v.EdbNameEn
|
|
|
+ item.Frequency = v.Frequency
|
|
|
+ item.FrequencyEn = GetFrequencyEn(v.Frequency)
|
|
|
+ if v.Unit != `无` {
|
|
|
+ item.Unit = v.Unit
|
|
|
+ }
|
|
|
+ item.UnitEn = v.UnitEn
|
|
|
+ item.StartDate = v.StartDate
|
|
|
+ item.EndDate = v.EndDate
|
|
|
+ item.ModifyTime = v.ModifyTime
|
|
|
+ item.EdbInfoCategoryType = v.EdbInfoCategoryType
|
|
|
+ item.PredictChartColor = v.PredictChartColor
|
|
|
+
|
|
|
+ if chartInfoId <= 0 {
|
|
|
+ item.IsAxis = 1
|
|
|
+ item.LeadValue = 0
|
|
|
+ item.LeadUnit = ""
|
|
|
+
|
|
|
+ item.ChartInfoId = 0
|
|
|
+ item.IsOrder = false
|
|
|
+ item.EdbInfoType = 1
|
|
|
+ item.ChartStyle = ""
|
|
|
+ item.ChartColor = ""
|
|
|
+ item.ChartWidth = 0
|
|
|
+ item.MaxData = v.MaxValue
|
|
|
+ item.MinData = v.MinValue
|
|
|
+ } else {
|
|
|
+ item.IsAxis = v.IsAxis
|
|
|
+ item.EdbInfoType = v.EdbInfoType
|
|
|
+ item.LeadValue = v.LeadValue
|
|
|
+ item.LeadUnit = v.LeadUnit
|
|
|
+ item.LeadUnitEn = GetLeadUnitEn(v.LeadUnit)
|
|
|
+
|
|
|
+ item.ChartInfoId = v.ChartInfoId
|
|
|
+ item.ChartStyle = v.ChartStyle
|
|
|
+ item.ChartColor = v.ChartColor
|
|
|
+ item.ChartWidth = v.ChartWidth
|
|
|
+ item.IsOrder = v.IsOrder
|
|
|
+ item.MaxData = v.MaxData
|
|
|
+ item.MinData = v.MinData
|
|
|
+ }
|
|
|
+ item.LatestValue = v.LatestValue
|
|
|
+ item.LatestDate = v.LatestDate
|
|
|
+ item.UniqueCode = v.UniqueCode
|
|
|
+
|
|
|
+ var startDateReal string
|
|
|
+ var diffSeconds int64
|
|
|
+ if chartType == 2 {
|
|
|
+ startDateReal = startDate
|
|
|
+ } else {
|
|
|
+ if v.EdbInfoType == 0 && v.LeadUnit != "" && v.LeadValue > 0 {
|
|
|
+ var startTimeRealTemp time.Time
|
|
|
+ startDateParse, _ := time.Parse(utils.FormatDate, startDate)
|
|
|
+ switch v.LeadUnit {
|
|
|
+ case "天":
|
|
|
+ startTimeRealTemp = startDateParse.AddDate(0, 0, -v.LeadValue)
|
|
|
+ case "月":
|
|
|
+ startTimeRealTemp = startDateParse.AddDate(0, -v.LeadValue, 0)
|
|
|
+ case "季":
|
|
|
+ startTimeRealTemp = startDateParse.AddDate(0, -3*v.LeadValue, 0)
|
|
|
+ case "周":
|
|
|
+ startTimeRealTemp = startDateParse.AddDate(0, 0, -7*v.LeadValue)
|
|
|
+ case "年":
|
|
|
+ startTimeRealTemp = startDateParse.AddDate(-v.LeadValue, 0, 0)
|
|
|
+ }
|
|
|
+ if startTimeRealTemp.Before(startDateParse) {
|
|
|
+ startDateReal = startTimeRealTemp.Format(utils.FormatDate)
|
|
|
+ diffSeconds = (int64(startTimeRealTemp.UnixNano()) - int64(startDateParse.UnixNano())) / 1e6
|
|
|
+ } else {
|
|
|
+ startDateReal = startDate
|
|
|
+ diffSeconds = 0
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ startDateReal = startDate
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ calendarPreYear := 0
|
|
|
+ if calendar == "农历" {
|
|
|
+ newStartDateReal, err := time.Parse(utils.FormatDate, startDateReal)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("time.Parse:" + err.Error())
|
|
|
+ }
|
|
|
+ calendarPreYear = newStartDateReal.Year() - 1
|
|
|
+ newStartDateReal = newStartDateReal.AddDate(-1, 0, 0)
|
|
|
+ startDateReal = newStartDateReal.Format(utils.FormatDate)
|
|
|
+ }
|
|
|
+ dataList := make([]*models.EdbDataList, 0)
|
|
|
+
|
|
|
+
|
|
|
+ switch v.EdbInfoCategoryType {
|
|
|
+ case 0:
|
|
|
+ dataList, err = models.GetEdbDataList(v.Source, v.EdbInfoId, startDateReal, endDate)
|
|
|
+ case 1:
|
|
|
+ dataList, _, _, err, _ = GetPredictDataListByPredictEdbInfoId(v.EdbInfoId, startDateReal, endDate, false)
|
|
|
+ default:
|
|
|
+ err = errors.New(fmt.Sprint("获取失败,指标类型异常", v.EdbInfoCategoryType))
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if diffSeconds != 0 && v.EdbInfoType == 0 {
|
|
|
+ dataListLen := len(dataList)
|
|
|
+ for i := 0; i < dataListLen; i++ {
|
|
|
+ dataList[i].DataTimestamp = dataList[i].DataTimestamp - diffSeconds
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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)
|
|
|
+ item.DataList = result
|
|
|
+ } else {
|
|
|
+ result, tmpErr := models.AddCalculateQuarterV5(dataList)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = errors.New("获取农历数据失败,Err:" + tmpErr.Error())
|
|
|
+ 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.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
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } 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)
|
|
|
+ }
|
|
|
+ item.DataList = quarterDataList
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ item.DataList = dataList
|
|
|
+ }
|
|
|
+ edbList = append(edbList, item)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|