using System.Net; using System.Net.Http.Headers; using System.Text; using System.Web; using YLErp.Modules.TradeModule; using YLErp.Modules.TradeModule.ApiModule; using YLErp.Modules.TradeModule.BaseModels; using YLErp.Modules.TradeModule.QueryModule; namespace YLWebAPI.ApiModule.ManagerApi { /// /// OTC-13931 交易明细API接口 /// [ManagerAuth] public class TradeQueryController : BaseApiController { /// /// 交易明细查询API /// [HttpPost, Route("api/v1/tradeDetailList")] public ApiResponseModel TradeDetailList([FromBody] TradeDetailQueryApiModel model) { if (model is null) { model = new TradeDetailQueryApiModel(); } model.IncludeGroupMain = true; var pagedList = new TradeDetailQueryApiService(CurUser).TradeDetailPageList(model); return JsonPagedList(pagedList); } /// /// 交易明细查询API /// [HttpPost, Route("api/v2/tradeDetailList")] public ApiResponseModel TradeDetailListV2([FromBody] TradeDetailQueryApiV2Request request) { if (request is null) { request = new TradeDetailQueryApiV2Request(); } request.IncludeGroupMain = true; var list = new TradeDetailQueryApiV2Service(CurUser).GetList(request); return JsonSuccess(list); } /// /// 当日所有了结信息查询 API /// /// /// [HttpPost, Route("api/v1/tradeCloseInfoList")] public ApiResponseModel TradeCloseInfoList([FromBody] TradeCloseInfoRequestModel model) { if (model is null) { model = new TradeCloseInfoRequestModel(); } if (model.ValueDate == null) { return JsonError($"了结日期 参数必须赋值"); } var result = new TradeCloseInfoQueryApiService(CurUser).GetTradeCloseInfoList(model); return JsonSuccess(result); } /// /// 根据了结日期,交易编号获取交易了结信息,可以不传参数即获取所有了结信息 /// [HttpPost, Route("api/v1/tradeCloseInfos")] public ApiResponseModel TradeCloseInfos(TradeSettleQueryModel model) { if (model is null) { return JsonError("处理请求失败:参数为null"); } var infos = new OtcOptionMultiCloseService(CurUser).GetTradeCloseInfos(model.TradeNumber, "全部", model.ValueDate); return JsonSuccess(infos); } /// /// 交易列表导出API /// [HttpPost, Route("api/v1/otc-option/tradeListExport")] public HttpResponseMessage OtcOptionTradeExport([FromBody] OtcOptionTradeExportRequest model) { if (model is null) { model = new OtcOptionTradeExportRequest(); } try { var bytes = new OtcOptionTradeExportService().ExportToExcel(model); var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(bytes) }; result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName =HttpUtility.UrlEncode( $"场外期权成交记录-{DateTime.Now:yyyy-MM-dd}.xlsx",Encoding.UTF8) }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result; } catch (Exception ex) { return new HttpResponseMessage(HttpStatusCode.InternalServerError) { Content = new StringContent(ex.ToString(), System.Text.Encoding.UTF8, "text/plain") }; } } /// /// 场外期权交易开平仓信息 API /// [HttpPost, Route("api/v1/otc-option/open_close_infos")] public ApiResponseModel TradeOpenCloseInfos([FromBody] SingleTradeQueryModel model) { if (model is null) { return JsonError("处理请求失败:参数为null"); } if (string.IsNullOrEmpty(model.TradeNumber)) { return JsonError("请填写交易编号"); } var openInfo = new TradeDetailsQueryService(CurUser).GetOtcTradeFull(model.TradeNumber); if (openInfo == null) { return JsonError("没有找到交易开仓信息"); } openInfo.Notional = openInfo.OriginalNotional ?? 0; openInfo.StockEqvNotional = openInfo.OriginalStockEqvNotional ?? 0; var countRatio = YLErp.Modules.DataCacheProvider.GetUnderlyingDataSource().GetCountRatio(openInfo.UnderlyingCode); openInfo.TradeAmount = openInfo.Notional / countRatio; openInfo.MetaDic = new TradeMetaService(CurUser).GetTradeMeta(openInfo.id); var closeInfos = new OtcOptionMultiCloseService(CurUser).GetTradeCloseInfos(model.TradeNumber, "全部"); return JsonSuccess(new { OpenInfo = openInfo, CloseInfos = closeInfos }); } } }