浏览代码

Merge branch 'hotfix/fix_chart_season' into debug

xyxie 1 年之前
父节点
当前提交
7a597ee80e
共有 2 个文件被更改,包括 176 次插入4 次删除
  1. 172 0
      models/data_manage/edb_data_quarter.go
  2. 4 4
      services/data/chart_info.go

+ 172 - 0
models/data_manage/edb_data_quarter.go

@@ -474,6 +474,8 @@ func AddCalculateQuarterV4(dataList []*EdbDataList) (result *EdbDataResult, err
 			}
 			day := currentYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
 
+			fmt.Println("day:", day, currentYearCjglDate, preYearCjglDate)
+
 			items := new(EdbDataItems)
 			items.BetweenDay = int(day) //公历日期换算成农历,需要减除的天数
 			items.Year = preYear
@@ -570,6 +572,176 @@ func AddCalculateQuarterV4(dataList []*EdbDataList) (result *EdbDataResult, err
 	return
 }
 
+// AddCalculateQuarterV6 指标季度数据计算(季节性图表)
+func AddCalculateQuarterV6(dataList []*EdbDataList) (result *EdbDataResult, err error) {
+	var errMsg string
+	defer func() {
+		if errMsg != "" {
+			fmt.Println("errMsg:", errMsg)
+		}
+	}()
+
+	endDate := dataList[len(dataList)-1].DataTime
+	endDateForm, err := time.Parse(utils.FormatDate, endDate)
+	if err != nil {
+		return result, err
+	}
+	thisMonth := int(endDateForm.Month())
+
+	result = new(EdbDataResult)
+	var yearArr []int
+	yearMap := make(map[int]int)
+	var cureentDate time.Time
+	if thisMonth < 11 {
+		for k, v := range dataList {
+			dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
+			if err != nil {
+				errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
+				return result, err
+			}
+			if k == len(dataList)-1 {
+				cureentDate = dateTime
+			}
+			year := dateTime.Year()
+			if _, ok := yearMap[year]; !ok {
+				yearArr = append(yearArr, year)
+			}
+			yearMap[year] = year
+		}
+	} else {
+		for k, v := range dataList {
+			dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
+			if err != nil {
+				errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
+				return result, err
+			}
+			if k == len(dataList)-1 {
+				cureentDate = dateTime
+			}
+			year := dateTime.Year() + 1
+			if _, ok := yearMap[year]; !ok {
+				yearArr = append(yearArr, year)
+			}
+			yearMap[year] = year
+		}
+	}
+	//排序
+	fmt.Println("yearArr:", yearArr)
+	thisYear := cureentDate.Year()
+	//thisMonth := int(cureentDate.Month())
+
+	fmt.Println("thisMonth:", thisMonth)
+	for ky, vy := range yearArr {
+		fmt.Printf("line 432:ky:%d, vy:%d, thisYear:%d, thisMonth:%d", ky, vy, thisYear, thisMonth)
+		fmt.Println("")
+		if thisMonth < 11 {
+			currentYearCjnl := strconv.Itoa(thisYear) + "-01-01"               //当前年份春节农历
+			currentYearCjgl := solarlunar.LunarToSolar(currentYearCjnl, false) //当前年份春节公历
+			currentYearCjglDate, err := time.Parse(utils.FormatDate, currentYearCjgl)
+			if err != nil {
+				errMsg = "生成当前春节失败,Err:" + err.Error()
+				return result, err
+			}
+
+			preYear := vy
+			preYearCjnl := strconv.Itoa(preYear) + "-01-01"            //之前年份春节农历
+			preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
+			preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
+			if err != nil {
+				errMsg = "生成历史年份春节失败,Err:" + err.Error()
+				return result, err
+			}
+			day := currentYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
+
+			fmt.Println("day:", day, currentYearCjglDate, preYearCjglDate)
+
+			items := new(EdbDataItems)
+			items.BetweenDay = int(day) //公历日期换算成农历,需要减除的天数
+			items.Year = preYear
+			for _, v := range dataList {
+				dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
+				if err != nil {
+					errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
+					return result, err
+				}
+				newDate := dateTime.AddDate(0, 0, int(day))
+				timestamp := newDate.UnixNano() / 1e6
+				item := new(EdbDataList)
+				item.DataTime = newDate.Format(utils.FormatDate)
+				item.EdbInfoId = v.EdbInfoId
+				item.Value = v.Value
+				item.EdbDataId = v.EdbDataId
+				item.DataTimestamp = timestamp
+				items.Items = append(items.Items, item)
+			}
+			result.List = append(result.List, items)
+		} else {
+			nextYear := thisYear + 1
+			nextYearCjnl := strconv.Itoa(nextYear) + "-01-01"            //当前年份春节农历
+			nextYearCjgl := solarlunar.LunarToSolar(nextYearCjnl, false) //当前年份春节公历
+
+			nextYearCjglDate, err := time.Parse(utils.FormatDate, nextYearCjgl)
+			if err != nil {
+				errMsg = "生成当前春节失败,Err:" + err.Error()
+				return result, err
+			}
+			preYear := vy
+			preYearCjnl := strconv.Itoa(preYear) + "-01-01"            //之前年份春节农历
+			preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
+			preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
+			if err != nil {
+				errMsg = "生成历史年份春节失败,Err:" + err.Error()
+				return result, err
+			}
+			day := nextYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
+
+			fmt.Println("day:", day, nextYearCjglDate, preYearCjglDate)
+
+			items := new(EdbDataItems)
+			items.BetweenDay = int(day) //公历日期换算成农历,需要减除的天数
+			items.Year = preYear
+			fmt.Println("preYear:", preYear, "ky:", ky, "yearArrLen:", len(yearArr))
+			//if ky+1 < len(yearArr) {
+			for _, v := range dataList {
+				dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
+				if err != nil {
+					errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
+					return result, err
+				}
+				newDate := dateTime.AddDate(0, 0, int(day))
+				timestamp := newDate.UnixNano() / 1e6
+				item := new(EdbDataList)
+				item.DataTime = newDate.Format(utils.FormatDate)
+				item.EdbInfoId = v.EdbInfoId
+				item.Value = v.Value
+				item.EdbDataId = v.EdbDataId
+				item.DataTimestamp = timestamp
+				items.Items = append(items.Items, item)
+			}
+			result.List = append(result.List, items)
+			/*} else {
+				for _, v := range dataList {
+					dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
+					if err != nil {
+						errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
+						return result, err
+					}
+					timestamp := dateTime.UnixNano() / 1e6
+					item := new(EdbDataList)
+					item.DataTime = dateTime.Format(utils.FormatDate)
+					item.EdbInfoId = v.EdbInfoId
+					item.Value = v.Value
+					item.EdbDataId = v.EdbDataId
+					item.DataTimestamp = timestamp
+					items.Items = append(items.Items, item)
+				}
+				result.List = append(result.List, items)
+			}*/
+		}
+	}
+	return
+}
+
 // AddCalculateQuarterV4ByUniqueCode 指标季度数据计算(公历转农历)
 func AddCalculateQuarterV4ByUniqueCode(dataList []*EdbDataListByUniqueCode) (result *EdbDataResult, err error) {
 	var errMsg string

+ 4 - 4
services/data/chart_info.go

@@ -759,7 +759,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
 					result := new(data_manage.EdbDataResult)
 					item.DataList = result
 				} else {
-					result, tmpErr := data_manage.AddCalculateQuarterV4(dataList)
+					result, tmpErr := data_manage.AddCalculateQuarterV6(dataList)
 					if tmpErr != nil {
 						err = errors.New("获取农历数据失败,Err:" + tmpErr.Error())
 						return
@@ -1096,7 +1096,7 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data_manage.EdbDataResult, late
 
 	//判断哪些点应该落在同一条时间线上
 	maxY := lastDateT.Year()
-	if lastDateT.Month() >= 11 {
+	if lastDateT.Month() >= 11 && jumpYear == 1 {
 		maxY = maxY + 1
 	}
 	endTmp := fmt.Sprintf("%d-%s", maxY, xEndDate)
@@ -1110,9 +1110,9 @@ func GetSeasonEdbInfoDataListByXDateNong(result *data_manage.EdbDataResult, late
 
 	for name, dateItem := range dataMap {
 		lv, ok1 := yearDataListMap[dateItem.EndDate.Year()]
-		if dateItem.EndDate.Year() > lastDateT.Year() {
+		/*if dateItem.EndDate.Year() > lastDateT.Year() {
 			lv, ok1 = yearDataListMap[dateItem.StartDate.Year()]
-		}
+		}*/
 		if !ok1 {
 			continue
 		}