wrTrade2.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  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. "fmt"
  9. "mtp2_if/db"
  10. "mtp2_if/utils"
  11. )
  12. // WrOrderQuote 买卖大厅行情
  13. type WrOrderQuote struct {
  14. WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"'WRFACTORTYPEID'" form:"wrfactortypeid"` // 仓单要素id
  15. BUYPRICE float64 `json:"buyprice" xorm:"'BUYPRICE'"` // 买价
  16. BUYQTY float64 `json:"buyqty" xorm:"'BUYQTY'"` // 买量
  17. SELLPRICE float64 `json:"sellprice" xorm:"'SELLPRICE'"` // 卖价
  18. SELLQTY float64 `json:"sellqty" xorm:"'SELLQTY'"` // 卖量
  19. WRFACTORTYPENAME string `json:"wrfactortypename" xorm:"'WRFACTORTYPENAME'"` // 仓单要素类型名称(选择项要素的名称合并显示,逗号分隔)
  20. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 品种id
  21. WRSTANDARDID int32 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 商品id
  22. WAREHOUSEID int32 `json:"warehouseid" xorm:"'WAREHOUSEID'" form:"warehouseid"` // 仓库id
  23. DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 品种名称
  24. DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 品种代码
  25. WAREHOUSENAME string `json:"warehousename" xorm:"'WAREHOUSENAME'"` // 仓库名称
  26. WAREHOUSECODE string `json:"warehousecode" xorm:"'WAREHOUSECODE'"` // 仓库代码
  27. WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'" form:"wrstandardname"` // 商品名称
  28. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 商品代码
  29. WRGOODSNAME string `json:"wrgoodsname" xorm:"'WRGOODSNAME'"` // 商品(商品名称+仓库要素名称 拼接)
  30. BUYPRICEMOVE float64 `json:"buypricemove" xorm:"'BUYPRICEMOVE'"` // 买升贴水(基差)
  31. SELLPRICEMOVE float64 `json:"sellpricemove" xorm:"'SELLPRICEMOVE'"` // 卖升贴水(基差)
  32. GOODSID int32 `json:"goodsid" xorm:"'GOODSID'"` // 商品id(浮动价列表才有)
  33. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品合约(浮动价列表才有)
  34. PageEx `xorm:"extends"` // 页码信息
  35. HasWr int32 `json:"-" form:"haswr"` // 是否有仓单 0-没有 1-有
  36. WrPriceType int32 `json:"-" form:"wrpricetype"` // 价格方式 - 1:固定价 2-浮动价 - [挂牌]
  37. MarketId int32 `json:"-" form:"marketid"` // 市场id
  38. BRANDNAME string `json:"-" form:"brandname"` // 品牌名称
  39. }
  40. func (r *WrOrderQuote) calc() {
  41. }
  42. // buildSqlFixedPrice 一口价
  43. func (r *WrOrderQuote) buildSqlFixedPrice() string {
  44. var sqlId utils.SQLVal = "with buyQuote as" +
  45. " (" +
  46. " select a.wrfactortypeid, a.fixedprice buyPrice, sum(a.orderqty) buyQty" +
  47. " from (select t.wrfactortypeid," +
  48. " t.marketid," +
  49. " t.buyorsell," +
  50. " t.orderqty - t.tradeqty as orderqty," +
  51. " t.fixedprice," +
  52. " rank() over(partition by t.wrfactortypeid order by t.fixedprice desc) cnt" +
  53. " from wrtrade_orderdetail t" +
  54. " where t.wrtradetype = 1 and t.buyorsell = 0 and t.wrtradeorderstatus in(3,10) %v" +
  55. " ) a" +
  56. " where a.cnt = 1" +
  57. " group by a.wrfactortypeid, a.fixedprice)," +
  58. "sellQuote as" +
  59. " (" +
  60. " select a.wrfactortypeid, a.fixedprice sellPrice, sum(a.orderqty) sellQty" +
  61. " from (select t.wrfactortypeid," +
  62. " t.marketid," +
  63. " t.buyorsell," +
  64. " t.orderqty - t.tradeqty as orderqty," +
  65. " t.fixedprice," +
  66. " rank() over(partition by t.wrfactortypeid order by t.fixedprice asc) cnt" +
  67. " from wrtrade_orderdetail t" +
  68. " where t.wrtradetype = 1 and t.buyorsell = 1 and t.wrtradeorderstatus in(3,10) %v " +
  69. " ) a" +
  70. " where a.cnt = 1" +
  71. " group by a.wrfactortypeid, a.fixedprice)," +
  72. "wrQuote as (" +
  73. " select nvl(k1.wrfactortypeid, k2.wrfactortypeid) wrfactortypeid," +
  74. " k1.buyPrice," +
  75. " k1.buyQty," +
  76. " k2.sellPrice," +
  77. " k2.sellQty" +
  78. " from buyQuote k1" +
  79. " full join sellQuote k2" +
  80. " on k1.wrfactortypeid = k2.wrfactortypeid" +
  81. ")" +
  82. "select k.*," +
  83. " w.wrfactortypename," +
  84. " w.deliverygoodsid," +
  85. " w.wrstandardid," +
  86. " w.warehouseid," +
  87. " dg.deliverygoodsname," +
  88. " dg.deliverygoodscode," +
  89. " h.warehousename," +
  90. " h.warehousecode," +
  91. " wg.wrstandardname," +
  92. " wg.wrstandardcode," +
  93. " wg.wrstandardname || w.wrfactortypename as wrgoodsname" +
  94. " from wrQuote k" +
  95. " left join WRFactorType w" +
  96. " on k.wrfactortypeid = w.wrfactortypeid" +
  97. " left join deliverygoods dg" +
  98. " on w.deliverygoodsid = dg.deliverygoodsid" +
  99. " left join wrstandard wg" +
  100. " on w.wrstandardid = wg.wrstandardid" +
  101. " left join warehouseinfo h" +
  102. " on w.warehouseid = h.autoid" +
  103. " where 1=1 %v " +
  104. "order by deliverygoodsname"
  105. var param, param2 utils.SQLVal
  106. param.And("t.haswr", r.HasWr)
  107. param.And("t.wrpricetype", r.WrPriceType)
  108. param.AndEx("t.marketid", r.MarketId, r.MarketId > 0)
  109. param2.AndLike("w.wrfactortypename", r.WRSTANDARDNAME)
  110. param2.AndLike("w.wrfactortypename", r.BRANDNAME)
  111. param2.AndEx("w.warehouseid", r.WAREHOUSEID, r.WAREHOUSEID > 0)
  112. sqlId.FormatParam(param.String(), param.String(), param2.String())
  113. sqlId.Page(r.Page, r.PageSize)
  114. return sqlId.String()
  115. }
  116. // buildSqlPriceMove 浮动价
  117. func (r *WrOrderQuote) buildSqlPriceMove() string {
  118. var sqlId utils.SQLVal = "with buyQuote as" +
  119. " (select a.wrfactortypeid," +
  120. " a.pricemove buypricemove," +
  121. " sum(a.orderqty) buyQty," +
  122. " a.goodsid," +
  123. " a.goodscode" +
  124. " from (select t.wrfactortypeid," +
  125. " t.marketid," +
  126. " t.buyorsell," +
  127. " t.orderqty - t.tradeqty as orderqty," +
  128. " t.pricemove," +
  129. " t.wrtradeorderid," +
  130. " c.goodsid," +
  131. " c.goodscode," +
  132. " rank() over(partition by t.wrfactortypeid, c.goodsid order by t.pricemove desc) cnt" +
  133. " from wrtrade_orderdetail t" +
  134. " left join WRTrade_GoodsConfig c" +
  135. " on t.wrtradeorderid = c.wrtradeorderid" +
  136. " where t.wrtradetype = 1 and t.wrtradeorderstatus in(3,10)" +
  137. " and t.buyorsell = 0 %v) a" +
  138. " where a.cnt = 1" +
  139. " group by a.wrfactortypeid, a.pricemove, a.goodsid, a.goodscode)," +
  140. "sellQuote as" +
  141. " (select a.wrfactortypeid," +
  142. " a.pricemove sellpricemove," +
  143. " a.goodsid," +
  144. " a.goodscode," +
  145. " sum(a.orderqty) sellQty" +
  146. " from (select t.wrfactortypeid," +
  147. " t.marketid," +
  148. " t.buyorsell," +
  149. " t.orderqty - t.tradeqty as orderqty," +
  150. " t.pricemove," +
  151. " c.goodsid," +
  152. " c.goodscode," +
  153. " rank() over(partition by t.wrfactortypeid order by t.pricemove asc) cnt" +
  154. " from wrtrade_orderdetail t" +
  155. " left join WRTrade_GoodsConfig c" +
  156. " on t.wrtradeorderid = c.wrtradeorderid" +
  157. " where t.wrtradetype = 1 and t.wrtradeorderstatus in(3,10)" +
  158. " and t.buyorsell = 1 %v) a" +
  159. " where a.cnt = 1" +
  160. " group by a.wrfactortypeid, a.pricemove, a.goodsid, a.goodscode)," +
  161. "wrQuote as" +
  162. " (select nvl(k1.wrfactortypeid, k2.wrfactortypeid) wrfactortypeid," +
  163. " nvl(k1.goodsid, k2.goodsid) goodsid," +
  164. " nvl(k1.goodscode, k2.goodscode) goodscode," +
  165. " k1.buypricemove," +
  166. " k1.buyQty," +
  167. " k2.sellpricemove," +
  168. " k2.sellQty" +
  169. " from buyQuote k1" +
  170. " full join sellQuote k2" +
  171. " on k1.wrfactortypeid = k2.wrfactortypeid)" +
  172. "select k.*," +
  173. " w.wrfactortypename," +
  174. " w.deliverygoodsid," +
  175. " w.wrstandardid," +
  176. " w.warehouseid," +
  177. " dg.deliverygoodsname," +
  178. " dg.deliverygoodscode," +
  179. " h.warehousename," +
  180. " h.warehousecode," +
  181. " wg.wrstandardname," +
  182. " wg.wrstandardcode," +
  183. " wg.wrstandardname || w.wrfactortypename as wrgoodsname" +
  184. " from wrQuote k" +
  185. " left join WRFactorType w" +
  186. " on k.wrfactortypeid = w.wrfactortypeid" +
  187. " left join deliverygoods dg" +
  188. " on w.deliverygoodsid = dg.deliverygoodsid" +
  189. " left join wrstandard wg" +
  190. " on w.wrstandardid = wg.wrstandardid" +
  191. " left join warehouseinfo h" +
  192. " on w.warehouseid = h.autoid" +
  193. " where 1 = 1 %v" +
  194. " order by deliverygoodsname"
  195. var param, param2 utils.SQLVal
  196. param.And("t.haswr", r.HasWr)
  197. param.And("t.wrpricetype", r.WrPriceType)
  198. param.AndEx("t.marketid", r.MarketId, r.MarketId > 0)
  199. param2.AndLike("w.wrfactortypename", r.WRSTANDARDNAME)
  200. param2.AndLike("w.wrfactortypename", r.BRANDNAME)
  201. param2.AndEx("w.warehouseid", r.WAREHOUSEID, r.WAREHOUSEID > 0)
  202. sqlId.FormatParam(param.String(), param.String(), param2.String())
  203. sqlId.Page(r.Page, r.PageSize)
  204. return sqlId.String()
  205. }
  206. func (r *WrOrderQuote) buildSql() string {
  207. if r.WrPriceType == 1 {
  208. return r.buildSqlFixedPrice()
  209. } else {
  210. return r.buildSqlPriceMove()
  211. }
  212. }
  213. // GetDataEx 获取买卖大厅行情
  214. func (r *WrOrderQuote) GetDataEx() (interface{}, error) {
  215. sData := make([]WrOrderQuote, 0)
  216. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  217. for i := range sData {
  218. sData[i].calc()
  219. }
  220. return sData, err
  221. }
  222. // WrOrderQuoteDetail 行情大厅明细(买卖大厅)
  223. type WrOrderQuoteDetail struct {
  224. WRTRADEORDERID string `json:"wrtradeorderid" xorm:"WRTRADEORDERID"` // 仓单贸易委托单ID(320+Unix秒时间戳(10位)+xxxxxx)
  225. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 买卖 - 0:买 1:卖
  226. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 购买方(销售方)用户ID
  227. QTY float64 `json:"orderqty" xorm:"ORDERQTY"` // 买(卖)量(=委托量-成交量)
  228. PRICE float64 `json:"fixedprice" xorm:"FIXEDPRICE"` // 买(卖)价
  229. PRICEMOVE float64 `json:"pricemove" xorm:"PRICEMOVE"` // 买(卖)升贴水- 基差
  230. USERNAME string `json:"username" xorm:"'USERNAME'"` // 购买方(销售方)
  231. PageEx `xorm:"extends"`
  232. WRFACTORTYPEID int64 `json:"-" form:"wrfactortypeid"` // 仓单要素id
  233. HasWr int32 `json:"-" form:"haswr"` // 是否有仓单 0-没有 1-有
  234. WrPriceType int32 `json:"-" form:"wrpricetype"` // 价格方式 - 1:固定价 2-浮动价 - [挂牌]
  235. MarketId int32 `json:"-" form:"marketid"` // 市场id
  236. GOODSID int32 `json:"-" form:"goodsid"` // 商品id
  237. }
  238. func (r *WrOrderQuoteDetail) calc() {
  239. }
  240. func (r *WrOrderQuoteDetail) buildSql() string {
  241. var sqlId utils.SQLVal = "select t.wrtradeorderid," +
  242. " t.wrfactortypeid," +
  243. " t.userid," +
  244. " t.orderqty - t.tradeqty as qty," +
  245. " t.fixedprice as price," +
  246. " t.pricemove," +
  247. " t.wrpricetype," +
  248. " t.buyorsell," +
  249. " u.accountname as username," +
  250. " c.goodsid," +
  251. " c.goodscode" +
  252. " from WRTRADE_ORDERDETAIL t" +
  253. " left join WRTRADE_GOODSCONFIG c" +
  254. " on t.wrtradeorderid = c.wrtradeorderid" +
  255. " left join Useraccount u" +
  256. " on t.userid = u.Accountname" +
  257. " where 1 = 1" +
  258. " and t.wrtradetype = 1" +
  259. " and t.wrtradeorderstatus in (3, 10)"
  260. sqlId.And("t.haswr", r.HasWr)
  261. sqlId.And("t.wrpricetype", r.WrPriceType)
  262. sqlId.And("t.wrfactortypeid", r.WRFACTORTYPEID)
  263. sqlId.And("c.goodsid", r.GOODSID)
  264. sqlId.And("t.buyorsell", r.BUYORSELL)
  265. sqlId.AndEx("t.marketid", r.MarketId, r.MarketId > 0)
  266. if r.BUYORSELL == 0 {
  267. if r.WrPriceType == 1 {
  268. sqlId.Join(" order by t.fixedprice desc")
  269. } else {
  270. sqlId.Join(" order by t.pricemove desc")
  271. }
  272. } else {
  273. if r.WrPriceType == 1 {
  274. sqlId.Join(" order by t.fixedprice asc")
  275. } else {
  276. sqlId.Join(" order by t.pricemove asc")
  277. }
  278. }
  279. sqlId.Page(r.Page, r.PageSize)
  280. return sqlId.String()
  281. }
  282. // GetDataEx 获取行情大厅明细(买卖大厅)
  283. func (r *WrOrderQuoteDetail) GetDataEx() (interface{}, error) {
  284. sData := make([]WrOrderQuoteDetail, 0)
  285. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  286. for i := range sData {
  287. sData[i].calc()
  288. }
  289. return sData, err
  290. }
  291. // Wr2FactorType 仓单要素类型
  292. type Wr2FactorType struct {
  293. WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"WRFACTORTYPEID" form:"wrfactortypeid"` // 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
  294. WRFACTORTYPENAME string `json:"wrfactortypename" xorm:"WRFACTORTYPENAME" form:"wrfactortypename"` // 仓单要素类型名称(选择项要素的名称合并显示,逗号分隔)
  295. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID" form:"deliverygoodsid"` // 品种ID
  296. WAREHOUSEID int64 `json:"warehouseid" xorm:"WAREHOUSEID" form:"warehouseid"` // 仓库ID
  297. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID" form:"wrstandardid"` // 现货商品ID
  298. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE" form:"wrstandardcode"` // 现货商品代码
  299. OPTIONCOMPARE string `json:"optioncompare" xorm:"OPTIONCOMPARE" form:"optioncompare"` // 选择项比较串【{选择项ID}+{冒号}+选择项值 } ,逗号分隔,头尾加逗号】-- 所有选择项拼接,用于比较
  300. WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 商品名称
  301. DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 品种代码
  302. DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 品种名称
  303. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  304. WAREHOUSENAME string `json:"warehousename" xorm:"'WAREHOUSENAME'"` // 仓库名称
  305. WRTYPENAME string `json:"wrtypename"` // 商品
  306. }
  307. func (r *Wr2FactorType) Calc() {
  308. r.WRTYPENAME = r.WRSTANDARDNAME + "-" + r.WRFACTORTYPENAME
  309. }
  310. // WrPosition 仓单贸易持仓汇总
  311. type WrPosition struct {
  312. WRPOSITIONID int64 `json:"wrpositionid" xorm:"WRPOSITIONID" form:"wrpositionid"` // 仓单头寸ID(201+Unix秒时间戳(10位)+xxxxxx)
  313. WRUSERID int64 `json:"wruserid" xorm:"WRUSERID" form:"userid"` // 持有人ID
  314. TOTALQTY float64 `json:"totalqty" xorm:"TOTALQTY" form:"totalqty"` // 总数量(库存数量)
  315. INCREASEQTY float64 `json:"-" xorm:"INCREASEQTY" form:"increaseqty"` // 今日增加数量
  316. DECREASEQTY float64 `json:"-" xorm:"DECREASEQTY" form:"decreaseqty"` // 今日减少数量
  317. FREEZEQTY float64 `json:"freezeqty" xorm:"FREEZEQTY" form:"freezeqty"` // 总冻结数量
  318. RELATEDQTY float64 `json:"-" xorm:"RELATEDQTY" form:"relatedqty"` // 关联数量
  319. MODIFYTIME string `json:"modifytime" xorm:"MODIFYTIME" form:"modifytime"` // 修改时间(过户时间)
  320. MODIFIERID int64 `json:"-" xorm:"MODIFIERID" form:"modifierid"` // 修改人
  321. TRADEWRQTY float64 `json:"-" xorm:"TRADEWRQTY" form:"tradewrqty"` // 订单仓单头寸总数量
  322. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid"` // 帐户ID
  323. CREDITTOTALQTY float64 `json:"credittotalqty" xorm:"CREDITTOTALQTY" form:"credittotalqty"` // 授信总数量(预售仓单:预售总量)
  324. CREDITCURQTY float64 `json:"creditcurqty" xorm:"CREDITCURQTY" form:"creditcurqty"` // 授信当前数量(预售仓单:预售当前量)
  325. CREDITFREEZEQTY float64 `json:"creditfreezeqty" xorm:"CREDITFREEZEQTY" form:"creditfreezeqty"` // 授信冻结数量(预售仓单: 当前数量)
  326. CREDITTRADEQTY float64 `json:"credittradeqty" xorm:"CREDITTRADEQTY" form:"credittradeqty"` // 授信成交数量(预售仓单:成交总量)
  327. Wr2FactorType `xorm:"extends"`
  328. ENALBEQTY float64 `json:"enalbeqty" xorm:"'ENALBEQTY'"` // 可用数量
  329. CREDITENABLEQTY float64 `json:"creditenableqty" xorm:"'CREDITENABLEQTY'"` // 授信可用数量(预售仓单: 可用数量)
  330. PLEDGEQTY float64 `json:"pledgeqty" xorm:"'-'"` // 质押数量
  331. BUYEXCUTEQTY float64 `json:"buyexcuteqty"` // 采购履约中数量
  332. SELLEXCUTEQTY float64 `json:"sellexcuteqty"` // 销售履约中数量
  333. WRPOSITIONNO string `json:"wrpositionno"` // 仓单编号
  334. QueryType int32 `json:"querytype" form:"querytype"` // 查询类型 1-现货汇总 2-库存汇总(订单汇总) 3-现货明细
  335. }
  336. func (r *WrPosition) calc() {
  337. r.ENALBEQTY = r.TOTALQTY - r.FREEZEQTY
  338. r.CREDITENABLEQTY = r.CREDITCURQTY - r.CREDITFREEZEQTY
  339. r.WRPOSITIONNO = fmt.Sprintf("%v", r.WRFACTORTYPEID)
  340. r.Wr2FactorType.Calc()
  341. }
  342. func (r *WrPosition) buildSql() string {
  343. if r.QueryType == 1 {
  344. // 现货汇总 品种 + 品类 + 其它要素, 根据品种汇总
  345. return r.buildSql1()
  346. } else if r.QueryType == 2 {
  347. // 库存汇总 品种 + 仓库 + 品类 + 其它要素, 即全维度
  348. return r.buildSql2()
  349. } else {
  350. // 现货明细 仓单编号 + 品种 + 仓库 + 仓单要素 即全维度 跟库存汇总一样
  351. return r.buildSql3()
  352. }
  353. }
  354. func (r *WrPosition) buildSql1() string {
  355. var sqlId utils.SQLVal = "with tmp as" +
  356. " (select t.*," +
  357. " w.wrstandardid," +
  358. " w.warehouseid," +
  359. " wd.wrstandardname," +
  360. " wd.wrstandardname || '-' ||w.wrfactortypename as wrtypename" +
  361. " from WRPOSITION t" +
  362. " left join WRFACTORTYPE w" +
  363. " on t.wrfactortypeid = w.wrfactortypeid" +
  364. " left join wrstandard wd" +
  365. " on w.wrstandardid = wd.wrstandardid" +
  366. " where t.wruserid = %v)," +
  367. "hld as" +
  368. " (select k.deliverygoodsid," +
  369. " k.wrtypename," +
  370. " sum(k.TOTALQTY) TOTALQTY," +
  371. " sum(k.INCREASEQTY) INCREASEQTY," +
  372. " sum(k.DECREASEQTY) DECREASEQTY," +
  373. " sum(k.FREEZEQTY) FREEZEQTY," +
  374. " sum(k.RELATEDQTY) RELATEDQTY," +
  375. " sum(k.TRADEWRQTY) TRADEWRQTY," +
  376. " sum(k.CREDITTOTALQTY) CREDITTOTALQTY," +
  377. " sum(k.CREDITCURQTY) CREDITCURQTY," +
  378. " sum(k.CREDITFREEZEQTY) CREDITFREEZEQTY," +
  379. " sum(k.CREDITTRADEQTY) CREDITTRADEQTY" +
  380. " from tmp k" +
  381. " where 1 = 1" +
  382. " group by k.deliverygoodsid, k.wrstandardname, k.wrtypename)" +
  383. "select h.*, g.deliverygoodsname, g.deliverygoodscode, e.enumdicname" +
  384. " from hld h" +
  385. " left join deliverygoods g" +
  386. " on h.deliverygoodsid = g.deliverygoodsid" +
  387. " left join enumdicitem e" +
  388. " on e.enumitemname = g.goodsunitid" +
  389. " and e.enumdiccode = 'goodsunit'"
  390. sqlId.FormatParam(r.WRUSERID)
  391. return sqlId.String()
  392. }
  393. func (r *WrPosition) buildSql2() string {
  394. return r.buildSql3()
  395. }
  396. func (r *WrPosition) buildSql3() string {
  397. var sqlId utils.SQLVal = "SELECT t.WRPOSITIONID," +
  398. " t.WRUSERID," +
  399. " t.TOTALQTY," +
  400. " t.INCREASEQTY," +
  401. " t.DECREASEQTY," +
  402. " t.FREEZEQTY," +
  403. " t.RELATEDQTY," +
  404. " to_char(t.MODIFYTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFYTIME," +
  405. " t.MODIFIERID," +
  406. " t.TRADEWRQTY," +
  407. " t.ACCOUNTID," +
  408. " t.CREDITTOTALQTY," +
  409. " t.CREDITCURQTY," +
  410. " t.CREDITFREEZEQTY," +
  411. " t.CREDITTRADEQTY," +
  412. " w.WRFACTORTYPEID," +
  413. " w.WRFACTORTYPENAME," +
  414. " w.DELIVERYGOODSID," +
  415. " w.WAREHOUSEID," +
  416. " w.WRSTANDARDID," +
  417. " w.WRSTANDARDCODE," +
  418. " w.OPTIONCOMPARE," +
  419. " dg.deliverygoodscode," +
  420. " dg.deliverygoodsname," +
  421. " wd.wrstandardcode," +
  422. " wd.wrstandardname," +
  423. " e.enumdicname" +
  424. " FROM WRPOSITION t" +
  425. " LEFT JOIN WRFACTORTYPE w" +
  426. " on t.wrfactortypeid = w.wrfactortypeid" +
  427. " LEFT JOIN DELIVERYGOODS dg" +
  428. " on t.deliverygoodsid = dg.deliverygoodsid" +
  429. " LEFT JOIN WRSTANDARD wd" +
  430. " on w.wrstandardid = wd.wrstandardid" +
  431. " left join enumdicitem e" +
  432. " on e.enumitemname = dg.goodsunitid" +
  433. " and e.enumdiccode = 'goodsunit'" +
  434. " WHERE 1 = 1"
  435. sqlId.And("t.WRUSERID", r.WRUSERID)
  436. return sqlId.String()
  437. }
  438. // GetDataEx 获取仓单贸易持仓汇总
  439. func (r *WrPosition) GetDataEx() (interface{}, error) {
  440. sData := make([]WrPosition, 0)
  441. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  442. for i := range sData {
  443. sData[i].calc()
  444. sData[i].QueryType = r.QueryType
  445. }
  446. return sData, err
  447. }