Browse Source

Merge branch 'debug' of http://8.136.199.33:3000/eta_server/eta_api into debug

kobe6258 1 month ago
parent
commit
ac2463dea9

+ 1 - 1
controllers/data_manage/chart_info.go

@@ -1463,7 +1463,7 @@ func (this *ChartInfoController) PreviewChartInfoDetail() {
 					value, err := data.MarkerLineCalculate(markerLines[i], edbList[0].DataList, chartInfo)
 					if err != nil {
 						br.Msg = "标识线配置异常"
-						br.ErrMsg = "标识线配置异常" + err.Error()
+						br.ErrMsg = "标识线配置异常," + err.Error()
 						return
 					}
 					markerLines[i].Value = value

+ 3 - 1
controllers/smart_report/smart_resource.go

@@ -167,7 +167,9 @@ func (this *SmartReportResourceController) Edit() {
 		return
 	}
 
-	cols := []string{"ImgName", "Style"}
+	cols := []string{"Type", "ImgUrl", "ImgName", "Style"}
+	item.Type = req.Type
+	item.ImgUrl = req.ImgUrl
 	item.ImgName = req.ImgName
 	item.Style = req.Style
 

+ 2 - 0
models/smart_report/smart_resource.go

@@ -107,6 +107,8 @@ func (m *SmartReportResource) GetItemsByCondition(condition string, pars []inter
 // SmartReportResourceEditReq 智能研报资源编辑请求体
 type SmartReportResourceEditReq struct {
 	ResourceId int    `description:"资源ID"`
+	Type       int    `description:"类型 1-版头 2-版尾"`
+	ImgUrl     string `description:"图片资源地址"`
 	ImgName    string `description:"图片名称"`
 	Style      string `description:"版图样式"`
 }

+ 12 - 0
services/data/chart_info.go

@@ -4386,6 +4386,10 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
 
 			for _, v := range dataTimeMap {
 				valueList := dataTimeValueMap[v]
+				if len(valueList) <= 0 {
+					err = errors.New(`数据为空`)
+					return
+				}
 				stdev := utils.CalculateStandardDeviation(valueList)
 				stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
 
@@ -4613,6 +4617,10 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 					}
 				}
 				averge = averge / float64(length)
+				if len(faloatList) <= 0 {
+					err = errors.New(`数据为空`)
+					return
+				}
 				stdev := utils.CalculateStandardDeviation(faloatList)
 				stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
 
@@ -4664,6 +4672,10 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 			}
 			averge = averge / float64(length)
 
+			if len(floatList) <= 0 {
+				err = errors.New(`数据为空`)
+				return
+			}
 			stdev := utils.CalculateStandardDeviation(floatList)
 			stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
 

+ 75 - 40
services/data/future_good/profit_chart_info.go

@@ -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)
 	// 特殊的商品期货合约(只有M+N的合约,没有固定日期的合约)
 	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 // 最大N值
 	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
+				}
 			}
 		}
 	}
 
 	// 找出所有的N值,并进行正序排列
-	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)
 
 	// todo 最后处理数据
 	tmpXDataList, newYDataList, err := handleProfitResultData(xDataList, futureGoodNameMap, yDataList, earliestDateTime, edbIdList)
@@ -208,7 +218,7 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
 }
 
 // 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, 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) {
 	// 指标数据数组(10086:{"2022-12-02":100.01,"2022-12-01":102.3})
 	//earliestDateTime time.Time
 	// ETA指标数据
@@ -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) //普通指标ID
 		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)]
 		// 最小开始的n值
 		//minN := (findDateTime.Year()-earliestDateTime.Year())*12 + int(findDateTime.Month()-earliestDateTime.Month())
 		for _, date := range dateList {
@@ -333,17 +345,20 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
 			// 用实际日期的月份作为基准,往前推12个月(2024-5-13 16:26:43修改)
 			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
+}
 // handleProfitResultData 处理成最终的结果数据
 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

+ 21 - 0
services/material/material.go

@@ -2,6 +2,7 @@ package materialService
 
 import (
 	"eta/eta_api/models"
+	aiPredictModel "eta/eta_api/models/ai_predict_model"
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/data_manage/excel"
 	"eta/eta_api/models/material"
@@ -162,6 +163,26 @@ func AddToMaterial(req material.SaveAsMaterialReq, opUserId int, opUserName stri
 		}
 
 		oldRsourceUrl = docObj.ResultImg
+	case "ai_predict_model_framework":
+		// AI预测模型框架
+		frameworkOb := new(aiPredictModel.AiPredictModelFramework)
+		framework, e := frameworkOb.GetItemById(req.ObjectId)
+		if e != nil {
+			if utils.IsErrNoRow(e) {
+				errMsg = "AI预测模型框架不存在"
+				err = fmt.Errorf("AI预测模型框架不存在")
+				return
+			}
+			errMsg = "获取AI预测模型框架失败"
+			err = e
+			return
+		}
+		if framework.FrameworkImg == "" {
+			errMsg = "AI预测模型框架封面为空"
+			err = fmt.Errorf("AI预测模型框架封面为空")
+			return
+		}
+		oldRsourceUrl = framework.FrameworkImg
 	default:
 		errMsg = "不支持的类型"
 		err = fmt.Errorf("不支持的类型")