future_good_edb_info.go 6.6 KB

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