erms2.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. package erms2
  2. import (
  3. "fmt"
  4. "mtp2_if/db"
  5. "mtp2_if/global/app"
  6. "mtp2_if/global/e"
  7. "mtp2_if/logger"
  8. "net/http"
  9. "time"
  10. "github.com/gin-gonic/gin"
  11. )
  12. // QueryInnerTradeDetailReq 查询内部成交单信息请求参数
  13. type QueryInnerTradeDetailReq struct {
  14. AccountID int `form:"accountid" binding:"required"`
  15. }
  16. // QueryInnerTradeDetailRsp 内部成交单信息
  17. type QueryInnerTradeDetailRsp struct {
  18. Tradeid int64 `json:"tradeid" xorm:"'TRADEID'" binding:"required"` // 成交单号(108+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  19. Buyorsell int64 `json:"buyorsell" xorm:"'BUYORSELL'" binding:"required"` // 方向 - 0:买 1:卖
  20. Orderid int64 `json:"orderid" xorm:"'ORDERID'"` // 委托单号
  21. Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 账号ID
  22. Goodsid int64 `json:"goodsid" xorm:"'GOODSID'"` // 商品ID
  23. Marketid int64 `json:"marketid" xorm:"'MARKETID'"` // 市场ID
  24. Tradetime time.Time `json:"tradetime" xorm:"'TRADETIME'"` // 成交时间
  25. Tradeprice float64 `json:"tradeprice" xorm:"'TRADEPRICE'"` // 成交价格
  26. Tradeqty int64 `json:"tradeqty" xorm:"'TRADEQTY'"` // 成交数量
  27. Channelbuildtype int64 `json:"channelbuildtype" xorm:"'CHANNELBUILDTYPE'"` // 委托单据类型 0:无 1:建仓 2:平仓
  28. Closetype int64 `json:"closetype" xorm:"'CLOSETYPE'"` // 平仓方式 - 0:无 1:平今 2:平昨
  29. Relatedouttradeid int64 `json:"relatedouttradeid" xorm:"'RELATEDOUTTRADEID'"` // 关联外部成交单ID
  30. Asapplyid int64 `json:"asapplyid" xorm:"'ASAPPLYID'" binding:"required"` // 策略申请ID
  31. Detailtype int64 `json:"detailtype" xorm:"'DETAILTYPE'"` // 明细类型 - 1:套利对冲 2:期货换月 3:期货仓位调整
  32. Spotcontractid int64 `json:"spotcontractid" xorm:"'SPOTCONTRACTID'"` // 现货合同ID [1:套利对冲 为合同ID,2:期货换月\3:期货仓位调整时为0]
  33. Asno string `json:"asno" xorm:"'ASNO'"` // 策略编号
  34. Asname string `json:"asname" xorm:"'ASNAME'"` // 策略名称
  35. Spotcontractno string `json:"spotcontractno" xorm:"'SPOTCONTRACTNO'"` // 现货合同编号
  36. Remark string `json:"remark" xorm:"'REMARK'"` // 备注
  37. Updatetime time.Time `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间
  38. Goodscode string `json:"goodscode" xorm:"'GOODSCODE'" binding:"required"` // 商品代码(合约)
  39. Goodsname string `json:"goodsname" xorm:"'GOODSNAME'" binding:"required"` // 商品名称(合约)
  40. Agreeunit float64 `json:"agreeunit" xorm:"'AGREEUNIT'"` // 合约单位
  41. Goodunit string `json:"goodunit" xorm:"'GOODUNIT'"` // 报价单位
  42. Exexchangecode string `json:"exexchangecode" xorm:"'EXEXCHANGECODE'"` // 外部交易所代码
  43. Exexchangename string `json:"exexchangename" xorm:"'EXEXCHANGENAME'"` // 外部交易所名称
  44. Outgoodscode string `json:"outgoodscode" xorm:"'OUTGOODSCODE'"` // 商品代码(外部)
  45. Decimalplace int64 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 报价小数位
  46. Goodsgroupid int64 `json:"goodsgroupid" xorm:"'GOODSGROUPID'" binding:"required"` // 商品组ID(品种ID)
  47. Goodsgroupname string `json:"goodsgroupname" xorm:"'GOODSGROUPNAME'" binding:"required"` // 商品组名称(品种)
  48. }
  49. // QueryInnerTradeDetail 查询内部成交单信息
  50. // @Summary 查询内部成交单信息
  51. // @Produce json
  52. // @Security ApiKeyAuth
  53. // @Param accountid query int true "资金账户"
  54. // @Success 200 {object} QueryInnerTradeDetailRsp
  55. // @Failure 500 {object} app.Response
  56. // @Router /Erms2/QueryInnerTradeDetail [get]
  57. // @Tags 风险管理
  58. func QueryInnerTradeDetail(c *gin.Context) {
  59. appG := app.Gin{C: c}
  60. // 获取请求参数
  61. var req QueryInnerTradeDetailReq
  62. if err := appG.C.ShouldBindQuery(&req); err != nil {
  63. logger.GetLogger().Errorf("QueryInnerTradeDetail failed: %s", err.Error())
  64. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  65. return
  66. }
  67. // 查询数据
  68. engine := db.GetEngine()
  69. datas := make([]QueryInnerTradeDetailRsp, 0)
  70. sql := fmt.Sprintf(`select
  71. t.Tradeid,
  72. t.Buyorsell,
  73. t.Orderid,
  74. t.Accountid,
  75. t.Goodsid,
  76. t.Marketid,
  77. t.Tradetime,
  78. t.Tradeprice,
  79. t.Tradeqty,
  80. t.Channelbuildtype,
  81. t.Closetype,
  82. t.Relatedouttradeid,
  83. ast.Asapplyid,
  84. ast.Detailtype,
  85. ast.Spotcontractid,
  86. ast.Remark,
  87. ast.Updatetime,
  88. asd.Asno,
  89. asd.ASName,
  90. sc.contractno Spotcontractno,
  91. g.Goodscode,
  92. g.Goodsname,
  93. g.Agreeunit,
  94. g.Outgoodscode,
  95. g.Decimalplace,
  96. e.enumdicname GoodUnit,
  97. ee.Exexchangecode,
  98. ee.Exexchangename,
  99. gg.Goodsgroupid,
  100. gg.Goodsgroupname
  101. from Hedge_InnerTradeDetail t
  102. left join ERMS2_ASTradeDetails ast on t.relatedouttradeid = OutTradeID
  103. left join ERMS2_ArbitrageStrategy asd on ast.asapplyid = asd.asapplyid
  104. left join ERMS2_SpotContract sc on ast.spotcontractid = sc.spotcontractid
  105. left join goods g on t.goodsid = g.goodsid
  106. left join enumdicitem e on g.goodunitid = e.enumitemname and e.enumdiccode = 'goodsunit'
  107. left join goodsgroup gg on g.goodsgroupid = gg.goodsgroupid
  108. left join ExternalExchange ee on gg.exexchangeid = ee.autoid
  109. where t.Accountid = %d`, req.AccountID)
  110. if err := engine.SQL(sql).Find(&datas); err != nil {
  111. // 查询失败
  112. logger.GetLogger().Errorf("QueryInnerTradeDetail failed: %s", err.Error())
  113. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  114. return
  115. }
  116. // 查询成功
  117. logger.GetLogger().Infof("QueryInnerTradeDetail successed: %v", datas)
  118. appG.Response(http.StatusOK, e.SUCCESS, datas)
  119. }
  120. // QueryArbitrageStrategyReq 查询期现套利策略表信息请求参数
  121. type QueryArbitrageStrategyReq struct {
  122. AccountID int `form:"accountid" binding:"required"`
  123. GoodsGroupID int `form:"goodsgroupid"`
  124. }
  125. // QueryArbitrageStrategyRsp 期现套利策略表信息
  126. type QueryArbitrageStrategyRsp struct {
  127. Asapplyid string `json:"asapplyid" xorm:"'ASAPPLYID'" binding:"required"` // 策略申请ID(702+Unix秒时间戳(10位)+xxxxxx)
  128. Asno string `json:"asno" xorm:"'ASNO'"` // 策略编号
  129. Biztype int64 `json:"biztype" xorm:"'BIZTYPE'"` // 业务类型 - 1:正向套利 -1:反向套利
  130. Userid int64 `json:"userid" xorm:"'USERID'"` // 所属机构
  131. Deliverygoodsid int64 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 现货品种ID
  132. Goodsgroupid int64 `json:"goodsgroupid" xorm:"'GOODSGROUPID'"` // 期货品种ID
  133. Spotquota float64 `json:"spotquota" xorm:"'SPOTQUOTA'"` // 现货额度
  134. Futurequote float64 `json:"futurequote" xorm:"'FUTUREQUOTE'"` // 期货额度
  135. Applybasis float64 `json:"applybasis" xorm:"'APPLYBASIS'"` // 申请基差
  136. Strategystatus int64 `json:"strategystatus" xorm:"'STRATEGYSTATUS'"` // 策略状态 - 0:未结束 1:已结束
  137. Remark string `json:"remark" xorm:"'REMARK'"` // 备注
  138. Marketid int64 `json:"marketid" xorm:"'MARKETID'"` // 市场ID
  139. Tradedate string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd)
  140. Closetradedate string `json:"closetradedate" xorm:"'CLOSETRADEDATE'"` // 完结交易日(yyyyMMdd)
  141. Usedquota float64 `json:"usedquota" xorm:"'USEDQUOTA'"` // 已占用资金
  142. Futureqty float64 `json:"futureqty" xorm:"'FUTUREQTY'"` // 期货持仓数量
  143. Futureavgprice float64 `json:"futureavgprice" xorm:"'FUTUREAVGPRICE'"` // 期货建仓均价
  144. Futurepl float64 `json:"futurepl" xorm:"'FUTUREPL'"` // 期货总盈亏[结算更新]
  145. Pricedspotqty float64 `json:"pricedspotqty" xorm:"'PRICEDSPOTQTY'"` // 已定价现货数量
  146. Pricedspotqtynotax float64 `json:"pricedspotqtynotax" xorm:"'PRICEDSPOTQTYNOTAX'"` // 已定价现货不含税数量
  147. Spotavgprice float64 `json:"spotavgprice" xorm:"'SPOTAVGPRICE'"` // 现货均价
  148. Spotpl float64 `json:"spotpl" xorm:"'SPOTPL'"` // 现货总盈亏[结算更新]
  149. Netexposure float64 `json:"netexposure" xorm:"'NETEXPOSURE'"` // 单笔业务头寸净敞口 = 期货持仓数量 + 已定价现货不含税数量
  150. Netexposurerate float64 `json:"netexposurerate" xorm:"'NETEXPOSURERATE'"` // 净敞口比例 - 0:未结束 = (NetExposure/PriceSpotQtyNoTax) ; 已结束为0
  151. Totalpl float64 `json:"totalpl" xorm:"'TOTALPL'"` // 业务合计损益 = FuturePL + SpotPL [结算更新]
  152. Openbasis float64 `json:"openbasis" xorm:"'OPENBASIS'"` // 建仓基差
  153. Curbasis float64 `json:"curbasis" xorm:"'CURBASIS'"` // 当前基差[结算更新]
  154. Basischangepl float64 `json:"basischangepl" xorm:"'BASISCHANGEPL'"` // 基差变动损益[结算更新]
  155. Netexposurepl float64 `json:"netexposurepl" xorm:"'NETEXPOSUREPL'"` // 净敞口损益 = TotalPL - BasisChangePL[结算更新]
  156. Spotusedquota float64 `json:"spotusedquota" xorm:"'SPOTUSEDQUOTA'"` // 现货占用资金
  157. Futureopenqty float64 `json:"futureopenqty" xorm:"'FUTUREOPENQTY'"` // 期货开仓数量
  158. Futureopenamount float64 `json:"futureopenamount" xorm:"'FUTUREOPENAMOUNT'"` // 期货开仓金额
  159. Futurecloseqty float64 `json:"futurecloseqty" xorm:"'FUTURECLOSEQTY'"` // 期货平仓数量
  160. Futurecloseamount float64 `json:"futurecloseamount" xorm:"'FUTURECLOSEAMOUNT'"` // 期货平仓金额
  161. Spotbuyamount float64 `json:"spotbuyamount" xorm:"'SPOTBUYAMOUNT'"` // 现货采购金额
  162. Spotbuyqty float64 `json:"spotbuyqty" xorm:"'SPOTBUYQTY'"` // 现货采购数量
  163. Spotsellamount float64 `json:"spotsellamount" xorm:"'SPOTSELLAMOUNT'"` // 现货销售金额
  164. Spotsellqty float64 `json:"spotsellqty" xorm:"'SPOTSELLQTY'"` // 现货销售数量
  165. Updatetime time.Time `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间
  166. Asname string `json:"asname" xorm:"'ASNAME'"` // 策略名称
  167. }
  168. // QueryArbitrageStrategy 查询期现套利策略表信息(指定资金账户、未结束的)
  169. // @Summary 查询期现套利策略表信息(指定资金账户、未结束的)
  170. // @Produce json
  171. // @Security ApiKeyAuth
  172. // @Param accountid query int true "资金账户"
  173. // @Param goodsgroupid query string false "商品组ID(品种ID)"
  174. // @Success 200 {object} QueryArbitrageStrategyRsp
  175. // @Failure 500 {object} app.Response
  176. // @Router /Erms2/QueryArbitrageStrategy [get]
  177. // @Tags 风险管理
  178. func QueryArbitrageStrategy(c *gin.Context) {
  179. appG := app.Gin{C: c}
  180. // 获取请求参数
  181. var req QueryArbitrageStrategyReq
  182. if err := appG.C.ShouldBindQuery(&req); err != nil {
  183. logger.GetLogger().Errorf("QueryArbitrageStrategy failed: %s", err.Error())
  184. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  185. return
  186. }
  187. // 查询数据
  188. engine := db.GetEngine()
  189. datas := make([]QueryArbitrageStrategyRsp, 0)
  190. sql := fmt.Sprintf(`select
  191. to_char(t.ASApplyID) ASApplyID,
  192. t.ASNo,
  193. t.ASName,
  194. t.BizType,
  195. t.UserID,
  196. t.DeliveryGoodsID,
  197. t.GoodsGroupID,
  198. t.SpotQuota,
  199. t.FutureQuote,
  200. t.ApplyBasis,
  201. t.StrategyStatus,
  202. t.Remark,
  203. t.MarketID,
  204. t.TradeDate,
  205. t.CloseTradeDate,
  206. t.UsedQuota,
  207. t.FutureQty,
  208. t.FutureAvgPrice,
  209. t.FuturePL,
  210. t.PricedSpotQty,
  211. t.PricedSpotQtyNoTax,
  212. t.SpotAvgPrice,
  213. t.SpotPL,
  214. t.NetExposure,
  215. t.NetExposureRate,
  216. t.TotalPL,
  217. t.OpenBasis,
  218. t.CurBasis,
  219. t.BasisChangePL,
  220. t.NetExposurePL,
  221. t.SpotUsedQuota,
  222. t.FutureOpenQty,
  223. t.FutureOpenAmount,
  224. t.FutureCloseQty,
  225. t.FutureCloseAmount,
  226. t.SpotBuyAmount,
  227. t.SpotBuyQty,
  228. t.SpotSellAmount,
  229. t.SpotSellQty,
  230. t.UpdateTime
  231. from ERMS2_ArbitrageStrategy t
  232. left join ERMS2_ASAccount a on t.asapplyid = a.asapplyid
  233. where t.StrategyStatus = 0 and a.accountid = %d`, req.AccountID)
  234. if req.GoodsGroupID > 0 {
  235. sql += fmt.Sprintf(" and t.GoodsGroupID = %d", req.GoodsGroupID)
  236. }
  237. if err := engine.SQL(sql).Find(&datas); err != nil {
  238. // 查询失败
  239. logger.GetLogger().Errorf("QueryArbitrageStrategy failed: %s", err.Error())
  240. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  241. return
  242. }
  243. // 查询成功
  244. logger.GetLogger().Infof("QueryArbitrageStrategy successed: %v", datas)
  245. appG.Response(http.StatusOK, e.SUCCESS, datas)
  246. }
  247. // QuerySpotContractReq 查询现货合同表信息请求参数
  248. type QuerySpotContractReq struct {
  249. AsApplyID uint64 `form:"asapplyid" binding:"required"`
  250. SpotContractID uint64 `form:"spotcontractid"`
  251. }
  252. // QuerySpotContractRsp 现货合同表
  253. type QuerySpotContractRsp struct {
  254. Spotcontractid string `json:"spotcontractid" xorm:"'SPOTCONTRACTID'" binding:"required"` // 现货合同ID(701+Unix秒时间戳(10位)+xxxxxx)
  255. Tradedate string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd)
  256. Contractno string `json:"contractno" xorm:"'CONTRACTNO'"` // 现货合同编号
  257. Contracttype int64 `json:"contracttype" xorm:"'CONTRACTTYPE'"` // 现货合同类型 - 1:采购合同 -1:销售合同
  258. Areauserid int64 `json:"areauserid" xorm:"'AREAUSERID'"` // 所属机构
  259. Userid int64 `json:"userid" xorm:"'USERID'"` // 业务员用户ID
  260. Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 资金账户ID
  261. Customeruserid int64 `json:"customeruserid" xorm:"'CUSTOMERUSERID'"` // 客户ID
  262. Customeraccountid int64 `json:"customeraccountid" xorm:"'CUSTOMERACCOUNTID'"` // 客户资金账户ID
  263. Signdate time.Time `json:"signdate" xorm:"'SIGNDATE'"` // 签订日期
  264. Lastdate time.Time `json:"lastdate" xorm:"'LASTDATE'"` // 交货时间
  265. Contractattachment string `json:"contractattachment" xorm:"'CONTRACTATTACHMENT'"` // 合同附件
  266. Producttype int64 `json:"producttype" xorm:"'PRODUCTTYPE'"` // 产品类型 - 1:标准仓单 2:等标 3:非标
  267. Deliverygoodsid int64 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 现货品种ID
  268. Deliverygoodsdesc string `json:"deliverygoodsdesc" xorm:"'DELIVERYGOODSDESC'"` // 品种说明
  269. Warehouseid int64 `json:"warehouseid" xorm:"'WAREHOUSEID'"` // 仓库ID
  270. Wrfactortypeid int64 `json:"wrfactortypeid" xorm:"'WRFACTORTYPEID'"` // 仓单要素类型ID
  271. Contractqtychar string `json:"contractqtychar" xorm:"'CONTRACTQTYCHAR'"` // 合同数量\已订价数量 (用于显示)
  272. Spotprice float64 `json:"spotprice" xorm:"'SPOTPRICE'"` // 价格
  273. Contractamount float64 `json:"contractamount" xorm:"'CONTRACTAMOUNT'"` // 合同金额
  274. Marketid int64 `json:"marketid" xorm:"'MARKETID'"` // 市场ID
  275. Remark string `json:"remark" xorm:"'REMARK'"` // 备注
  276. Handlestatus int64 `json:"handlestatus" xorm:"'HANDLESTATUS'"` // 处理状态
  277. Contractqty float64 `json:"contractqty" xorm:"'CONTRACTQTY'"` // 合同数量(数值) (用于计算)
  278. Positionqty int64 `json:"positionqty" xorm:"'POSITIONQTY'"` // 头寸数量 - 合同数量去小数部分
  279. Paystatus int64 `json:"paystatus" xorm:"'PAYSTATUS'"` // 收付款状态 - 0:未支付 1:已收款 2:已付款
  280. Payremark string `json:"payremark" xorm:"'PAYREMARK'"` // 收付款备注
  281. Paydatetime time.Time `json:"paydatetime" xorm:"'PAYDATETIME'"` // 收付款更新时间
  282. Invoicestatus int64 `json:"invoicestatus" xorm:"'INVOICESTATUS'"` // 开收票状态 - 0:未开票 1:已开票
  283. Invoiceremark string `json:"invoiceremark" xorm:"'INVOICEREMARK'"` // 发票备注
  284. Invoiceatt string `json:"invoiceatt" xorm:"'INVOICEATT'"` // 发票附件
  285. Invoicedatetime time.Time `json:"invoicedatetime" xorm:"'INVOICEDATETIME'"` // 开收票更新时间
  286. Spotstatus int64 `json:"spotstatus" xorm:"'SPOTSTATUS'"` // 收发货状态 - 0:未交收 1:已发货 2:已发货
  287. Spotremark string `json:"spotremark" xorm:"'SPOTREMARK'"` // 收发货备注
  288. Spotdatetime time.Time `json:"spotdatetime" xorm:"'SPOTDATETIME'"` // 收发货更新时间
  289. Relatedqty float64 `json:"relatedqty" xorm:"'RELATEDQTY'"` // 已关联数量
  290. Contractstatus int64 `json:"contractstatus" xorm:"'CONTRACTSTATUS'"` // 合同状态 - 0:未结束 1:已结束
  291. Closeremark string `json:"closeremark" xorm:"'CLOSEREMARK'"` // 结束备注
  292. Closetradedate string `json:"closetradedate" xorm:"'CLOSETRADEDATE'"` // 完结交易日(yyyyMMdd)
  293. Relatedstatus int64 `json:"relatedstatus" xorm:"'RELATEDSTATUS'"` // 关联完结状态 - 0:未结束 1:已结束
  294. Wrstandardid int64 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 仓单标准ID(SEQ_WRSTANDARD)
  295. Invoiceopentime time.Time `json:"invoiceopentime" xorm:"'INVOICEOPENTIME'"` // 开票时间
  296. Closetype int64 `json:"closetype" xorm:"'CLOSETYPE'"` // 终止类型 - 1:违约 2:提前终止
  297. Closedate time.Time `json:"closedate" xorm:"'CLOSEDATE'"` // 终止日期
  298. }
  299. // QuerySpotContract 查询现货合同表信息(指定策略ID、未结束的)
  300. // @Summary 查询现货合同表信息(指定策略ID、未结束的)
  301. // @Produce json
  302. // @Security ApiKeyAuth
  303. // @Param asapplyid query uint64 true "策略申请ID"
  304. // @Param spotcontractid query uint64 false "现货合同ID"
  305. // @Success 200 {object} QuerySpotContractRsp
  306. // @Failure 500 {object} app.Response
  307. // @Router /Erms2/QuerySpotContract [get]
  308. // @Tags 风险管理
  309. func QuerySpotContract(c *gin.Context) {
  310. appG := app.Gin{C: c}
  311. // 获取请求参数
  312. var req QuerySpotContractReq
  313. if err := appG.C.ShouldBindQuery(&req); err != nil {
  314. logger.GetLogger().Errorf("QuerySpotContract failed: %s", err.Error())
  315. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  316. return
  317. }
  318. // 查询数据
  319. engine := db.GetEngine()
  320. datas := make([]QuerySpotContractRsp, 0)
  321. sql := fmt.Sprintf(`select
  322. to_char(t.SpotContractID) SpotContractID,
  323. t.TradeDate,
  324. t.ContractNo,
  325. t.ContractType,
  326. t.AreaUserID,
  327. t.UserID,
  328. t.AccountID,
  329. t.CustomerUserID,
  330. t.CustomerAccountID,
  331. t.SignDate,
  332. t.LastDate,
  333. t.ContractAttachment,
  334. t.ProductType,
  335. t.DeliveryGoodsID,
  336. t.DeliveryGoodsDesc,
  337. t.WarehouseID,
  338. t.WRStandardID,
  339. t.WRFactorTypeID,
  340. t.ContractQtyChar,
  341. t.SpotPrice,
  342. t.ContractAmount,
  343. t.MarketID,
  344. t.Remark,
  345. t.HandleStatus,
  346. t.ContractQty,
  347. t.PositionQty,
  348. t.PayStatus,
  349. t.PayRemark,
  350. t.PayDateTime,
  351. t.InvoiceStatus,
  352. t.InvoiceRemark,
  353. t.InvoiceAtt,
  354. t.InvoiceOpenTime,
  355. t.InvoiceDateTime,
  356. t.SpotStatus,
  357. t.SpotRemark,
  358. t.SpotDateTime,
  359. t.RelatedQty,
  360. t.ContractStatus,
  361. t.CloseType,
  362. t.CloseDate,
  363. t.CloseRemark,
  364. t.CloseTradeDate,
  365. t.RelatedStatus
  366. from ERMS2_SpotContract t
  367. left join ERMS2_ASSpotDetail a on t.spotcontractid = a.spotcontractid
  368. where t.ContractStatus = 0 and a.asapplyid = %d`, req.AsApplyID)
  369. if req.SpotContractID > 0 {
  370. sql += fmt.Sprintf(" and a.spotcontractid = %d", req.SpotContractID)
  371. }
  372. if err := engine.SQL(sql).Find(&datas); err != nil {
  373. // 查询失败
  374. logger.GetLogger().Errorf("QuerySpotContract failed: %s", err.Error())
  375. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  376. return
  377. }
  378. // 查询成功
  379. logger.GetLogger().Infof("QuerySpotContract successed: %v", datas)
  380. appG.Response(http.StatusOK, e.SUCCESS, datas)
  381. }