base_from_rzd_data.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. // @Author gmy 2024/10/21 9:50:00
  2. package models
  3. import (
  4. "eta/eta_index_lib/global"
  5. "eta/eta_index_lib/utils"
  6. "gorm.io/gorm"
  7. )
  8. type BaseFromRzdData struct {
  9. BaseFromRzdDataId int `gorm:"column:base_from_rzd_data_id;primaryKey"`
  10. //BaseFromRzdDataId int `orm:"column(base_from_rzd_data_id);pk"`
  11. BaseFromRzdIndexId int `orm:"column(base_from_rzd_index_id)"`
  12. CreateTime string `orm:"column(create_time)"`
  13. DataTime string `orm:"column(data_time)"`
  14. IndexCode string `orm:"column(index_code)"`
  15. ModifyTime string `orm:"column(modify_time)"`
  16. Value float64 `orm:"column(value)"`
  17. }
  18. // AfterFind 在该模型上设置钩子函数,把日期转成正确的string,所以查询函数只能用Find函数,First或者Scan是不会触发该函数的来获取数据
  19. func (m *BaseFromRzdData) AfterFind(db *gorm.DB) (err error) {
  20. m.DataTime = utils.GormDateStrToDateStr(m.DataTime)
  21. m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
  22. m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
  23. return
  24. }
  25. func (m *BaseFromRzdData) ConvDateTimeStr() {
  26. m.DataTime = utils.GormDateStrToDateStr(m.DataTime)
  27. m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
  28. m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
  29. return
  30. }
  31. // AddRzdDataList 批量插入数据记录列表
  32. func AddRzdDataList(items []BaseFromRzdData) (err error) {
  33. //o := orm.NewOrm()
  34. //_, err = o.InsertMulti(len(items), items)
  35. err = global.DEFAULT_DB.CreateInBatches(items, len(items)).Error
  36. return
  37. }
  38. // GetRzdDataByIndexCodeAndDataTime 根据指标id和数据日期查询数据
  39. func GetRzdDataByIndexCodeAndDataTime(indexCode string, dataTime string) (item BaseFromRzdData, err error) {
  40. //o := orm.NewOrm()
  41. sql := `SELECT * FROM base_from_rzd_data WHERE index_code=? AND data_time=?`
  42. //err = o.Raw(sql, indexCode, dataTime).QueryRow(&items) // 使用 QueryRow
  43. err = global.DEFAULT_DB.Raw(sql, indexCode, dataTime).First(&item).Error
  44. if utils.IsErrNoRow(err) {
  45. return item, nil
  46. }
  47. if err != nil {
  48. return item, err
  49. }
  50. item.ConvDateTimeStr()
  51. return
  52. }
  53. // UpdateRzdDataById 根据主键id更新数据
  54. func UpdateRzdDataById(dataId int, value float64) (err error) {
  55. //o := orm.NewOrm()
  56. sql := `UPDATE base_from_rzd_data SET value=? WHERE base_from_rzd_data_id=?`
  57. //_, err = o.Raw(sql, value, dataId).Exec()
  58. err = global.DEFAULT_DB.Exec(sql, value, dataId).Error
  59. return
  60. }
  61. // GetBaseFromRzdDataByCondition 添加查询
  62. func GetBaseFromRzdDataByCondition(condition string, pars []interface{}) (items []BaseFromRzdData, err error) {
  63. sql := `SELECT * FROM base_from_rzd_data WHERE 1=1 `
  64. //o := orm.NewOrm()
  65. if condition != "" {
  66. sql += condition
  67. }
  68. //_, err = o.Raw(sql, pars...).QueryRows(&items)
  69. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&items).Error
  70. if utils.IsErrNoRow(err) {
  71. return nil, nil
  72. }
  73. return
  74. }
  75. // UpdateRzdData 修改睿姿得数据
  76. func UpdateRzdData(item *BaseFromRzdData) (err error) {
  77. //o := orm.NewOrm()
  78. //_, err = o.Update(item)
  79. err = global.DEFAULT_DB.Save(&item).Error
  80. return
  81. }
  82. // GetRzdDataMaxAndMinDateByIndexCodes 查询数据时间最新值,数据时间最小值和最新值对应的value值
  83. func GetRzdDataMaxAndMinDateByIndexCodes(indexCodes []string) (resultMap map[string]*EdbInfoMaxAndMinInfo, err error) {
  84. resultMap = make(map[string]*EdbInfoMaxAndMinInfo)
  85. //o := orm.NewOrm()
  86. sql := ` SELECT index_code, MIN(data_time) AS min_date,MAX(data_time) AS max_date,MIN(value) AS min_value,MAX(value) AS max_value FROM base_from_rzd_data WHERE index_code in (` + utils.GetOrmInReplace(len(indexCodes)) + `) GROUP BY index_code`
  87. var items []EdbInfoMaxAndMinInfo
  88. //_, err = o.Raw(sql, indexCodes).QueryRows(&items)
  89. err = global.DEFAULT_DB.Raw(sql, indexCodes).Find(&items).Error
  90. if err != nil {
  91. return nil, err
  92. }
  93. for _, row := range items {
  94. resultMap[row.IndexCode] = &EdbInfoMaxAndMinInfo{
  95. MinDate: row.MinDate,
  96. MaxDate: row.MaxDate,
  97. MinValue: row.MinValue,
  98. MaxValue: row.MaxValue,
  99. }
  100. }
  101. // 查询最新的值(最新数据时间对应的 value)
  102. sql = `SELECT a.index_code, a.value AS latest_value
  103. FROM base_from_rzd_data a
  104. JOIN (
  105. SELECT index_code, MAX(data_time) AS latest_time
  106. FROM base_from_rzd_data
  107. WHERE index_code IN (` + utils.GetOrmInReplace(len(indexCodes)) + `)
  108. GROUP BY index_code
  109. ) b ON a.index_code = b.index_code AND a.data_time = b.latest_time`
  110. //_, err = o.Raw(sql, indexCodes).QueryRows(&items)
  111. err = global.DEFAULT_DB.Raw(sql, indexCodes).Find(&items).Error
  112. if err != nil {
  113. return nil, err
  114. }
  115. for _, row := range items {
  116. if _, ok := resultMap[row.IndexCode]; ok {
  117. resultMap[row.IndexCode].LatestValue = row.LatestValue
  118. }
  119. }
  120. return resultMap, nil
  121. }
  122. func UpdateRzdEdbDataByIndexCodes(indexCode string, info *EdbInfoMaxAndMinInfo) error {
  123. //o := orm.NewOrm()
  124. sql := `UPDATE base_from_rzd_index SET start_date=?, end_date=?, latest_value=? WHERE index_code=?`
  125. //_, err := o.Raw(sql, info.MinDate, info.MaxDate, info.LatestValue, indexCode).Exec()
  126. err := global.DEFAULT_DB.Exec(sql, info.MinDate, info.MaxDate, info.LatestValue, indexCode).Error
  127. return err
  128. }