ermcpGoods.go 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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. type ErmcpGoods struct {
  23. Goodsid int64 `json:"goodsid" xorm:"'GOODSID'" binding:"required"` // 商品ID(自增ID SEQ_GOODS)
  24. Goodscode string `json:"goodscode" xorm:"'GOODSCODE'" binding:"required"` // 商品代码(内部)
  25. Goodsname string `json:"goodsname" xorm:"'GOODSNAME'" binding:"required"` // 商品名称
  26. Marketid int64 `json:"marketid" xorm:"'MARKETID'" binding:"required"` // 所属市场ID
  27. Goodsgroupid int64 `json:"goodsgroupid" xorm:"'GOODSGROUPID'"` // 所属商品组ID
  28. Goodsstatus int64 `json:"goodsstatus" xorm:"'GOODSSTATUS'"` // 商品状态- 1:待审核 2:未上市 3:上市 4:已注销 5:审核拒绝 6:退市 7:待退市
  29. Currencyid int64 `json:"currencyid" xorm:"'CURRENCYID'"` // 报价货币ID
  30. Goodunitid int64 `json:"goodunitid" xorm:"'GOODUNITID'"` // 报价单位ID
  31. Agreeunit float64 `json:"agreeunit" xorm:"'AGREEUNIT'"` // 合约单位
  32. Decimalplace int64 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 报价小数位
  33. Listingdate time.Time `json:"listingdate" xorm:"'LISTINGDATE'"` // 交易开始日期
  34. Lasttradedate time.Time `json:"lasttradedate" xorm:"'LASTTRADEDATE'"` // 最后交易日期(状态:待退市)
  35. Delistingdate time.Time `json:"delistingdate" xorm:"'DELISTINGDATE'"` // 商品退市时间(状态:退市) -- 已作废
  36. Deliveryflag int64 `json:"deliveryflag" xorm:"'DELIVERYFLAG'"` // 交割标志 - 0:不可交割 1:可交割
  37. Hasquoter int64 `json:"hasquoter" xorm:"'HASQUOTER'"` // 是否有报价商 - 0:无报价商 1:有报价商
  38. Hqprotecttime int64 `json:"hqprotecttime" xorm:"'HQPROTECTTIME'"` // 行情保护时间(秒)
  39. Quoteshowtype int64 `json:"quoteshowtype" xorm:"'QUOTESHOWTYPE'"` // 行情报价类型: 1:成交价 2:买卖中间价 3:含买价 4:含卖价做市模式固定为3:含买价
  40. Quoteshowtypeinterval int64 `json:"quoteshowtypeinterval" xorm:"'QUOTESHOWTYPEINTERVAL'"` // 行情报价间隔时间(秒)(成交价时为0)
  41. Modifystatus int64 `json:"modifystatus" xorm:"'MODIFYSTATUS'"` // 变更状态 - 1:未变更 2:变更中 3:待审核 4:已审核
  42. Goodstradetype int64 `json:"goodstradetype" xorm:"'GOODSTRADETYPE'"` // 商品交易权限类型 - 1:可建可平 3:不可建可平
  43. Creatorid int64 `json:"creatorid" xorm:"'CREATORID'"` // 创建人
  44. Createtime time.Time `json:"createtime" xorm:"'CREATETIME'"` // 创建时间
  45. Auditaccountid int64 `json:"auditaccountid" xorm:"'AUDITACCOUNTID'"` // 审核操作员账号
  46. Audittime time.Time `json:"audittime" xorm:"'AUDITTIME'"` // 审核时间
  47. Modifytime time.Time `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  48. Modifierid int64 `json:"modifierid" xorm:"'MODIFIERID'"` // 修改人
  49. Cancelaccountid int64 `json:"cancelaccountid" xorm:"'CANCELACCOUNTID'"` // 注销操作员账号
  50. Remark string `json:"remark" xorm:"'REMARK'"` // 备注
  51. Canceltime time.Time `json:"canceltime" xorm:"'CANCELTIME'"` // 注销时间
  52. Delistingmode int64 `json:"delistingmode" xorm:"'DELISTINGMODE'"` // 退市方式 - 1:退市平仓 2:退市交收 3:不处理(仅期权\币币兑换)
  53. Forceclosemode int64 `json:"forceclosemode" xorm:"'FORCECLOSEMODE'"` // 定期强平方式 - 1:无 2:每日 3:每周 4:每月[收益权]
  54. Forceclosevalue int64 `json:"forceclosevalue" xorm:"'FORCECLOSEVALUE'"` // 定期强平参数 [收益权]
  55. Cutmode int64 `json:"cutmode" xorm:"'CUTMODE'"` // 斩仓方式 - 1:不斩仓 2:自动斩仓 3:半自动斩仓
  56. Quoteminunit int64 `json:"quoteminunit" xorm:"'QUOTEMINUNIT'"` // 行情最小变动单位 [整数,报价小数位一起使用]
  57. Isbuylimited int64 `json:"isbuylimited" xorm:"'ISBUYLIMITED'"` // 是否限制建仓量 - 0:不限制 1:限制
  58. Innerdealmode int64 `json:"innerdealmode" xorm:"'INNERDEALMODE'"` // 内部成交方式[通道交易] - 1:净头寸 2:开平 3:平今
  59. Outerdealmode int64 `json:"outerdealmode" xorm:"'OUTERDEALMODE'"` // 外部成交方式[通道交易]- 1:净头寸 2:开平 3:平今
  60. Closepricemode int64 `json:"closepricemode" xorm:"'CLOSEPRICEMODE'"` // 强平价格方式 - 1:市价 2:最新价 3:涨跌停(未实现)
  61. Closepriceparam float64 `json:"closepriceparam" xorm:"'CLOSEPRICEPARAM'"` // 强平最新价浮动比例 - 方式为2时使用 (<1)买 上浮 (1+x)*最新价卖 下浮 (1-x)*最新价
  62. Qtydecimalplace int64 `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 成交量小数位
  63. Goodscurrencyid int64 `json:"goodscurrencyid" xorm:"'GOODSCURRENCYID'"` // 合约货币ID
  64. Goodsquotetype int64 `json:"goodsquotetype" xorm:"'GOODSQUOTETYPE'"` // 合约报价类型: 1-直接报价 2-间接报价
  65. Quotegear int64 `json:"quotegear" xorm:"'QUOTEGEAR'"` // 行情档位(1-10)
  66. Outgoodscode string `json:"outgoodscode" xorm:"'OUTGOODSCODE'"` // 商品代码(外部)
  67. Relatedgoodsid int32 `json:"relatedgoodsid" xorm:"RELATEDGOODSID"` // 关联参考商品ID
  68. }
  69. // GetErmcpGoodses 企业风管专用获取商品信息的方法
  70. func GetErmcpGoodses(lastUpdateTime string) ([]ErmcpGoods, error) {
  71. engine := db.GetEngine()
  72. goodses := make([]ErmcpGoods, 0)
  73. session := engine.Table("GOODS G").Select("G.*, P.RELATEDGOODSID").Join("LEFT", "GOODSQUOTEPROPERTY P", "P.GOODSID = G.GOODSID").Where("G.GOODSSTATUS in (3, 7)")
  74. // if lastID != 0 {
  75. // session = session.And("GOODSID > ?", lastID)
  76. // }
  77. // session = session.Asc("GOODSID")
  78. if len(lastUpdateTime) != 0 {
  79. session = session.And(fmt.Sprintf("G.MODIFYTIME > to_date('%s','yyyy-MM-dd hh24:mi:ss')", lastUpdateTime))
  80. }
  81. if err := session.Find(&goodses); err != nil {
  82. return nil, err
  83. }
  84. return goodses, nil
  85. }
  86. // GetGoodsLastUpdateTime 获取商品表最后更新(Update)时间
  87. func GetGoodsLastUpdateTime() (*time.Time, error) {
  88. engine := db.GetEngine()
  89. var lastUpdateTimes time.Time
  90. sql := `SELECT VERSIONS_STARTTIME LASTUPDATETIME
  91. FROM GOODS VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE WHERE
  92. VERSIONS_STARTTIME IS NOT NULL and VERSIONS_OPERATION = 'U' order by LASTUPDATETIME desc`
  93. has, err := engine.SQL(sql).Get(&lastUpdateTimes)
  94. if err != nil {
  95. return nil, err
  96. }
  97. if !has {
  98. return nil, nil
  99. }
  100. return &lastUpdateTimes, nil
  101. }
  102. // GetGoodsSortByPrePositions 获取查询主力+次主力商品
  103. func GetGoodsSortByPrePositions(sortIndex string) ([]Goodssortbypreposition, error) {
  104. rst := make([]Goodssortbypreposition, 0)
  105. session := db.GetEngine().Table("GOODSSORTBYPREPOSITION T")
  106. if len(sortIndex) > 0 {
  107. session = session.Where(fmt.Sprintf("T.SORTINDEX in (%s)", sortIndex))
  108. }
  109. session = session.Asc("T.SORTINDEX")
  110. if err := session.Find(&rst); err != nil {
  111. return nil, err
  112. }
  113. return rst, nil
  114. }