future_good_edb_info.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package future_good
  2. import (
  3. "errors"
  4. "github.com/beego/beego/v2/client/orm"
  5. "hongze/hongze_edb_lib/utils"
  6. "time"
  7. )
  8. type FutureGoodEdbInfo struct {
  9. FutureGoodEdbInfoId int `orm:"column(future_good_edb_info_id);pk"`
  10. FutureGoodEdbCode string `description:"期货指标code"`
  11. FutureGoodEdbName string `description:"期货指标名称"`
  12. ParentId int `description:"上级期货id"`
  13. Exchange string `description:"所属交易所"`
  14. Month int `description:"所属月份"`
  15. StartDate string `description:"起始日期"`
  16. EndDate string `description:"终止日期"`
  17. MinValue float64 `description:"最小值"`
  18. MaxValue float64 `description:"最大值"`
  19. LatestValue float64 `description:"数据最新的值"`
  20. LatestDate time.Time `description:"数据最新的日期"`
  21. ServerUrl string `description:"服务器地址"`
  22. CreateTime time.Time
  23. ModifyTime time.Time
  24. }
  25. // GetFutureGoodEdbInfoByCode 根据指标code获取指标信息
  26. func GetFutureGoodEdbInfoByCode(edbCode string) (item *FutureGoodEdbInfo, err error) {
  27. o := orm.NewOrm()
  28. sql := `SELECT * FROM future_good_edb_info WHERE future_good_edb_code = ? limit 1 `
  29. err = o.Raw(sql, edbCode).QueryRow(&item)
  30. return
  31. }
  32. // GetFutureGoodEdbInfoList 获取指标数据列表
  33. func GetFutureGoodEdbInfoList(condition string, pars []interface{}) (list []*FutureGoodEdbInfo, err error) {
  34. o := orm.NewOrm()
  35. sql := `SELECT * FROM future_good_edb_info WHERE 1=1 `
  36. if condition != "" {
  37. sql += condition
  38. }
  39. sql += `ORDER BY future_good_edb_info_id DESC `
  40. _, err = o.Raw(sql, pars).QueryRows(&list)
  41. return
  42. }
  43. // GetAllFutureGoodEdbInfoList 获取指标数据列表
  44. func GetAllFutureGoodEdbInfoList() (list []*FutureGoodEdbInfo, err error) {
  45. o := orm.NewOrm()
  46. sql := `SELECT * FROM future_good_edb_info ORDER BY future_good_edb_info_id DESC `
  47. _, err = o.Raw(sql).QueryRows(&list)
  48. return
  49. }
  50. // AddFutureGoodEdbInfo 添加期货数据库指标
  51. func AddFutureGoodEdbInfo(item *FutureGoodEdbInfo) (err error) {
  52. o := orm.NewOrm()
  53. lastId, err := o.Insert(item)
  54. if err != nil {
  55. return
  56. }
  57. item.FutureGoodEdbInfoId = int(lastId)
  58. return
  59. }
  60. // Update 更新指标基础信息
  61. func (FutureGoodEdbInfo *FutureGoodEdbInfo) Update(cols []string) (err error) {
  62. o := orm.NewOrm()
  63. _, err = o.Update(FutureGoodEdbInfo, cols...)
  64. return
  65. }
  66. // UnifiedModifyEdbInfoMaxAndMinInfo 统一修改指标的最大最小值
  67. func UnifiedModifyEdbInfoMaxAndMinInfo(futureGoodEdbInfo *FutureGoodEdbInfo) (err error, errMsg string) {
  68. // 修改最大最小值
  69. maxAndMinItem, err := GetEdbInfoMaxAndMinInfo(futureGoodEdbInfo.FutureGoodEdbCode)
  70. if err != nil {
  71. if err.Error() == utils.ErrNoRow() {
  72. err = nil
  73. return
  74. }
  75. errMsg = "刷新期货指标失败!"
  76. err = errors.New("获取期货指标最大最小值失败,err:" + err.Error())
  77. return
  78. }
  79. if maxAndMinItem != nil {
  80. o := orm.NewOrm()
  81. sql := ` UPDATE future_good_edb_info SET start_date=?,end_date=?,min_value=?,max_value=?,latest_date=?,latest_value=?,modify_time=NOW() WHERE future_good_edb_info_id=? `
  82. _, err = o.Raw(sql, maxAndMinItem.MinDate, maxAndMinItem.MaxDate, maxAndMinItem.MinValue, maxAndMinItem.MaxValue, maxAndMinItem.MaxDate, maxAndMinItem.LatestValue, futureGoodEdbInfo.FutureGoodEdbInfoId).Exec()
  83. if err != nil {
  84. errMsg = "刷新指标失败!"
  85. err = errors.New("修改指标最大最小值失败,err:" + err.Error())
  86. return
  87. }
  88. }
  89. return
  90. }
  91. // FutureGoodEdbInfoMaxAndMinInfo 指标最新数据记录结构体
  92. type FutureGoodEdbInfoMaxAndMinInfo struct {
  93. MinDate string `description:"最小日期"`
  94. MaxDate string `description:"最大日期"`
  95. MinValue float64 `description:"最小值"`
  96. MaxValue float64 `description:"最大值"`
  97. LatestValue float64 `description:"最新值"`
  98. LatestDate string `description:"实际数据最新日期"`
  99. }
  100. // GetEdbInfoMaxAndMinInfo 获取指标的最新数据记录信息
  101. func GetEdbInfoMaxAndMinInfo(futureGoodEdbCode string) (item *FutureGoodEdbInfoMaxAndMinInfo, err error) {
  102. o := orm.NewOrm()
  103. sql := ``
  104. sql = ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date,MIN(close) AS min_value,MAX(close) AS max_value FROM future_good_edb_data WHERE future_good_edb_code=? `
  105. err = o.Raw(sql, futureGoodEdbCode).QueryRow(&item)
  106. var latest_value float64
  107. sql = ` SELECT close AS latest_value FROM future_good_edb_data WHERE future_good_edb_code=? ORDER BY data_time DESC LIMIT 1 `
  108. err = o.Raw(sql, futureGoodEdbCode).QueryRow(&latest_value)
  109. item.LatestValue = latest_value
  110. return
  111. }