Sfoglia il codice sorgente

Merge branch 'hotfix/future_good_fix' into debug

# Conflicts:
#	.gitignore
#	models/data_manage/chart_info.go
xyxie 6 mesi fa
parent
commit
8adc25f932

+ 1 - 2
.gitignore

@@ -7,6 +7,5 @@
 /.idea/
 /.DS_Store
 *.tar.gz
-eta_mobile.exe
-/*.exe
 *.exe
+/.vscode/

+ 2 - 1
controllers/data_manage/edb_info.go

@@ -20,11 +20,12 @@ import (
 	etaTrialService "eta/eta_mobile/services/eta_trial"
 	"eta/eta_mobile/utils"
 	"fmt"
-	"github.com/rdlucklib/rdluck_tools/paging"
 	"strconv"
 	"strings"
 	"sync"
 	"time"
+
+	"github.com/rdlucklib/rdluck_tools/paging"
 )
 
 // EdbInfoController 数据管理

+ 38 - 3
controllers/data_manage/future_good/future_good_chart_info.go

@@ -549,6 +549,9 @@ func (this *FutureGoodChartInfoController) ChartInfoAdd() {
 	resp.UniqueCode = chartInfo.UniqueCode
 	resp.ChartType = req.ChartType
 
+	chartInfo.ChartInfoId = chartInfoId
+	// 添加指标引用记录
+	//_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
 	go data.EsAddOrEditChartInfo(chartInfoId)
 
@@ -772,6 +775,9 @@ func (this *FutureGoodChartInfoController) ChartInfoEdit() {
 	resp.UniqueCode = chartItem.UniqueCode
 	resp.ChartType = req.ChartType
 
+	// 添加指标引用记录
+	//_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartItem)
+
 	//添加es数据
 	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
 	//修改my eta es数据
@@ -1303,6 +1309,10 @@ func getFutureGoodChartInfo(chartInfo *data_manage.ChartInfoView, chartType, dat
 	}
 	futureGoodEdbInfoMapping, err = data_manage.GetFutureGoodEdbChartEdbMapping(chartInfoId)
 	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "期货指标不存在"
+			return
+		}
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
 		return
@@ -1348,7 +1358,7 @@ func getFutureGoodChartInfo(chartInfo *data_manage.ChartInfoView, chartType, dat
 
 	baseEdbInfoId := barConfig.BaseEdbInfoId
 	var baseEdbInfoMapping *data_manage.ChartEdbInfoMapping
-	// todo 兼容历史数据,
+
 	if baseEdbInfoId == 0 {
 		// 默认取第一个现货指标
 		baseEdbInfoId = edbInfoMappingList[0].EdbInfoId
@@ -1678,7 +1688,7 @@ func GetChartInfoDetailFromUniqueCode(chartInfo *data_manage.ChartInfoView, isCa
 
 	baseEdbInfoId := barConfig.BaseEdbInfoId
 	var baseEdbInfoMapping *data_manage.ChartEdbInfoMapping
-	// todo 兼容历史数据,
+
 	if baseEdbInfoId == 0 {
 		// 默认取第一个现货指标
 		baseEdbInfoId = edbInfoMappingList[0].EdbInfoId
@@ -2154,7 +2164,6 @@ func (this *FutureGoodChartInfoController) BaseChartInfoDetailFromUniqueCode() {
 
 		baseEdbInfoId := barConfig.BaseEdbInfoId
 		var baseEdbInfoMapping *data_manage.ChartEdbInfoMapping
-		// todo 兼容历史数据,
 		if baseEdbInfoId == 0 {
 			// 默认取第一个现货指标
 			baseEdbInfoId = edbInfoMappingList[0].EdbInfoId
@@ -3400,6 +3409,32 @@ func (this *FutureGoodChartInfoController) BaseInfoEdit() {
 				return
 			}
 			chartItem.ExtraConfig = string(barConfigByte)
+
+			xDataByte, e := json.Marshal(xDataList)
+			if e != nil {
+				br.Msg = "商品价格曲线图配置异常"
+				br.ErrMsg = "商品价格曲线图配置异常 Err:" + e.Error()
+				return
+			}
+			//同步修改利润表扩展表
+			chartInfoFutureGoodProfit := new(future_good.ChartInfoFutureGoodProfit)
+			if e = chartInfoFutureGoodProfit.GetItemById(chartItem.ChartInfoId); e != nil {
+				br.Msg = "商品利润曲线图不存在"
+				br.ErrMsg = "商品利润曲线图查询出错 Err:" + e.Error()
+				return
+			}
+			chartInfoFutureGoodProfit.XValue = string(xDataByte)
+			// 更改扩展图表信息
+			// 查找商品利润图表的扩展信息
+			chartInfoFutureGoodProfit.ModifyTime = time.Now()
+			updateStr := []string{"ModifyTime", "XValue"}
+			err = chartInfoFutureGoodProfit.Update(updateStr)
+			if err != nil {
+				br.Msg = "商品利润曲线图更新失败"
+				br.ErrMsg = "商品利润曲线图更新失败 Err:" + e.Error()
+				return
+			}
+
 		}
 		err = data_manage.EditBaseFutureGoodProfitChartInfoAndEdbEnInfo(chartItem, &req, this.Lang)
 	default:

+ 13 - 1
controllers/data_manage/future_good/future_good_profit_chart_info.go

@@ -332,6 +332,8 @@ func (this *FutureGoodChartInfoController) ProfitChartInfoAdd() {
 	resp.UniqueCode = chartInfo.UniqueCode
 	resp.ChartType = req.ChartType
 
+	// 添加指标引用记录
+	//_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
 	go data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
 
@@ -664,6 +666,8 @@ func (this *FutureGoodChartInfoController) ProfitChartInfoEdit() {
 	resp.UniqueCode = chartItem.UniqueCode
 	resp.ChartType = req.ChartType
 
+	// 添加指标引用记录
+	//_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartItem)
 	//添加es数据
 	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
 	//修改my eta es数据
@@ -844,7 +848,15 @@ func copyProfitChartInfo(oldChartInfo *data_manage.ChartInfo, chartClassifyId in
 		br.ErrMsg = "保存商品利润图表失败,Err:" + err.Error()
 		return
 	}
-
+	// 添加指标引用记录
+	edbInfoIdArr := make([]int, 0)
+	edbInfoIdArrStr := strings.Split(oldChartInfo.EdbInfoIds, ",")
+	for _, v := range edbInfoIdArrStr {
+		i, _ := strconv.Atoi(v)
+		edbInfoIdArr = append(edbInfoIdArr, i)
+	}
+	//保存图表与指标的关系
+	//_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
 	go data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
 	//修改my eta es数据

+ 19 - 18
models/data_manage/chart_info.go

@@ -1607,6 +1607,18 @@ type SetChartInfoImageReq struct {
 	ImageUrl    string `description:"图表图片地址"`
 }
 
+type FutureChartInfoDetailFromUniqueCodeResp struct {
+	ChartInfo            *ChartInfoView
+	Status               bool `description:"true:图表存在,false:图表不存在"`
+	EdbInfoList          []*ChartEdbInfoMapping
+	XEdbIdValue          []int                     `description:"柱方图的x轴数据,指标id"`
+	YDataList            []YData                   `description:"柱方图的y轴数据"`
+	XDataList            []XData                   `description:"商品价格曲线的X轴数据"`
+	BarChartInfo         FutureGoodBarChartInfoReq `description:"柱方图的配置"`
+	CorrelationChartInfo *CorrelationInfo          `description:"相关性图表信息"`
+	DataResp             interface{}               `description:"图表数据,根据图的类型而定的,没有确定的数据格式"`
+}
+
 func EditChartInfoImage(req *SetChartInfoImageReq) (err error) {
 	o := orm.NewOrmUsingDB("data")
 
@@ -1631,17 +1643,6 @@ type ChartInfoDetailFromUniqueCodeResp struct {
 	CorrelationChartInfo *CorrelationInfo `description:"相关性图表信息"`
 	DataResp             interface{}      `description:"图表数据,根据图的类型而定的,没有确定的数据格式"`
 }
-type FutureChartInfoDetailFromUniqueCodeResp struct {
-	ChartInfo            *ChartInfoView
-	Status               bool `description:"true:图表存在,false:图表不存在"`
-	EdbInfoList          []*ChartEdbInfoMapping
-	XEdbIdValue          []int                     `description:"柱方图的x轴数据,指标id"`
-	YDataList            []YData                   `description:"柱方图的y轴数据"`
-	XDataList            []XData                   `description:"商品价格曲线的X轴数据"`
-	BarChartInfo         FutureGoodBarChartInfoReq `description:"柱方图的配置"`
-	CorrelationChartInfo *CorrelationInfo          `description:"相关性图表信息"`
-	DataResp             interface{}               `description:"图表数据,根据图的类型而定的,没有确定的数据格式"`
-}
 
 func GetChartInfoByUniqueCode(uniqueCode string) (item *ChartInfo, err error) {
 	o := orm.NewOrmUsingDB("data")
@@ -1933,6 +1934,13 @@ func ModifyChartInfoUserIdByOldUserId(oldUserIdList []int, userId int, userName
 	return
 }
 
+type FutureGoodBarChartInfoReq struct {
+	EdbInfoIdList []BarChartInfoEdbItemReq `description:"指标信息"`
+	DateList      []BarChartInfoDateReq    `description:"日期配置"`
+	XDataList     []XData                  `description:"横轴配置"`
+	BaseEdbInfoId int                      `description:"日期基准指标id"`
+}
+
 // BarChartInfoReq 柱方图预览请求数据
 type BarChartInfoReq struct {
 	EdbInfoIdList []BarChartInfoEdbItemReq `description:"指标信息"`
@@ -1944,13 +1952,6 @@ type BarChartInfoReq struct {
 	UnitEn        string                   `description:"英文单位"`
 }
 
-type FutureGoodBarChartInfoReq struct {
-	EdbInfoIdList []BarChartInfoEdbItemReq `description:"指标信息"`
-	DateList      []BarChartInfoDateReq    `description:"日期配置"`
-	XDataList     []XData                  `description:"横轴配置"`
-	BaseEdbInfoId int                      `description:"日期基准指标id"`
-}
-
 // BarChartInfoEdbItemReq 柱方图预览请求数据(指标相关)
 type BarChartInfoEdbItemReq struct {
 	EdbInfoId     int     `description:"指标ID"`

+ 5 - 3
models/data_manage/edb_info.go

@@ -7,12 +7,14 @@ import (
 	"eta/eta_mobile/services/alarm_msg"
 	"eta/eta_mobile/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
-	"github.com/rdlucklib/rdluck_tools/paging"
-	"go.mongodb.org/mongo-driver/bson"
 	"strconv"
 	"strings"
 	"time"
+
+	"go.mongodb.org/mongo-driver/bson"
+
+	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
 )
 
 type EdbInfo struct {

+ 4 - 2
models/data_manage/edb_info_calculate.go

@@ -2,10 +2,12 @@ package data_manage
 
 import (
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
-	"github.com/rdlucklib/rdluck_tools/paging"
+
 	"strings"
 	"time"
+
+	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
 )
 
 type EdbInfoCalculateSaveReq struct {

+ 1 - 0
services/data/chart_extra_config.go

@@ -15,6 +15,7 @@ import (
 
 func HandleExtraConfig(chartInfoId int, chartType int, extraConfigStr string) (newExtraConfigStr string, newAllExtraConfigStr string, err error, errMsg string) {
 	newExtraConfigStr = extraConfigStr
+
 	switch chartType {
 	case 10: // 截面散点图
 		var tmpExtraConfig data_manage.SectionScatterReq

+ 6 - 4
services/data/chart_info.go

@@ -604,6 +604,7 @@ func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate st
 	case utils.CHART_TYPE_RADAR: //雷达图
 		radarConf := extraConfig.(data_manage.RadarChartInfoReq)
 		xEdbIdValue, dataResp, err = RadarChartData(mappingList, edbDataListMap, radarConf)
+
 	}
 	return
 }
@@ -2601,7 +2602,6 @@ func AddChartInfo(req data_manage.AddChartInfoReq, sysUserId int, sysUserRealNam
 		err = errors.New("保存失败,Err:" + err.Error())
 		return
 	}
-
 	if chartType == utils.CHART_TYPE_SECTION_COMBINE {
 		err = data_manage.AddChartSeriesAndEdbMapping(allExtraConfig, int(newId))
 		if err != nil {
@@ -2970,6 +2970,7 @@ func EditChartInfo(req data_manage.EditChartInfoReq, sysUser *system.Admin, lang
 			return
 		}
 	}
+
 	//添加es数据
 	go EsAddOrEditChartInfo(chartItem.ChartInfoId)
 	//修改my eta es数据
@@ -3147,6 +3148,7 @@ func GetChartConvertEdbData(chartInfoId, chartType int, calendar, startDate, end
 
 	var extraConfig interface{}
 	switch chartType {
+
 	case 7: // 柱形图
 		var barConfig data_manage.BarChartInfoReq
 		if extraConfigStr == `` {
@@ -3798,6 +3800,9 @@ func GetChartEdbDataV2(chartInfoId, chartType int, calendar, startDate, endDate
 		for _, v := range edbList {
 			v.DataList = nil
 		}
+	case utils.CHART_TYPE_RADAR: //雷达图
+		radarConf := extraConfig.(data_manage.RadarChartInfoReq)
+		xEdbIdValue, dataResp, err = RadarChartData(mappingList, edbDataListMap, radarConf)
 	case utils.CHART_TYPE_SECTION_COMBINE: // 截面组合图
 		sectionConf := extraConfig.(data_manage.ChartSectionAllExtraConf)
 		var chartInfo *data_manage.ChartInfo
@@ -3814,9 +3819,6 @@ func GetChartEdbDataV2(chartInfoId, chartType int, calendar, startDate, endDate
 		for _, v := range edbList {
 			v.DataList = nil
 		}
-	case utils.CHART_TYPE_RADAR: //雷达图
-		radarConf := extraConfig.(data_manage.RadarChartInfoReq)
-		xEdbIdValue, dataResp, err = RadarChartData(mappingList, edbDataListMap, radarConf)
 	}
 	return
 }

+ 13 - 12
services/data/future_good/chart_info.go

@@ -114,6 +114,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 		// 寻找主力合约
 		zlFutureGoodEdbInfo, err = future_good2.GetFutureGoodEdbInfo(futureGoodEdbInfoMapping.EdbInfoId)
 		if err != nil {
+			err = fmt.Errorf("查不到期货指标,GetFutureGoodEdbInfo err: %v", err)
 			return
 		}
 		regionType = zlFutureGoodEdbInfo.RegionType
@@ -123,7 +124,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 		if zlFutureGoodEdbInfo.DateSourceId != zlFutureGoodEdbInfo.FutureGoodEdbInfoId {
 			sourceDateFutureGoodEdbInfo, tmpErr := future_good2.GetFutureGoodEdbInfo(zlFutureGoodEdbInfo.DateSourceId)
 			if tmpErr != nil {
-				err = tmpErr
+				err = fmt.Errorf("获取期货指标 %d 的日期来源的指标信息失败,错误:%s", zlFutureGoodEdbInfo.DateSourceId, tmpErr.Error())
 				return
 			}
 			latestDate = sourceDateFutureGoodEdbInfo.EndDate // 最新日期是这个
@@ -145,6 +146,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 	latestDateTime, _ := time.ParseInLocation(utils.FormatDate, latestDate, time.Local)
 	_, futureGoodEdbInfoList, err := getFutureGoodEdbInfoList(latestDateTime, tmpFutureGoodEdbInfoList, barChartInfoDateList)
 	if err != nil {
+		err = fmt.Errorf("获取期货指标列表失败,getFutureGoodEdbInfoList 错误:%s", err.Error())
 		return
 	}
 
@@ -158,7 +160,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 			EdbName:             v.FutureGoodEdbName,
 			EdbAliasName:        v.FutureGoodEdbName,
 			EdbNameEn:           v.FutureGoodEdbNameEn,
-			EdbType:             baseEdbInfoMapping.EdbType, //todo baseEdbInfoMapping
+			EdbType:             baseEdbInfoMapping.EdbType,
 			Frequency:           baseEdbInfoMapping.Frequency,
 			FrequencyEn:         baseEdbInfoMapping.FrequencyEn,
 			Unit:                baseEdbInfoMapping.Unit,
@@ -298,8 +300,9 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 		dataList := make([]*data_manage.EdbDataList, 0)
 		tmpDataList, ok := tmpDataListMap[v.EdbInfoId]
 		if !ok {
-			err = fmt.Errorf("期货数据不存在 FutureGoodEdbInfoId: %d", v.EdbInfoId)
-			return
+			/*err = fmt.Errorf("期货数据不存在 FutureGoodEdbInfoId: %d", v.EdbInfoId)
+			return*/
+			continue
 		}
 		for _, tmpData := range tmpDataList {
 			dataList = append(dataList, &data_manage.EdbDataList{
@@ -388,8 +391,8 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 
 		for i := lenEdbId - 1; i >= 0; i-- {
 			// 如果没有在无数据的指标列表中找到,那么就找到了最大x轴的下标
-			if _, ok := noDataEdbIdMap[edbInfoIdList[i]]; !ok || utils.InArrayByInt(baseEdbIds, edbInfoIdList[i]) {
-				// 如果最大x轴的下标 小于 当前下标,那么就重新赋值
+			if _, ok := noDataEdbIdMap[edbInfoIdList[i]]; !ok || utils.InArrayByInt(baseEdbIds, edbInfoIdList[i]) { //以往的逻辑是碰到第一个无数据的期货指标,那后续的月份都是无数据的,因此需要特殊处理,改成多个现货指标之后需要排除无值的现货指标
+				// 如果最大x轴的下标 小于 当前下标,那么就重新赋值
 				if maxIndex < i-1 {
 					maxIndex = i - 1
 				}
@@ -457,8 +460,7 @@ func BarChartData(baseEdbInfoMapping *data_manage.ChartEdbInfoMapping, edbInfoMa
 		}
 	}
 
-	// 期货指标数据map
-	futureGoodEdbDataMap := make(map[int]map[string]float64)
+	edbDataMap := make(map[int]map[string]float64)
 	for edbInfoId, edbDataList := range edbDataListMap {
 		if _, ok := edbInfoMappingMap[edbInfoId]; ok {
 			continue
@@ -467,7 +469,7 @@ func BarChartData(baseEdbInfoMapping *data_manage.ChartEdbInfoMapping, edbInfoMa
 		for _, edbData := range edbDataList {
 			edbDateData[edbData.DataTime] = edbData.Value
 		}
-		futureGoodEdbDataMap[edbInfoId] = edbDateData
+		edbDataMap[edbInfoId] = edbDateData
 	}
 
 	// edbIdList 指标展示顺序;x轴的指标顺序
@@ -518,7 +520,7 @@ func BarChartData(baseEdbInfoMapping *data_manage.ChartEdbInfoMapping, edbInfoMa
 
 		// 先找到基准日期
 		var realDateTime time.Time
-		realDateTime, findDataValue, isFind, tmpErr := GetNeedDateData(findDateTime, edbDataListMap[baseEdbInfoMapping.EdbInfoId], baseEdbDataMap[baseEdbInfoMapping.EdbInfoId], futureGoodEdbDataMap)
+		realDateTime, findDataValue, isFind, tmpErr := GetNeedDateData(findDateTime, edbDataListMap[baseEdbInfoMapping.EdbInfoId], baseEdbDataMap[baseEdbInfoMapping.EdbInfoId], edbDataMap)
 		if tmpErr != nil {
 			err = tmpErr
 			return
@@ -590,7 +592,7 @@ func BarChartData(baseEdbInfoMapping *data_manage.ChartEdbInfoMapping, edbInfoMa
 			//}
 			//tmpRealDateTime := findDateTime	// 按照配置找到的日期
 			tmpRealDateTime := realDateTime // 实际现货的日期
-			tmpFindDataValue, tmpIsFind := futureGoodEdbDataMap[futureGoodMapping.FutureGoodEdbInfoId][tmpRealDateTime.Format(utils.FormatDate)]
+			tmpFindDataValue, tmpIsFind := edbDataMap[futureGoodMapping.FutureGoodEdbInfoId][tmpRealDateTime.Format(utils.FormatDate)]
 			yDataMap[futureGoodMapping.FutureGoodEdbInfoId] = tmpFindDataValue
 
 			findDataList = append(findDataList, tmpFindDataValue)
@@ -680,7 +682,6 @@ func handleResultData(regionType string, futureGoodEdbType, baseEdbLen int, yDat
 			if i > maxIndex {
 				break
 			}
-			// todo x轴 内容调整
 			xDataList = append(xDataList, data_manage.XData{
 				Name:   fmt.Sprint("M+", i),
 				NameEn: fmt.Sprint("M+", i),

+ 1 - 3
services/data/future_good/profit_chart_info.go

@@ -327,8 +327,6 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
 			//findDateTime
 
 			// 获取当前日期相对开始日期的期数
-			//tmpN := (currDate.Year()-findDateTime.Year())*12 + int(currDate.Month()-findDateTime.Month())
-			// 用实际日期的月份作为基准,往前推12个月(2024-5-13 16:26:43修改)
 			tmpN := (currDate.Year()-realDateTime.Year())*12 + int(currDate.Month()-realDateTime.Month())
 			if tmpN <= 0 {
 				continue
@@ -652,7 +650,7 @@ func handleProfitResultData(xDataListInit []data_manage.XData, baseEdbInfo *data
 	}
 
 	earliestDateTime = time.Date(earliestDateTime.Year(), earliestDateTime.Month(), 1, 0, 0, 0, 0, time.Local)
-	xDataList = xDataList[0:maxI]
+	xDataList = xDataList[0 : maxI+1]
 	for yIndex, yData := range newYDataList {
 		if len(yData.XEdbInfoIdList) > maxI+1 {
 			newYDataList[yIndex].XEdbInfoIdList = yData.XEdbInfoIdList[0 : maxI+1]