future_good_edb_info.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package future_good
  2. import (
  3. "errors"
  4. "eta/eta_index_lib/global"
  5. "eta/eta_index_lib/utils"
  6. "gorm.io/gorm"
  7. "time"
  8. )
  9. type FutureGoodEdbInfo struct {
  10. FutureGoodEdbInfoId int `gorm:"column:future_good_edb_info_id;type:bigint(9) UNSIGNED;comment:期货指标id;primaryKey;not null;"` // 期货指标id
  11. FutureGoodEdbCode string `description:"期货指标code"`
  12. FutureGoodEdbName string `description:"期货指标名称"`
  13. FutureGoodEdbNameEn string `description:"期货指标英文名称"`
  14. ParentId int `description:"上级期货id"`
  15. RegionType string `description:"交易所来源,海外还是国内"`
  16. Exchange string `description:"所属交易所"`
  17. FutureGoodEdbType int `description:"指标类型,1:年月是固定的合约;2:只有M+N期的合约,未固定年月"`
  18. DateSourceId int `description:"画图时,日期来源的指标id"`
  19. Year int `description:"所属年份"`
  20. Month int `description:"所属月份"`
  21. StartDate string `description:"起始日期"`
  22. EndDate string `description:"终止日期"`
  23. MinValue float64 `description:"最小值"`
  24. MaxValue float64 `description:"最大值"`
  25. LatestValue float64 `description:"数据最新的值"`
  26. LatestDate time.Time `description:"数据最新的日期"`
  27. ServerUrl string `description:"服务器地址"`
  28. TerminalCode string `description:"终端编码,用于配置在机器上"`
  29. CreateTime time.Time
  30. ModifyTime time.Time
  31. }
  32. func (e *FutureGoodEdbInfo) AfterFind(db *gorm.DB) (err error) {
  33. e.StartDate = utils.GormDateStrToDateStr(e.StartDate)
  34. e.EndDate = utils.GormDateStrToDateStr(e.EndDate)
  35. return
  36. }
  37. func (e *FutureGoodEdbInfo) ConvDateTimeStr() {
  38. e.StartDate = utils.GormDateStrToDateStr(e.StartDate)
  39. e.EndDate = utils.GormDateStrToDateStr(e.EndDate)
  40. return
  41. }
  42. // GetFutureGoodEdbInfo 期货指标
  43. func GetFutureGoodEdbInfo(edbInfoId int) (item *FutureGoodEdbInfo, err error) {
  44. sql := `SELECT * FROM future_good_edb_info WHERE future_good_edb_info_id = ? `
  45. sql += ` ORDER BY future_good_edb_info_id DESC `
  46. err = global.DEFAULT_DB.Raw(sql, edbInfoId).First(&item).Error
  47. if err != nil {
  48. return
  49. }
  50. item.ConvDateTimeStr()
  51. return
  52. }
  53. // GetFutureGoodEdbInfoByCode 根据指标code获取指标信息
  54. func GetFutureGoodEdbInfoByCode(edbCode string) (item *FutureGoodEdbInfo, err error) {
  55. sql := `SELECT * FROM future_good_edb_info WHERE future_good_edb_code = ? limit 1 `
  56. err = global.DEFAULT_DB.Raw(sql, edbCode).First(&item).Error
  57. if err != nil {
  58. return
  59. }
  60. item.ConvDateTimeStr()
  61. return
  62. }
  63. // GetFutureGoodEdbInfoList 获取指标数据列表
  64. func GetFutureGoodEdbInfoList(condition string, pars []interface{}) (list []*FutureGoodEdbInfo, err error) {
  65. sql := `SELECT * FROM future_good_edb_info WHERE 1=1 `
  66. if condition != "" {
  67. sql += condition
  68. }
  69. sql += `ORDER BY future_good_edb_info_id DESC `
  70. err = global.DEFAULT_DB.Raw(sql, pars).Find(&list).Error
  71. return
  72. }
  73. // GetAllFutureGoodEdbInfoList 获取指标数据列表
  74. func GetAllFutureGoodEdbInfoList() (list []*FutureGoodEdbInfo, err error) {
  75. sql := `SELECT * FROM future_good_edb_info ORDER BY future_good_edb_info_id DESC `
  76. err = global.DEFAULT_DB.Raw(sql).Find(&list).Error
  77. return
  78. }
  79. // AddFutureGoodEdbInfo 添加期货数据库指标
  80. func AddFutureGoodEdbInfo(item *FutureGoodEdbInfo) (err error) {
  81. err = global.DEFAULT_DB.Create(item).Error
  82. return
  83. }
  84. // GetChildFutureGoodEdbInfoListByParentId 根据父级ID获取下面所有的指标数据列表
  85. func GetChildFutureGoodEdbInfoListByParentId(parentId int) (list []*FutureGoodEdbInfo, err error) {
  86. sql := `SELECT * FROM future_good_edb_info WHERE parent_id = ? ORDER BY future_good_edb_info_id ASC `
  87. err = global.DEFAULT_DB.Raw(sql, parentId).Find(&list).Error
  88. return
  89. }
  90. // Update 更新指标基础信息
  91. func (FutureGoodEdbInfo *FutureGoodEdbInfo) Update(cols []string) (err error) {
  92. err = global.DEFAULT_DB.Model(FutureGoodEdbInfo).Select(cols).Updates(FutureGoodEdbInfo).Error
  93. return
  94. }
  95. // UnifiedModifyEdbInfoMaxAndMinInfo 统一修改指标的最大最小值
  96. func UnifiedModifyEdbInfoMaxAndMinInfo(futureGoodEdbInfo *FutureGoodEdbInfo) (err error, errMsg string) {
  97. // 修改最大最小值
  98. maxAndMinItem, err := GetEdbInfoMaxAndMinInfo(futureGoodEdbInfo.FutureGoodEdbCode)
  99. if err != nil {
  100. if err.Error() == utils.ErrNoRow() {
  101. err = nil
  102. return
  103. }
  104. errMsg = "刷新期货指标失败!"
  105. err = errors.New("获取期货指标最大最小值失败,err:" + err.Error())
  106. return
  107. }
  108. if maxAndMinItem != nil {
  109. 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=? `
  110. err = global.DEFAULT_DB.Exec(sql, maxAndMinItem.MinDate, maxAndMinItem.MaxDate, maxAndMinItem.MinValue, maxAndMinItem.MaxValue, maxAndMinItem.MaxDate, maxAndMinItem.LatestValue, futureGoodEdbInfo.FutureGoodEdbInfoId).Error
  111. if err != nil {
  112. errMsg = "刷新指标失败!"
  113. err = errors.New("修改指标最大最小值失败,err:" + err.Error())
  114. return
  115. }
  116. }
  117. return
  118. }
  119. // FutureGoodEdbInfoMaxAndMinInfo 指标最新数据记录结构体
  120. type FutureGoodEdbInfoMaxAndMinInfo struct {
  121. MinDate string `description:"最小日期"`
  122. MaxDate string `description:"最大日期"`
  123. MinValue float64 `description:"最小值"`
  124. MaxValue float64 `description:"最大值"`
  125. LatestValue float64 `description:"最新值"`
  126. LatestDate string `description:"实际数据最新日期"`
  127. }
  128. // GetEdbInfoMaxAndMinInfo 获取指标的最新数据记录信息
  129. func GetEdbInfoMaxAndMinInfo(futureGoodEdbCode string) (item *FutureGoodEdbInfoMaxAndMinInfo, err error) {
  130. sql := ``
  131. 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=? `
  132. err = global.DEFAULT_DB.Raw(sql, futureGoodEdbCode).First(&item).Error
  133. if err != nil {
  134. return
  135. }
  136. var latest_value float64
  137. sql = ` SELECT close AS latest_value FROM future_good_edb_data WHERE future_good_edb_code=? ORDER BY data_time DESC LIMIT 1 `
  138. err = global.DEFAULT_DB.Raw(sql, futureGoodEdbCode).Scan(&latest_value).Error
  139. item.LatestValue = latest_value
  140. return
  141. }