|
@@ -71,7 +71,7 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
|
|
|
|
|
|
latestDate := zlFutureGoodEdbInfoList[0].EndDate
|
|
|
latestDateTime, _ := time.ParseInLocation(utils.FormatDate, latestDate, time.Local)
|
|
|
-
|
|
|
+ findDateTimeList := make([]time.Time, 0)
|
|
|
earliestDateTime := latestDateTime
|
|
|
for _, barChartInfoDate := range chartInfoDateList {
|
|
|
var findDateTime time.Time
|
|
@@ -97,14 +97,19 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
|
|
|
return
|
|
|
}
|
|
|
if findDateTime.Before(earliestDateTime) {
|
|
|
- earliestDateTime = findDateTime
|
|
|
+ earliestDateTime = findDateTime
|
|
|
}
|
|
|
+
|
|
|
+ findDateTimeList = append(findDateTimeList, findDateTime)
|
|
|
}
|
|
|
|
|
|
- monthNum := (latestDateTime.Year()-earliestDateTime.Year())*12 + int(latestDateTime.Month()-earliestDateTime.Month())
|
|
|
+ monthNumMap := make(map[string]int)
|
|
|
+ for _, findDateTimeTmp := range findDateTimeList {
|
|
|
+ monthNumMap[findDateTimeTmp.Format(utils.FormatDate)] = (latestDateTime.Year()-findDateTimeTmp.Year())*12 + int(latestDateTime.Month()-findDateTimeTmp.Month())
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- futureGoodEdbInfoDateMap := make(map[int]map[string]*future_good.FutureGoodEdbInfo)
|
|
|
+ futureGoodEdbInfoDateAllMap := make(map[int]map[string]map[string]*future_good.FutureGoodEdbInfo)
|
|
|
futureGoodDataListMap := make(map[int][]*data_manage.EdbDataList, 0)
|
|
|
|
|
|
specialFutureGoodEdbInfoMap := make(map[int]map[int]*future_good.FutureGoodEdbInfo, 0)
|
|
@@ -117,7 +122,7 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- nMap := make(map[string]string)
|
|
|
+ nAllMap := make(map[string][]string)
|
|
|
var maxN int
|
|
|
for _, v := range zlFutureGoodEdbInfoList {
|
|
|
|
|
@@ -131,53 +136,58 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- childFutureGoodEdbInfoMap, tmpMaxN, tmpErr := getProfitFutureGoodEdbInfoList(earliestDateTime, v, tmpFutureGoodEdbInfoList, isAllChina, monthNum)
|
|
|
+ childFutureGoodEdbInfoAllMap, tmpMaxN, tmpErr := GetProfitFutureGoodEdbInfoList(findDateTimeList, v, tmpFutureGoodEdbInfoList, isAllChina, monthNumMap)
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
if maxN < tmpMaxN {
|
|
|
maxN = tmpMaxN
|
|
|
}
|
|
|
- futureGoodEdbInfoDateMap[v.FutureGoodEdbInfoId] = childFutureGoodEdbInfoMap
|
|
|
+
|
|
|
+ futureGoodEdbInfoDateAllMap[v.FutureGoodEdbInfoId] = childFutureGoodEdbInfoAllMap
|
|
|
|
|
|
if v.FutureGoodEdbType == 2 {
|
|
|
specialFutureGoodEdbInfoMap[v.FutureGoodEdbInfoId] = make(map[int]*future_good.FutureGoodEdbInfo)
|
|
|
}
|
|
|
|
|
|
- for date, childFutureGoodEdbInfo := range childFutureGoodEdbInfoMap {
|
|
|
- nMap[date] = date
|
|
|
- dataList := make([]*data_manage.EdbDataList, 0)
|
|
|
-
|
|
|
- tmpDataList, tmpErr := future_good.GetFutureGoodEdbDataListByDate(childFutureGoodEdbInfo.FutureGoodEdbInfoId, "", "")
|
|
|
- if tmpErr != nil {
|
|
|
- return
|
|
|
- }
|
|
|
- for _, tmpData := range tmpDataList {
|
|
|
- dataList = append(dataList, &data_manage.EdbDataList{
|
|
|
- EdbDataId: tmpData.FutureGoodEdbDataId,
|
|
|
- EdbInfoId: tmpData.FutureGoodEdbInfoId,
|
|
|
- DataTime: tmpData.DataTime.Format(utils.FormatDate),
|
|
|
- DataTimestamp: tmpData.DataTimestamp,
|
|
|
- Value: tmpData.Close,
|
|
|
- })
|
|
|
- }
|
|
|
- futureGoodDataListMap[childFutureGoodEdbInfo.FutureGoodEdbInfoId] = dataList
|
|
|
-
|
|
|
- if childFutureGoodEdbInfo.FutureGoodEdbType == 2 {
|
|
|
- specialFutureGoodEdbInfoMap[v.FutureGoodEdbInfoId][childFutureGoodEdbInfo.Month] = childFutureGoodEdbInfo
|
|
|
+ for findDateTime, childFutureGoodEdbInfo := range childFutureGoodEdbInfoAllMap {
|
|
|
+ for date, childFutureGoodEdbInfo := range childFutureGoodEdbInfo {
|
|
|
+ nAllMap[findDateTime] = append(nAllMap[findDateTime], date)
|
|
|
+ dataList := make([]*data_manage.EdbDataList, 0)
|
|
|
+ if _, ok := futureGoodDataListMap[childFutureGoodEdbInfo.FutureGoodEdbInfoId]; !ok {
|
|
|
+ tmpDataList, tmpErr := future_good.GetFutureGoodEdbDataListByDate(childFutureGoodEdbInfo.FutureGoodEdbInfoId, "", "")
|
|
|
+ if tmpErr != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, tmpData := range tmpDataList {
|
|
|
+ dataList = append(dataList, &data_manage.EdbDataList{
|
|
|
+ EdbDataId: tmpData.FutureGoodEdbDataId,
|
|
|
+ EdbInfoId: tmpData.FutureGoodEdbInfoId,
|
|
|
+ DataTime: tmpData.DataTime.Format(utils.FormatDate),
|
|
|
+ DataTimestamp: tmpData.DataTimestamp,
|
|
|
+ Value: tmpData.Close,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ futureGoodDataListMap[childFutureGoodEdbInfo.FutureGoodEdbInfoId] = dataList
|
|
|
+ }
|
|
|
+ if childFutureGoodEdbInfo.FutureGoodEdbType == 2 {
|
|
|
+ specialFutureGoodEdbInfoMap[v.FutureGoodEdbInfoId][childFutureGoodEdbInfo.Month] = childFutureGoodEdbInfo
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
- dateList := make([]string, 0)
|
|
|
- for _, n := range nMap {
|
|
|
- dateList = append(dateList, n)
|
|
|
+ dateListMap := make(map[string][]string, 0)
|
|
|
+ for key, dateList := range nAllMap {
|
|
|
+ sort.Slice(dateList, func(i, j int) bool {
|
|
|
+ return dateList[i] < dateList[j]
|
|
|
+ })
|
|
|
+ dateListMap[key] = dateList
|
|
|
}
|
|
|
- sort.Slice(dateList, func(i, j int) bool {
|
|
|
- return dateList[i] < dateList[j]
|
|
|
- })
|
|
|
+
|
|
|
var reqEdbInfoIds []int
|
|
|
for _, v := range edbInfoList {
|
|
|
reqEdbInfoIds = append(reqEdbInfoIds, v.EdbInfoId)
|
|
@@ -189,7 +199,7 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
|
|
|
}
|
|
|
var edbIdList []int
|
|
|
futureGoodNameMap := make(map[int]map[int]string)
|
|
|
- edbIdList, yDataList, futureGoodNameMap, err = ProfitChartChartData(baseEdbInfo, baseDataListMap, futureGoodEdbInfoDateMap, futureGoodDataListMap, chartInfoDateList, baseEdbInfo.EndDate, specialFutureGoodEdbInfoMap, formulaStr, tagEdbIdMap, dateList, maxN, reqEdbInfoIds)
|
|
|
+ edbIdList, yDataList, futureGoodNameMap, err = ProfitChartChartData(baseEdbInfo, baseDataListMap, futureGoodEdbInfoDateAllMap, futureGoodDataListMap, chartInfoDateList, baseEdbInfo.EndDate, specialFutureGoodEdbInfoMap, formulaStr, tagEdbIdMap, dateListMap, maxN, reqEdbInfoIds)
|
|
|
|
|
|
|
|
|
tmpXDataList, newYDataList, err := handleProfitResultData(xDataList, futureGoodNameMap, yDataList, earliestDateTime, edbIdList)
|
|
@@ -208,7 +218,7 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
|
|
|
}
|
|
|
|
|
|
|
|
|
-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, futureGoodNameMap map[int]map[int]string, err error) {
|
|
|
+func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[int][]*data_manage.EdbDataList, futureGoodEdbInfoAllMap map[int]map[string]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, dateListMap map[string][]string, maxN int, reqEdbInfoIds []int) (edbIdList []int, yDataList []data_manage.YData, futureGoodNameMap map[int]map[int]string, err error) {
|
|
|
|
|
|
|
|
|
|
|
@@ -287,6 +297,7 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
|
|
|
if isFind {
|
|
|
maxDate = realDateTime
|
|
|
}
|
|
|
+ fmt.Println("findDateTime", findDateTime, "realDateTime", realDateTime, "findDataValue", findDataValue, "isFind", isFind)
|
|
|
edbIdList = make([]int, 0)
|
|
|
for _, edbInfoId := range reqEdbInfoIds {
|
|
|
if edbInfoId == baseEdbInfo.EdbInfoId {
|
|
@@ -318,6 +329,7 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
|
|
|
mList := make([]int, 0)
|
|
|
|
|
|
tmpNameMap := make(map[int]string)
|
|
|
+ dateList := dateListMap[findDateTime.Format(utils.FormatDate)]
|
|
|
|
|
|
|
|
|
for _, date := range dateList {
|
|
@@ -333,17 +345,20 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
|
|
|
|
|
|
tmpN := (currDate.Year()-realDateTime.Year())*12 + int(currDate.Month()-realDateTime.Month())
|
|
|
if tmpN <= 0 {
|
|
|
+ fmt.Println("realDateTime跳出循环",realDateTime,"tmpN", tmpN, "currDate", currDate, "realDateTime", realDateTime)
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
|
|
|
if tmpN >= maxN {
|
|
|
+ fmt.Println("realDateTime跳出循环",realDateTime,"tmpN >= maxN",tmpN, "maxN", maxN)
|
|
|
break
|
|
|
}
|
|
|
|
|
|
zlAndChildEdbId := make(map[int]int)
|
|
|
childFutureGoodEdbInfoIdList := make([]int, 0)
|
|
|
- for zlFutureGoodEdbInfoId, futureGoodEdbInfoList := range futureGoodEdbInfoMap {
|
|
|
+ for zlFutureGoodEdbInfoId, futureGoodEdbInfoListMap := range futureGoodEdbInfoAllMap {
|
|
|
+ futureGoodEdbInfoList := futureGoodEdbInfoListMap[findDateTime.Format(utils.FormatDate)]
|
|
|
|
|
|
if childFutureGoodEdbInfoIdMap, ok := specialFutureGoodEdbInfoMap[zlFutureGoodEdbInfoId]; ok {
|
|
|
if childFutureGoodEdbInfo, ok2 := childFutureGoodEdbInfoIdMap[tmpN]; ok2 {
|
|
@@ -366,10 +381,14 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
|
|
|
|
|
|
calculateMap := make(map[int]float64)
|
|
|
for _, childFutureGoodEdbInfoId := range childFutureGoodEdbInfoIdList {
|
|
|
+ fmt.Println("查找childFutureGoodEdbInfoId", childFutureGoodEdbInfoId,"日期为", realDateTime.Format(utils.FormatDate), "的值")
|
|
|
tmpFindDataValue, tmpIsFind := edbDataMap[childFutureGoodEdbInfoId][realDateTime.Format(utils.FormatDate)]
|
|
|
-
|
|
|
+
|
|
|
if tmpIsFind && tmpFindDataValue != 0 {
|
|
|
calculateMap[childFutureGoodEdbInfoId] = tmpFindDataValue
|
|
|
+ fmt.Println("已找到tmpFindDataValue", tmpFindDataValue, "tmpIsFind", tmpIsFind)
|
|
|
+ } else {
|
|
|
+ fmt.Println("未找到tmpFindDataValue", tmpFindDataValue, "tmpIsFind", tmpIsFind)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -381,8 +400,8 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
|
|
|
|
|
|
for tag, zlEdbId := range tagEdbIdMap {
|
|
|
if tag == "A" {
|
|
|
- nameTmp := strings.Split(futureGoodEdbInfoMap[zlEdbId][date].FutureGoodEdbName, "(")
|
|
|
- nameTmpEn := strings.Split(futureGoodEdbInfoMap[zlEdbId][date].FutureGoodEdbNameEn, "(")
|
|
|
+ nameTmp := strings.Split(futureGoodEdbInfoAllMap[zlEdbId][findDateTime.Format(utils.FormatDate)][date].FutureGoodEdbName, "(")
|
|
|
+ nameTmpEn := strings.Split(futureGoodEdbInfoAllMap[zlEdbId][findDateTime.Format(utils.FormatDate)][date].FutureGoodEdbNameEn, "(")
|
|
|
if len(nameTmp) > 1 && len(nameTmpEn) > 1 {
|
|
|
nameTmp[1] = strings.Trim(nameTmp[1], ")")
|
|
|
nameTmpEn[1] = strings.Trim(nameTmpEn[1], ")")
|
|
@@ -574,6 +593,22 @@ func getProfitFutureGoodEdbInfoList(earliestDateTime time.Time, zlFutureGoodEdbI
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+func GetProfitFutureGoodEdbInfoList(earliestDateTimeList []time.Time, zlFutureGoodEdbInfo *future_good.FutureGoodEdbInfo, tmpFutureGoodEdbInfoList []*future_good.FutureGoodEdbInfo, isAllChina bool, monthNumMap map[string]int) (futureGoodEdbInfoDateAllMap map[string]map[string]*future_good.FutureGoodEdbInfo, newMaxN int, err error) {
|
|
|
+ futureGoodEdbInfoDateAllMap = make(map[string]map[string]*future_good.FutureGoodEdbInfo)
|
|
|
+ for _, earliestDateTime := range earliestDateTimeList {
|
|
|
+ futureGoodEdbInfoDateMap := make(map[string]*future_good.FutureGoodEdbInfo)
|
|
|
+ var newMaxNTmp int
|
|
|
+ futureGoodEdbInfoDateMap, newMaxNTmp, err = getProfitFutureGoodEdbInfoList(earliestDateTime, zlFutureGoodEdbInfo, tmpFutureGoodEdbInfoList, isAllChina, monthNumMap[earliestDateTime.Format(utils.FormatYearMonthDate)])
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if newMaxN < newMaxNTmp {
|
|
|
+ newMaxN = newMaxNTmp
|
|
|
+ }
|
|
|
+ futureGoodEdbInfoDateAllMap[earliestDateTime.Format(utils.FormatDate)] = futureGoodEdbInfoDateMap
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
|
|
|
func handleProfitResultData(xDataListInit []data_manage.XData, futureNameMap map[int]map[int]string, yDataList []data_manage.YData, earliestDateTime time.Time, allEdbInfoIds []int) (xDataList []data_manage.XData, newYDataList []data_manage.YData, err error) {
|
|
|
newYDataList = yDataList
|