ermcpGoods.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package models
  2. // 企业风管期货商品相关
  3. import (
  4. "fmt"
  5. "mtp2_if/db"
  6. "time"
  7. )
  8. // Goodssortbypreposition 合约昨持仓排序表 - 同一品种内按昨持仓量倒排序
  9. // 行情服务清盘前生成此表,供交易服务风控规则使用;生成前先删除此表数据;
  10. type Goodssortbypreposition struct {
  11. Tradedate string `json:"tradedate" xorm:"'TRADEDATE'" binding:"required"` // 交易日
  12. Goodscode string `json:"goodscode" xorm:"'GOODSCODE'" binding:"required"` // 合约代码 - 易盛接口:合约代码=品种代码+合约代码
  13. Goodsgroupcode string `json:"goodsgroupcode" xorm:"'GOODSGROUPCODE'"` // 品种代码
  14. Sortindex int64 `json:"sortindex" xorm:"'SORTINDEX'"` // 排序
  15. Prepositionqty int64 `json:"prepositionqty" xorm:"'PREPOSITIONQTY'"` // 昨持仓量
  16. Updatetime time.Time `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间
  17. }
  18. // TableName is GOODSSORTBYPREPOSITION
  19. func (Goodssortbypreposition) TableName() string {
  20. return "GOODSSORTBYPREPOSITION"
  21. }
  22. // GetErmcpGoodses 企业风管专用获取商品信息的方法
  23. func GetErmcpGoodses(lastUpdateTime string) ([]Goods, error) {
  24. engine := db.GetEngine()
  25. goodses := make([]Goods, 0)
  26. session := engine.Table("GOODS").Where("GOODSSTATUS in (3, 7)")
  27. // if lastID != 0 {
  28. // session = session.And("GOODSID > ?", lastID)
  29. // }
  30. // session = session.Asc("GOODSID")
  31. if len(lastUpdateTime) != 0 {
  32. session = session.And(fmt.Sprintf("MODIFYTIME > to_date('%s','yyyy-MM-dd hh24:mi:ss')", lastUpdateTime))
  33. }
  34. if err := session.Find(&goodses); err != nil {
  35. return nil, err
  36. }
  37. return goodses, nil
  38. }
  39. // GetGoodsLastUpdateTime 获取商品表最后更新(Update)时间
  40. func GetGoodsLastUpdateTime() (*time.Time, error) {
  41. engine := db.GetEngine()
  42. var lastUpdateTimes time.Time
  43. sql := `SELECT VERSIONS_STARTTIME LASTUPDATETIME
  44. FROM GOODS VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE WHERE
  45. VERSIONS_STARTTIME IS NOT NULL and VERSIONS_OPERATION = 'U' order by LASTUPDATETIME desc`
  46. has, err := engine.SQL(sql).Get(&lastUpdateTimes)
  47. if err != nil {
  48. return nil, err
  49. }
  50. if !has {
  51. return nil, nil
  52. }
  53. return &lastUpdateTimes, nil
  54. }
  55. // GetGoodsSortByPrePositions 获取查询主力+次主力商品
  56. func GetGoodsSortByPrePositions(sortIndex string) ([]Goodssortbypreposition, error) {
  57. rst := make([]Goodssortbypreposition, 0)
  58. session := db.GetEngine().Table("GOODSSORTBYPREPOSITION T")
  59. if len(sortIndex) > 0 {
  60. session = session.Where(fmt.Sprintf("T.SORTINDEX in (%s)", sortIndex))
  61. }
  62. session = session.Asc("T.SORTINDEX")
  63. if err := session.Find(&rst); err != nil {
  64. return nil, err
  65. }
  66. return rst, nil
  67. }