tjmd.go 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/9/7 16:01
  4. * @Modify : 2021/9/7 16:01
  5. * @note : 天津麦顿
  6. */
  7. package models
  8. import (
  9. "fmt"
  10. "github.com/golang/protobuf/proto"
  11. "mtp2_if/db"
  12. "mtp2_if/pb"
  13. "mtp2_if/utils"
  14. )
  15. // TjmdQuoteGoods 掉期报价列表
  16. type TjmdQuoteGoods struct {
  17. GOODSID int64 `json:"goodsid" xorm:"'GOODSID'" form:"goodsid"` // 合约id
  18. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 合约代码
  19. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 合约名称
  20. REFGOODSID int64 `json:"refgoodsid" xorm:"'REFGOODSID'"` // 标的合约id
  21. REFGOODSCODE string `json:"refgoodscode" xorm:"'REFGOODSCODE'"` // 标的合约代码
  22. REFGOODSNAME string `json:"refgoodsname" xorm:"'REFGOODSNAME'"` // 标的合约名称
  23. SELLQTY float64 `json:"sellqty" xorm:"'SELLQTY'"` // 卖量(暂不做, 无值, 保留字段)
  24. BUYQTY float64 `json:"buyqty" xorm:"'BUYQTY'"` // 买量(暂不做, 无值, 保留字段)
  25. GOODSGROUPID int64 `json:"goodsgroupid" xorm:"'GOODSGROUPID'" form:"goodsgroupid"` // 商品组ID(自增ID)
  26. GOODSGROUPNAME string `json:"goodsgroupname" xorm:"'GOODSGROUPNAME'"` // 商品组名称
  27. UserType int32 `json:"-" form:"usertype"` // 用户类型
  28. FtMarketIds string `json:"-" form:"marketids"` // 市场id, 格式 1,2,3
  29. }
  30. func (r *TjmdQuoteGoods) calc() {
  31. }
  32. func (r *TjmdQuoteGoods) buildSql() string {
  33. var sqlId utils.SQLVal = `
  34. select g1.goodsid,
  35. g1.goodscode,
  36. g1.goodsname,
  37. g2.goodsid refgoodsid,
  38. g2.goodscode refgoodscode,
  39. g2.goodsname refgoodsname,
  40. gp.goodsgroupid,
  41. gp.goodsgroupname,
  42. gp.outergroupcode goodsgroupcode,
  43. gp.marketid
  44. from goods g1
  45. left join goods g2
  46. on g1.refgoodsid = g2.goodsid
  47. left join goodsgroup gp
  48. on g1.goodsgroupid = gp.goodsgroupid
  49. where 1=1 and g1.goodsstatus = 3
  50. `
  51. sqlId.JoinEx(r.FtMarketIds != "", fmt.Sprintf(" and gp.marketid in(%v)", r.FtMarketIds))
  52. return sqlId.String()
  53. }
  54. // GetDataEx 获取掉期报价列表
  55. func (r *TjmdQuoteGoods) GetDataEx() (interface{}, error) {
  56. sData := make([]TjmdQuoteGoods, 0)
  57. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  58. for i := range sData {
  59. sData[i].calc()
  60. }
  61. return sData, err
  62. }
  63. // TjmdTradeOrderDetail 买卖大厅
  64. type TjmdTradeOrderDetail struct {
  65. ORDERID string `json:"orderid" xorm:"'ORDERID'"` // 委托单号
  66. GOODSID int32 `json:"goodsid" xorm:"'GOODSID'" form:"goodsid"` // 商品id
  67. BUYORSELL int32 `json:"buyorsell" xorm:"'BUYORSELL'" form:"buyorsell"` // 买卖方向 0-买 1-卖
  68. ORDERPRICE SFLOAT64 `json:"orderprice" xorm:"'ORDERPRICE'"` // 委托价格
  69. ORDERQTY int64 `json:"orderqty" xorm:"'ORDERQTY'"` // 委托数量
  70. USERID int64 `json:"userid" xorm:"'USERID'" form:"userid"` // 用户id
  71. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称(已脱敏)
  72. PRICEMODE int32 `json:"pricemode" xorm:"'PRICEMODE'"` // 取价方式 - 1:市价 2: 限价 3:浮动价
  73. MARKETMAXSUB float64 `json:"marketmaxsub" xorm:"'MARKETMAXSUB'"` // 市价最大偏移范围 [浮动价 - 点差]
  74. PageEx `xorm:"extends"`
  75. USERTYPE int32 `json:"-" form:"usertype"` // 用户类型
  76. FtMarketIds string `json:"-" form:"marketids"` // 市场id, 格式 1,2,3
  77. }
  78. func (r *TjmdTradeOrderDetail) calc() {
  79. r.USERNAME = EncryptByStar(r.USERNAME)
  80. }
  81. func (r *TjmdTradeOrderDetail) buildSql() string {
  82. var sqlId utils.SQLVal = `
  83. select to_char(t.orderid) orderid,
  84. t.buyorsell,
  85. t.goodsid,
  86. t.orderprice,
  87. t.orderqty - t.tradeqty orderqty,
  88. u.userid,
  89. u.accountname username,
  90. t.orderstatus,
  91. t.pricemode,
  92. t.marketmaxsub,
  93. g.marketid
  94. from trade_orderdetail t
  95. left join taaccount ta
  96. on t.accountid = ta.accountid
  97. left join useraccount u
  98. on ta.relateduserid = u.userid
  99. left join goods g on t.goodsid=g.goodsid
  100. where 1 = 1
  101. and t.orderstatus in (3, 7)
  102. and (u.usertype = decode(%v,2,5,2) or u.userid = %v)
  103. `
  104. // 投资者只能看到会员的单, 会员只能看到投资者的单, decode(%v,2,5,-1); or u.userid=r.userid 则为自己的挂单可见
  105. sqlId.FormatParam(r.USERTYPE, r.USERID)
  106. sqlId.And("t.GOODSID", r.GOODSID)
  107. sqlId.And("t.BUYORSELL", r.BUYORSELL)
  108. sqlId.JoinEx(r.FtMarketIds != "", fmt.Sprintf(" and g.marketid in(%v)", r.FtMarketIds))
  109. if r.BUYORSELL == 0 {
  110. sqlId.Join(" order by t.orderprice desc, t.ordertime desc")
  111. } else {
  112. sqlId.Join(" order by t.orderprice, t.ordertime desc")
  113. }
  114. sqlId.Page(r.Page, r.PageSize)
  115. return sqlId.String()
  116. }
  117. // GetDataByPage 获取买卖大厅
  118. func (r *TjmdTradeOrderDetail) GetDataByPage() (interface{}, error, int, int, int) {
  119. sData := make([]TjmdTradeOrderDetail, 0)
  120. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  121. for i := range sData {
  122. sData[i].calc()
  123. }
  124. if len(sData) > 0 {
  125. r.Total = sData[0].Total
  126. }
  127. return sData, err, r.Page, r.PageSize, r.Total
  128. }
  129. // TjmdTransferApply 协议转让申请
  130. type TjmdTransferApply struct {
  131. APPLYID int64 `json:"applyid" xorm:"'APPLYID'"` // 申请ID(自增ID SEQ_TRADE_HOLDTRANSFERAPPLY)
  132. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  133. INACCOUNTID int64 `json:"-" xorm:"INACCOUNTID" form:"inaccountid"` // 转入方资金ID(确认方) --对方申请
  134. OUTACCOUNTID int64 `json:"-" xorm:"OUTACCOUNTID" form:"outaccountid"` // 转出方资金ID(申请方) --我的申请
  135. GOODSID int32 `json:"goodsid" xorm:"'GOODSID'"` // 商品ID
  136. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  137. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  138. QTYDECIMALPLACE int `json:"-" xorm:"'QTYDECIMALPLACE'"` // 成交量小数位
  139. BUYORSELL int32 `json:"buyorsell" xorm:"'BUYORSELL'"` // 买卖 - 0:买 1:卖
  140. TRANSFERPRICE float64 `json:"transferprice" xorm:"'TRANSFERPRICE'"` // 转让价格(协议价格)
  141. QTY SFLOAT64 `json:"qty" xorm:"'QTY'"` // 转让数量(数量)
  142. TRANSFERAMOUNT float64 `json:"transferamount" xorm:"'TRANSFERAMOUNT'"` // 转让总金额(金额)
  143. APPLYSTATUS int32 `json:"applystatus" xorm:"'APPLYSTATUS'"` // 状态 - 0:未提交 1:待审核 2:审核中 3:审核通过 4:审核拒绝 5:审核失败 6:已撤销
  144. TRADEID string `json:"tradeid" xorm:"'TRADEID'"` // 成交单号(关联持仓)
  145. APPLYTIME string `json:"applytime" xorm:"'APPLYTIME'"` // 申请时间(时间)
  146. AUDITREMARK string `json:"auditremark" xorm:"'AUDITREMARK'"` // 审核备注(拒绝原因?)
  147. ApplyType int32 `json:"-" form:"applytype"` // 类型 1-我的申请 2-对方申请
  148. FtMarketIds string `json:"-" form:"marketids"` // 市场 格式 1,2,3
  149. FtAccountIds string `json:"-" form:"accountids"` // 资金账号 格式 1,2,3
  150. }
  151. func (r *TjmdTransferApply) calc() {
  152. if r.QTYDECIMALPLACE != 0 {
  153. r.QTY.Power10(r.QTYDECIMALPLACE * -1)
  154. }
  155. }
  156. func (r *TjmdTransferApply) buildSql() string {
  157. var sqlId utils.SQLVal = `
  158. select t.applyid,
  159. t.marketid,
  160. t.goodsid,
  161. g.goodscode,
  162. g.goodsname,
  163. g.qtydecimalplace,
  164. t.buyorsell,
  165. t.transferprice,
  166. t.qty,
  167. t.transferamount,
  168. t.applystatus,
  169. to_char(t.tradeid) tradeid,
  170. to_char(t.applytime,'yyyy-mm-dd hh24:mi:ss') applytime,
  171. t.auditremark
  172. from trade_holdtransferapply t
  173. left join goods g
  174. on t.goodsid = g.goodsid
  175. where 1=1
  176. `
  177. sqlId.JoinEx(r.FtMarketIds != "", fmt.Sprintf(" and t.marketid in(%v)", r.FtMarketIds))
  178. if r.ApplyType == 1 {
  179. sqlId.JoinEx(r.FtAccountIds != "", fmt.Sprintf(" and t.outaccountid in(%v)", r.FtAccountIds))
  180. } else if r.ApplyType == 2 {
  181. sqlId.JoinEx(r.FtAccountIds != "", fmt.Sprintf(" and t.inaccountid in(%v)", r.FtAccountIds))
  182. }
  183. return sqlId.String()
  184. }
  185. // GetDataEx 获取协议转让申请
  186. func (r *TjmdTransferApply) GetDataEx() (interface{}, error) {
  187. sData := make([]TjmdTransferApply, 0)
  188. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  189. for i := range sData {
  190. sData[i].calc()
  191. }
  192. return sData, err
  193. }
  194. // TjmdTodayAccountMargin 账户保证金配置
  195. type TjmdTodayAccountMargin struct {
  196. ACCOUNTID int64 `json:"accountid" xorm:"'ACCOUNTID'" form:"accountid"` // 账号ID
  197. GOODSID int32 `json:"goodsid" xorm:"'GOODSID'" form:"goodsid"` // 商品ID
  198. INFOCONTENT string `json:"-" xorm:"'INFOCONTENT'"` // 保证金信息(存储配置的Protobuffer串)
  199. MARKETID int32 `json:"marketid" xorm:"'MARKETID'" form:"marketid"` // 市场ID
  200. INFOC pb.GoodsMarginCfgStruct `json:"infoc"` // 配置参数
  201. }
  202. func (r *TjmdTodayAccountMargin) calc() {
  203. if len(r.INFOCONTENT) > 0 {
  204. proto.Unmarshal([]byte(r.INFOCONTENT), &r.INFOC)
  205. }
  206. }
  207. func (r *TjmdTodayAccountMargin) buildSql() string {
  208. var sqlId utils.SQLVal = `
  209. select t.accountid, t.goodsid, t.infocontent, t.createdate, t.marketid
  210. from today_accountmargin t
  211. where 1 = 1
  212. `
  213. if r.ACCOUNTID > 0 {
  214. sqlId.JoinFormat(" and t.ACCOUNTID in(0, %v)", r.ACCOUNTID)
  215. }
  216. sqlId.AndEx("t.GOODSID", r.GOODSID, r.GOODSID > 0)
  217. sqlId.AndEx("t.MARKETID", r.MARKETID, r.MARKETID > 0)
  218. sqlId.Join(" order by t.accountid desc")
  219. sqlId.Page(1, 1) // 只取一条
  220. return sqlId.String()
  221. }
  222. // GetDataEx 获取账户保证金配置
  223. func (r *TjmdTodayAccountMargin) GetDataEx() (interface{}, error) {
  224. sData := make([]TjmdTodayAccountMargin, 0)
  225. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  226. for i := range sData {
  227. sData[i].calc()
  228. }
  229. return sData, err
  230. }