|
@@ -272,3 +272,177 @@ type ChartInfoDetailResp struct {
|
|
|
ChartInfo *ChartInfo
|
|
|
EdbInfoList []*ChartEdbInfoMapping
|
|
|
}
|
|
|
+
|
|
|
+//指标季度数据计算(公历转农历)
|
|
|
+func AddCalculateQuarterV5(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.Println("line 432:", ky, vy, thisYear, thisMonth)
|
|
|
+ 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)
|
|
|
+
|
|
|
+ items := new(EdbDataItems)
|
|
|
+ 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))
|
|
|
+ selectDateStr := strconv.Itoa(thisYear) + "-11" + "-30"
|
|
|
+ selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
|
|
|
+ if newDate.Before(selectDate) || newDate == selectDate {
|
|
|
+ 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.Year = preYear - 1
|
|
|
+ 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))
|
|
|
+ selectDateStr := strconv.Itoa(nextYear) + "-05" + "-31"
|
|
|
+ selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
|
|
|
+
|
|
|
+ if newDate.Before(selectDate) || newDate == selectDate {
|
|
|
+ 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
|
|
|
+}
|