wrTrade2.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/7/20 18:31
  4. * @Modify : 2021/7/20 18:31
  5. */
  6. package models
  7. import (
  8. "mtp2_if/db"
  9. "mtp2_if/utils"
  10. )
  11. // WrOrderQuote 买卖大厅行情
  12. type WrOrderQuote struct {
  13. WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"'WRFACTORTYPEID'" form:"wrfactortypeid"` // 仓单要素id
  14. BUYPRICE float64 `json:"buyprice" xorm:"'BUYPRICE'"` // 买价
  15. BUYQTY float64 `json:"buyqty" xorm:"'BUYQTY'"` // 买量
  16. SELLPRICE float64 `json:"sellprice" xorm:"'SELLPRICE'"` // 卖价
  17. SELLQTY float64 `json:"sellqty" xorm:"'SELLQTY'"` // 卖量
  18. WRFACTORTYPENAME string `json:"wrfactortypename" xorm:"'WRFACTORTYPENAME'"` // 仓单要素类型名称(选择项要素的名称合并显示,逗号分隔)
  19. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 品种id
  20. WRSTANDARDID int32 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 商品id
  21. WAREHOUSEID int32 `json:"warehouseid" xorm:"'WAREHOUSEID'" form:"warehouseid"` // 仓库id
  22. DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 品种名称
  23. DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 品种代码
  24. WAREHOUSENAME string `json:"warehousename" xorm:"'WAREHOUSENAME'"` // 仓库名称
  25. WAREHOUSECODE string `json:"warehousecode" xorm:"'WAREHOUSECODE'"` // 仓库代码
  26. WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'" form:"wrstandardname"` // 商品名称
  27. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 商品代码
  28. WRGOODSNAME string `json:"wrgoodsname" xorm:"'WRGOODSNAME'"` // 商品(商品名称+仓库要素名称 拼接)
  29. BUYPRICEMOVE float64 `json:"buypricemove" xorm:"'BUYPRICEMOVE'"` // 买升贴水(基差)
  30. SELLPRICEMOVE float64 `json:"sellpricemove" xorm:"'SELLPRICEMOVE'"` // 卖升贴水(基差)
  31. GOODSID int32 `json:"goodsid" xorm:"'GOODSID'"` // 商品id(浮动价列表才有)
  32. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品合约(浮动价列表才有)
  33. PageEx `xorm:"extends"` // 页码信息
  34. HasWr int32 `json:"-" form:"haswr"` // 是否有仓单 0-没有 1-有
  35. WrPriceType int32 `json:"-" form:"wrpricetype"` // 价格方式 - 1:固定价 2-浮动价 - [挂牌]
  36. MarketId int32 `json:"-" form:"marketid"` // 市场id
  37. BRANDNAME string `json:"-" form:"brandname"` // 品牌名称
  38. }
  39. func (r *WrOrderQuote) calc() {
  40. }
  41. // buildSqlFixedPrice 一口价
  42. func (r *WrOrderQuote) buildSqlFixedPrice() string {
  43. var sqlId utils.SQLVal = "with buyQuote as" +
  44. " (" +
  45. " select a.wrfactortypeid, a.fixedprice buyPrice, sum(a.orderqty) buyQty" +
  46. " from (select t.wrfactortypeid," +
  47. " t.marketid," +
  48. " t.buyorsell," +
  49. " t.orderqty - t.tradeqty as orderqty," +
  50. " t.fixedprice," +
  51. " rank() over(partition by t.wrfactortypeid order by t.fixedprice desc) cnt" +
  52. " from wrtrade_orderdetail t" +
  53. " where t.wrtradetype = 1 and t.buyorsell = 0 and t.wrtradeorderstatus in(3,10) %v" +
  54. " ) a" +
  55. " where a.cnt = 1" +
  56. " group by a.wrfactortypeid, a.fixedprice)," +
  57. "sellQuote as" +
  58. " (" +
  59. " select a.wrfactortypeid, a.fixedprice sellPrice, sum(a.orderqty) sellQty" +
  60. " from (select t.wrfactortypeid," +
  61. " t.marketid," +
  62. " t.buyorsell," +
  63. " t.orderqty - t.tradeqty as orderqty," +
  64. " t.fixedprice," +
  65. " rank() over(partition by t.wrfactortypeid order by t.fixedprice asc) cnt" +
  66. " from wrtrade_orderdetail t" +
  67. " where t.wrtradetype = 1 and t.buyorsell = 1 and t.wrtradeorderstatus in(3,10) %v " +
  68. " ) a" +
  69. " where a.cnt = 1" +
  70. " group by a.wrfactortypeid, a.fixedprice)," +
  71. "wrQuote as (" +
  72. " select nvl(k1.wrfactortypeid, k2.wrfactortypeid) wrfactortypeid," +
  73. " k1.buyPrice," +
  74. " k1.buyQty," +
  75. " k2.sellPrice," +
  76. " k2.sellQty" +
  77. " from buyQuote k1" +
  78. " full join sellQuote k2" +
  79. " on k1.wrfactortypeid = k2.wrfactortypeid" +
  80. ")" +
  81. "select k.*," +
  82. " w.wrfactortypename," +
  83. " w.deliverygoodsid," +
  84. " w.wrstandardid," +
  85. " w.warehouseid," +
  86. " dg.deliverygoodsname," +
  87. " dg.deliverygoodscode," +
  88. " h.warehousename," +
  89. " h.warehousecode," +
  90. " wg.wrstandardname," +
  91. " wg.wrstandardcode," +
  92. " wg.wrstandardname || w.wrfactortypename as wrgoodsname" +
  93. " from wrQuote k" +
  94. " left join WRFactorType w" +
  95. " on k.wrfactortypeid = w.wrfactortypeid" +
  96. " left join deliverygoods dg" +
  97. " on w.deliverygoodsid = dg.deliverygoodsid" +
  98. " left join wrstandard wg" +
  99. " on w.wrstandardid = wg.wrstandardid" +
  100. " left join warehouseinfo h" +
  101. " on w.warehouseid = h.autoid" +
  102. " where 1=1 %v " +
  103. "order by deliverygoodsname"
  104. var param, param2 utils.SQLVal
  105. param.And("t.haswr", r.HasWr)
  106. param.And("t.wrpricetype", r.WrPriceType)
  107. param.AndEx("t.marketid", r.MarketId, r.MarketId > 0)
  108. param2.AndLike("w.wrfactortypename", r.WRSTANDARDNAME)
  109. param2.AndLike("w.wrfactortypename", r.BRANDNAME)
  110. param2.AndEx("w.warehouseid", r.WAREHOUSEID, r.WAREHOUSEID > 0)
  111. sqlId.FormatParam(param.String(), param.String(), param2.String())
  112. sqlId.Page(r.Page, r.PageSize)
  113. return sqlId.String()
  114. }
  115. // buildSqlPriceMove 浮动价
  116. func (r *WrOrderQuote) buildSqlPriceMove() string {
  117. var sqlId utils.SQLVal = "with buyQuote as" +
  118. " (select a.wrfactortypeid," +
  119. " a.pricemove buypricemove," +
  120. " sum(a.orderqty) buyQty," +
  121. " a.goodsid," +
  122. " a.goodscode" +
  123. " from (select t.wrfactortypeid," +
  124. " t.marketid," +
  125. " t.buyorsell," +
  126. " t.orderqty - t.tradeqty as orderqty," +
  127. " t.pricemove," +
  128. " t.wrtradeorderid," +
  129. " c.goodsid," +
  130. " c.goodscode," +
  131. " rank() over(partition by t.wrfactortypeid, c.goodsid order by t.pricemove desc) cnt" +
  132. " from wrtrade_orderdetail t" +
  133. " left join WRTrade_GoodsConfig c" +
  134. " on t.wrtradeorderid = c.wrtradeorderid" +
  135. " where t.wrtradetype = 1 and t.wrtradeorderstatus in(3,10)" +
  136. " and t.buyorsell = 0 %v) a" +
  137. " where a.cnt = 1" +
  138. " group by a.wrfactortypeid, a.pricemove, a.goodsid, a.goodscode)," +
  139. "sellQuote as" +
  140. " (select a.wrfactortypeid," +
  141. " a.pricemove sellpricemove," +
  142. " a.goodsid," +
  143. " a.goodscode," +
  144. " sum(a.orderqty) sellQty" +
  145. " from (select t.wrfactortypeid," +
  146. " t.marketid," +
  147. " t.buyorsell," +
  148. " t.orderqty - t.tradeqty as orderqty," +
  149. " t.pricemove," +
  150. " c.goodsid," +
  151. " c.goodscode," +
  152. " rank() over(partition by t.wrfactortypeid order by t.pricemove asc) cnt" +
  153. " from wrtrade_orderdetail t" +
  154. " left join WRTrade_GoodsConfig c" +
  155. " on t.wrtradeorderid = c.wrtradeorderid" +
  156. " where t.wrtradetype = 1 and t.wrtradeorderstatus in(3,10)" +
  157. " and t.buyorsell = 1 %v) a" +
  158. " where a.cnt = 1" +
  159. " group by a.wrfactortypeid, a.pricemove, a.goodsid, a.goodscode)," +
  160. "wrQuote as" +
  161. " (select nvl(k1.wrfactortypeid, k2.wrfactortypeid) wrfactortypeid," +
  162. " nvl(k1.goodsid, k2.goodsid) goodsid," +
  163. " nvl(k1.goodscode, k2.goodscode) goodscode," +
  164. " k1.buypricemove," +
  165. " k1.buyQty," +
  166. " k2.sellpricemove," +
  167. " k2.sellQty" +
  168. " from buyQuote k1" +
  169. " full join sellQuote k2" +
  170. " on k1.wrfactortypeid = k2.wrfactortypeid)" +
  171. "select k.*," +
  172. " w.wrfactortypename," +
  173. " w.deliverygoodsid," +
  174. " w.wrstandardid," +
  175. " w.warehouseid," +
  176. " dg.deliverygoodsname," +
  177. " dg.deliverygoodscode," +
  178. " h.warehousename," +
  179. " h.warehousecode," +
  180. " wg.wrstandardname," +
  181. " wg.wrstandardcode," +
  182. " wg.wrstandardname || w.wrfactortypename as wrgoodsname" +
  183. " from wrQuote k" +
  184. " left join WRFactorType w" +
  185. " on k.wrfactortypeid = w.wrfactortypeid" +
  186. " left join deliverygoods dg" +
  187. " on w.deliverygoodsid = dg.deliverygoodsid" +
  188. " left join wrstandard wg" +
  189. " on w.wrstandardid = wg.wrstandardid" +
  190. " left join warehouseinfo h" +
  191. " on w.warehouseid = h.autoid" +
  192. " where 1 = 1 %v" +
  193. " order by deliverygoodsname"
  194. var param, param2 utils.SQLVal
  195. param.And("t.haswr", r.HasWr)
  196. param.And("t.wrpricetype", r.WrPriceType)
  197. param.AndEx("t.marketid", r.MarketId, r.MarketId > 0)
  198. param2.AndLike("w.wrfactortypename", r.WRSTANDARDNAME)
  199. param2.AndLike("w.wrfactortypename", r.BRANDNAME)
  200. param2.AndEx("w.warehouseid", r.WAREHOUSEID, r.WAREHOUSEID > 0)
  201. sqlId.FormatParam(param.String(), param.String(), param2.String())
  202. sqlId.Page(r.Page, r.PageSize)
  203. return sqlId.String()
  204. }
  205. func (r *WrOrderQuote) buildSql() string {
  206. if r.WrPriceType == 1 {
  207. return r.buildSqlFixedPrice()
  208. } else {
  209. return r.buildSqlPriceMove()
  210. }
  211. }
  212. // GetDataEx 获取买卖大厅行情
  213. func (r *WrOrderQuote) GetDataEx() (interface{}, error) {
  214. sData := make([]WrOrderQuote, 0)
  215. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  216. for i := range sData {
  217. sData[i].calc()
  218. }
  219. return sData, err
  220. }
  221. // WrOrderQuoteDetail 行情大厅明细(买卖大厅)
  222. type WrOrderQuoteDetail struct {
  223. WRTRADEORDERID string `json:"wrtradeorderid" xorm:"WRTRADEORDERID"` // 仓单贸易委托单ID(320+Unix秒时间戳(10位)+xxxxxx)
  224. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 买卖 - 0:买 1:卖
  225. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 购买方(销售方)用户ID
  226. QTY float64 `json:"orderqty" xorm:"ORDERQTY"` // 买(卖)量(=委托量-成交量)
  227. PRICE float64 `json:"fixedprice" xorm:"FIXEDPRICE"` // 买(卖)价
  228. PRICEMOVE float64 `json:"pricemove" xorm:"PRICEMOVE"` // 买(卖)升贴水- 基差
  229. USERNAME string `json:"username" xorm:"'USERNAME'"` // 购买方(销售方)
  230. PageEx `xorm:"extends"`
  231. WRFACTORTYPEID int64 `json:"-" form:"wrfactortypeid"` // 仓单要素id
  232. HasWr int32 `json:"-" form:"haswr"` // 是否有仓单 0-没有 1-有
  233. WrPriceType int32 `json:"-" form:"wrpricetype"` // 价格方式 - 1:固定价 2-浮动价 - [挂牌]
  234. MarketId int32 `json:"-" form:"marketid"` // 市场id
  235. GOODSID int32 `json:"-" form:"goodsid"` // 商品id
  236. }
  237. func (r *WrOrderQuoteDetail) calc() {
  238. }
  239. func (r *WrOrderQuoteDetail) buildSql() string {
  240. var sqlId utils.SQLVal = "select t.wrtradeorderid," +
  241. " t.wrfactortypeid," +
  242. " t.userid," +
  243. " t.orderqty - t.tradeqty as qty," +
  244. " t.fixedprice as price," +
  245. " t.pricemove," +
  246. " t.wrpricetype," +
  247. " t.buyorsell," +
  248. " u.accountname as username," +
  249. " c.goodsid," +
  250. " c.goodscode" +
  251. " from WRTRADE_ORDERDETAIL t" +
  252. " left join WRTRADE_GOODSCONFIG c" +
  253. " on t.wrtradeorderid = c.wrtradeorderid" +
  254. " left join Useraccount u" +
  255. " on t.userid = u.Accountname" +
  256. " where 1 = 1" +
  257. " and t.wrtradetype = 1" +
  258. " and t.wrtradeorderstatus in (3, 10)"
  259. sqlId.And("t.haswr", r.HasWr)
  260. sqlId.And("t.wrpricetype", r.WrPriceType)
  261. sqlId.And("t.wrfactortypeid", r.WRFACTORTYPEID)
  262. sqlId.And("c.goodsid", r.GOODSID)
  263. sqlId.And("t.buyorsell", r.BUYORSELL)
  264. sqlId.AndEx("t.marketid", r.MarketId, r.MarketId > 0)
  265. if r.BUYORSELL == 0 {
  266. if r.WrPriceType == 1 {
  267. sqlId.Join(" order by t.fixedprice desc")
  268. } else {
  269. sqlId.Join(" order by t.pricemove desc")
  270. }
  271. } else {
  272. if r.WrPriceType == 1 {
  273. sqlId.Join(" order by t.fixedprice asc")
  274. } else {
  275. sqlId.Join(" order by t.pricemove asc")
  276. }
  277. }
  278. sqlId.Page(r.Page, r.PageSize)
  279. return sqlId.String()
  280. }
  281. // GetDataEx 获取行情大厅明细(买卖大厅)
  282. func (r *WrOrderQuoteDetail) GetDataEx() (interface{}, error) {
  283. sData := make([]WrOrderQuoteDetail, 0)
  284. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  285. for i := range sData {
  286. sData[i].calc()
  287. }
  288. return sData, err
  289. }