base_from_ths_hf_data.go 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. package models
  2. import (
  3. "eta_gn/eta_index_lib/global"
  4. "eta_gn/eta_index_lib/utils"
  5. "fmt"
  6. "strings"
  7. "time"
  8. )
  9. // BaseFromThsHfData 同花顺高频数据-指标数据
  10. type BaseFromThsHfData struct {
  11. BaseFromThsHfDataId int `gorm:"column:base_from_ths_hf_data_id;primaryKey"`
  12. BaseFromThsHfIndexId int `description:"指标ID"`
  13. IndexCode string `description:"指标编码"`
  14. DataTime time.Time `description:"数据日期(至时分秒)"`
  15. Value float64 `description:"数据值"`
  16. UniqueCode string `description:"唯一编码"`
  17. CreateTime time.Time `description:"创建时间"`
  18. ModifyTime time.Time `description:"修改时间"`
  19. DataTimestamp int64 `description:"数据日期时间戳"`
  20. }
  21. func (m *BaseFromThsHfData) TableName() string {
  22. return "base_from_ths_hf_data"
  23. }
  24. type BaseFromThsHfDataCols struct {
  25. PrimaryId string
  26. BaseFromThsHfIndexId string
  27. IndexCode string
  28. DataTime string
  29. Value string
  30. UniqueCode string
  31. CreateTime string
  32. ModifyTime string
  33. DataTimestamp string
  34. }
  35. func (m *BaseFromThsHfData) Cols() BaseFromThsHfDataCols {
  36. return BaseFromThsHfDataCols{
  37. PrimaryId: "base_from_ths_hf_data_id",
  38. BaseFromThsHfIndexId: "base_from_ths_hf_index_id",
  39. IndexCode: "index_code",
  40. DataTime: "data_time",
  41. Value: "value",
  42. UniqueCode: "unique_code",
  43. CreateTime: "create_time",
  44. ModifyTime: "modify_time",
  45. DataTimestamp: "data_timestamp",
  46. }
  47. }
  48. func (m *BaseFromThsHfData) Create() (err error) {
  49. //o := orm.NewOrm()
  50. //id, err := o.Insert(m)
  51. err = global.DEFAULT_DmSQL.Create(m).Error
  52. if err != nil {
  53. return
  54. }
  55. //m.BaseFromThsHfDataId = int(id)
  56. return
  57. }
  58. func (m *BaseFromThsHfData) CreateMulti(items []*BaseFromThsHfData) (err error) {
  59. if len(items) == 0 {
  60. return
  61. }
  62. //o := orm.NewOrm()
  63. //_, err = o.InsertMulti(500, items)
  64. err = global.DEFAULT_DmSQL.CreateInBatches(items, 500).Error
  65. return
  66. }
  67. func (m *BaseFromThsHfData) Update(cols []string) (err error) {
  68. //o := orm.NewOrm()
  69. //_, err = o.Update(m, cols...)
  70. err = global.DEFAULT_DmSQL.Model(m).Select(cols).Updates(m).Error
  71. return
  72. }
  73. func (m *BaseFromThsHfData) Remove() (err error) {
  74. //o := orm.NewOrm()
  75. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
  76. //_, err = o.Raw(sql, m.BaseFromThsHfDataId).Exec()
  77. err = global.DEFAULT_DmSQL.Exec(sql, m.BaseFromThsHfDataId).Error
  78. return
  79. }
  80. func (m *BaseFromThsHfData) MultiRemove(ids []int) (err error) {
  81. if len(ids) == 0 {
  82. return
  83. }
  84. //o := orm.NewOrm()
  85. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
  86. //_, err = o.Raw(sql, ids).Exec()
  87. err = global.DEFAULT_DmSQL.Exec(sql, ids).Error
  88. return
  89. }
  90. func (m *BaseFromThsHfData) RemoveByCondition(condition string, pars []interface{}) (err error) {
  91. if condition == "" {
  92. return
  93. }
  94. //o := orm.NewOrm()
  95. sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), condition)
  96. //_, err = o.Raw(sql, pars).Exec()
  97. err = global.DEFAULT_DmSQL.Exec(sql, pars).Error
  98. return
  99. }
  100. func (m *BaseFromThsHfData) GetItemById(id int) (item *BaseFromThsHfData, err error) {
  101. //o := orm.NewOrm()
  102. sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
  103. //err = o.Raw(sql, id).QueryRow(&item)
  104. err = global.DEFAULT_DmSQL.Raw(sql, id).First(&item).Error
  105. return
  106. }
  107. func (m *BaseFromThsHfData) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *BaseFromThsHfData, err error) {
  108. //o := orm.NewOrm()
  109. order := ``
  110. if orderRule != "" {
  111. order = ` ORDER BY ` + orderRule
  112. }
  113. sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
  114. //err = o.Raw(sql, pars).QueryRow(&item)
  115. err = global.DEFAULT_DmSQL.Raw(sql, pars...).First(&item).Error
  116. return
  117. }
  118. func (m *BaseFromThsHfData) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
  119. //o := orm.NewOrm()
  120. sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
  121. //err = o.Raw(sql, pars).QueryRow(&count)
  122. err = global.DEFAULT_DmSQL.Raw(sql, pars...).Find(&count).Error
  123. return
  124. }
  125. func (m *BaseFromThsHfData) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*BaseFromThsHfData, err error) {
  126. //o := orm.NewOrm()
  127. fields := strings.Join(fieldArr, ",")
  128. if len(fieldArr) == 0 {
  129. fields = `*`
  130. }
  131. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  132. if orderRule != "" {
  133. order = ` ORDER BY ` + orderRule
  134. }
  135. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
  136. //_, err = o.Raw(sql, pars).QueryRows(&items)
  137. err = global.DEFAULT_DmSQL.Raw(sql, pars...).Find(&items).Error
  138. return
  139. }
  140. func (m *BaseFromThsHfData) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*BaseFromThsHfData, err error) {
  141. //o := orm.NewOrm()
  142. fields := strings.Join(fieldArr, ",")
  143. if len(fieldArr) == 0 {
  144. fields = `*`
  145. }
  146. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  147. if orderRule != "" {
  148. order = ` ORDER BY ` + orderRule
  149. }
  150. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
  151. //_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  152. err = global.DEFAULT_DmSQL.Raw(sql, pars, startSize, pageSize).Find(&items).Error
  153. return
  154. }
  155. // BaseFromThsHfDataItem 同花顺高频数据信息
  156. type BaseFromThsHfDataItem struct {
  157. DataId int `description:"数据ID"`
  158. IndexId int `description:"指标ID"`
  159. IndexCode string `description:"指标编码"`
  160. DataTime string `description:"数据日期(至时分秒)"`
  161. Value float64 `description:"数据值"`
  162. UniqueCode string `description:"唯一编码"`
  163. }
  164. func (m *BaseFromThsHfData) Format2Item() (item *BaseFromThsHfDataItem) {
  165. item = new(BaseFromThsHfDataItem)
  166. item.DataId = m.BaseFromThsHfDataId
  167. item.IndexId = m.BaseFromThsHfIndexId
  168. item.IndexCode = m.IndexCode
  169. item.DataTime = utils.TimeTransferString(utils.FormatDateTime, m.DataTime)
  170. item.Value = m.Value
  171. item.UniqueCode = m.UniqueCode
  172. return
  173. }
  174. func (m *BaseFromThsHfData) MultiInsertOrUpdate(inserts, updates []*BaseFromThsHfData) (err error) {
  175. //o := orm.NewOrm()
  176. if len(inserts) > 0 {
  177. //_, e := o.InsertMulti(600, inserts)
  178. e := global.DEFAULT_DmSQL.CreateInBatches(inserts, 500).Error
  179. if e != nil {
  180. err = fmt.Errorf("insert multi err: %s", e.Error())
  181. return
  182. }
  183. }
  184. if len(updates) > 0 {
  185. sql := fmt.Sprintf("UPDATE %s SET %s = ?, modify_time = NOW() WHERE %s = ?", m.TableName(), m.Cols().Value, m.Cols().UniqueCode)
  186. //p, e := o.Raw(sql).Prepare()
  187. //if e != nil {
  188. // err = fmt.Errorf("prepare err: %s", e.Error())
  189. // return
  190. //}
  191. //defer func() {
  192. // _ = p.Close()
  193. //}()
  194. for _, v := range updates {
  195. //_, e = p.Exec(v.Value, v.UniqueCode)
  196. e := global.DEFAULT_DmSQL.Exec(sql, v.Value, v.UniqueCode).Error
  197. if e != nil {
  198. err = fmt.Errorf("update err: %s", e.Error())
  199. return
  200. }
  201. }
  202. }
  203. return
  204. }
  205. func (m *BaseFromThsHfData) GetIndexMinMax(indexCode string) (item *EdbInfoMaxAndMinInfo, err error) {
  206. //o := orm.NewOrm()
  207. sql := fmt.Sprintf(`SELECT MIN(%s) AS min_date, MAX(%s) AS max_date, MIN(%s) AS min_value,MAX(%s) AS max_value FROM %s WHERE %s = ?`, m.Cols().DataTime, m.Cols().DataTime, m.Cols().Value, m.Cols().Value, m.TableName(), m.Cols().IndexCode)
  208. //err = o.Raw(sql, indexCode).QueryRow(&item)
  209. err = global.DEFAULT_DmSQL.Raw(sql, indexCode).First(&item).Error
  210. if err != nil {
  211. return
  212. }
  213. // 获取最新值
  214. var lastVal float64
  215. sql = fmt.Sprintf(`SELECT %s AS latest_value FROM %s WHERE %s = ? ORDER BY %s DESC LIMIT 1`, m.Cols().Value, m.TableName(), m.Cols().IndexCode, m.Cols().DataTime)
  216. //err = o.Raw(sql, indexCode).QueryRow(&lastVal)
  217. err = global.DEFAULT_DmSQL.Raw(sql, indexCode).First(&lastVal).Error
  218. if err != nil {
  219. return
  220. }
  221. item.LatestValue = lastVal
  222. return
  223. }