Browse Source

同比计算保存

kobe6258 1 month ago
parent
commit
377194555e
4 changed files with 158 additions and 4 deletions
  1. 2 2
      models/db.go
  2. 3 1
      models/edb_data_calculate_tbz.go
  3. 142 1
      models/edb_info.go
  4. 11 0
      utils/date_util.go

+ 2 - 2
models/db.go

@@ -49,12 +49,12 @@ func init() {
 
 	orm.Debug = true
 	orm.DebugLog = orm.NewLog(utils.Binlog)
-
 	//注册对象
 	orm.RegisterModel(
 		new(EdbDataCalculateZjpj),
 		new(EdbDataCalculateLjztbpj),
-		new(EdbInfo),
+		//new(EdbInfo),
+		new(EdbInfoOrm),
 		new(EdbInfoRecord),
 		new(BaseFromSmmRecord),
 		new(BaseFromMysteelChemicalRecord),

+ 3 - 1
models/edb_data_calculate_tbz.go

@@ -27,6 +27,7 @@ func AddCalculateTbz(req *EdbInfoCalculateBatchSaveReq, fromEdbInfo *EdbInfo, ed
 		}
 	}()
 	if req.EdbInfoId <= 0 {
+
 		edbInfo = new(EdbInfo)
 		edbInfo.Source = utils.DATA_SOURCE_CALCULATE_TBZ
 		edbInfo.SourceName = "同比值"
@@ -46,7 +47,8 @@ func AddCalculateTbz(req *EdbInfoCalculateBatchSaveReq, fromEdbInfo *EdbInfo, ed
 		edbInfo.UnitEn = req.Unit
 		edbInfo.EdbType = 2
 		edbInfo.Sort = GetAddEdbMaxSortByClassifyId(req.ClassifyId, utils.EDB_INFO_TYPE)
-		newEdbInfoId, tmpErr := to.Insert(edbInfo)
+
+		newEdbInfoId, tmpErr := to.Insert(edbInfo.ConvertToOrmItem())
 		if tmpErr != nil {
 			err = tmpErr
 			return

+ 142 - 1
models/edb_info.go

@@ -68,6 +68,117 @@ type EdbInfo struct {
 	EndDateType      int     `description:"预测指标截止日期类型:0:未来日期,1未来期数"`
 }
 
+// [2025-zsh-时间类型修复-chenhan]
+type EdbInfoOrm struct {
+	EdbInfoId        int       `orm:"column(edb_info_id);pk"`
+	EdbInfoType      int       `description:"指标类型,0:普通指标,1:预测指标"`
+	SourceName       string    `description:"来源名称"`
+	Source           int       `description:"来源id"`
+	EdbCode          string    `description:"指标编码"`
+	EdbName          string    `description:"指标名称"`
+	EdbNameEn        string    `description:"英文指标名称"`
+	EdbNameSource    string    `description:"指标名称来源"`
+	Frequency        string    `description:"频率"`
+	Unit             string    `description:"单位"`
+	UnitEn           string    `description:"英文单位"`
+	StartDate        time.Time `description:"起始日期"`
+	EndDate          time.Time `description:"终止日期"`
+	ClassifyId       int       `description:"分类id"`
+	SysUserId        int
+	SysUserRealName  string
+	UniqueCode       string `description:"指标唯一编码"`
+	CreateTime       time.Time
+	ModifyTime       time.Time
+	BaseModifyTime   time.Time
+	MinValue         float64   `description:"指标最小值"`
+	MaxValue         float64   `description:"指标最大值"`
+	CalculateFormula string    `description:"计算公式"`
+	EdbType          int       `description:"指标类型:1:基础指标,2:计算指标"`
+	IsUpdate         int       `description:"当天是否已更新,1:未更新,2:已更新"`
+	Sort             int       `description:"排序字段"`
+	LatestDate       time.Time `description:"数据最新日期(实际日期)"`
+	LatestValue      float64   `description:"数据最新值(实际值)"`
+	EndValue         float64   `description:"数据的最新值(预测日期的最新值)"`
+	MoveType         int       `description:"移动方式:1:领先(默认),2:滞后"`
+	MoveFrequency    string    `description:"移动频度"`
+	NoUpdate         int8      `description:"是否停止更新,0:继续更新;1:停止更新"`
+	ServerUrl        string    `description:"服务器地址"`
+	ChartImage       string    `description:"图表图片"`
+	Calendar         string    `description:"公历/农历" orm:"default(公历);"`
+	EmptyType        int       `description:"空值处理类型(0查找前后35天,1不计算,2前值填充,3后值填充,4等于0)"`
+	MaxEmptyType     int       `description:"MAX、MIN公式空值处理类型(1、等于0;2、跳过空值)"`
+	DataDateType     string    `orm:"column(data_date_type);size(255);null;default(交易日)"`
+	ManualSave       int       `description:"是否有手动保存过上下限: 0-否; 1-是"`
+	TerminalCode     string    `description:"终端编码,用于配置在机器上"`
+	DataUpdateTime   time.Time `description:"最近一次数据发生变化的时间"`
+	ErDataUpdateDate time.Time `description:"本次更新,数据发生变化的最早日期"`
+	SourceIndexName  string    `description:"数据源中的指标名称"`
+	SubSource        int       `description:"子数据来源:0:经济数据库,1:日期序列"`
+	SubSourceName    string    `description:"子数据来源名称"`
+	IndicatorCode    string    `description:"指标代码"`
+	StockCode        string    `description:"证券代码"`
+	Extra            string    `description:"指标的额外配置"`
+	IsStaticData     int       `description:"是否是静态指标,0否,1是"`
+	EndDateType      int       `description:"预测指标截止日期类型:0:未来日期,1未来期数"`
+}
+
+func (edbInfo *EdbInfoOrm) TableName() string {
+	return "edb_info"
+}
+func (edbInfo *EdbInfo) ConvertToOrmItem() *EdbInfoOrm {
+	return &EdbInfoOrm{
+		EdbInfoId:        edbInfo.EdbInfoId,
+		EdbInfoType:      edbInfo.EdbInfoType,
+		SourceName:       edbInfo.SourceName,
+		Source:           edbInfo.Source,
+		EdbCode:          edbInfo.EdbCode,
+		EdbName:          edbInfo.EdbName,
+		EdbNameEn:        edbInfo.EdbNameEn,
+		EdbNameSource:    edbInfo.EdbNameSource,
+		Frequency:        edbInfo.Frequency,
+		Unit:             edbInfo.Unit,
+		UnitEn:           edbInfo.UnitEn,
+		StartDate:        utils.ParseStrToDate(edbInfo.StartDate, utils.FormatDate),
+		EndDate:          utils.ParseStrToDate(edbInfo.EndDate, utils.FormatDate),
+		ClassifyId:       edbInfo.ClassifyId,
+		SysUserId:        edbInfo.SysUserId,
+		SysUserRealName:  edbInfo.SysUserRealName,
+		UniqueCode:       edbInfo.UniqueCode,
+		CreateTime:       edbInfo.CreateTime,
+		ModifyTime:       edbInfo.ModifyTime,
+		BaseModifyTime:   edbInfo.BaseModifyTime,
+		MinValue:         edbInfo.MinValue,
+		MaxValue:         edbInfo.MaxValue,
+		CalculateFormula: edbInfo.CalculateFormula,
+		EdbType:          edbInfo.EdbType,
+		IsUpdate:         edbInfo.IsUpdate,
+		Sort:             edbInfo.Sort,
+		LatestDate:       utils.ParseStrToDate(edbInfo.LatestDate, utils.FormatDate),
+		LatestValue:      edbInfo.LatestValue,
+		EndValue:         edbInfo.EndValue,
+		MoveType:         edbInfo.MoveType,
+		MoveFrequency:    edbInfo.MoveFrequency,
+		NoUpdate:         edbInfo.NoUpdate,
+		ServerUrl:        edbInfo.ServerUrl,
+		ChartImage:       edbInfo.ChartImage,
+		Calendar:         edbInfo.Calendar,
+		EmptyType:        edbInfo.EmptyType,
+		MaxEmptyType:     edbInfo.MaxEmptyType,
+		DataDateType:     edbInfo.DataDateType,
+		ManualSave:       edbInfo.ManualSave,
+		TerminalCode:     edbInfo.TerminalCode,
+		DataUpdateTime:   utils.ParseStrToDate(edbInfo.DataUpdateTime, utils.FormatDateTime),
+		ErDataUpdateDate: utils.ParseStrToDate(edbInfo.ErDataUpdateDate, utils.FormatDate),
+		SourceIndexName:  edbInfo.SourceIndexName,
+		SubSource:        edbInfo.SubSource,
+		SubSourceName:    edbInfo.SubSourceName,
+		IndicatorCode:    edbInfo.IndicatorCode,
+		StockCode:        edbInfo.StockCode,
+		Extra:            edbInfo.Extra,
+		IsStaticData:     edbInfo.IsStaticData,
+		EndDateType:      edbInfo.EndDateType,
+	}
+}
 func (e *EdbInfo) Add() (err error) {
 	o := orm.NewOrm()
 	_, err = o.Insert(e)
@@ -205,6 +316,31 @@ type EdbInfoSearchData struct {
 	EdbCode       string  `description:"指标编码"`
 	DataTimestamp int64   `description:"时间戳"`
 }
+type EdbInfoSearchDataOrm struct {
+	EdbDataId     int       `description:"数据ID"`
+	EdbInfoId     int       `description:"指标ID"`
+	DataTime      time.Time `description:"数据日期"`
+	Value         float64   `description:"数据"`
+	EdbCode       string    `description:"指标编码"`
+	DataTimestamp int64     `description:"时间戳"`
+}
+
+func (edbInfoSearchData *EdbInfoSearchDataOrm) ConvertToSearchData() *EdbInfoSearchData {
+	return &EdbInfoSearchData{
+		EdbDataId:     edbInfoSearchData.EdbDataId,
+		EdbInfoId:     edbInfoSearchData.EdbInfoId,
+		DataTime:      edbInfoSearchData.DataTime.Format(utils.FormatDate),
+		Value:         edbInfoSearchData.Value,
+		EdbCode:       edbInfoSearchData.EdbCode,
+		DataTimestamp: edbInfoSearchData.DataTimestamp,
+	}
+}
+func convertToSearchDataList(ormList []*EdbInfoSearchDataOrm) (list []*EdbInfoSearchData) {
+	for _, ormItem := range ormList {
+		list = append(list, ormItem.ConvertToSearchData())
+	}
+	return
+}
 
 type FindEdbDataListAllCond struct {
 	EdbInfoId         int
@@ -277,7 +413,12 @@ func GetEdbDataListAllByMysql(source, subSource int, findEdbDataListAllCond Find
 	} else {
 		sql += ` ORDER BY data_time DESC `
 	}
-	_, err = to.Raw(sql, pars).QueryRows(&item)
+	var ormList []*EdbInfoSearchDataOrm
+	_, err = to.Raw(sql, pars).QueryRows(&ormList)
+	if err != nil {
+		return
+	}
+	item = convertToSearchDataList(ormList)
 	return
 }
 

+ 11 - 0
utils/date_util.go

@@ -127,3 +127,14 @@ func CompareDate(data1, data2 string) bool {
 	t2, _ := time.Parse("2006-01-02", data2)
 	return !t1.After(t2)
 }
+
+func ParseStrToDate(dateStr, dateFormat string) time.Time {
+	if dateStr == "" {
+		return time.Time{}
+	}
+	dateTime, err := time.Parse(dateStr, dateFormat)
+	if err != nil {
+		FileLog.Error("字符串转时间失败:", err.Error())
+	}
+	return dateTime
+}