factor_edb_series_chart_mapping.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package models
  2. import (
  3. "eta/eta_index_lib/global"
  4. "eta/eta_index_lib/utils"
  5. "fmt"
  6. "strings"
  7. "time"
  8. )
  9. const (
  10. FactorEdbSeriesChartCalculateTypeCorrelation = 1 // 相关性计算
  11. FactorEdbSeriesChartCalculateTypeRange = 2 // 区间计算
  12. )
  13. // FactorEdbSeriesChartMapping 因子指标系列-图表关联
  14. type FactorEdbSeriesChartMapping struct {
  15. FactorEdbSeriesChartMappingId int `gorm:"primaryKey;autoIncrement;column:factor_edb_series_chart_mapping_id" description:"因子指标系列图表映射ID"`
  16. ChartInfoId int `gorm:"column:chart_info_id" description:"图表ID"`
  17. Source int `gorm:"column:source" description:"图表来源, 同chart_info表source"`
  18. CalculateType int `gorm:"column:calculate_type" description:"计算方式: 1-相关性"`
  19. CalculatePars string `gorm:"column:calculate_pars" description:"计算参数-JSON(如计算窗口等)"`
  20. CalculateData string `gorm:"column:calculate_data" description:"计算数据-JSON(如相关性矩阵等)"`
  21. FactorEdbSeriesId int `gorm:"column:factor_edb_series_id" description:"因子指标系列ID"`
  22. EdbInfoId int `gorm:"column:edb_info_id" description:"指标ID"`
  23. EdbUsed int `gorm:"column:edb_used" description:"指标是否使用: 0-否; 1-是"`
  24. CreateTime time.Time `gorm:"column:create_time" description:"创建时间"`
  25. ModifyTime time.Time `gorm:"column:modify_time" description:"修改时间"`
  26. }
  27. func (m *FactorEdbSeriesChartMapping) TableName() string {
  28. return "factor_edb_series_chart_mapping"
  29. }
  30. type MultipleFactorSeriesChartMappingCols struct {
  31. PrimaryId string
  32. ChartInfoId string
  33. Source string
  34. CalculateType string
  35. CalculatePars string
  36. CalculateData string
  37. FactorEdbSeriesId string
  38. EdbInfoId string
  39. EdbUsed string
  40. CreateTime string
  41. ModifyTime string
  42. }
  43. func (m *FactorEdbSeriesChartMapping) Cols() MultipleFactorSeriesChartMappingCols {
  44. return MultipleFactorSeriesChartMappingCols{
  45. PrimaryId: "factor_edb_series_chart_mapping_id",
  46. ChartInfoId: "chart_info_id",
  47. Source: "source",
  48. CalculateType: "calculate_type",
  49. CalculatePars: "calculate_pars",
  50. CalculateData: "calculate_data",
  51. FactorEdbSeriesId: "factor_edb_series_id",
  52. EdbInfoId: "edb_info_id",
  53. EdbUsed: "edb_used",
  54. CreateTime: "create_time",
  55. ModifyTime: "modify_time",
  56. }
  57. }
  58. func (m *FactorEdbSeriesChartMapping) Create() (err error) {
  59. err = global.DEFAULT_DB.Create(m).Error
  60. return
  61. }
  62. func (m *FactorEdbSeriesChartMapping) CreateMulti(items []*FactorEdbSeriesChartMapping) (err error) {
  63. if len(items) == 0 {
  64. return
  65. }
  66. err = global.DEFAULT_DB.CreateInBatches(items, utils.MultiAddNum).Error
  67. return
  68. }
  69. func (m *FactorEdbSeriesChartMapping) Update(cols []string) (err error) {
  70. err = global.DEFAULT_DB.Model(m).Select(cols).Updates(m).Error
  71. return
  72. }
  73. func (m *FactorEdbSeriesChartMapping) Remove() (err error) {
  74. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
  75. err = global.DEFAULT_DB.Exec(sql, m.FactorEdbSeriesChartMappingId).Error
  76. return
  77. }
  78. func (m *FactorEdbSeriesChartMapping) MultiRemove(ids []int) (err error) {
  79. if len(ids) == 0 {
  80. return
  81. }
  82. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
  83. err = global.DEFAULT_DB.Exec(sql, ids).Error
  84. return
  85. }
  86. func (m *FactorEdbSeriesChartMapping) GetItemById(id int) (item *FactorEdbSeriesChartMapping, err error) {
  87. sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
  88. err = global.DEFAULT_DB.Raw(sql, id).First(&item).Error
  89. return
  90. }
  91. func (m *FactorEdbSeriesChartMapping) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *FactorEdbSeriesChartMapping, err error) {
  92. order := ``
  93. if orderRule != "" {
  94. order = ` ORDER BY ` + orderRule
  95. }
  96. sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
  97. err = global.DEFAULT_DB.Raw(sql, pars...).First(&item).Error
  98. return
  99. }
  100. func (m *FactorEdbSeriesChartMapping) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
  101. sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
  102. err = global.DEFAULT_DB.Raw(sql, pars...).Scan(&count).Error
  103. return
  104. }
  105. func (m *FactorEdbSeriesChartMapping) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*FactorEdbSeriesChartMapping, err error) {
  106. fields := strings.Join(fieldArr, ",")
  107. if len(fieldArr) == 0 {
  108. fields = `*`
  109. }
  110. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  111. if orderRule != "" {
  112. order = ` ORDER BY ` + orderRule
  113. }
  114. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
  115. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&items).Error
  116. return
  117. }
  118. func (m *FactorEdbSeriesChartMapping) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*FactorEdbSeriesChartMapping, err error) {
  119. fields := strings.Join(fieldArr, ",")
  120. if len(fieldArr) == 0 {
  121. fields = `*`
  122. }
  123. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  124. if orderRule != "" {
  125. order = ` ORDER BY ` + orderRule
  126. }
  127. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
  128. pars = append(pars, startSize, pageSize)
  129. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&items).Error
  130. return
  131. }
  132. // GetDistinctSeriesIdByChartId 获取图表关联的系列ID
  133. func (m *FactorEdbSeriesChartMapping) GetDistinctSeriesIdByChartId(chartId int) (seriesIds []int, err error) {
  134. sql := fmt.Sprintf(`SELECT DISTINCT %s FROM %s WHERE %s = ?`, m.Cols().FactorEdbSeriesId, m.TableName(), m.Cols().ChartInfoId)
  135. err = global.DEFAULT_DB.Raw(sql, chartId).Scan(&seriesIds).Error
  136. return
  137. }
  138. // FactorEdbSeriesChartCalculateCorrelationReq 图表相关性计算参数
  139. type FactorEdbSeriesChartCalculateCorrelationReq struct {
  140. BaseEdbInfoId int `description:"标的指标ID"`
  141. LeadValue int `description:"领先期数"`
  142. LeadUnit string `description:"频度"`
  143. CalculateValue int `description:"计算窗口"`
  144. CalculateUnit string `description:"计算频度"`
  145. }