|
@@ -90,6 +90,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
var zlFutureGoodEdbInfo *future_good.FutureGoodEdbInfo
|
|
|
var latestDate string
|
|
|
var regionType string
|
|
|
+ var futureGoodEdbType int
|
|
|
{
|
|
|
|
|
|
zlFutureGoodEdbInfo, err = future_good.GetFutureGoodEdbInfo(futureGoodEdbInfoMapping.EdbInfoId)
|
|
@@ -97,6 +98,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
return
|
|
|
}
|
|
|
regionType = zlFutureGoodEdbInfo.RegionType
|
|
|
+ futureGoodEdbType = zlFutureGoodEdbInfo.FutureGoodEdbType
|
|
|
|
|
|
|
|
|
if zlFutureGoodEdbInfo.DateSourceId != zlFutureGoodEdbInfo.FutureGoodEdbInfoId {
|
|
@@ -306,7 +308,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- tmpXDataList, newYDataList, err := handleResultData(regionType, yDataList, futureGoodEdbInfoList, maxIndex)
|
|
|
+ tmpXDataList, newYDataList, err := handleResultData(regionType, futureGoodEdbType, yDataList, futureGoodEdbInfoList, maxIndex)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -316,191 +318,6 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
|
|
|
func BarChartData(edbInfoMapping *models.ChartEdbInfoMapping, futureGoodMappingList []*future_good.FutureGoodEdbInfo, edbDataListMap map[int][]*models.EdbDataList, barChartInfoDateList []data_manage.BarChartInfoDateReq, regionType, latestDate string) (edbIdList []int, yDataList []models.YData, err error) {
|
|
|
|
|
@@ -586,9 +403,17 @@ func BarChartData(edbInfoMapping *models.ChartEdbInfoMapping, futureGoodMappingL
|
|
|
}
|
|
|
} else {
|
|
|
for i, v := range futureGoodMappingList {
|
|
|
- if v.Year > currYear || (v.Year == currYear && v.Month > int(currMonth)) {
|
|
|
+ if v.FutureGoodEdbType == 2 {
|
|
|
+ if i == 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
indexList = append(indexList, i)
|
|
|
- mList = append(mList, (v.Year-currYear)*12+v.Month-int(currMonth))
|
|
|
+ mList = append(mList, v.Month)
|
|
|
+ } else {
|
|
|
+ if v.Year > currYear || (v.Year == currYear && v.Month > int(currMonth)) {
|
|
|
+ indexList = append(indexList, i)
|
|
|
+ mList = append(mList, (v.Year-currYear)*12+v.Month-int(currMonth))
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -760,7 +585,7 @@ func FutureGoodChartInfoRefresh(chartInfoId int) (err error) {
|
|
|
}
|
|
|
|
|
|
|
|
|
-func handleResultData(regionType string, yDataList []models.YData, futureGoodEdbInfoList []*future_good.FutureGoodEdbInfo, maxIndex int) (xDataList []models.XData, newYDataList []models.YData, err error) {
|
|
|
+func handleResultData(regionType string, futureGoodEdbType int, yDataList []models.YData, futureGoodEdbInfoList []*future_good.FutureGoodEdbInfo, maxIndex int) (xDataList []models.XData, newYDataList []models.YData, err error) {
|
|
|
xDataList = make([]models.XData, 0)
|
|
|
newYDataList = yDataList
|
|
|
|
|
@@ -782,6 +607,89 @@ func handleResultData(regionType string, yDataList []models.YData, futureGoodEdb
|
|
|
futureGoodEdbInfoMap[v.FutureGoodEdbInfoId] = v
|
|
|
}
|
|
|
|
|
|
+ if futureGoodEdbType == 2 {
|
|
|
+ nList := []int{3, 15, 27}
|
|
|
+ for _, i := range nList {
|
|
|
+ xDataList = append(xDataList, models.XData{
|
|
|
+ Name: fmt.Sprint("M+", i),
|
|
|
+ NameEn: fmt.Sprint("M+", i),
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ for yIndex, yData := range yDataList {
|
|
|
+ newYDataList[yIndex].XEdbInfoIdList = []int{}
|
|
|
+ newYDataList[yIndex].Value = []float64{}
|
|
|
+ tmpNList := nList
|
|
|
+
|
|
|
+
|
|
|
+ newYDataList[yIndex].XEdbInfoIdList = append(newYDataList[yIndex].XEdbInfoIdList, yData.XEdbInfoIdList[0])
|
|
|
+ newYDataList[yIndex].Value = append(newYDataList[yIndex].Value, yData.Value[0])
|
|
|
+
|
|
|
+ xEdbInfoIdList := yData.XEdbInfoIdList[1:]
|
|
|
+ valIndex := 1
|
|
|
+ needNum := 0
|
|
|
+ for _, n := range tmpNList {
|
|
|
+ if len(xEdbInfoIdList) > 0 {
|
|
|
+ edbInfoId := xEdbInfoIdList[0]
|
|
|
+ futureGoodEdbInfo, ok := futureGoodEdbInfoMap[edbInfoId]
|
|
|
+ if !ok {
|
|
|
+ err = errors.New("找不到指标")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if futureGoodEdbInfo.Month == n {
|
|
|
+ if needNum > 0 {
|
|
|
+ currVal := yData.Value[valIndex]
|
|
|
+ preVal := yData.Value[valIndex-1]
|
|
|
+ hcValDeci := decimal.NewFromFloat(currVal).Sub(decimal.NewFromFloat(preVal)).Div(decimal.NewFromInt(int64(needNum + 1)))
|
|
|
+
|
|
|
+ for tmpNum := 0; tmpNum < needNum; tmpNum++ {
|
|
|
+ newYDataList[yIndex].XEdbInfoIdList = append(newYDataList[yIndex].XEdbInfoIdList, 0)
|
|
|
+
|
|
|
+
|
|
|
+ tmpVal, _ := decimal.NewFromFloat(preVal).Add(hcValDeci.Mul(decimal.NewFromInt(int64(tmpNum + 1)))).RoundCeil(4).Float64()
|
|
|
+ newYDataList[yIndex].Value = append(newYDataList[yIndex].Value, tmpVal)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ newYDataList[yIndex].XEdbInfoIdList = append(newYDataList[yIndex].XEdbInfoIdList, edbInfoId)
|
|
|
+ newYDataList[yIndex].Value = append(newYDataList[yIndex].Value, yData.Value[valIndex])
|
|
|
+ valIndex++
|
|
|
+ needNum = 0
|
|
|
+ if len(xEdbInfoIdList) > 0 {
|
|
|
+ xEdbInfoIdList = xEdbInfoIdList[1:]
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ needNum++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ maxI := 0
|
|
|
+ for _, yData := range newYDataList {
|
|
|
+ lenEdb := len(yData.XEdbInfoIdList)
|
|
|
+ for i := 0; i < lenEdb; i++ {
|
|
|
+ if yData.XEdbInfoIdList[i] != 0 && !utils.InArrayByInt(yData.NoDataEdbList, yData.XEdbInfoIdList[i]) {
|
|
|
+ if maxI < i {
|
|
|
+ maxI = i
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ xDataList = xDataList[0:maxI]
|
|
|
+ for yIndex, yData := range newYDataList {
|
|
|
+ if len(yData.XEdbInfoIdList) > maxI+1 {
|
|
|
+ newYDataList[yIndex].XEdbInfoIdList = yData.XEdbInfoIdList[0 : maxI+1]
|
|
|
+ }
|
|
|
+ if len(yData.Value) > maxI+1 {
|
|
|
+ newYDataList[yIndex].Value = yData.Value[0 : maxI+1]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
nMap := make(map[int]int)
|
|
|
|
|
|
for _, v := range yDataList {
|
|
@@ -942,13 +850,13 @@ func getFutureGoodEdbInfoList(latestDateTime time.Time, tmpFutureGoodEdbInfoList
|
|
|
|
|
|
if v.FutureGoodEdbType == 2 {
|
|
|
if v.Month <= maxM {
|
|
|
- addMonth := int(earliestDateTime.Month()) + v.Month
|
|
|
- v.Year = earliestDateTime.Year() + addMonth/12
|
|
|
- realMonth := addMonth % 12
|
|
|
- if realMonth == 0 {
|
|
|
- realMonth = 12
|
|
|
- }
|
|
|
- v.Month = realMonth
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
futureGoodEdbInfoList = append(futureGoodEdbInfoList, v)
|
|
|
}
|
|
|
continue
|