|
@@ -177,7 +177,9 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
|
|
sort.Slice(dateList, func(i, j int) bool {
|
|
sort.Slice(dateList, func(i, j int) bool {
|
|
return dateList[i] < dateList[j]
|
|
return dateList[i] < dateList[j]
|
|
})
|
|
})
|
|
|
|
+ var reqEdbInfoIds []int
|
|
for _, v := range edbInfoList {
|
|
for _, v := range edbInfoList {
|
|
|
|
+ reqEdbInfoIds = append(reqEdbInfoIds, v.EdbInfoId)
|
|
tmp := data_manage.XData{
|
|
tmp := data_manage.XData{
|
|
Name: v.EdbName,
|
|
Name: v.EdbName,
|
|
NameEn: v.EdbNameEn,
|
|
NameEn: v.EdbNameEn,
|
|
@@ -185,7 +187,8 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
|
|
xDataList = append(xDataList, tmp)
|
|
xDataList = append(xDataList, tmp)
|
|
}
|
|
}
|
|
var edbIdList []int
|
|
var edbIdList []int
|
|
- edbIdList, yDataList, err = ProfitChartChartData(baseEdbInfo, baseDataListMap, futureGoodEdbInfoDateMap, futureGoodDataListMap, chartInfoDateList, baseEdbInfo.EndDate, specialFutureGoodEdbInfoMap, formulaStr, tagEdbIdMap, dateList, maxN)
|
|
|
|
|
|
+
|
|
|
|
+ edbIdList, yDataList, err = ProfitChartChartData(baseEdbInfo, baseDataListMap, futureGoodEdbInfoDateMap, futureGoodDataListMap, chartInfoDateList, baseEdbInfo.EndDate, specialFutureGoodEdbInfoMap, formulaStr, tagEdbIdMap, dateList, maxN, reqEdbInfoIds)
|
|
|
|
|
|
// todo 最后处理数据
|
|
// todo 最后处理数据
|
|
tmpXDataList, newYDataList, err := handleProfitResultData(xDataList, baseEdbInfo, yDataList, earliestDateTime, edbIdList)
|
|
tmpXDataList, newYDataList, err := handleProfitResultData(xDataList, baseEdbInfo, yDataList, earliestDateTime, edbIdList)
|
|
@@ -204,7 +207,7 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
|
|
}
|
|
}
|
|
|
|
|
|
// ProfitChartChartData 获取数据
|
|
// ProfitChartChartData 获取数据
|
|
-func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[int][]*data_manage.EdbDataList, futureGoodEdbInfoMap map[int]map[string]*future_good.FutureGoodEdbInfo, futureGoodEdbDataListMap map[int][]*data_manage.EdbDataList, chartInfoDateList []request.ChartInfoDateReq, latestDate string, specialFutureGoodEdbInfoMap map[int]map[int]*future_good.FutureGoodEdbInfo, formulaStr string, tagEdbIdMap map[string]int, dateList []string, maxN int) (edbIdList []int, yDataList []data_manage.YData, err error) {
|
|
|
|
|
|
+func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[int][]*data_manage.EdbDataList, futureGoodEdbInfoMap map[int]map[string]*future_good.FutureGoodEdbInfo, futureGoodEdbDataListMap map[int][]*data_manage.EdbDataList, chartInfoDateList []request.ChartInfoDateReq, latestDate string, specialFutureGoodEdbInfoMap map[int]map[int]*future_good.FutureGoodEdbInfo, formulaStr string, tagEdbIdMap map[string]int, dateList []string, maxN int, reqEdbInfoIds []int) (edbIdList []int, yDataList []data_manage.YData, err error) {
|
|
// 指标数据数组(10086:{"2022-12-02":100.01,"2022-12-01":102.3})
|
|
// 指标数据数组(10086:{"2022-12-02":100.01,"2022-12-01":102.3})
|
|
//earliestDateTime time.Time
|
|
//earliestDateTime time.Time
|
|
// ETA指标数据
|
|
// ETA指标数据
|
|
@@ -261,9 +264,10 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
- findDataList := make([]float64, 0) // 当前日期的数据值
|
|
|
|
- noDataIdList := make([]int, 0) // 没有数据的指标id
|
|
|
|
- xEdbInfoIdList := make([]int, 0) // 当前数据的指标id列表
|
|
|
|
|
|
+ findDataList := make([]float64, 0) // 当前日期的数据值
|
|
|
|
+ noDataIdList := make([]int, 0) // 没有数据的指标id
|
|
|
|
+ noDataIdMap := make(map[int]int, 0) // 没有数据的指标map
|
|
|
|
+ xEdbInfoIdList := make([]int, 0) // 当前数据的指标id列表
|
|
|
|
|
|
// 现货指标
|
|
// 现货指标
|
|
index := 0
|
|
index := 0
|
|
@@ -283,10 +287,10 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
|
|
maxDate = realDateTime
|
|
maxDate = realDateTime
|
|
}
|
|
}
|
|
edbIdList = make([]int, 0) //普通指标ID
|
|
edbIdList = make([]int, 0) //普通指标ID
|
|
- for edbInfoId, baseDataList := range baseDataListMap {
|
|
|
|
|
|
+ for _, edbInfoId := range reqEdbInfoIds {
|
|
if edbInfoId == baseEdbInfo.EdbInfoId {
|
|
if edbInfoId == baseEdbInfo.EdbInfoId {
|
|
findDataList = append(findDataList, findDataValue)
|
|
findDataList = append(findDataList, findDataValue)
|
|
- yDataMap[0] = findDataValue
|
|
|
|
|
|
+ yDataMap[index] = findDataValue
|
|
xEdbInfoIdList = append(xEdbInfoIdList, edbInfoId)
|
|
xEdbInfoIdList = append(xEdbInfoIdList, edbInfoId)
|
|
edbIdList = append(edbIdList, edbInfoId)
|
|
edbIdList = append(edbIdList, edbInfoId)
|
|
index += 1
|
|
index += 1
|
|
@@ -297,10 +301,10 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
|
|
err = fmt.Errorf("指标id: %d 没有数据", edbInfoId)
|
|
err = fmt.Errorf("指标id: %d 没有数据", edbInfoId)
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- _, findDataValueTmp, _, e := GetNeedDateData(realDateTime, baseDataList, baseEdbDateDataTmp, edbDataMap)
|
|
|
|
- if e != nil {
|
|
|
|
- err = e
|
|
|
|
- return
|
|
|
|
|
|
+ findDataValueTmp, isFindTmp := baseEdbDateDataTmp[realDateTime.Format(utils.FormatDate)]
|
|
|
|
+ if !isFindTmp {
|
|
|
|
+ noDataIdList = append(noDataIdList, edbInfoId)
|
|
|
|
+ noDataIdMap[edbInfoId] = edbInfoId
|
|
}
|
|
}
|
|
findDataList = append(findDataList, findDataValueTmp)
|
|
findDataList = append(findDataList, findDataValueTmp)
|
|
yDataMap[index] = findDataValueTmp
|
|
yDataMap[index] = findDataValueTmp
|
|
@@ -380,7 +384,7 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
|
|
//计算公式异常,那么就移除该指标
|
|
//计算公式异常,那么就移除该指标
|
|
if formulaFormStr == `` {
|
|
if formulaFormStr == `` {
|
|
//removeDateList = append(removeDateList, sk)
|
|
//removeDateList = append(removeDateList, sk)
|
|
- //fmt.Println("异常了")
|
|
|
|
|
|
+ fmt.Println("异常了")
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
|
|
|
|
@@ -433,6 +437,33 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
|
|
yDate = maxDate.Format(utils.FormatDate)
|
|
yDate = maxDate.Format(utils.FormatDate)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ {
|
|
|
|
+ hasDataIndexList := make([]int, 0)
|
|
|
|
+ for dataK, edbInfoId := range xEdbInfoIdList {
|
|
|
|
+ if _, ok := noDataIdMap[edbInfoId]; !ok { // 如果是没有数据的指标id
|
|
|
|
+ hasDataIndexList = append(hasDataIndexList, dataK)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ lenHasDataIndex := len(hasDataIndexList)
|
|
|
|
+ if lenHasDataIndex > 0 {
|
|
|
|
+ for lenHasDataI := 1; lenHasDataI < lenHasDataIndex; lenHasDataI++ {
|
|
|
|
+ perK := hasDataIndexList[lenHasDataI-1] //上一个有数据的指标下标
|
|
|
|
+ currK := hasDataIndexList[lenHasDataI] //当前有数据的指标下标
|
|
|
|
+ preVal := findDataList[perK] //上一个有数据的坐标的值
|
|
|
|
+ currVal := findDataList[currK] //当前有数据的指标的值
|
|
|
|
+
|
|
|
|
+ // 环差值
|
|
|
|
+ hcValDeci := decimal.NewFromFloat(currVal).Sub(decimal.NewFromFloat(preVal)).Div(decimal.NewFromInt(int64(currK - perK)))
|
|
|
|
+ var tmpI int64
|
|
|
|
+ // 将两个中间的数据做平均值补全
|
|
|
|
+ for hcI := perK + 1; hcI < currK; hcI++ {
|
|
|
|
+ tmpI++
|
|
|
|
+ findDataList[hcI], _ = decimal.NewFromFloat(preVal).Add(hcValDeci.Mul(decimal.NewFromInt(tmpI))).RoundCeil(4).Float64()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
yDataList = append(yDataList, data_manage.YData{
|
|
yDataList = append(yDataList, data_manage.YData{
|
|
Date: yDate,
|
|
Date: yDate,
|
|
ConfigDate: realDateTime,
|
|
ConfigDate: realDateTime,
|
|
@@ -530,10 +561,14 @@ func handleProfitResultData(xDataListInit []data_manage.XData, baseEdbInfo *data
|
|
|
|
|
|
nMap := make(map[int]int)
|
|
nMap := make(map[int]int)
|
|
nList := make([]int, 0)
|
|
nList := make([]int, 0)
|
|
|
|
+ nListEdbMap := make(map[int]struct{})
|
|
for _, v := range yDataList {
|
|
for _, v := range yDataList {
|
|
for _, n := range v.XEdbInfoIdList {
|
|
for _, n := range v.XEdbInfoIdList {
|
|
if utils.InArrayByInt(allEdbInfoIds, n) {
|
|
if utils.InArrayByInt(allEdbInfoIds, n) {
|
|
- nList = append(nList, n)
|
|
|
|
|
|
+ if _, ok := nListEdbMap[n]; !ok {
|
|
|
|
+ nList = append(nList, n)
|
|
|
|
+ nListEdbMap[n] = struct{}{}
|
|
|
|
+ }
|
|
} else {
|
|
} else {
|
|
nMap[n] = n
|
|
nMap[n] = n
|
|
}
|
|
}
|
|
@@ -585,8 +620,12 @@ func handleProfitResultData(xDataListInit []data_manage.XData, baseEdbInfo *data
|
|
newYDataList[yIndex].Value = append(newYDataList[yIndex].Value, tmpVal)
|
|
newYDataList[yIndex].Value = append(newYDataList[yIndex].Value, tmpVal)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ if utils.InArrayByInt(allEdbInfoIds, currN) {
|
|
|
|
+ newYDataList[yIndex].XEdbInfoIdList = append(newYDataList[yIndex].XEdbInfoIdList, currN)
|
|
|
|
+ } else {
|
|
|
|
+ newYDataList[yIndex].XEdbInfoIdList = append(newYDataList[yIndex].XEdbInfoIdList, currN+1)
|
|
|
|
+ }
|
|
|
|
|
|
- newYDataList[yIndex].XEdbInfoIdList = append(newYDataList[yIndex].XEdbInfoIdList, currN+1)
|
|
|
|
newYDataList[yIndex].Value = append(newYDataList[yIndex].Value, yData.Value[valIndex])
|
|
newYDataList[yIndex].Value = append(newYDataList[yIndex].Value, yData.Value[valIndex])
|
|
valIndex++
|
|
valIndex++
|
|
needNum = 0
|
|
needNum = 0
|
|
@@ -626,10 +665,11 @@ func handleProfitResultData(xDataListInit []data_manage.XData, baseEdbInfo *data
|
|
|
|
|
|
nameList := make([]string, 0)
|
|
nameList := make([]string, 0)
|
|
enNameList := make([]string, 0)
|
|
enNameList := make([]string, 0)
|
|
- for _, n := range newYDataList[yIndex].XEdbInfoIdList {
|
|
|
|
- if n == 1 { // 现货价不处理
|
|
|
|
- nameList = append(nameList, baseEdbInfo.EdbName)
|
|
|
|
- enNameList = append(enNameList, baseEdbInfo.EdbNameEn)
|
|
|
|
|
|
+ for k1, n := range newYDataList[yIndex].XEdbInfoIdList {
|
|
|
|
+ if utils.InArrayByInt(allEdbInfoIds, n) { // 现货价不处理
|
|
|
|
+ tmpItem := xDataListInit[k1]
|
|
|
|
+ nameList = append(nameList, tmpItem.Name)
|
|
|
|
+ enNameList = append(enNameList, tmpItem.NameEn)
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
if n <= 0 {
|
|
if n <= 0 {
|
|
@@ -694,6 +734,7 @@ func ReplaceFormula(tagEdbIdMap map[string]int, valArr map[int]float64, formulaS
|
|
for k, v := range funMap {
|
|
for k, v := range funMap {
|
|
formulaStr = strings.Replace(formulaStr, v, k, -1)
|
|
formulaStr = strings.Replace(formulaStr, v, k, -1)
|
|
}
|
|
}
|
|
|
|
+ fmt.Println(formulaStr)
|
|
if replaceCount == len(tagEdbIdMap) {
|
|
if replaceCount == len(tagEdbIdMap) {
|
|
return formulaStr
|
|
return formulaStr
|
|
} else {
|
|
} else {
|