delivery.go 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package models
  2. import (
  3. "mtp2_if/db"
  4. "mtp2_if/utils"
  5. )
  6. // DeliveryRelation 交割关系
  7. type DeliveryRelation struct {
  8. GOODSID int32 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 交易合约ID
  9. DELIVERYMODE int32 `json:"deliverymode" xorm:"DELIVERYMODE"` // 交割方式 - 1:点选式 2:申报式
  10. WRSTANDARDID int32 `json:"wrstandardid" xorm:"WRSTANDARDID" form:"wrstandardid"` // 现货商品ID
  11. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID" form:"deliverygoodsid"` // 现货品种ID
  12. MINDELIVERYQTY float64 `json:"mindeliveryqty" xorm:"MINDELIVERYQTY"` // 最小交割系数(K)
  13. RRATIO1 int32 `json:"rratio1" xorm:"RRATIO1"` // 兑换系数(交易合约)(R1)
  14. RRATIO2 int32 `json:"rratio2" xorm:"RRATIO2"` // 兑换系数(现货商品)(R2)
  15. DELIVERYPRICERULE int32 `json:"deliverypricerule" xorm:"DELIVERYPRICERULE"` // 交割价规则- 1:行情价 2:建仓价
  16. BEGINDATE string `json:"begindate" xorm:"BEGINDATE" form:"begindate"` // 起始日期(yyyyMMdd)
  17. ENDDATE string `json:"enddate" xorm:"ENDDATE" form:"enddate"` // 结束日期(yyyyMMdd)
  18. BUYTEMPLATEID int64 `json:"buytemplateid" xorm:"BUYTEMPLATEID" form:"buytemplateid"` // 买履约计划模板ID
  19. SELLTEMPLATEID int64 `json:"selltemplateid" xorm:"SELLTEMPLATEID" form:"selltemplateid"` // 卖履约计划模板ID
  20. DELIVERYTYPE int32 `json:"deliverytype" xorm:"DELIVERYTYPE"` // 交割模式 - 1:X交割 2:X+P交割 3:X+C交割 4:X+P+C交割
  21. XDELIVERYRATIO int32 `json:"xdeliveryratio" xorm:"XDELIVERYRATIO"` // 交易合约系数(m)
  22. PPRICEMODE int32 `json:"ppricemode" xorm:"PPRICEMODE"` // P合约价格方式 - 1:商品价 2:固定值
  23. PDELIVERYPRICE float64 `json:"pdeliveryprice" xorm:"PDELIVERYPRICE"` // P合约价格(商品价时填写0,固定值时填写固定值)
  24. PDELIVERYRATIO int32 `json:"pdeliveryratio" xorm:"PDELIVERYRATIO"` // P合约系数(n)
  25. PGOODSID int32 `json:"pgoodsid" xorm:"PGOODSID" form:"pgoodsid"` // P合约ID
  26. P2PRICEMODE int32 `json:"p2pricemode" xorm:"P2PRICEMODE"` // P2合约价格方式 - 1:商品价 2:固定值
  27. P2DELIVERYPRICE float64 `json:"p2deliveryprice" xorm:"P2DELIVERYPRICE"` // P2合约价格(商品价时填写0,固定值时填写固定值)
  28. P2DELIVERYRATIO int32 `json:"p2deliveryratio" xorm:"P2DELIVERYRATIO"` // P2合约系数(p)
  29. P2GOODSID int32 `json:"p2goodsid" xorm:"P2GOODSID" form:"p2goodsid"` // P2合约ID
  30. RRATIO int32 `json:"rratio" xorm:"RRATIO"` // 兑换系数(R)
  31. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  32. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  33. DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 品种代码
  34. DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 品种名称
  35. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 品类代码
  36. WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 品类名称
  37. BUYTMPNAME string `json:"buytmpname" xorm:"'BUYTMPNAME'"` // 买履约模板名称
  38. SELLTMPNAME string `json:"selltmpname" xorm:"'SELLTMPNAME'"` // 卖履约模板名称
  39. }
  40. func (r *DeliveryRelation) calc() {
  41. }
  42. func (r *DeliveryRelation) buildSql() string {
  43. var sqlId utils.SQLVal = "select t.goodsid," +
  44. " t.deliverymode," +
  45. " t.wrstandardid," +
  46. " t.deliverygoodsid," +
  47. " t.mindeliveryqty," +
  48. " t.rratio1," +
  49. " t.rratio2," +
  50. " t.deliverypricerule," +
  51. " t.begindate," +
  52. " t.enddate," +
  53. " t.buytemplateid," +
  54. " t.selltemplateid," +
  55. " t.deliverytype," +
  56. " t.xdeliveryratio," +
  57. " t.ppricemode," +
  58. " t.pdeliveryprice," +
  59. " t.pdeliveryratio," +
  60. " t.pgoodsid," +
  61. " t.p2pricemode," +
  62. " t.p2deliveryprice," +
  63. " t.p2deliveryratio," +
  64. " t.p2goodsid," +
  65. " t.rratio," +
  66. " g.goodscode," +
  67. " g.goodsname," +
  68. " dg.deliverygoodscode," +
  69. " dg.deliverygoodsname," +
  70. " w.wrstandardcode," +
  71. " w.wrstandardname," +
  72. " k1.templatename buytmpname," +
  73. " k2.templatename selltmpname" +
  74. " from deliveryrelation t" +
  75. " left join goods g" +
  76. " on t.goodsid = g.goodsid" +
  77. " left join deliverygoods dg" +
  78. " on t.deliverygoodsid = dg.deliverygoodsid" +
  79. " left join wrstandard w" +
  80. " on t.wrstandardid = w.wrstandardid" +
  81. " left join performanceplantemplate k1" +
  82. " on t.buytemplateid = k1.autoid" +
  83. " left join performanceplantemplate k2" +
  84. " on t.selltemplateid = k2.autoid" +
  85. " where 1=1"
  86. sqlId.AndEx("t.GOODSID", r.GOODSID, r.GOODSID > 0)
  87. sqlId.AndEx("t.wrstandardid", r.WRSTANDARDID, r.WRSTANDARDID > 0)
  88. return sqlId.String()
  89. }
  90. // GetDataEx 获取交割关系
  91. func (r *DeliveryRelation) GetDataEx() (interface{}, error) {
  92. sData := make([]DeliveryRelation, 0)
  93. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  94. for i := range sData {
  95. sData[i].calc()
  96. }
  97. return sData, err
  98. }
  99. // DeliveryRelationDetail 交割关系明细
  100. type DeliveryRelationDetail struct {
  101. GOODSID int32 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 交易合约ID
  102. DGFACTORYITEMID int64 `json:"dgfactoryitemid" xorm:"DGFACTORYITEMID"` // 选择项ID
  103. DGFACTORYITEMTYPEID int64 `json:"dgfactoryitemtypeid" xorm:"DGFACTORYITEMTYPEID"` // 要素项类型ID
  104. PREMIUMVALUE float64 `json:"premiumvalue" xorm:"PREMIUMVALUE"` // 升贴水值
  105. ITEMTYPENAME string `json:"itemtypename" xorm:"'ITEMTYPENAME'"` // 要素项名称
  106. DGFACTORYITEMVALUE string `json:"dgfactoryitemvalue" xorm:"'DGFACTORYITEMVALUE'"` // 要素项值
  107. WMCATFLAG int `json:"-"` // 合同相同项(如有多个仓库, 逗号隔开, 仓库1, 仓库2, 仓库3 ) 1-合并
  108. }
  109. func (r *DeliveryRelationDetail) calc() {
  110. }
  111. func (r *DeliveryRelationDetail) buildSql() string {
  112. var sqlId utils.SQLVal
  113. if r.WMCATFLAG == 1 {
  114. sqlId = "select a.goodsid," +
  115. " a.dgfactoryitemtypeid," +
  116. " a.itemtypename," +
  117. " wm_concat(a.dgfactoryitemvalue) dgfactoryitemvalue" +
  118. " from (select t.goodsid," +
  119. " t.dgfactoryitemid," +
  120. " t.dgfactoryitemtypeid," +
  121. " t.premiumvalue," +
  122. " dt.itemtypename," +
  123. " di.dgfactoryitemvalue" +
  124. " from deliveryrelationdetail t" +
  125. " left join deliveryrelation s" +
  126. " on t.goodsid = s.goodsid" +
  127. " left join dgfactoryitem di" +
  128. " on t.dgfactoryitemid = di.dgfactoryitemid" +
  129. " left join dgfactoryitemtype dt" +
  130. " on t.dgfactoryitemtypeid = dt.dgfactoryitemtypeid" +
  131. " and dt.deliverygoodsid = s.deliverygoodsid" +
  132. " where 1 = 1" +
  133. " and t.GOODSID = %v" +
  134. " order by t.dgfactoryitemtypeid, di.dgfactoryitemvalue) a" +
  135. " group by a.goodsid, a.dgfactoryitemtypeid, a.itemtypename"
  136. sqlId.FormatParam(r.GOODSID)
  137. } else {
  138. sqlId = "select t.goodsid," +
  139. " t.dgfactoryitemid," +
  140. " t.dgfactoryitemtypeid," +
  141. " t.premiumvalue," +
  142. " dt.itemtypename," +
  143. " di.dgfactoryitemvalue" +
  144. " from deliveryrelationdetail t" +
  145. " left join deliveryrelation s" +
  146. " on t.goodsid = s.goodsid" +
  147. " left join dgfactoryitem di" +
  148. " on t.dgfactoryitemid = di.dgfactoryitemid" +
  149. " left join dgfactoryitemtype dt" +
  150. " on t.dgfactoryitemtypeid = dt.dgfactoryitemtypeid" +
  151. " and dt.deliverygoodsid = s.deliverygoodsid" +
  152. " where 1 = 1"
  153. sqlId.AndEx("t.GOODSID", r.GOODSID, r.GOODSID > 0)
  154. }
  155. return sqlId.String()
  156. }
  157. // GetDataEx 获取交割关系明细
  158. func (r *DeliveryRelationDetail) GetDataEx() (interface{}, error) {
  159. sData := make([]DeliveryRelationDetail, 0)
  160. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  161. for i := range sData {
  162. sData[i].calc()
  163. }
  164. return sData, err
  165. }