base_from_rzd_data.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. "time"
  8. )
  9. type BaseFromRzdData struct {
  10. BaseFromRzdDataId int `orm:"column(base_from_rzd_data_id);pk"`
  11. BaseFromRzdIndexId int `orm:"column(base_from_rzd_index_id)"`
  12. CreateTime time.Time `orm:"column(create_time)"`
  13. DataTime time.Time `orm:"column(data_time)"`
  14. IndexCode string `orm:"column(index_code)"`
  15. ModifyTime time.Time `orm:"column(modify_time)"`
  16. Value float64 `orm:"column(value)"`
  17. }
  18. func (t *BaseFromRzdData) toView() BaseFromRzdDataView {
  19. return BaseFromRzdDataView{
  20. BaseFromRzdDataId: t.BaseFromRzdDataId,
  21. BaseFromRzdIndexId: t.BaseFromRzdIndexId,
  22. CreateTime: t.CreateTime.Format(utils.FormatDateTime),
  23. DataTime: t.DataTime.Format(utils.FormatDate),
  24. IndexCode: t.IndexCode,
  25. ModifyTime: t.ModifyTime.Format(utils.FormatDateTime),
  26. }
  27. }
  28. func toViewList(items []BaseFromRzdData) (viewList []BaseFromRzdDataView) {
  29. for _, item := range items {
  30. viewList = append(viewList, item.toView())
  31. }
  32. return
  33. }
  34. type BaseFromRzdDataView struct {
  35. BaseFromRzdDataId int `orm:"column(base_from_rzd_data_id);pk"`
  36. BaseFromRzdIndexId int `orm:"column(base_from_rzd_index_id)"`
  37. CreateTime string `orm:"column(create_time)"`
  38. DataTime string `orm:"column(data_time)"`
  39. IndexCode string `orm:"column(index_code)"`
  40. ModifyTime string `orm:"column(modify_time)"`
  41. Value float64 `orm:"column(value)"`
  42. }
  43. func init() {
  44. orm.RegisterModel(new(BaseFromRzdData))
  45. }
  46. // AddRzdDataList 批量插入数据记录列表
  47. func AddRzdDataList(items []BaseFromRzdData) (err error) {
  48. o := orm.NewOrm()
  49. _, err = o.InsertMulti(len(items), items)
  50. return
  51. }
  52. // GetRzdDataByIndexCodeAndDataTime 根据指标id和数据日期查询数据
  53. func GetRzdDataByIndexCodeAndDataTime(indexCode string, dataTime string) (item BaseFromRzdDataView, err error) {
  54. o := orm.NewOrm()
  55. sql := `SELECT * FROM base_from_rzd_data WHERE index_code=? AND data_time=?`
  56. var ormItem BaseFromRzdData
  57. err = o.Raw(sql, indexCode, dataTime).QueryRow(&ormItem) // 使用 QueryRow
  58. if errors.Is(err, orm.ErrNoRows) {
  59. return item, nil
  60. }
  61. if err != nil {
  62. return item, err
  63. }
  64. item = ormItem.toView()
  65. return
  66. }
  67. // UpdateRzdDataById 根据主键id更新数据
  68. func UpdateRzdDataById(dataId int, value float64) (err error) {
  69. o := orm.NewOrm()
  70. sql := `UPDATE base_from_rzd_data SET value=? WHERE base_from_rzd_data_id=?`
  71. _, err = o.Raw(sql, value, dataId).Exec()
  72. return
  73. }
  74. // GetBaseFromRzdDataByCondition 添加查询
  75. func GetBaseFromRzdDataByCondition(condition string, pars []interface{}) (items []BaseFromRzdDataView, err error) {
  76. sql := `SELECT * FROM base_from_rzd_data WHERE 1=1 `
  77. o := orm.NewOrm()
  78. if condition != "" {
  79. sql += condition
  80. }
  81. var ormList []BaseFromRzdData
  82. _, err = o.Raw(sql, pars...).QueryRows(&ormList)
  83. if errors.Is(err, orm.ErrNoRows) {
  84. return nil, nil
  85. }
  86. if err != nil {
  87. return
  88. }
  89. items = toViewList(ormList)
  90. return
  91. }
  92. // UpdateRzdData 修改睿姿得数据
  93. func UpdateRzdData(item *BaseFromRzdData) (err error) {
  94. o := orm.NewOrm()
  95. _, err = o.Update(item)
  96. return
  97. }
  98. // GetRzdDataMaxAndMinDateByIndexCodes 查询数据时间最新值,数据时间最小值和最新值对应的value值
  99. func GetRzdDataMaxAndMinDateByIndexCodes(indexCodes []string) (resultMap map[string]*EdbInfoMaxAndMinInfo, err error) {
  100. resultMap = make(map[string]*EdbInfoMaxAndMinInfo)
  101. o := orm.NewOrm()
  102. 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`
  103. var items []EdbInfoMaxAndMinInfo
  104. _, err = o.Raw(sql, indexCodes).QueryRows(&items)
  105. if err != nil {
  106. return nil, err
  107. }
  108. for _, row := range items {
  109. resultMap[row.IndexCode] = &EdbInfoMaxAndMinInfo{
  110. MinDate: row.MinDate,
  111. MaxDate: row.MaxDate,
  112. MinValue: row.MinValue,
  113. MaxValue: row.MaxValue,
  114. }
  115. }
  116. // 查询最新的值(最新数据时间对应的 value)
  117. sql = `SELECT a.index_code, a.value AS latest_value
  118. FROM base_from_rzd_data a
  119. JOIN (
  120. SELECT index_code, MAX(data_time) AS latest_time
  121. FROM base_from_rzd_data
  122. WHERE index_code IN (` + utils.GetOrmInReplace(len(indexCodes)) + `)
  123. GROUP BY index_code
  124. ) b ON a.index_code = b.index_code AND a.data_time = b.latest_time`
  125. _, err = o.Raw(sql, indexCodes).QueryRows(&items)
  126. if err != nil {
  127. return nil, err
  128. }
  129. for _, row := range items {
  130. if _, ok := resultMap[row.IndexCode]; ok {
  131. resultMap[row.IndexCode].LatestValue = row.LatestValue
  132. }
  133. }
  134. return resultMap, nil
  135. }
  136. func UpdateRzdEdbDataByIndexCodes(indexCode string, info *EdbInfoMaxAndMinInfo) error {
  137. o := orm.NewOrm()
  138. sql := `UPDATE base_from_rzd_index SET start_date=?, end_date=?, latest_value=? WHERE index_code=?`
  139. _, err := o.Raw(sql, info.MinDate, info.MaxDate, info.LatestValue, indexCode).Exec()
  140. return err
  141. }