base_from_rzd_data.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // @Author gmy 2024/10/21 9:50:00
  2. package models
  3. import (
  4. "errors"
  5. "eta/eta_index_lib/utils"
  6. "github.com/beego/beego/v2/client/orm"
  7. )
  8. type BaseFromRzdData struct {
  9. BaseFromRzdDataId int `orm:"column(base_from_rzd_data_id);pk"`
  10. BaseFromRzdIndexId int `orm:"column(base_from_rzd_index_id)"`
  11. CreateTime string `orm:"column(create_time)"`
  12. DataTime string `orm:"column(data_time)"`
  13. IndexCode string `orm:"column(index_code)"`
  14. ModifyTime string `orm:"column(modify_time)"`
  15. Value float64 `orm:"column(value)"`
  16. }
  17. func init() {
  18. orm.RegisterModel(new(BaseFromRzdData))
  19. }
  20. // AddRzdDataList 批量插入数据记录列表
  21. func AddRzdDataList(items []BaseFromRzdData) (err error) {
  22. o := orm.NewOrm()
  23. _, err = o.InsertMulti(len(items), items)
  24. return
  25. }
  26. // GetRzdDataByIndexCodeAndDataTime 根据指标id和数据日期查询数据
  27. func GetRzdDataByIndexCodeAndDataTime(indexCode string, dataTime string) (items BaseFromRzdData, err error) {
  28. o := orm.NewOrm()
  29. sql := `SELECT * FROM base_from_rzd_data WHERE index_code=? AND data_time=?`
  30. err = o.Raw(sql, indexCode, dataTime).QueryRow(&items) // 使用 QueryRow
  31. if errors.Is(err, orm.ErrNoRows) {
  32. return items, nil
  33. }
  34. if err != nil {
  35. return items, err
  36. }
  37. return
  38. }
  39. // UpdateRzdDataById 根据主键id更新数据
  40. func UpdateRzdDataById(dataId int, value float64) (err error) {
  41. o := orm.NewOrm()
  42. sql := `UPDATE base_from_rzd_data SET value=? WHERE base_from_rzd_data_id=?`
  43. _, err = o.Raw(sql, value, dataId).Exec()
  44. return
  45. }
  46. // GetBaseFromRzdDataByCondition 添加查询
  47. func GetBaseFromRzdDataByCondition(condition string, pars []interface{}) (items []BaseFromRzdData, err error) {
  48. sql := `SELECT * FROM base_from_rzd_data WHERE 1=1 `
  49. o := orm.NewOrm()
  50. if condition != "" {
  51. sql += condition
  52. }
  53. _, err = o.Raw(sql, pars...).QueryRows(&items)
  54. if errors.Is(err, orm.ErrNoRows) {
  55. return nil, nil
  56. }
  57. return
  58. }
  59. // UpdateRzdData 修改睿姿得数据
  60. func UpdateRzdData(item *BaseFromRzdData) (err error) {
  61. o := orm.NewOrm()
  62. _, err = o.Update(item)
  63. return
  64. }
  65. // GetRzdDataMaxAndMinDateByIndexCodes 查询数据时间最新值,数据时间最小值和最新值对应的value值
  66. func GetRzdDataMaxAndMinDateByIndexCodes(indexCodes []string) (resultMap map[string]*EdbInfoMaxAndMinInfo, err error) {
  67. resultMap = make(map[string]*EdbInfoMaxAndMinInfo)
  68. o := orm.NewOrm()
  69. 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`
  70. var items []EdbInfoMaxAndMinInfo
  71. _, err = o.Raw(sql, indexCodes).QueryRows(&items)
  72. if err != nil {
  73. return nil, err
  74. }
  75. for _, row := range items {
  76. resultMap[row.IndexCode] = &EdbInfoMaxAndMinInfo{
  77. MinDate: row.MinDate,
  78. MaxDate: row.MaxDate,
  79. MinValue: row.MinValue,
  80. MaxValue: row.MaxValue,
  81. }
  82. }
  83. // 查询最新的值(最新数据时间对应的 value)
  84. sql = `SELECT a.index_code, a.value AS latest_value
  85. FROM base_from_rzd_data a
  86. JOIN (
  87. SELECT index_code, MAX(data_time) AS latest_time
  88. FROM base_from_rzd_data
  89. WHERE index_code IN (` + utils.GetOrmInReplace(len(indexCodes)) + `)
  90. GROUP BY index_code
  91. ) b ON a.index_code = b.index_code AND a.data_time = b.latest_time`
  92. _, err = o.Raw(sql, indexCodes).QueryRows(&items)
  93. if err != nil {
  94. return nil, err
  95. }
  96. for _, row := range items {
  97. if _, ok := resultMap[row.IndexCode]; ok {
  98. resultMap[row.IndexCode].LatestValue = row.LatestValue
  99. }
  100. }
  101. return resultMap, nil
  102. }
  103. func UpdateRzdEdbDataByIndexCodes(indexCode string, info *EdbInfoMaxAndMinInfo) error {
  104. o := orm.NewOrm()
  105. sql := `UPDATE base_from_rzd_index SET start_date=?, end_date=?, latest_value=? WHERE index_code=?`
  106. _, err := o.Raw(sql, info.MinDate, info.MaxDate, info.LatestValue, indexCode).Exec()
  107. return err
  108. }