base_from_ly_data.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. // Package data_manage
  2. // @Author gmy 2024/8/7 9:50:00
  3. package data_manage
  4. import (
  5. "eta/eta_api/utils"
  6. "github.com/beego/beego/v2/client/orm"
  7. "github.com/rdlucklib/rdluck_tools/paging"
  8. "strings"
  9. "time"
  10. )
  11. type BaseFromLyData struct {
  12. BaseFromLyDataId int `orm:"column(base_from_ly_data_id);pk" description:"数据ID"`
  13. CreateTime time.Time `orm:"column(create_time)" description:"创建时间"`
  14. ModifyTime time.Time `orm:"column(modify_time)" description:"修改时间"`
  15. BaseFromLyIndexId int `orm:"column(base_from_ly_index_id)" description:"指标id"`
  16. IndexCode string `orm:"column(index_code)" description:"指标编码"`
  17. DataTime time.Time `orm:"column(data_time)" description:"数据日期"`
  18. Value float64 `orm:"column(value)" description:"数据值"`
  19. }
  20. func (m *BaseFromLyData) ToItem() (item *BaseFromLyDataItem) {
  21. return &BaseFromLyDataItem{
  22. BaseFromLyDataId: m.BaseFromLyDataId,
  23. CreateTime: m.CreateTime.Format(utils.FormatDateTime),
  24. ModifyTime: m.ModifyTime.Format(utils.FormatDateTime),
  25. BaseFromLyIndexId: m.BaseFromLyIndexId,
  26. IndexCode: m.IndexCode,
  27. DataTime: m.DataTime.Format(utils.FormatDate),
  28. Value: m.Value,
  29. }
  30. }
  31. type BaseFromLyDataItem struct {
  32. BaseFromLyDataId int `orm:"column(base_from_ly_data_id);pk" description:"数据ID"`
  33. CreateTime string `orm:"column(create_time)" description:"创建时间"`
  34. ModifyTime string `orm:"column(modify_time)" description:"修改时间"`
  35. BaseFromLyIndexId int `orm:"column(base_from_ly_index_id)" description:"指标id"`
  36. IndexCode string `orm:"column(index_code)" description:"指标编码"`
  37. DataTime string `orm:"column(data_time)" description:"数据日期"`
  38. Value float64 `orm:"column(value)" description:"数据值"`
  39. }
  40. func init() {
  41. orm.RegisterModel(new(BaseFromLyData))
  42. }
  43. type BaseFromLyDataPage struct {
  44. List []*BaseFromLyDataItem `description:"指标数据列表"`
  45. Paging *paging.PagingItem `description:"分页数据"`
  46. }
  47. // GetLyDataCountByIndexId 获取指标数据总数
  48. func GetLyDataCountByIndexId(indexId int) (count int, err error) {
  49. o := orm.NewOrmUsingDB("data")
  50. sql := `SELECT count(*) FROM base_from_ly_data WHERE base_from_ly_index_id=?`
  51. err = o.Raw(sql, indexId).QueryRow(&count)
  52. return
  53. }
  54. // GetLyDataPageByIndexId 获取指标数据分页列表
  55. func GetLyDataPageByIndexId(indexId int, startSize, pageSize int) (items []*BaseFromLyDataItem, err error) {
  56. var ormList []*BaseFromLyData
  57. items = make([]*BaseFromLyDataItem, 0)
  58. o := orm.NewOrmUsingDB("data")
  59. sql := `SELECT * FROM base_from_ly_data WHERE base_from_ly_index_id=? ORDER BY data_time desc LIMIT ?,?`
  60. _, err = o.Raw(sql, indexId, (startSize-1)*pageSize, pageSize).QueryRows(&ormList)
  61. if err != nil {
  62. return
  63. }
  64. for _, ormItem := range ormList {
  65. items = append(items, ormItem.ToItem())
  66. }
  67. return
  68. }
  69. // GetBaseFromLyDataByIndexCode 根据指标编码查询
  70. func GetBaseFromLyDataByIndexCode(indexCode string) (items []*BaseFromLyDataItem, err error) {
  71. var ormList []*BaseFromLyData
  72. items = make([]*BaseFromLyDataItem, 0)
  73. sql := `SELECT * FROM base_from_ly_data WHERE index_code=? ORDER BY data_time desc`
  74. o := orm.NewOrmUsingDB("data")
  75. _, err = o.Raw(sql, indexCode).QueryRows(&ormList)
  76. if err != nil {
  77. return
  78. }
  79. for _, ormItem := range ormList {
  80. items = append(items, ormItem.ToItem())
  81. }
  82. return
  83. }
  84. func GetLyDataListByIndexCodes(IndexCodes string) (items []time.Time, err error) {
  85. sql := ` SELECT data_time FROM base_from_ly_data WHERE index_code IN(` + IndexCodes + `) GROUP BY data_time ORDER BY data_time DESC `
  86. o := orm.NewOrmUsingDB("data")
  87. _, err = o.Raw(sql).QueryRows(&items)
  88. return
  89. }
  90. // GetLyLastUpdateTimeLastByIndexCode 根据指标编码查询 返回ModifyTime最后一条数据
  91. func GetLyLastUpdateTimeLastByIndexCode(indexCodes []string) (items []*BaseFromLyDataItem, err error) {
  92. var ormList []*BaseFromLyData
  93. items = make([]*BaseFromLyDataItem, 0)
  94. o := orm.NewOrmUsingDB("data")
  95. // 将 indexCodes 切片转换为逗号分隔的字符串
  96. placeholders := strings.Repeat("?,", len(indexCodes)-1) + "?"
  97. // 构造 SQL 查询
  98. sql := `SELECT index_code, MAX(modify_time) AS modify_time
  99. FROM base_from_ly_data
  100. WHERE index_code IN (` + placeholders + `)
  101. GROUP BY index_code`
  102. // 执行 SQL 查询
  103. _, err = o.Raw(sql, indexCodes).QueryRows(&ormList)
  104. if err != nil {
  105. return nil, err
  106. }
  107. for _, ormItem := range ormList {
  108. items = append(items, ormItem.ToItem())
  109. }
  110. return items, nil
  111. }
  112. // GetLyLastDataTimeByIndexCode 根据指标编码查询 返回data_time最后一条数据的value
  113. func GetLyLastDataTimeByIndexCode(indexCodes []string) (items []*BaseFromLyDataItem, err error) {
  114. var ormList []*BaseFromLyData
  115. items = make([]*BaseFromLyDataItem, 0)
  116. o := orm.NewOrmUsingDB("data")
  117. // 将 indexCodes 切片转换为逗号分隔的字符串
  118. placeholders := strings.Repeat("?,", len(indexCodes)-1) + "?"
  119. // 构造 SQL 查询
  120. sql := `
  121. SELECT t1.*
  122. FROM base_from_ly_data t1
  123. INNER JOIN (
  124. SELECT index_code, MAX(data_time) AS data_time
  125. FROM base_from_ly_data
  126. WHERE index_code IN (` + placeholders + `)
  127. GROUP BY index_code
  128. ) t2
  129. ON t1.index_code = t2.index_code AND t1.data_time = t2.data_time
  130. `
  131. // 执行 SQL 查询
  132. _, err = o.Raw(sql, indexCodes).QueryRows(&ormList)
  133. if err != nil {
  134. return nil, err
  135. }
  136. for _, ormItem := range ormList {
  137. items = append(items, ormItem.ToItem())
  138. }
  139. return items, nil
  140. }