Explorar o código

fix:期货数据库

Roc hai 1 mes
pai
achega
2f4af5d1c5

+ 3 - 3
controllers/data_manage/future_good/future_good_edb_info.go

@@ -66,7 +66,7 @@ func (this *FutureGoodEdbInfoController) FutureGoodEdbInfoList() {
 		return
 	}
 	if len(list) <= 0 {
-		list = make([]*future_good2.FutureGoodEdbInfo, 0)
+		list = make([]*future_good2.FutureGoodEdbInfoView, 0)
 	}
 
 	br.Ret = 200
@@ -161,7 +161,7 @@ func (this *FutureGoodEdbInfoController) FutureGoodEdbInfoDataList() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
-	futureGoodEdbInfoMap := make(map[int]*future_good2.FutureGoodEdbInfo)
+	futureGoodEdbInfoMap := make(map[int]*future_good2.FutureGoodEdbInfoView)
 	for _, v := range futureGoodEdbInfoList {
 		futureGoodEdbInfoMap[v.FutureGoodEdbInfoId] = v
 	}
@@ -225,7 +225,7 @@ func (this *FutureGoodEdbInfoController) FutureGoodEdbInfoGroupList() {
 		return
 	}
 	if len(list) <= 0 {
-		list = make([]*future_good2.FutureGoodEdbInfo, 0)
+		list = make([]*future_good2.FutureGoodEdbInfoView, 0)
 	}
 
 	resp := []future_good2.FutureGoodEdbInfoGroupListResp{

+ 6 - 6
controllers/data_manage/future_good/future_good_profit_chart_info.go

@@ -155,8 +155,8 @@ func (this *FutureGoodChartInfoController) ProfitChartInfoAdd() {
 	}
 
 	// 期货商品指标(主力合约)
-	futureGoodEdbInfoMap := make(map[int]*future_good.FutureGoodEdbInfo)
-	zlFutureGoodEdbInfoList := make([]*future_good.FutureGoodEdbInfo, 0)
+	futureGoodEdbInfoMap := make(map[int]*future_good.FutureGoodEdbInfoView)
+	zlFutureGoodEdbInfoList := make([]*future_good.FutureGoodEdbInfoView, 0)
 	for _, v := range extraReq.FutureGoodEdbInfoIdList {
 		if _, ok := futureGoodEdbInfoMap[v.EdbInfoId]; ok {
 			continue
@@ -510,8 +510,8 @@ func (this *FutureGoodChartInfoController) ProfitChartInfoEdit() {
 	}
 
 	// 期货商品指标(主力合约)
-	futureGoodEdbInfoMap := make(map[int]*future_good.FutureGoodEdbInfo)
-	zlFutureGoodEdbInfoList := make([]*future_good.FutureGoodEdbInfo, 0)
+	futureGoodEdbInfoMap := make(map[int]*future_good.FutureGoodEdbInfoView)
+	zlFutureGoodEdbInfoList := make([]*future_good.FutureGoodEdbInfoView, 0)
 	for _, v := range extraReq.FutureGoodEdbInfoIdList {
 		if _, ok := futureGoodEdbInfoMap[v.EdbInfoId]; ok {
 			continue
@@ -920,8 +920,8 @@ func (this *FutureGoodChartInfoController) PreviewProfitChartInfo() {
 		return
 	}
 	// 商品数据库指标
-	futureGoodEdbInfoMap := make(map[int]*future_good.FutureGoodEdbInfo)
-	zlFutureGoodEdbInfoList := make([]*future_good.FutureGoodEdbInfo, 0)
+	futureGoodEdbInfoMap := make(map[int]*future_good.FutureGoodEdbInfoView)
+	zlFutureGoodEdbInfoList := make([]*future_good.FutureGoodEdbInfoView, 0)
 	for _, v := range req.FutureGoodEdbInfoIdList {
 		if _, ok := futureGoodEdbInfoMap[v.EdbInfoId]; ok {
 			continue

+ 12 - 2
models/data_manage/edb_terminal.go

@@ -125,10 +125,20 @@ func GetEdbTerminalByTerminalCode(terminalCode string) (item *EdbTerminal, err e
 	return
 }
 
-func GetEdbTerminalList() (item []*EdbTerminalItem, err error) {
+func GetEdbTerminalList() (items []*EdbTerminalItem, err error) {
+	var ormList []*EdbTerminal
+	items = make([]*EdbTerminalItem, 0)
+
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM edb_terminal ORDER BY terminal_id ASC`
-	_, err = o.Raw(sql).QueryRows(&item)
+	_, err = o.Raw(sql).QueryRows(&ormList)
+	if err != nil {
+		return
+	}
+	for _, ormItem := range ormList {
+		items = append(items, ormItem.toView())
+	}
+
 	return
 }
 

+ 128 - 18
models/data_manage/future_good/future_good_edb_info.go

@@ -1,6 +1,7 @@
 package future_good
 
 import (
+	"eta/eta_api/utils"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
@@ -19,8 +20,8 @@ type FutureGoodEdbInfo struct {
 	DateSourceId        int       `description:"画图时,日期来源的指标id"`
 	Year                int       `description:"所属年份"`
 	Month               int       `description:"所属月份"`
-	StartDate           string    `description:"起始日期"`
-	EndDate             string    `description:"终止日期"`
+	StartDate           time.Time `description:"起始日期"`
+	EndDate             time.Time `description:"终止日期"`
 	MinValue            float64   `description:"最小值"`
 	MaxValue            float64   `description:"最大值"`
 	LatestValue         float64   `description:"数据最新的值"`
@@ -30,57 +31,156 @@ type FutureGoodEdbInfo struct {
 	ModifyTime          time.Time
 }
 
+// FutureGoodEdbInfoView 显示返回
+type FutureGoodEdbInfoView struct {
+	FutureGoodEdbInfoId int     `orm:"column(future_good_edb_info_id);pk;auto"`
+	FutureGoodEdbCode   string  `description:"期货指标code"`
+	FutureGoodEdbName   string  `description:"期货指标名称"`
+	FutureGoodEdbNameEn string  `description:"期货指标英文名称"`
+	ParentId            int     `description:"上级期货id"`
+	RegionType          string  `description:"交易所来源,海外还是国内"`
+	Exchange            string  `description:"所属交易所"`
+	ExchangeEn          string  `description:"所属交易所(英文名称)"`
+	FutureGoodEdbType   int     `description:"指标类型,1:年月是固定的合约;2:只有M+N期的合约,未固定年月"`
+	DateSourceId        int     `description:"画图时,日期来源的指标id"`
+	Year                int     `description:"所属年份"`
+	Month               int     `description:"所属月份"`
+	StartDate           string  `description:"起始日期"`
+	EndDate             string  `description:"终止日期"`
+	MinValue            float64 `description:"最小值"`
+	MaxValue            float64 `description:"最大值"`
+	LatestValue         float64 `description:"数据最新的值"`
+	LatestDate          string  `description:"数据最新的日期"`
+	ServerUrl           string  `description:"服务器地址"`
+	CreateTime          string
+	ModifyTime          string
+}
+
+func (m *FutureGoodEdbInfo) ToView() *FutureGoodEdbInfoView {
+	return &FutureGoodEdbInfoView{
+		FutureGoodEdbInfoId: m.FutureGoodEdbInfoId,
+		FutureGoodEdbCode:   m.FutureGoodEdbCode,
+		FutureGoodEdbName:   m.FutureGoodEdbName,
+		FutureGoodEdbNameEn: m.FutureGoodEdbNameEn,
+		ParentId:            m.ParentId,
+		RegionType:          m.RegionType,
+		Exchange:            m.Exchange,
+		ExchangeEn:          m.ExchangeEn,
+		FutureGoodEdbType:   m.FutureGoodEdbType,
+		DateSourceId:        m.DateSourceId,
+		Year:                m.Year,
+		Month:               m.Month,
+		StartDate:           m.StartDate.Format(utils.FormatDate),
+		EndDate:             m.EndDate.Format(utils.FormatDate),
+		MinValue:            m.MinValue,
+		MaxValue:            m.MaxValue,
+		LatestValue:         m.LatestValue,
+		LatestDate:          m.LatestDate.Format(utils.FormatDate),
+		ServerUrl:           m.ServerUrl,
+		CreateTime:          m.CreateTime.Format(utils.FormatDateTime),
+		ModifyTime:          m.ModifyTime.Format(utils.FormatDateTime),
+	}
+}
+
 // GetFutureGoodEdbInfo 期货指标
-func GetFutureGoodEdbInfo(edbInfoId int) (item *FutureGoodEdbInfo, err error) {
+func GetFutureGoodEdbInfo(edbInfoId int) (item *FutureGoodEdbInfoView, err error) {
+	var itemOrm *FutureGoodEdbInfo
 	o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info WHERE future_good_edb_info_id = ? `
 	sql += ` ORDER BY future_good_edb_info_id DESC `
-	err = o.Raw(sql, edbInfoId).QueryRow(&item)
+	err = o.Raw(sql, edbInfoId).QueryRow(&itemOrm)
+	if err != nil {
+		return
+	}
+	item = itemOrm.ToView()
+
 	return
 }
 
 // GetFutureGoodEdbInfoByCode 根据期货code获取 期货指标信息
-func GetFutureGoodEdbInfoByCode(futureGoodEdbCode string) (item *FutureGoodEdbInfo, err error) {
+func GetFutureGoodEdbInfoByCode(futureGoodEdbCode string) (item *FutureGoodEdbInfoView, err error) {
+	var itemOrm *FutureGoodEdbInfo
 	o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info WHERE future_good_edb_code = ? `
 	sql += ` ORDER BY future_good_edb_info_id DESC `
-	err = o.Raw(sql, futureGoodEdbCode).QueryRow(&item)
+	err = o.Raw(sql, futureGoodEdbCode).QueryRow(&itemOrm)
+	if err != nil {
+		return
+	}
+	item = itemOrm.ToView()
+
 	return
 }
 
 // GetFutureGoodEdbInfoList 获取指标数据列表
-func GetFutureGoodEdbInfoList(condition string, pars []interface{}) (list []*FutureGoodEdbInfo, err error) {
+func GetFutureGoodEdbInfoList(condition string, pars []interface{}) (items []*FutureGoodEdbInfoView, err error) {
+	var ormList []*FutureGoodEdbInfo
+	items = make([]*FutureGoodEdbInfoView, 0)
 	o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
 	sql += ` ORDER BY future_good_edb_info_id DESC `
-	_, err = o.Raw(sql, pars).QueryRows(&list)
+	_, err = o.Raw(sql, pars).QueryRows(&ormList)
+	if err != nil {
+		return
+	}
+	for _, ormItem := range ormList {
+		items = append(items, ormItem.ToView())
+	}
+
 	return
 }
 
 // GetAllFutureGoodEdbInfoList 获取指标数据列表
-func GetAllFutureGoodEdbInfoList() (list []*FutureGoodEdbInfo, err error) {
+func GetAllFutureGoodEdbInfoList() (items []*FutureGoodEdbInfoView, err error) {
+	var ormList []*FutureGoodEdbInfo
+	items = make([]*FutureGoodEdbInfoView, 0)
 	o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info  ORDER BY future_good_edb_info_id DESC `
-	_, err = o.Raw(sql).QueryRows(&list)
+	_, err = o.Raw(sql).QueryRows(&ormList)
+	if err != nil {
+		return
+	}
+	for _, ormItem := range ormList {
+		items = append(items, ormItem.ToView())
+	}
+
 	return
 }
 
 // GetFutureGoodEdbInfoListByParentId 根据父级ID获取指标数据列表
-func GetFutureGoodEdbInfoListByParentId(parentId int) (list []*FutureGoodEdbInfo, err error) {
+func GetFutureGoodEdbInfoListByParentId(parentId int) (items []*FutureGoodEdbInfoView, err error) {
+	var ormList []*FutureGoodEdbInfo
+	items = make([]*FutureGoodEdbInfoView, 0)
 	o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info WHERE parent_id = ? or  future_good_edb_info_id = ? ORDER BY future_good_edb_info_id ASC `
-	_, err = o.Raw(sql, parentId, parentId).QueryRows(&list)
+	_, err = o.Raw(sql, parentId, parentId).QueryRows(&ormList)
+	if err != nil {
+		return
+	}
+	for _, ormItem := range ormList {
+		items = append(items, ormItem.ToView())
+	}
+
 	return
 }
 
 // GetChildFutureGoodEdbInfoListByParentId 根据父级ID获取下面所有的指标数据列表
-func GetChildFutureGoodEdbInfoListByParentId(parentId int) (list []*FutureGoodEdbInfo, err error) {
+func GetChildFutureGoodEdbInfoListByParentId(parentId int) (items []*FutureGoodEdbInfoView, err error) {
+	var ormList []*FutureGoodEdbInfo
+	items = make([]*FutureGoodEdbInfoView, 0)
 	o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info WHERE parent_id = ? ORDER BY future_good_edb_info_id ASC `
-	_, err = o.Raw(sql, parentId).QueryRows(&list)
+	_, err = o.Raw(sql, parentId).QueryRows(&ormList)
+	if err != nil {
+		return
+	}
+	for _, ormItem := range ormList {
+		items = append(items, ormItem.ToView())
+	}
+
 	return
 }
 
@@ -96,9 +196,9 @@ func AddFutureGoodEdbInfo(item *FutureGoodEdbInfo) (err error) {
 }
 
 // Update 更新指标基础信息
-func (FutureGoodEdbInfo *FutureGoodEdbInfo) Update(cols []string) (err error) {
+func (m *FutureGoodEdbInfo) Update(cols []string) (err error) {
 	o := orm.NewOrmUsingDB("data")
-	_, err = o.Update(FutureGoodEdbInfo, cols...)
+	_, err = o.Update(m, cols...)
 	return
 }
 
@@ -111,14 +211,24 @@ type FutureGoodEdbInfoGroupListResp struct {
 }
 
 // GetFutureGoodEdbInfoGroupList 获取分組指标数据列表
-func GetFutureGoodEdbInfoGroupList(condition string, pars []interface{}) (list []*FutureGoodEdbInfo, err error) {
+func GetFutureGoodEdbInfoGroupList(condition string, pars []interface{}) (items []*FutureGoodEdbInfoView, err error) {
+	var ormList []*FutureGoodEdbInfo
+	items = make([]*FutureGoodEdbInfoView, 0)
+
 	o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM future_good_edb_info WHERE 1=1 `
 	if condition != "" {
 		sql += condition
 	}
 	sql += ` ORDER BY future_good_edb_info_id DESC `
-	_, err = o.Raw(sql, pars).QueryRows(&list)
+	_, err = o.Raw(sql, pars).QueryRows(&ormList)
+	if err != nil {
+		return
+	}
+	for _, ormItem := range ormList {
+		items = append(items, ormItem.ToView())
+	}
+
 	return
 }
 

+ 10 - 10
services/data/future_good/chart_info.go

@@ -106,7 +106,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 	}
 
 	// 获取主力合约和最新日期
-	var zlFutureGoodEdbInfo *future_good2.FutureGoodEdbInfo
+	var zlFutureGoodEdbInfo *future_good2.FutureGoodEdbInfoView
 	var latestDate string // 最新日期是这个
 	var regionType string // 交易所来源:“国内”,“海外”
 	var futureGoodEdbType int
@@ -167,7 +167,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 			UnitEn:              baseEdbInfoMapping.UnitEn,
 			StartDate:           v.StartDate,
 			EndDate:             v.EndDate,
-			ModifyTime:          v.ModifyTime.Format(utils.FormatDateTime),
+			ModifyTime:          v.ModifyTime,
 			ChartEdbMappingId:   v.FutureGoodEdbInfoId,
 			ChartInfoId:         baseEdbInfoMapping.ChartInfoId,
 			MaxData:             v.MaxValue,
@@ -184,7 +184,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 			PredictChartColor:   baseEdbInfoMapping.PredictChartColor,
 			ChartWidth:          baseEdbInfoMapping.ChartWidth,
 			ChartType:           baseEdbInfoMapping.ChartType,
-			LatestDate:          v.LatestDate.Format(utils.FormatDateTime),
+			LatestDate:          v.LatestDate,
 			LatestValue:         v.LatestValue,
 			UniqueCode:          futureGoodEdbInfoMapping.UniqueCode + strconv.Itoa(k),
 			MinValue:            v.MinValue,
@@ -227,7 +227,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 			UnitEn:              baseEdbInfoMapping.UnitEn,
 			StartDate:           zlFutureGoodEdbInfo.StartDate,
 			EndDate:             zlFutureGoodEdbInfo.EndDate,
-			ModifyTime:          zlFutureGoodEdbInfo.ModifyTime.Format(utils.FormatDateTime),
+			ModifyTime:          zlFutureGoodEdbInfo.ModifyTime,
 			ChartEdbMappingId:   zlFutureGoodEdbInfo.FutureGoodEdbInfoId,
 			ChartInfoId:         baseEdbInfoMapping.ChartInfoId,
 			MaxData:             zlFutureGoodEdbInfo.MaxValue,
@@ -244,7 +244,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 			PredictChartColor:   baseEdbInfoMapping.PredictChartColor,
 			ChartWidth:          baseEdbInfoMapping.ChartWidth,
 			ChartType:           baseEdbInfoMapping.ChartType,
-			LatestDate:          zlFutureGoodEdbInfo.LatestDate.Format(utils.FormatDateTime),
+			LatestDate:          zlFutureGoodEdbInfo.LatestDate,
 			LatestValue:         zlFutureGoodEdbInfo.LatestValue,
 			UniqueCode:          futureGoodEdbInfoMapping.UniqueCode + strconv.Itoa(0),
 			MinValue:            zlFutureGoodEdbInfo.MinValue,
@@ -442,7 +442,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapp
 }
 
 // BarChartData 获取数据
-func BarChartData(baseEdbInfoMapping *data_manage.ChartEdbInfoMapping, edbInfoMappingList []*data_manage.ChartEdbInfoMapping, futureGoodMappingList []*future_good2.FutureGoodEdbInfo, edbDataListMap map[int][]*data_manage.EdbDataList, barChartInfoDateList []data_manage.BarChartInfoDateReq, regionType, latestDate string) (edbIdList []int, yDataList []data_manage.YData, err error) {
+func BarChartData(baseEdbInfoMapping *data_manage.ChartEdbInfoMapping, edbInfoMappingList []*data_manage.ChartEdbInfoMapping, futureGoodMappingList []*future_good2.FutureGoodEdbInfoView, edbDataListMap map[int][]*data_manage.EdbDataList, barChartInfoDateList []data_manage.BarChartInfoDateReq, regionType, latestDate string) (edbIdList []int, yDataList []data_manage.YData, err error) {
 	// 指标数据数组(10086:{"2022-12-02":100.01,"2022-12-01":102.3})
 	// 现货指标数据map
 	baseEdbDataMap := make(map[int]map[string]float64)
@@ -674,7 +674,7 @@ func BarChartData(baseEdbInfoMapping *data_manage.ChartEdbInfoMapping, edbInfoMa
 }
 
 // handleResultData 处理成最终的结果数据
-func handleResultData(regionType string, futureGoodEdbType, baseEdbLen int, yDataList []data_manage.YData, futureGoodEdbInfoList []*future_good2.FutureGoodEdbInfo, maxIndex int) (xDataList []data_manage.XData, newYDataList []data_manage.YData, err error) {
+func handleResultData(regionType string, futureGoodEdbType, baseEdbLen int, yDataList []data_manage.YData, futureGoodEdbInfoList []*future_good2.FutureGoodEdbInfoView, maxIndex int) (xDataList []data_manage.XData, newYDataList []data_manage.YData, err error) {
 	xDataList = make([]data_manage.XData, 0)
 	newYDataList = yDataList
 	if regionType == `国内` {
@@ -690,7 +690,7 @@ func handleResultData(regionType string, futureGoodEdbType, baseEdbLen int, yDat
 		return
 	}
 
-	futureGoodEdbInfoMap := make(map[int]*future_good2.FutureGoodEdbInfo)
+	futureGoodEdbInfoMap := make(map[int]*future_good2.FutureGoodEdbInfoView)
 	for _, v := range futureGoodEdbInfoList {
 		futureGoodEdbInfoMap[v.FutureGoodEdbInfoId] = v
 	}
@@ -897,9 +897,9 @@ func handleResultData(regionType string, futureGoodEdbType, baseEdbLen int, yDat
 }
 
 // getFutureGoodEdbInfoList 获取适用的指标列表
-func getFutureGoodEdbInfoList(latestDateTime time.Time, tmpFutureGoodEdbInfoList []*future_good2.FutureGoodEdbInfo, barChartInfoDateList []data_manage.BarChartInfoDateReq) (earliestDateTime time.Time, futureGoodEdbInfoList []*future_good2.FutureGoodEdbInfo, err error) {
+func getFutureGoodEdbInfoList(latestDateTime time.Time, tmpFutureGoodEdbInfoList []*future_good2.FutureGoodEdbInfoView, barChartInfoDateList []data_manage.BarChartInfoDateReq) (earliestDateTime time.Time, futureGoodEdbInfoList []*future_good2.FutureGoodEdbInfoView, err error) {
 	maxM := 36 //最大36期合约
-	futureGoodEdbInfoList = make([]*future_good2.FutureGoodEdbInfo, 0)
+	futureGoodEdbInfoList = make([]*future_good2.FutureGoodEdbInfoView, 0)
 	earliestDateTime = latestDateTime // 数据的最早日期,目的是为了找出最早的合约
 	for _, barChartInfoDate := range barChartInfoDateList {
 		var findDateTime time.Time

+ 1 - 1
services/data/future_good/future_edb_info.go

@@ -12,7 +12,7 @@ import (
 // @author Roc
 // @datetime 2022-09-16 11:04:44
 // @description 将原有的单个指标刷新,调整为批量多个指标刷新
-func FutureGoodEdbInfoRefreshAllFromBase(futureGoodEdbInfoList []*future_good.FutureGoodEdbInfo, refreshAll bool) (err error) {
+func FutureGoodEdbInfoRefreshAllFromBase(futureGoodEdbInfoList []*future_good.FutureGoodEdbInfoView, refreshAll bool) (err error) {
 	var errMsg string
 	defer func() {
 		if err != nil {

+ 8 - 8
services/data/future_good/profit_chart_info.go

@@ -17,7 +17,7 @@ import (
 )
 
 // GetProfitChartEdbData 获取利润图表的指标数据
-func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data_manage.EdbInfo, zlFutureGoodEdbInfoList []*future_good.FutureGoodEdbInfo, chartInfoDateList []request.ChartInfoDateReq, formulaStr string, edbInfoFromTagList []data_manage.EdbInfoFromTag, reqXDataList []data_manage.XData) (barConfigEdbInfoIdList []data_manage.BarChartInfoEdbItemReq, edbList []*data_manage.ChartEdbInfoMapping, xEdbIdValue []int, xDataList []data_manage.XData, yDataList []data_manage.YData, err error) {
+func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data_manage.EdbInfo, zlFutureGoodEdbInfoList []*future_good.FutureGoodEdbInfoView, chartInfoDateList []request.ChartInfoDateReq, formulaStr string, edbInfoFromTagList []data_manage.EdbInfoFromTag, reqXDataList []data_manage.XData) (barConfigEdbInfoIdList []data_manage.BarChartInfoEdbItemReq, edbList []*data_manage.ChartEdbInfoMapping, xEdbIdValue []int, xDataList []data_manage.XData, yDataList []data_manage.YData, err error) {
 	edbList = make([]*data_manage.ChartEdbInfoMapping, 0)
 
 	if baseEdbInfo == nil {
@@ -103,10 +103,10 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
 	monthNum := (latestDateTime.Year()-earliestDateTime.Year())*12 + int(latestDateTime.Month()-earliestDateTime.Month())
 
 	// 存储主力合约下的所有月份合约
-	futureGoodEdbInfoDateMap := make(map[int]map[string]*future_good.FutureGoodEdbInfo)
+	futureGoodEdbInfoDateMap := make(map[int]map[string]*future_good.FutureGoodEdbInfoView)
 	futureGoodDataListMap := make(map[int][]*data_manage.EdbDataList, 0)
 	// 特殊的商品期货合约(只有M+N的合约,没有固定日期的合约)
-	specialFutureGoodEdbInfoMap := make(map[int]map[int]*future_good.FutureGoodEdbInfo, 0)
+	specialFutureGoodEdbInfoMap := make(map[int]map[int]*future_good.FutureGoodEdbInfoView, 0)
 
 	isAllChina := true // 是否都是国内的期货合约
 	for _, v := range zlFutureGoodEdbInfoList {
@@ -141,7 +141,7 @@ func GetProfitChartEdbData(baseEdbInfo *data_manage.EdbInfo, edbInfoList []*data
 		futureGoodEdbInfoDateMap[v.FutureGoodEdbInfoId] = childFutureGoodEdbInfoMap
 
 		if v.FutureGoodEdbType == 2 {
-			specialFutureGoodEdbInfoMap[v.FutureGoodEdbInfoId] = make(map[int]*future_good.FutureGoodEdbInfo)
+			specialFutureGoodEdbInfoMap[v.FutureGoodEdbInfoId] = make(map[int]*future_good.FutureGoodEdbInfoView)
 		}
 		// 获取数据
 		for date, childFutureGoodEdbInfo := range childFutureGoodEdbInfoMap {
@@ -207,7 +207,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, futureGoodEdbInfoMap map[int]map[string]*future_good.FutureGoodEdbInfoView, futureGoodEdbDataListMap map[int][]*data_manage.EdbDataList, chartInfoDateList []request.ChartInfoDateReq, latestDate string, specialFutureGoodEdbInfoMap map[int]map[int]*future_good.FutureGoodEdbInfoView, 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) {
 	// 指标数据数组(10086:{"2022-12-02":100.01,"2022-12-01":102.3})
 	//earliestDateTime time.Time
 	// ETA指标数据
@@ -491,10 +491,10 @@ func ProfitChartChartData(baseEdbInfo *data_manage.EdbInfo, baseDataListMap map[
 }
 
 // getFutureGoodEdbInfoList 获取适用的指标列表
-func getProfitFutureGoodEdbInfoList(earliestDateTime time.Time, zlFutureGoodEdbInfo *future_good.FutureGoodEdbInfo, tmpFutureGoodEdbInfoList []*future_good.FutureGoodEdbInfo, isAllChina bool, monthNum int) (futureGoodEdbInfoDateMap map[string]*future_good.FutureGoodEdbInfo, newMaxN int, err error) {
+func getProfitFutureGoodEdbInfoList(earliestDateTime time.Time, zlFutureGoodEdbInfo *future_good.FutureGoodEdbInfoView, tmpFutureGoodEdbInfoList []*future_good.FutureGoodEdbInfoView, isAllChina bool, monthNum int) (futureGoodEdbInfoDateMap map[string]*future_good.FutureGoodEdbInfoView, newMaxN int, err error) {
 	maxN := 36 //最大36期合约
-	futureGoodEdbInfoList := make([]*future_good.FutureGoodEdbInfo, 0)
-	futureGoodEdbInfoDateMap = make(map[string]*future_good.FutureGoodEdbInfo)
+	futureGoodEdbInfoList := make([]*future_good.FutureGoodEdbInfoView, 0)
+	futureGoodEdbInfoDateMap = make(map[string]*future_good.FutureGoodEdbInfoView)
 
 	earliestDateTime = time.Date(earliestDateTime.Year(), earliestDateTime.Month(), 1, 0, 0, 0, 0, time.Local)
 	if zlFutureGoodEdbInfo.RegionType == "国内" {

+ 5 - 1
services/data/line_feature/chart_info.go

@@ -42,7 +42,11 @@ func GetStandardDeviationData(chartInfoId int, startDate, endDate string, mappin
 			tmpDataList = append(tmpDataList, tmpData.Value)
 		}
 		for i := calculateValue; i <= lenData; i++ {
-			tmpV := utils.CalculateStandardDeviation(tmpDataList[i-calculateValue : i])
+			calList := tmpDataList[i-calculateValue : i]
+			if len(calList) <= 1 {
+				continue
+			}
+			tmpV := utils.CalculateStandardDeviation(calList)
 			tmpV, _ = decimal.NewFromFloat(tmpV).Round(4).Float64()
 			newDataList = append(newDataList, data_manage.EdbDataList{
 				EdbDataId:     i,

+ 48 - 0
utils/common.go

@@ -24,6 +24,7 @@ import (
 	"os"
 	"os/exec"
 	"path"
+	"reflect"
 	"regexp"
 	"sort"
 	"strconv"
@@ -2905,3 +2906,50 @@ func ConvertBoolToInt(isOrderBool bool) int {
 		return 0
 	}
 }
+
+// ReflectSetField
+// @Description: 通过反射处理时间字段
+// @param original
+// @param result
+// @param fieldsToProcess
+// @param formatDate
+// @return interface{}
+// @return error
+func ReflectSetField(original, result interface{}, fieldsToProcess []string, formatDate string) error {
+	// 通过反射处理时间字段
+	//fieldsToProcess = []string{"CreateTime", "ModifyTime", "BaseModifyTime", "StartDate", "EndDate"}
+
+	for _, fieldName := range fieldsToProcess {
+		value := reflect.ValueOf(original).FieldByName(fieldName)
+		if !value.IsValid() {
+			continue
+		}
+		//fmt.Println("fieldName:", fieldName)
+		//fmt.Println(value.Kind())
+		//fmt.Println(value.Type())
+		//fmt.Println(reflect.TypeOf(time.Time{}) == value.Type())
+
+		// 如果是时间类型,那么就写入结果中
+		if reflect.TypeOf(time.Time{}) == value.Type() {
+			t := value.Interface().(time.Time)
+			tmpVal := ``
+			if t.IsZero() {
+				tmpVal = ``
+			} else {
+				tmpVal = t.Format(formatDate)
+			}
+
+			v := reflect.ValueOf(result).Elem()
+			f := v.FieldByName(fieldName)
+
+			if !f.IsValid() {
+				fmt.Printf("Field '%s' not found in the struct.\n", fieldName)
+				continue
+			}
+
+			f.Set(reflect.ValueOf(tmpVal))
+		}
+	}
+
+	return nil
+}