mine.go 53 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052
  1. package models
  2. import (
  3. "mtp2_if/db"
  4. "mtp2_if/utils"
  5. "time"
  6. )
  7. // MineCpTradePreSaleResult 我的持仓-预售持仓
  8. type MineCpTradePreSaleResult struct {
  9. TRADEID int64 `json:"tradeid" xorm:"TRADEID"` // 成交单号(101+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  10. GOODSID int64 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  11. BUYACCOUNTID int64 `json:"buyaccountid" xorm:"BUYACCOUNTID"` // 买方账户ID
  12. BUYUSERID int64 `json:"buyuserid" xorm:"BUYUSERID" form:"userid" binding:"required"` // 买方用户ID
  13. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID"` // 卖方账户ID
  14. SELLUSERID int64 `json:"selluserid" xorm:"SELLUSERID"` // 卖方用户ID
  15. RELATEDGOODSID int64 `json:"relatedgoodsid" xorm:"RELATEDGOODSID"` // 关联交易合约ID
  16. TRADEQTY int64 `json:"tradeqty" xorm:"TRADEQTY"` // 成交数量
  17. HANDLEFLAG int32 `json:"handleflag" xorm:"HANDLEFLAG"` // 处理标识 - 0:未处理 1:已处理
  18. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态
  19. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  20. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  21. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  22. RELATEDMARKETID int64 `json:"relatedmarketid" xorm:"RELATEDMARKETID"` // 关联交易合约市场ID
  23. APPLYID int64 `json:"applyid" xorm:"APPLYID"` // 预售申请ID
  24. OPENPRICE float64 `json:"openprice" xorm:"OPENPRICE"` // 建仓价格\预售价
  25. TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT"` // 成交金额\转让定金
  26. SELLHANDLEFLAG int32 `json:"sellhandleflag" xorm:"SELLHANDLEFLAG"` // 卖处理标识
  27. BUYHANDLEFLAG int32 `json:"buyhandleflag" xorm:"BUYHANDLEFLAG"` // 买处理标识
  28. RELATEDTRADEID int64 `json:"relatedtradeid" xorm:"RELATEDTRADEID"` // 二级市场成交单ID
  29. TRANSFERDEPOSIT float64 `json:"transferdeposit" xorm:"TRANSFERDEPOSIT"` // 转让定金
  30. DEPOSITREMAIN float64 `json:"depositremain" xorm:"DEPOSITREMAIN"` // 未付定金
  31. PAYSTATUS int32 `json:"paystatus" xorm:"PAYSTATUS"` // 支付状态 - 1:待支付 2:已支付
  32. STARTTIME string `json:"starttime" xorm:"STARTTIME"` // 预售开始时间
  33. ENDTIME string `json:"endtime" xorm:"ENDTIME"` // 预售结束时间
  34. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 期货合约代码(内部)
  35. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME"` // 期货合约名称
  36. Goodsnamedisplay string `json:"goodsnamedisplay" xorm:"GOODSNAMEDISPLAY"` // 商品名称
  37. TRANSFERDEPOSITRATIO float64 `json:"transferdepositratio" xorm:"TRANSFERDEPOSITRATIO"` // 转让定金比例(49)
  38. CUSTOMERNAME string `json:"sellname" xorm:"SELLNAME"` // 客户名称(企业名称)
  39. PageEx `xorm:"extends"` // 页码信息
  40. }
  41. func (r *MineCpTradePreSaleResult) calc() {
  42. }
  43. func (r *MineCpTradePreSaleResult) buildSql() string {
  44. var sqlId utils.SQLVal = `
  45. select
  46. g.goodscode,
  47. g.goodsname,
  48. g.goodscode || '/' || g.goodsname "GOODSNAMEDISPLAY",
  49. ui.customername "SELLNAME",
  50. to_char(pge.starttime, 'yyyy-mm-dd') STARTTIME,
  51. to_char(pge.endtime, 'yyyy-mm-dd') ENDTIME,
  52. g.transferdepositratio,
  53. t.tradeid,
  54. t.goodsid,
  55. t.buyaccountid,
  56. t.buyuserid,
  57. t.sellaccountid,
  58. t.selluserid,
  59. t.relatedgoodsid,
  60. t.tradeqty,
  61. t.handleflag,
  62. t.handlestatus,
  63. t.createtime,
  64. t.tradedate,
  65. t.marketid,
  66. t.relatedmarketid,
  67. t.applyid,
  68. t.openprice,
  69. t.tradeamount,
  70. t.sellhandleflag,
  71. t.buyhandleflag,
  72. t.relatedtradeid,
  73. t.transferdeposit,
  74. t.depositremain,
  75. t.paystatus
  76. from CPTrade_PresaleResult t
  77. left join CPTrade_PresaleGoodsEx pge on t.goodsid = pge.goodsid
  78. left join Goods g on t.relatedgoodsid = g.goodsid
  79. left join userinfo ui on pge.userid = ui.userid
  80. where t.handleflag = 0 and pge.marketid = 48201
  81. and t.buyuserid = %v
  82. order by t.paystatus, pge.endtime
  83. `
  84. sqlId.FormatParam(r.BUYUSERID)
  85. sqlId.Page(r.Page, r.PageSize)
  86. return sqlId.String()
  87. }
  88. func (r *MineCpTradePreSaleResult) GetDataByPage() (interface{}, error, int, int, int) {
  89. sData := make([]MineCpTradePreSaleResult, 0)
  90. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  91. total := 0
  92. for i := range sData {
  93. sData[i].calc()
  94. total = sData[i].Total
  95. }
  96. return sData, err, r.Page, r.PageSize, total
  97. }
  98. // MineTradePositionEx 我的持仓-转让持仓
  99. type MineTradePositionEx struct {
  100. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账号Id
  101. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品Id
  102. TRANSFERDEPOSIT float64 `json:"transferdeposit" xorm:"TRANSFERDEPOSIT"` // 转让定金(49)
  103. DEPOSITREMAIN float64 `json:"depositremain" xorm:"DEPOSITREMAIN"` // 未付定金
  104. PAYSTATUS int32 `json:"paystatus" xorm:"PAYSTATUS"` // 支付状态 -1:待支付 2:已支付
  105. BUYCURPOSITIONQTY int64 `json:"buycurpositionqty" xorm:"BUYCURPOSITIONQTY"` // 买当前持仓总数量
  106. BUYCURHOLDERAMOUNT float64 `json:"buycurholderamount" xorm:"BUYCURHOLDERAMOUNT"` // 买当前持仓总金额[商品币种]
  107. BUYFROZENQTY int64 `json:"buyfrozenqty" xorm:"BUYFROZENQTY"` // 买持仓冻结数量
  108. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 期货合约代码(内部)
  109. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME"` // 期货合约名称
  110. Goodsnamedisplay string `json:"goodsnamedisplay" xorm:"GOODSNAMEDISPLAY"` // 商品名称
  111. PRESALEPRICE float64 `json:"presaleprice" xorm:"PRESALEPRICE"` // 发售价(49)
  112. TRANSFERDEPOSITRATIO float64 `json:"transferdepositratio" xorm:"TRANSFERDEPOSITRATIO"` // 转让定金比例(49)
  113. LASTTRADEDATE string `json:"lasttradedate" xorm:"LASTTRADEDATE"` // 最后交易日期
  114. RELATEDGOODSID int64 `json:"relatedgoodsid" xorm:"RELATEDGOODSID"` // 关联交易合约ID
  115. CUSTOMERNAME string `json:"sellname" xorm:"SELLNAME"` // 客户名称(企业名称)
  116. Userid int `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  117. PageEx `xorm:"extends"` // 页码信息
  118. }
  119. func (r *MineTradePositionEx) calc() {
  120. }
  121. func (r *MineTradePositionEx) buildSql() string {
  122. var sqlId utils.SQLVal = `
  123. select
  124. g.goodscode,
  125. g.goodsname,
  126. g.goodscode || '/' || g.goodsname "GOODSNAMEDISPLAY",
  127. tp.buycurpositionqty,
  128. tp.buycurholderamount,
  129. tp.buyfrozenqty,
  130. ui.customername "SELLNAME",
  131. g.presaleprice,
  132. g.transferdepositratio,
  133. to_char(g.lasttradedate, 'yyyy-mm-dd') LASTTRADEDATE,
  134. tpe.accountid,
  135. tpe.transferdepositratio,
  136. tpe.transferdeposit,
  137. tpe.depositremain,
  138. tpe.paystatus
  139. from tradepositionEx tpe
  140. inner join tradeposition tp
  141. on tpe.accountid = tp.accountid
  142. and tpe.goodsid = tp.goodsid
  143. inner join goods g
  144. on tpe.goodsid = g.goodsid
  145. left join CPTrade_PresaleGoodsEx ge
  146. on tpe.goodsid = ge.relatedgoodsid
  147. left join userinfo ui
  148. on ge.userid = ui.userid
  149. left join taaccount ta
  150. on tpe.accountid = ta.accountid
  151. where g.marketid = 49201
  152. and ta.relateduserid = %v
  153. order by tpe.paystatus, g.goodscode
  154. `
  155. sqlId.FormatParam(r.Userid)
  156. sqlId.Page(r.Page, r.PageSize)
  157. return sqlId.String()
  158. }
  159. func (r *MineTradePositionEx) GetDataByPage() (interface{}, error, int, int, int) {
  160. sData := make([]MineTradePositionEx, 0)
  161. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  162. total := 0
  163. for i := range sData {
  164. sData[i].calc()
  165. total = sData[i].Total
  166. }
  167. return sData, err, r.Page, r.PageSize, total
  168. }
  169. // MineTradeOrderDetail 我的订单-预售认购
  170. type MineTradeOrderDetail struct {
  171. ORDERID string `json:"orderid" xorm:"ORDERID"` // 委托单号(100+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  172. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  173. BUILDTYPE int32 `json:"buildtype" xorm:"BUILDTYPE"` // 委托单据类型 - 1:建仓 2:平仓 3:先平后建
  174. PREORDERID int64 `json:"preorderid" xorm:"PREORDERID"` // 关联预埋单号(止盈止损单时填写)
  175. CANCELORDERID int64 `json:"cancelorderid" xorm:"CANCELORDERID"` // 撤单单号(撤单时填写)
  176. RELATEDID int64 `json:"relatedid" xorm:"RELATEDID"` // 关联单号(交割单)
  177. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  178. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账户ID[报价币种]
  179. MEMBERUSERID int64 `json:"memberuserid" xorm:"MEMBERUSERID"` // 所属会员UserID
  180. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 买卖 - 0:买 1:卖
  181. PRICEMODE int32 `json:"pricemode" xorm:"PRICEMODE"` // 取价方式 - 1:市价 2: 限价 3:浮动价
  182. ORDERPRICE float64 `json:"orderprice" xorm:"ORDERPRICE"` // 委托价格
  183. MARKETMAXSUB float64 `json:"marketmaxsub" xorm:"MARKETMAXSUB"` // 市价最大偏移范围 [浮动价 - 点差]
  184. ORDERQTY int64 `json:"orderqty" xorm:"ORDERQTY"` // 委托数量
  185. TRADEQTY int64 `json:"tradeqty" xorm:"TRADEQTY"` // 成交数量
  186. CANCELQTY int64 `json:"cancelqty" xorm:"CANCELQTY"` // 撤单数量
  187. OPENQTY int64 `json:"openqty" xorm:"OPENQTY"` // 开仓数量(先建后平操作,需要记录)
  188. CLOSEQTY int64 `json:"closeqty" xorm:"CLOSEQTY"` // 平仓数量(先建后平操作 需要记录)
  189. OPENTRADEQTY int64 `json:"opentradeqty" xorm:"OPENTRADEQTY"` // 开仓成交数量(先建后平操作,需要记录)
  190. CLOSETRADEQTY int64 `json:"closetradeqty" xorm:"CLOSETRADEQTY"` // 平仓成交数量(先建后平操作,需要记录)
  191. FREEZEMARGIN float64 `json:"freezemargin" xorm:"FREEZEMARGIN"` // 冻结保证金(冻结交易金额)
  192. UNFREEZEMARGIN float64 `json:"unfreezemargin" xorm:"UNFREEZEMARGIN"` // 解冻保证金
  193. FREEZECHARGE float64 `json:"freezecharge" xorm:"FREEZECHARGE"` // 冻结手续费
  194. UNFREEZECHARGE float64 `json:"unfreezecharge" xorm:"UNFREEZECHARGE"` // 解冻手续费
  195. OPENFREEZECHARGE float64 `json:"openfreezecharge" xorm:"OPENFREEZECHARGE"` // 开仓冻结手续费(先建后平操作,需要记录)
  196. CLOSEFREEZECHARGE float64 `json:"closefreezecharge" xorm:"CLOSEFREEZECHARGE"` // 平仓冻结手续费(先建后平操作,需要记录)
  197. OPENUNFREEZECHARGE float64 `json:"openunfreezecharge" xorm:"OPENUNFREEZECHARGE"` // 开仓解冻手续费(先建后平操作,需要记录)
  198. CLOSEUNFREEZECHARGE float64 `json:"closeunfreezecharge" xorm:"CLOSEUNFREEZECHARGE"` // 平仓解冻手续费(先建后平操作,需要记录)
  199. VALIDTYPE int32 `json:"validtype" xorm:"VALIDTYPE"` // 有效类型 - 1当日有效 2本周有效 3指定日期有效 4一直有效 5指定时间有效
  200. VALIDTIME time.Time `json:"validtime" xorm:"VALIDTIME"` // 有效期限
  201. VOLUMETYPE int32 `json:"volumetype" xorm:"VOLUMETYPE"` // 当时间有效类型为 “立即执行否则取消 IOC” 时,需要此项 - 0:任意量 1:最小量(暂时不支持) 2:全部量
  202. OPERATETYPE int32 `json:"operatetype" xorm:"OPERATETYPE"` // 操作类型 - 1:正常下单 2:斩仓 3:转单 4:结算撤单 5:系统卖出(适用于先平后建的卖出) 6:行情源报价 7:(结算)到期强平 8:(结算)协议转让 9:系统对冲单 10:(结算)到期无效 11:交割协议转让 12:交割协议平仓 13:交割成交(所有权) 14:管理端强行平仓 15:管理端协议转让 ... 23:融资买入
  203. ORDERTIME string `json:"ordertime" xorm:"ORDERTIME"` // 委托时间
  204. ORDERSRC int32 `json:"ordersrc" xorm:"ORDERSRC"` // 委托来源 - 1:客户端 2:管理端 3:风控服务 4:交割服务 5:交易服务 6:交易日结 7:商品强平 8:管理端商品退市强平 9:交易接口 10:交割服务商被动(受托竞价) 11:预埋触发
  205. ORDERSTATUS int32 `json:"orderstatus" xorm:"ORDERSTATUS"` // 委托状态 - 参考枚举'orderstatus' - 1:委托请求 2:待冻结 3:委托成功 4:委托失败 5:配对成功 6:已撤 7:部成 8:已成 9:部成部撤 10:成交失败 11:委托拒绝 12:经过摘牌(先摘后挂专用) 13:冻结成功(通道交易专用) 14:通道已撤 15:通道部成部撤 16:成交失败违约(荷兰式竞拍专用) 17:冻结PD成功 18:冻结PD失败 19:冻结能量成功 20:冻结能量失败 21:预约已报价 22:过期未付 23:优惠券处理中 24:仓单生成失败 25:首付扣款失败 26:履约失败 27:撤单解冻贷款失败
  206. OPERATORID int64 `json:"operatorid" xorm:"OPERATORID"` // 登录账号(LoginID)
  207. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  208. CLIENTORDERTIME time.Time `json:"clientordertime" xorm:"CLIENTORDERTIME"` // 客户端委托时间
  209. CLIENTTICKET string `json:"clientticket" xorm:"CLIENTTICKET"` // 客户端流水号
  210. UUID string `json:"uuid" xorm:"UUID"` // 发起端唯一id
  211. CLIENTTYPE int32 `json:"clienttype" xorm:"CLIENTTYPE"` // 客户端类型 - 0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端_安卓 4:网页客户端 5:微信客户端 6:手机客户端_苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江)
  212. RETCODE int32 `json:"retcode" xorm:"RETCODE"` // 错误代码
  213. TRADEPROPERTY int32 `json:"tradeproperty" xorm:"TRADEPROPERTY"` // 交易属性
  214. LISTINGSELECTTYPE int32 `json:"listingselecttype" xorm:"LISTINGSELECTTYPE"` // 挂牌点选类型 - 1:挂牌 2:摘牌 3:先摘后挂
  215. DELISTINGTYPE int32 `json:"delistingtype" xorm:"DELISTINGTYPE"` // 摘牌类型 - 1:价格最优 2:点选成交
  216. MARGINALGORITHM int32 `json:"marginalgorithm" xorm:"MARGINALGORITHM"` // 保证金收取方式 1:比率 2:固定
  217. MARGINVALUE float64 `json:"marginvalue" xorm:"MARGINVALUE"` // 即市保证金设置值
  218. OPENFEEALGORITHM int32 `json:"openfeealgorithm" xorm:"OPENFEEALGORITHM"` // 建仓手续费收取方式 1:比率 2:固定
  219. OPENMEMBERCHARGEVALUE float64 `json:"openmemberchargevalue" xorm:"OPENMEMBERCHARGEVALUE"` // 建仓会员手续费设置值
  220. OPENEXCHAGECHARGEVALUE float64 `json:"openexchagechargevalue" xorm:"OPENEXCHAGECHARGEVALUE"` // 建仓交易所手续费设置值
  221. CLOSEFEEALGORITHM int32 `json:"closefeealgorithm" xorm:"CLOSEFEEALGORITHM"` // 平仓手续费收取方式 1:比率 2:固定
  222. CLOSEMEMBERCHARGEVALUE float64 `json:"closememberchargevalue" xorm:"CLOSEMEMBERCHARGEVALUE"` // 平仓会员手续费设置值
  223. CLOSEEXCHAGECHARGEVALUE float64 `json:"closeexchagechargevalue" xorm:"CLOSEEXCHAGECHARGEVALUE"` // 平仓交易所手续费设置值
  224. OPTIONTYPE int32 `json:"optiontype" xorm:"OPTIONTYPE"` // 期权类型 - 1:认购(看涨) 2:认沽(看跌)
  225. PREMIUM float64 `json:"premium" xorm:"PREMIUM"` // 权利金
  226. ISPREEXERCISE int32 `json:"ispreexercise" xorm:"ISPREEXERCISE"` // 是否预申报- 0:否 1:是
  227. PREEXERCISEPRICE float64 `json:"preexerciseprice" xorm:"PREEXERCISEPRICE"` // 预申报价格
  228. ISCONFIRMEXERCISE int32 `json:"isconfirmexercise" xorm:"ISCONFIRMEXERCISE"` // 是否确认行权- 0:否 1:是
  229. QUOTEID int64 `json:"quoteid" xorm:"QUOTEID"` // 报价单ID
  230. GCACCOUNTID int64 `json:"gcaccountid" xorm:"GCACCOUNTID"` // 账户ID[合约币种]
  231. SESSIONID int64 `json:"sessionid" xorm:"SESSIONID"` // 会话ID
  232. FREEZEQTY int64 `json:"freezeqty" xorm:"FREEZEQTY"` // 冻结数量
  233. AMOUNTFLAG int32 `json:"amountflag" xorm:"AMOUNTFLAG"` // 资金标识 - 1:余额 2;待付
  234. ORDERFLAG int32 `json:"orderflag" xorm:"ORDERFLAG"` // 委托标识 - 1:按量 2:按金额
  235. PRESALEDEPOSITALGORITHM int32 `json:"presaledepositalgorithm" xorm:"PRESALEDEPOSITALGORITHM"` // 预售定金方式(48) - 1:比率 2:固定
  236. PRESALEDEPOSITVALUE float64 `json:"presaledepositvalue" xorm:"PRESALEDEPOSITVALUE"` // 预售定金设置值(48)
  237. STARTPRICE float64 `json:"startprice" xorm:"STARTPRICE"` // 起拍价[大宗式竞拍]
  238. STARTTIME string `json:"starttime" xorm:"STARTTIME"` // 预售开始时间
  239. ENDTIME string `json:"endtime" xorm:"ENDTIME"` // 预售结束时间
  240. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价[大宗]
  241. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  242. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 期货合约代码(内部)
  243. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME"` // 期货合约名称
  244. Goodsnamedisplay string `json:"goodsnamedisplay" xorm:"GOODSNAMEDISPLAY"` // 商品名称
  245. CUSTOMERNAME string `json:"sellname" xorm:"SELLNAME"` // 客户名称(企业名称)
  246. Userid int `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  247. IsHis bool `json:"-" xorm:"-" form:"ishis"` // 是否历史查询
  248. BeginDate string `json:"-" xorm:"-" form:"begindate"` // 开始交易日
  249. EndDate string `json:"-" xorm:"-" form:"enddate"` // 结束交易日
  250. PageEx `xorm:"extends"` // 页码信息
  251. }
  252. func (r *MineTradeOrderDetail) calc() {
  253. }
  254. func (r *MineTradeOrderDetail) buildSql() string {
  255. var sqlId utils.SQLVal = `
  256. select
  257. g.goodscode,
  258. g.goodsname,
  259. g.goodscode || '/' || g.goodsname "GOODSNAMEDISPLAY",
  260. pge.presaledepositalgorithm,
  261. pge.presaledepositvalue,
  262. ui.customername "SELLNAME",
  263. pge.startprice,
  264. to_char(pge.starttime, 'yyyy-mm-dd') STARTTIME,
  265. to_char(pge.endtime, 'yyyy-mm-dd') ENDTIME,
  266. pge.tradeprice,
  267. t.cancelorderid,
  268. t.relatedid,
  269. t.marketid,
  270. t.accountid,
  271. t.marketmaxsub,
  272. t.tradeqty,
  273. t.cancelqty,
  274. t.opentradeqty,
  275. t.closetradeqty,
  276. t.freezemargin,
  277. t.unfreezemargin,
  278. t.freezecharge,
  279. t.unfreezecharge,
  280. t.openfreezecharge,
  281. t.closefreezecharge,
  282. t.openunfreezecharge,
  283. t.closeunfreezecharge,
  284. t.validtype,
  285. t.validtime,
  286. t.operatetype,
  287. t.orderstatus,
  288. t.operatorid,
  289. t.updatetime,
  290. t.tradeproperty,
  291. t.marginalgorithm,
  292. t.marginvalue,
  293. t.openfeealgorithm,
  294. t.openmemberchargevalue,
  295. t.openexchagechargevalue,
  296. t.closefeealgorithm,
  297. t.closememberchargevalue,
  298. t.closeexchagechargevalue,
  299. t.gcaccountid,
  300. t.amountflag,
  301. t.orderflag,
  302. to_char(t.ordertime, 'yyyy-mm-dd hh24:mi:ss') ORDERTIME,
  303. to_char(t.orderid) ORDERID,
  304. t.orderqty,
  305. t.orderprice
  306. from trade_orderdetail t
  307. inner join CPTrade_PresaleGoodsEx pge
  308. on t.goodsid = pge.goodsid
  309. inner join goods g
  310. on t.goodsid = g.goodsid
  311. inner join taaccount ta
  312. on t.accountid = ta.accountid
  313. left join userinfo ui
  314. on pge.userid = ui.userid
  315. where t.marketid = 48201
  316. and ta.userid = %v
  317. order by t.ordertime desc
  318. `
  319. sqlId.FormatParam(r.Userid)
  320. sqlId.Page(r.Page, r.PageSize)
  321. return sqlId.String()
  322. }
  323. func (r *MineTradeOrderDetail) buildSql_His() string {
  324. var sqlId utils.SQLVal = `
  325. select
  326. g.goodscode,
  327. g.goodsname,
  328. g.goodscode || '/' || g.goodsname "GOODSNAMEDISPLAY",
  329. pge.presaledepositalgorithm,
  330. pge.presaledepositvalue,
  331. ui.customername "SELLNAME",
  332. pge.startprice,
  333. pge.starttime,
  334. pge.endtime,
  335. pge.tradeprice,
  336. t.cancelorderid,
  337. t.relatedid,
  338. t.marketid,
  339. t.accountid,
  340. t.marketmaxsub,
  341. t.tradeqty,
  342. t.cancelqty,
  343. t.opentradeqty,
  344. t.closetradeqty,
  345. t.freezemargin,
  346. t.unfreezemargin,
  347. t.freezecharge,
  348. t.unfreezecharge,
  349. t.openfreezecharge,
  350. t.closefreezecharge,
  351. t.openunfreezecharge,
  352. t.closeunfreezecharge,
  353. t.validtype,
  354. t.validtime,
  355. t.operatetype,
  356. t.orderstatus,
  357. t.operatorid,
  358. t.updatetime,
  359. t.tradeproperty,
  360. t.marginalgorithm,
  361. t.marginvalue,
  362. t.openfeealgorithm,
  363. t.openmemberchargevalue,
  364. t.openexchagechargevalue,
  365. t.closefeealgorithm,
  366. t.closememberchargevalue,
  367. t.closeexchagechargevalue,
  368. t.gcaccountid,
  369. t.amountflag,
  370. t.orderflag,
  371. to_char(t.ordertime, 'yyyy-mm-dd hh24:mi:ss') ORDERTIME,
  372. to_char(t.orderid) ORDERID,
  373. t.orderqty,
  374. t.orderprice
  375. from HIS_Trade_OrderDetail t
  376. inner join CPTrade_PresaleGoodsEx pge
  377. on t.goodsid = pge.goodsid
  378. inner join goods g
  379. on t.goodsid = g.goodsid
  380. inner join taaccount ta
  381. on t.accountid = ta.accountid
  382. left join userinfo ui
  383. on pge.userid = ui.userid
  384. where t.marketid = 48201 and t.isvaliddata = 1
  385. `
  386. sqlId.And("ta.userid", r.Userid)
  387. if r.BeginDate != "" && r.EndDate != "" {
  388. sqlId.JoinFormat(" AND (t.TRADEDATE >= '%v' AND t.TRADEDATE <= '%v')", r.BeginDate, r.EndDate)
  389. }
  390. sqlId.OrderByDesc("t.ordertime")
  391. sqlId.Page(r.Page, r.PageSize)
  392. return sqlId.String()
  393. }
  394. func (r *MineTradeOrderDetail) GetDataByPage() (interface{}, error, int, int, int) {
  395. sData := make([]MineTradeOrderDetail, 0)
  396. sql := ""
  397. if r.IsHis {
  398. sql = r.buildSql_His()
  399. } else {
  400. sql = r.buildSql()
  401. }
  402. err := db.GetEngine().SQL(sql).Find(&sData)
  403. total := 0
  404. for i := range sData {
  405. sData[i].calc()
  406. total = sData[i].Total
  407. }
  408. return sData, err, r.Page, r.PageSize, total
  409. }
  410. // MineTradeOrder 我的订单-转让委托
  411. type MineTradeOrder struct {
  412. ORDERID string `json:"orderid" xorm:"ORDERID"` // 委托单号(100+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  413. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  414. BUILDTYPE int32 `json:"buildtype" xorm:"BUILDTYPE"` // 委托单据类型 - 1:建仓 2:平仓 3:先平后建
  415. PREORDERID int64 `json:"preorderid" xorm:"PREORDERID"` // 关联预埋单号(止盈止损单时填写)
  416. CANCELORDERID int64 `json:"cancelorderid" xorm:"CANCELORDERID"` // 撤单单号(撤单时填写)
  417. RELATEDID int64 `json:"relatedid" xorm:"RELATEDID"` // 关联单号(交割单)
  418. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  419. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  420. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账户ID[报价币种]
  421. MEMBERUSERID int64 `json:"memberuserid" xorm:"MEMBERUSERID"` // 所属会员UserID
  422. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 买卖 - 0:买 1:卖
  423. PRICEMODE int32 `json:"pricemode" xorm:"PRICEMODE"` // 取价方式 - 1:市价 2: 限价 3:浮动价
  424. ORDERPRICE float64 `json:"orderprice" xorm:"ORDERPRICE"` // 委托价格
  425. MARKETMAXSUB float64 `json:"marketmaxsub" xorm:"MARKETMAXSUB"` // 市价最大偏移范围 [浮动价 - 点差]
  426. ORDERQTY int64 `json:"orderqty" xorm:"ORDERQTY"` // 委托数量
  427. TRADEQTY int64 `json:"tradeqty" xorm:"TRADEQTY"` // 成交数量
  428. CANCELQTY int64 `json:"cancelqty" xorm:"CANCELQTY"` // 撤单数量
  429. OPENQTY int64 `json:"openqty" xorm:"OPENQTY"` // 开仓数量(先建后平操作,需要记录)
  430. CLOSEQTY int64 `json:"closeqty" xorm:"CLOSEQTY"` // 平仓数量(先建后平操作 需要记录)
  431. OPENTRADEQTY int64 `json:"opentradeqty" xorm:"OPENTRADEQTY"` // 开仓成交数量(先建后平操作,需要记录)
  432. CLOSETRADEQTY int64 `json:"closetradeqty" xorm:"CLOSETRADEQTY"` // 平仓成交数量(先建后平操作,需要记录)
  433. FREEZEMARGIN float64 `json:"freezemargin" xorm:"FREEZEMARGIN"` // 冻结保证金(冻结交易金额)
  434. UNFREEZEMARGIN float64 `json:"unfreezemargin" xorm:"UNFREEZEMARGIN"` // 解冻保证金
  435. FREEZECHARGE float64 `json:"freezecharge" xorm:"FREEZECHARGE"` // 冻结手续费
  436. UNFREEZECHARGE float64 `json:"unfreezecharge" xorm:"UNFREEZECHARGE"` // 解冻手续费
  437. OPENFREEZECHARGE float64 `json:"openfreezecharge" xorm:"OPENFREEZECHARGE"` // 开仓冻结手续费(先建后平操作,需要记录)
  438. CLOSEFREEZECHARGE float64 `json:"closefreezecharge" xorm:"CLOSEFREEZECHARGE"` // 平仓冻结手续费(先建后平操作,需要记录)
  439. OPENUNFREEZECHARGE float64 `json:"openunfreezecharge" xorm:"OPENUNFREEZECHARGE"` // 开仓解冻手续费(先建后平操作,需要记录)
  440. CLOSEUNFREEZECHARGE float64 `json:"closeunfreezecharge" xorm:"CLOSEUNFREEZECHARGE"` // 平仓解冻手续费(先建后平操作,需要记录)
  441. VALIDTYPE int32 `json:"validtype" xorm:"VALIDTYPE"` // 有效类型 - 1当日有效 2本周有效 3指定日期有效 4一直有效 5指定时间有效
  442. VALIDTIME time.Time `json:"validtime" xorm:"VALIDTIME"` // 有效期限
  443. VOLUMETYPE int32 `json:"volumetype" xorm:"VOLUMETYPE"` // 当时间有效类型为 “立即执行否则取消 IOC” 时,需要此项 - 0:任意量 1:最小量(暂时不支持) 2:全部量
  444. OPERATETYPE int32 `json:"operatetype" xorm:"OPERATETYPE"` // 操作类型 - 1:正常下单 2:斩仓 3:转单 4:结算撤单 5:系统卖出(适用于先平后建的卖出) 6:行情源报价 7:(结算)到期强平 8:(结算)协议转让 9:系统对冲单 10:(结算)到期无效 11:交割协议转让 12:交割协议平仓 13:交割成交(所有权) 14:管理端强行平仓 15:管理端协议转让 ... 23:融资买入
  445. ORDERTIME string `json:"ordertime" xorm:"ORDERTIME"` // 委托时间
  446. ORDERSRC int32 `json:"ordersrc" xorm:"ORDERSRC"` // 委托来源 - 1:客户端 2:管理端 3:风控服务 4:交割服务 5:交易服务 6:交易日结 7:商品强平 8:管理端商品退市强平 9:交易接口 10:交割服务商被动(受托竞价) 11:预埋触发
  447. ORDERSTATUS int32 `json:"orderstatus" xorm:"ORDERSTATUS"` // 委托状态 - 参考枚举'orderstatus' - 1:委托请求 2:待冻结 3:委托成功 4:委托失败 5:配对成功 6:已撤 7:部成 8:已成 9:部成部撤 10:成交失败 11:委托拒绝 12:经过摘牌(先摘后挂专用) 13:冻结成功(通道交易专用) 14:通道已撤 15:通道部成部撤 16:成交失败违约(荷兰式竞拍专用) 17:冻结PD成功 18:冻结PD失败 19:冻结能量成功 20:冻结能量失败 21:预约已报价 22:过期未付 23:优惠券处理中 24:仓单生成失败 25:首付扣款失败 26:履约失败 27:撤单解冻贷款失败
  448. OPERATORID int64 `json:"operatorid" xorm:"OPERATORID"` // 登录账号(LoginID)
  449. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  450. CLIENTORDERTIME time.Time `json:"clientordertime" xorm:"CLIENTORDERTIME"` // 客户端委托时间
  451. CLIENTTICKET string `json:"clientticket" xorm:"CLIENTTICKET"` // 客户端流水号
  452. UUID string `json:"uuid" xorm:"UUID"` // 发起端唯一id
  453. CLIENTTYPE int32 `json:"clienttype" xorm:"CLIENTTYPE"` // 客户端类型 - 0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端_安卓 4:网页客户端 5:微信客户端 6:手机客户端_苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江)
  454. RETCODE int32 `json:"retcode" xorm:"RETCODE"` // 错误代码
  455. TRADEPROPERTY int32 `json:"tradeproperty" xorm:"TRADEPROPERTY"` // 交易属性
  456. LISTINGSELECTTYPE int32 `json:"listingselecttype" xorm:"LISTINGSELECTTYPE"` // 挂牌点选类型 - 1:挂牌 2:摘牌 3:先摘后挂
  457. DELISTINGTYPE int32 `json:"delistingtype" xorm:"DELISTINGTYPE"` // 摘牌类型 - 1:价格最优 2:点选成交
  458. MARGINALGORITHM int32 `json:"marginalgorithm" xorm:"MARGINALGORITHM"` // 保证金收取方式 1:比率 2:固定
  459. MARGINVALUE float64 `json:"marginvalue" xorm:"MARGINVALUE"` // 即市保证金设置值
  460. OPENFEEALGORITHM int32 `json:"openfeealgorithm" xorm:"OPENFEEALGORITHM"` // 建仓手续费收取方式 1:比率 2:固定
  461. OPENMEMBERCHARGEVALUE float64 `json:"openmemberchargevalue" xorm:"OPENMEMBERCHARGEVALUE"` // 建仓会员手续费设置值
  462. OPENEXCHAGECHARGEVALUE float64 `json:"openexchagechargevalue" xorm:"OPENEXCHAGECHARGEVALUE"` // 建仓交易所手续费设置值
  463. CLOSEFEEALGORITHM int32 `json:"closefeealgorithm" xorm:"CLOSEFEEALGORITHM"` // 平仓手续费收取方式 1:比率 2:固定
  464. CLOSEMEMBERCHARGEVALUE float64 `json:"closememberchargevalue" xorm:"CLOSEMEMBERCHARGEVALUE"` // 平仓会员手续费设置值
  465. CLOSEEXCHAGECHARGEVALUE float64 `json:"closeexchagechargevalue" xorm:"CLOSEEXCHAGECHARGEVALUE"` // 平仓交易所手续费设置值
  466. OPTIONTYPE int32 `json:"optiontype" xorm:"OPTIONTYPE"` // 期权类型 - 1:认购(看涨) 2:认沽(看跌)
  467. PREMIUM float64 `json:"premium" xorm:"PREMIUM"` // 权利金
  468. ISPREEXERCISE int32 `json:"ispreexercise" xorm:"ISPREEXERCISE"` // 是否预申报- 0:否 1:是
  469. PREEXERCISEPRICE float64 `json:"preexerciseprice" xorm:"PREEXERCISEPRICE"` // 预申报价格
  470. ISCONFIRMEXERCISE int32 `json:"isconfirmexercise" xorm:"ISCONFIRMEXERCISE"` // 是否确认行权- 0:否 1:是
  471. QUOTEID int64 `json:"quoteid" xorm:"QUOTEID"` // 报价单ID
  472. GCACCOUNTID int64 `json:"gcaccountid" xorm:"GCACCOUNTID"` // 账户ID[合约币种]
  473. SESSIONID int64 `json:"sessionid" xorm:"SESSIONID"` // 会话ID
  474. FREEZEQTY int64 `json:"freezeqty" xorm:"FREEZEQTY"` // 冻结数量
  475. AMOUNTFLAG int32 `json:"amountflag" xorm:"AMOUNTFLAG"` // 资金标识 - 1:余额 2;待付
  476. ORDERFLAG int32 `json:"orderflag" xorm:"ORDERFLAG"` // 委托标识 - 1:按量 2:按金额
  477. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 期货合约代码(内部)
  478. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME"` // 期货合约名称
  479. Goodsnamedisplay string `json:"goodsnamedisplay" xorm:"GOODSNAMEDISPLAY"` // 商品名称
  480. PRESALEPRICE float64 `json:"presaleprice" xorm:"PRESALEPRICE"` // 发售价(49)
  481. Userid int `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  482. IsHis bool `json:"-" xorm:"-" form:"ishis"` // 是否历史查询
  483. BeginDate string `json:"-" xorm:"-" form:"begindate"` // 开始交易日
  484. EndDate string `json:"-" xorm:"-" form:"enddate"` // 结束交易日
  485. PageEx `xorm:"extends"` // 页码信息
  486. }
  487. func (r *MineTradeOrder) calc() {
  488. }
  489. func (r *MineTradeOrder) buildSql() string {
  490. var sqlId utils.SQLVal = `
  491. select
  492. g.goodscode,
  493. g.goodsname,
  494. g.goodscode || '/' || g.goodsname "GOODSNAMEDISPLAY",
  495. g.presaleprice,
  496. t.cancelorderid,
  497. t.relatedid,
  498. t.marketid,
  499. t.accountid,
  500. t.marketmaxsub,
  501. t.tradeqty,
  502. t.cancelqty,
  503. t.opentradeqty,
  504. t.closetradeqty,
  505. t.freezemargin,
  506. t.unfreezemargin,
  507. t.freezecharge,
  508. t.unfreezecharge,
  509. t.openfreezecharge,
  510. t.closefreezecharge,
  511. t.openunfreezecharge,
  512. t.closeunfreezecharge,
  513. t.validtype,
  514. t.validtime,
  515. t.operatetype,
  516. t.orderstatus,
  517. t.operatorid,
  518. t.updatetime,
  519. t.tradeproperty,
  520. t.marginalgorithm,
  521. t.marginvalue,
  522. t.openfeealgorithm,
  523. t.openmemberchargevalue,
  524. t.openexchagechargevalue,
  525. t.closefeealgorithm,
  526. t.closememberchargevalue,
  527. t.closeexchagechargevalue,
  528. t.gcaccountid,
  529. t.amountflag,
  530. t.orderflag,
  531. to_char(t.ordertime, 'yyyy-mm-dd hh24:mi:ss') ORDERTIME,
  532. to_char(t.orderid) ORDERID,
  533. t.orderqty,
  534. t.orderprice
  535. from trade_orderdetail t
  536. inner join goods g
  537. on t.goodsid = g.goodsid
  538. inner join taaccount ta
  539. on t.accountid = ta.accountid
  540. where t.marketid = 49201
  541. and t.buyorsell = 1
  542. and ta.userid = %v
  543. order by t.ordertime desc
  544. `
  545. sqlId.FormatParam(r.Userid)
  546. sqlId.Page(r.Page, r.PageSize)
  547. return sqlId.String()
  548. }
  549. func (r *MineTradeOrder) buildSql_His() string {
  550. var sqlId utils.SQLVal = `
  551. select
  552. g.goodscode,
  553. g.goodsname,
  554. g.goodscode || '/' || g.goodsname "GOODSNAMEDISPLAY",
  555. g.presaleprice,
  556. t.cancelorderid,
  557. t.relatedid,
  558. t.marketid,
  559. t.accountid,
  560. t.marketmaxsub,
  561. t.tradeqty,
  562. t.cancelqty,
  563. t.opentradeqty,
  564. t.closetradeqty,
  565. t.freezemargin,
  566. t.unfreezemargin,
  567. t.freezecharge,
  568. t.unfreezecharge,
  569. t.openfreezecharge,
  570. t.closefreezecharge,
  571. t.openunfreezecharge,
  572. t.closeunfreezecharge,
  573. t.validtype,
  574. t.validtime,
  575. t.operatetype,
  576. t.orderstatus,
  577. t.operatorid,
  578. t.updatetime,
  579. t.tradeproperty,
  580. t.marginalgorithm,
  581. t.marginvalue,
  582. t.openfeealgorithm,
  583. t.openmemberchargevalue,
  584. t.openexchagechargevalue,
  585. t.closefeealgorithm,
  586. t.closememberchargevalue,
  587. t.closeexchagechargevalue,
  588. t.gcaccountid,
  589. t.amountflag,
  590. t.orderflag,
  591. to_char(t.ordertime, 'yyyy-mm-dd hh24:mi:ss') ORDERTIME,
  592. to_char(t.orderid) ORDERID,
  593. t.orderqty,
  594. t.orderprice
  595. from HIS_Trade_OrderDetail t
  596. inner join goods g
  597. on t.goodsid = g.goodsid
  598. inner join taaccount ta
  599. on t.accountid = ta.accountid
  600. where t.marketid = 49201
  601. and t.buyorsell = 1
  602. `
  603. sqlId.And("ta.userid", r.Userid)
  604. if r.BeginDate != "" && r.EndDate != "" {
  605. sqlId.JoinFormat(" AND (t.TRADEDATE >= '%v' AND t.TRADEDATE <= '%v')", r.BeginDate, r.EndDate)
  606. }
  607. sqlId.OrderByDesc("t.ordertime")
  608. sqlId.Page(r.Page, r.PageSize)
  609. return sqlId.String()
  610. }
  611. func (r *MineTradeOrder) GetDataByPage() (interface{}, error, int, int, int) {
  612. sData := make([]MineTradeOrder, 0)
  613. sql := ""
  614. if r.IsHis {
  615. sql = r.buildSql_His()
  616. } else {
  617. sql = r.buildSql()
  618. }
  619. err := db.GetEngine().SQL(sql).Find(&sData)
  620. total := 0
  621. for i := range sData {
  622. sData[i].calc()
  623. total = sData[i].Total
  624. }
  625. return sData, err, r.Page, r.PageSize, total
  626. }
  627. // MineTradeTradeDetail 我的订单-转让成交
  628. type MineTradeTradeDetail struct {
  629. TRADEID string `json:"tradeid" xorm:"TRADEID"` // 成交单号(101+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  630. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 方向 - 0:买 1:卖
  631. ORDERID int64 `json:"orderid" xorm:"ORDERID"` // 委托单号
  632. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  633. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账户ID[报价币种]
  634. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  635. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  636. MEMBERUSERID int64 `json:"memberuserid" xorm:"MEMBERUSERID"` // 会员id 个人投资者 需要填写
  637. MATCHACCOUNTID int64 `json:"matchaccountid" xorm:"MATCHACCOUNTID"` // 对手账号id
  638. TRADETIME string `json:"tradetime" xorm:"TRADETIME"` // 成交时间
  639. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价格
  640. TRADEQTY int64 `json:"tradeqty" xorm:"TRADEQTY"` // 成交数量
  641. TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT"` // 成交金额[账户币种,用于所有权]
  642. CLOSEPL float64 `json:"closepl" xorm:"CLOSEPL"` // 平仓盈亏
  643. INTCLOSEPL int64 `json:"intclosepl" xorm:"INTCLOSEPL"` // 整型盈亏(用于交易结算试算平衡-收益权)
  644. OPENCHARGE float64 `json:"opencharge" xorm:"OPENCHARGE"` // 建仓手续费(支付总手续费=(交易所比率+会员比率)*成交金额)
  645. CLOSECHARGE float64 `json:"closecharge" xorm:"CLOSECHARGE"` // 平仓手续费(支付总手续费=(交易所比率+会员比率)*成交金额)
  646. TRADETYPE int32 `json:"tradetype" xorm:"TRADETYPE"` // 成交类别 - 1:正常委托成交 2:定向做市成交(接单) 3:交割协议平仓成交 4:交割减仓成交 5:到期强平成交 6:风控斩仓成交 7:协议平仓(管理端)成交 8:仓单转持仓成交 9: 交割协议转让成交 10:受托竞价成交(接单) 11:协议转让成交 12:系统强行平仓 13:期权违约平仓
  647. BUILDTYPE int32 `json:"buildtype" xorm:"BUILDTYPE"` // 委托单据类型 1:建仓 2:平仓 3:先平后建
  648. OPENQTY int64 `json:"openqty" xorm:"OPENQTY"` // 开仓数量(先建后平操作 需要记录)
  649. CLOSEQTY int64 `json:"closeqty" xorm:"CLOSEQTY"` // 平仓数量(先建后平操作 需要记录)
  650. STATUS int32 `json:"status" xorm:"STATUS"` // 处理状态 - 1:待处理 2:已处理 3:处理失败
  651. ISRECKONED int32 `json:"isreckoned" xorm:"ISRECKONED"` // 是否结算 - 0:未结算 1:已结算
  652. TRADEPROPERTY int32 `json:"tradeproperty" xorm:"TRADEPROPERTY"` // 交易属性
  653. OPENFEEALGORITHM int32 `json:"openfeealgorithm" xorm:"OPENFEEALGORITHM"` // 建仓手续费收取方式 1:比率 2:固定
  654. OPENMEMBERCHARGEVALUE float64 `json:"openmemberchargevalue" xorm:"OPENMEMBERCHARGEVALUE"` // 建仓会员手续费设置值
  655. OPENEXCHAGECHARGEVALUE float64 `json:"openexchagechargevalue" xorm:"OPENEXCHAGECHARGEVALUE"` // 建仓交易所手续费设置值
  656. CLOSEFEEALGORITHM int32 `json:"closefeealgorithm" xorm:"CLOSEFEEALGORITHM"` // 平仓手续费收取方式 1:比率 2:固定
  657. CLOSEMEMBERCHARGEVALUE float64 `json:"closememberchargevalue" xorm:"CLOSEMEMBERCHARGEVALUE"` // 平仓会员手续费设置值
  658. CLOSEEXCHAGECHARGEVALUE float64 `json:"closeexchagechargevalue" xorm:"CLOSEEXCHAGECHARGEVALUE"` // 平仓交易所手续费设置值
  659. OPTIONTYPE int32 `json:"optiontype" xorm:"OPTIONTYPE"` // 期权类型 - 1:认购(看涨) 2:认沽(看跌)
  660. PREMIUM float64 `json:"premium" xorm:"PREMIUM"` // 权利金 - [持仓单的权利金]
  661. ISPREEXERCISE int32 `json:"ispreexercise" xorm:"ISPREEXERCISE"` // 是否预申报- 0:否 1:是
  662. PREEXERCISEPRICE float64 `json:"preexerciseprice" xorm:"PREEXERCISEPRICE"` // 预申报价格
  663. ISCONFIRMEXERCISE int32 `json:"isconfirmexercise" xorm:"ISCONFIRMEXERCISE"` // 是否确认行权- 0:否 1:是
  664. ISMAIN int32 `json:"ismain" xorm:"ISMAIN"` // 是否主单 - 0:不是 1:是
  665. PERFORMANCEPLANID int64 `json:"performanceplanid" xorm:"PERFORMANCEPLANID"` // 履约计划ID[期权]
  666. PERFORMANCESTATUS int32 `json:"performancestatus" xorm:"PERFORMANCESTATUS"` // 履约状态[期权] - 0:无履约 1:未履约 2:履约中 3:履约完成
  667. CREDITAMOUNT float64 `json:"creditamount" xorm:"CREDITAMOUNT"` // 授信金额
  668. GCACCOUNTID int64 `json:"gcaccountid" xorm:"GCACCOUNTID"` // 账户ID[合约币种]
  669. CLOSEPL2 float64 `json:"closepl2" xorm:"CLOSEPL2"` // 平仓盈亏[逐笔]
  670. RELATEDOUTTRADEID int64 `json:"relatedouttradeid" xorm:"RELATEDOUTTRADEID"` // 关联外部成交单ID
  671. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 期货合约代码(内部)
  672. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME"` // 期货合约名称
  673. Goodsnamedisplay string `json:"goodsnamedisplay" xorm:"GOODSNAMEDISPLAY"` // 商品名称
  674. PRESALEPRICE float64 `json:"presaleprice" xorm:"PRESALEPRICE"` // 发售价(49)
  675. Userid int `json:"-" xorm:"-" form:"userid" binding:"required"` // 用户ID
  676. IsHis bool `json:"-" xorm:"-" form:"ishis"` // 是否历史查询
  677. BeginDate string `json:"-" xorm:"-" form:"begindate"` // 开始交易日
  678. EndDate string `json:"-" xorm:"-" form:"enddate"` // 结束交易日
  679. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME"` // 账户名称(机构名称)
  680. PageEx `xorm:"extends"` // 页码信息
  681. }
  682. func (r *MineTradeTradeDetail) calc() {
  683. }
  684. func (r *MineTradeTradeDetail) buildSql() string {
  685. var sqlId utils.SQLVal = `
  686. select
  687. g.goodscode,
  688. g.goodsname,
  689. g.goodscode || '/' || g.goodsname "goodsnamedisplay",
  690. g.presaleprice,
  691. ua.accountname,
  692. to_char(t.tradeid) TRADEID,
  693. t.buyorsell,
  694. t.orderid,
  695. t.tradedate,
  696. t.accountid,
  697. t.goodsid,
  698. t.marketid,
  699. t.memberuserid,
  700. t.matchaccountid,
  701. to_char(t.tradetime, 'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  702. t.tradeprice,
  703. t.tradeqty,
  704. t.tradeamount,
  705. t.closepl,
  706. t.intclosepl,
  707. t.opencharge,
  708. t.closecharge,
  709. t.tradetype,
  710. t.buildtype,
  711. t.openqty,
  712. t.closeqty,
  713. t.status,
  714. t.isreckoned,
  715. t.tradeproperty,
  716. t.openfeealgorithm,
  717. t.openmemberchargevalue,
  718. t.openexchagechargevalue,
  719. t.closefeealgorithm,
  720. t.closememberchargevalue,
  721. t.closeexchagechargevalue,
  722. t.optiontype,
  723. t.premium,
  724. t.ispreexercise,
  725. t.preexerciseprice,
  726. t.isconfirmexercise,
  727. t.ismain,
  728. t.performanceplanid,
  729. t.performancestatus,
  730. t.creditamount,
  731. t.gcaccountid,
  732. t.closepl2,
  733. t.relatedouttradeid
  734. from trade_tradedetail t
  735. inner join goods g
  736. on t.goodsid = g.goodsid
  737. inner join taaccount ta
  738. on t.accountid = ta.accountid
  739. left join taaccount ta2
  740. on t.matchaccountid = ta2.accountid
  741. left join useraccount ua
  742. on ua.userid = ta2.userid
  743. where t.marketid = 49201
  744. and ta.userid = %v
  745. order by t.tradetime desc
  746. `
  747. sqlId.FormatParam(r.Userid)
  748. sqlId.Page(r.Page, r.PageSize)
  749. return sqlId.String()
  750. }
  751. func (r *MineTradeTradeDetail) buildSql_His() string {
  752. var sqlId utils.SQLVal = `
  753. select
  754. g.goodscode,
  755. g.goodsname,
  756. g.goodscode || '/' || g.goodsname "goodsnamedisplay",
  757. g.presaleprice,
  758. ua.accountname,
  759. to_char(t.tradeid) TRADEID,
  760. t.buyorsell,
  761. t.orderid,
  762. t.tradedate,
  763. t.accountid,
  764. t.goodsid,
  765. t.marketid,
  766. t.memberuserid,
  767. t.matchaccountid,
  768. to_char(t.tradetime, 'yyyy-mm-dd hh24:mi:ss') TRADETIME,
  769. t.tradeprice,
  770. t.tradeqty,
  771. t.tradeamount,
  772. t.closepl,
  773. t.intclosepl,
  774. t.opencharge,
  775. t.closecharge,
  776. t.tradetype,
  777. t.buildtype,
  778. t.openqty,
  779. t.closeqty,
  780. t.status,
  781. t.isreckoned,
  782. t.tradeproperty,
  783. t.openfeealgorithm,
  784. t.openmemberchargevalue,
  785. t.openexchagechargevalue,
  786. t.closefeealgorithm,
  787. t.closememberchargevalue,
  788. t.closeexchagechargevalue,
  789. t.optiontype,
  790. t.premium,
  791. t.ispreexercise,
  792. t.preexerciseprice,
  793. t.isconfirmexercise,
  794. t.ismain,
  795. t.performanceplanid,
  796. t.performancestatus,
  797. t.creditamount,
  798. t.gcaccountid,
  799. t.closepl2,
  800. t.relatedouttradeid
  801. from HIS_Trade_TradeDetail t
  802. inner join goods g
  803. on t.goodsid = g.goodsid
  804. inner join taaccount ta
  805. on t.accountid = ta.accountid
  806. left join taaccount ta2
  807. on t.matchaccountid = ta2.accountid
  808. left join useraccount ua
  809. on ua.userid = ta2.userid
  810. where t.marketid = 49201 and t.isvaliddata = 1
  811. `
  812. sqlId.And("ta.userid", r.Userid)
  813. if r.BeginDate != "" && r.EndDate != "" {
  814. sqlId.JoinFormat(" AND (t.TRADEDATE >= '%v' AND t.TRADEDATE <= '%v')", r.BeginDate, r.EndDate)
  815. }
  816. sqlId.OrderByDesc("t.tradetime")
  817. sqlId.Page(r.Page, r.PageSize)
  818. return sqlId.String()
  819. }
  820. func (r *MineTradeTradeDetail) GetDataByPage() (interface{}, error, int, int, int) {
  821. sData := make([]MineTradeTradeDetail, 0)
  822. sql := ""
  823. if r.IsHis {
  824. sql = r.buildSql_His()
  825. } else {
  826. sql = r.buildSql()
  827. }
  828. err := db.GetEngine().SQL(sql).Find(&sData)
  829. total := 0
  830. for i := range sData {
  831. sData[i].calc()
  832. total = sData[i].Total
  833. }
  834. return sData, err, r.Page, r.PageSize, total
  835. }
  836. // MineTradeGoodsDeliveryOffline 交收提货-线下交收单
  837. type MineTradeGoodsDeliveryOffline struct {
  838. DELIVERYORDERID string `json:"deliveryorderid" xorm:"DELIVERYORDERID"` // 交收单号(905+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  839. USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 申请用户ID
  840. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账户ID
  841. GOODSID int64 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  842. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  843. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 交收方向 - 0:买 1:卖
  844. DELIVERYLOT int64 `json:"deliverylot" xorm:"DELIVERYLOT"` // 交收手数
  845. DELIVERYQTY int64 `json:"deliveryqty" xorm:"DELIVERYQTY"` // 交收数量 (手数*合约乘数)
  846. DELIVERYINFO string `json:"deliveryinfo" xorm:"DELIVERYINFO"` // 交收信息
  847. MATCHUSERID int64 `json:"matchuserid" xorm:"MATCHUSERID"` // 对手方UserID
  848. MATCHACCOUNTID int64 `json:"matchaccountid" xorm:"MATCHACCOUNTID"` // 对手方AccountID
  849. REQTIME string `json:"reqtime" xorm:"REQTIME"` // 申请时间
  850. REQTRADEDATE string `json:"reqtradedate" xorm:"REQTRADEDATE"` // 申请交易日
  851. ORDERSTATUS int32 `json:"orderstatus" xorm:"ORDERSTATUS"` // 单据状态 - 1:待处理 2:交收中 3:已完成
  852. DELIVERYPRICE float64 `json:"deliveryprice" xorm:"DELIVERYPRICE"` // 交收价格
  853. DELIVERYAMOUNT float64 `json:"deliveryamount" xorm:"DELIVERYAMOUNT"` // 交收货款
  854. CLOSETIME time.Time `json:"closetime" xorm:"CLOSETIME"` // 完成时间
  855. CLOSETRADEDATE string `json:"closetradedate" xorm:"CLOSETRADEDATE"` // 完成交易日
  856. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 期货合约代码(内部)
  857. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME"` // 期货合约名称
  858. Goodsnamedisplay string `json:"goodsnamedisplay" xorm:"GOODSNAMEDISPLAY"` // 商品名称
  859. Buyorselldisplay string `json:"buyorselldisplay" xorm:"BUYORSELLDISPLAY"` // 交收方向
  860. Goodsunit string `json:"goodsunit" xorm:"GOODSUNIT"` // 单位
  861. Orderstatusdisplay string `json:"orderstatusdisplay" xorm:"ORDERSTATUSDISPLAY"` // 单据状态
  862. CUSTOMERNAME string `json:"matchusername" xorm:"MATCHUSERNAME"` // [交收对手方]客户名称(企业名称)
  863. PageEx `xorm:"extends"` // 页码信息
  864. }
  865. func (r *MineTradeGoodsDeliveryOffline) calc() {
  866. }
  867. func (r *MineTradeGoodsDeliveryOffline) buildSql() string {
  868. var sqlId utils.SQLVal = `
  869. select
  870. g.goodscode,
  871. g.goodsname,
  872. g.goodscode || '/' || g.goodsname GOODSNAMEDISPLAY,
  873. e1.enumdicname BUYORSELLDISPLAY,
  874. e2.enumdicname GOODSUNIT,
  875. ui.customername MATCHUSERNAME,
  876. e3.enumdicname ORDERSTATUSDISPLAY,
  877. to_char(t.deliveryorderid) DELIVERYORDERID,
  878. t.userid,
  879. t.accountid,
  880. t.goodsid,
  881. t.marketid,
  882. t.buyorsell,
  883. t.deliverylot,
  884. t.deliveryqty,
  885. t.deliveryinfo,
  886. t.matchuserid,
  887. t.matchaccountid,
  888. to_char(t.reqtime, 'yyyy-mm-dd hh24:mi:ss') REQTIME,
  889. t.reqtradedate,
  890. t.orderstatus,
  891. t.deliveryprice,
  892. t.deliveryamount,
  893. t.closetime,
  894. t.closetradedate
  895. from Trade_GoodsDeliveryOffLine t
  896. left join goods g
  897. on t.goodsid = g.goodsid
  898. left join enumdicitem e1
  899. on e1.enumdiccode = 'buyOrSell'
  900. and t.buyorsell = e1.enumitemname
  901. left join enumdicitem e2
  902. on e2.enumdiccode = 'goodsunit'
  903. and g.goodunitid = e2.enumitemname
  904. left join enumdicitem e3
  905. on e3.enumdiccode = 'deliveryOrderStatus'
  906. and t.orderstatus = e3.enumitemname
  907. left join userinfo ui
  908. on t.matchuserid = ui.userid
  909. where t.userid = %v
  910. order by t.reqtime desc
  911. `
  912. sqlId.FormatParam(r.USERID)
  913. sqlId.Page(r.Page, r.PageSize)
  914. return sqlId.String()
  915. }
  916. func (r *MineTradeGoodsDeliveryOffline) GetDataByPage() (interface{}, error, int, int, int) {
  917. sData := make([]MineTradeGoodsDeliveryOffline, 0)
  918. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  919. total := 0
  920. for i := range sData {
  921. sData[i].calc()
  922. total = sData[i].Total
  923. }
  924. return sData, err, r.Page, r.PageSize, total
  925. }