浏览代码

统一数据日期格式处理方法

- 在多个模型中添加日期格式转换方法,确保数据查询后统一日期格式
- 优化了日期字符串到时间对象的转换逻辑,支持不同格式的日期输出
- 新增 GormDateStrToDateTimeStr 和 GormDateStrToDateStr工具函数,用于日期格式转换
Roc 6 月之前
父节点
当前提交
fa2974cff9
共有 5 个文件被更改,包括 97 次插入10 次删除
  1. 4 1
      models/base_from_business.go
  2. 5 0
      models/base_from_ths_hf.go
  3. 10 2
      models/edb_data_base.go
  4. 32 7
      models/edb_info.go
  5. 46 0
      utils/common.go

+ 4 - 1
models/base_from_business.go

@@ -51,7 +51,6 @@ func (m *BaseFromBusinessIndex) TableName() string {
 	return "base_from_business_index"
 }
 
-
 // BaseFromBusinessIndexResp
 // @Description: 外部指标(商家系统)表
 type BaseFromBusinessIndexResp struct {
@@ -339,6 +338,10 @@ func (m BaseFromBusinessIndex) getEdbInfoMaxAndMinInfoByMysql(edbCode string) (i
 		EndValue:    result.EndValue,
 	}
 
+	item.MinDate = utils.GormDateStrToDateStr(item.MinDate)
+	item.MaxDate = utils.GormDateStrToDateStr(item.MaxDate)
+	item.LatestDate = utils.GormDateStrToDateStr(item.LatestDate)
+
 	return
 }
 

+ 5 - 0
models/base_from_ths_hf.go

@@ -484,5 +484,10 @@ func (m BaseFromThsHfIndex) getEdbInfoMaxAndMinInfoByMysql(edbCode string) (item
 		LatestDate:  result.LatestDate,
 		EndValue:    result.EndValue,
 	}
+
+	item.MinDate = utils.GormDateStrToDateStr(item.MinDate)
+	item.MaxDate = utils.GormDateStrToDateStr(item.MaxDate)
+	item.LatestDate = utils.GormDateStrToDateStr(item.LatestDate)
+
 	return
 }

+ 10 - 2
models/edb_data_base.go

@@ -35,8 +35,8 @@ type EdbData struct {
 // AfterFind 在该模型上设置钩子函数,把日期转成正确的string,所以查询函数只能用Find函数,First或者Scan是不会触发该函数的来获取数据
 func (m *EdbData) AfterFind(db *gorm.DB) (err error) {
 	if m.DataTime == "" {
-        return
-    }
+		return
+	}
 	minDateTmp, err := time.ParseInLocation(utils.FormatDateWallWithLoc, m.DataTime, time.Local)
 	if err != nil {
 		return
@@ -100,6 +100,14 @@ func GetEdbDataByCondition(source, subSource int, condition string, pars []inter
 	sql += ` ORDER BY data_time DESC `
 	sql = fmt.Sprintf(sql, tableName)
 	err = global.DEFAULT_DmSQL.Raw(sql, pars...).Scan(&items).Error
+	if err != nil {
+		return
+	}
+
+	for _, v := range items {
+		v.ConvertTimeStr()
+	}
+
 	return
 }
 

+ 32 - 7
models/edb_info.go

@@ -204,6 +204,7 @@ func (edbInfo *EdbInfo) Update(cols []string) (err error) {
 }
 
 // EdbInfoSearchData
+// @Description: 指标数据
 type EdbInfoSearchData struct {
 	EdbDataId     int     `description:"数据ID"`
 	EdbInfoId     int     `description:"指标ID"`
@@ -213,6 +214,15 @@ type EdbInfoSearchData struct {
 	DataTimestamp int64   `description:"时间戳"`
 }
 
+// ConvertTimeStr
+// @Description: 转成需要输出的格式
+// @receiver m
+func (m *EdbInfoSearchData) ConvertTimeStr() {
+	m.DataTime = utils.GormDateStrToDateStr(m.DataTime)
+
+	return
+}
+
 type FindEdbDataListAllCond struct {
 	EdbInfoId         int
 	StartDataTime     string
@@ -247,9 +257,9 @@ func GetEdbDataListAll(source, subSource int, findEdbDataListAllCond FindEdbData
 // @param subSource int
 // @param findEdbDataListAllCond FindEdbDataListAllCond
 // @param order int
-// @return item []*EdbInfoSearchData
+// @return items []*EdbInfoSearchData
 // @return err error
-func GetEdbDataListAllByMysql(source, subSource int, findEdbDataListAllCond FindEdbDataListAllCond, order int) (item []*EdbInfoSearchData, err error) {
+func GetEdbDataListAllByMysql(source, subSource int, findEdbDataListAllCond FindEdbDataListAllCond, order int) (items []*EdbInfoSearchData, err error) {
 	if findEdbDataListAllCond.EdbInfoId <= 0 {
 		return
 	}
@@ -284,7 +294,15 @@ func GetEdbDataListAllByMysql(source, subSource int, findEdbDataListAllCond Find
 		sql += ` ORDER BY data_time DESC `
 	}
 	// todo
-	err = global.DEFAULT_DmSQL.Raw(sql, pars...).Scan(&item).Error
+	err = global.DEFAULT_DmSQL.Raw(sql, pars...).Scan(&items).Error
+	if err != nil {
+		return
+	}
+	// 统一处理日期
+	for _, v := range items {
+		v.ConvertTimeStr()
+	}
+
 	return
 }
 
@@ -316,9 +334,9 @@ func GetEdbDataListAllByTo(to *gorm.DB, source, subSource int, findEdbDataListAl
 // @param subSource int
 // @param findEdbDataListAllCond FindEdbDataListAllCond
 // @param order int
-// @return item []*EdbInfoSearchData
+// @return items []*EdbInfoSearchData
 // @return err error
-func GetEdbDataListAllByMysqlTo(to *gorm.DB, source, subSource int, findEdbDataListAllCond FindEdbDataListAllCond, order int) (item []*EdbInfoSearchData, err error) {
+func GetEdbDataListAllByMysqlTo(to *gorm.DB, source, subSource int, findEdbDataListAllCond FindEdbDataListAllCond, order int) (items []*EdbInfoSearchData, err error) {
 	if findEdbDataListAllCond.EdbInfoId <= 0 {
 		return
 	}
@@ -351,7 +369,15 @@ func GetEdbDataListAllByMysqlTo(to *gorm.DB, source, subSource int, findEdbDataL
 	} else {
 		sql += ` ORDER BY data_time DESC `
 	}
-	err = to.Raw(sql, pars...).Scan(&item).Error
+	err = to.Raw(sql, pars...).Scan(&items).Error
+	if err != nil {
+		return
+	}
+	// 统一处理日期
+	for _, v := range items {
+		v.ConvertTimeStr()
+	}
+
 	return
 }
 
@@ -588,7 +614,6 @@ func GetLteZeroEdbDataCountByMongo(source, subSource, edbInfoId int) (count int,
 // @return count int
 // @return err error
 func GetLteZeroEdbDataCountByMysql(source, subSource, edbInfoId int) (count int, err error) {
-
 	sql := ``
 	tableName := GetEdbDataTableName(source, subSource)
 	sql = ` SELECT COUNT(1) AS count FROM %s WHERE 1=1 AND edb_info_id =?  AND value <=0 `

+ 46 - 0
utils/common.go

@@ -1502,3 +1502,49 @@ func GetTradingDays(startDate, endDate time.Time) []time.Time {
 	}
 	return tradingDays
 }
+
+// GormDateStrToDateTimeStr
+// @Description: gorm日期字符串格式转正常显示的日期时间字符串
+// @param originalString
+// @return formatStr
+func GormDateStrToDateTimeStr(originalString string) (formatStr string) {
+	formatStr = originalString
+	if !strings.Contains(originalString, "T") {
+		return
+	}
+
+	// 解析原始字符串
+	t, err := time.Parse(FormatDateWallWithLoc, originalString)
+	if err != nil {
+		fmt.Println("Error parsing time:", err)
+		return
+	}
+
+	// 重新格式化时间
+	formatStr = t.Format(FormatDateTime)
+
+	return
+}
+
+// GormDateStrToDateStr
+// @Description: gorm日期字符串格式转正常显示的日期字符串
+// @param originalString
+// @return formatStr
+func GormDateStrToDateStr(originalString string) (formatStr string) {
+	formatStr = originalString
+	if !strings.Contains(originalString, "T") {
+		return
+	}
+
+	// 解析原始字符串
+	t, err := time.Parse(FormatDateWallWithLoc, originalString)
+	if err != nil {
+		fmt.Println("Error parsing time:", err)
+		return
+	}
+
+	// 重新格式化时间
+	formatStr = t.Format(FormatDate)
+
+	return
+}