using YLErp.DBModels.Consts; using YLErp.Modules.EodModule; using YLErp.Modules.TradeModule; using YLErp.Modules.TradeModule.ApiModule; using YLErp.Modules.TradeModule.DealModule; using YLErp.Modules.TradeModule.OrderModule; namespace YLWebAPI.ApiModule.ManagerApi { /// /// 交易操作 /// [ManagerAuth] public class TradeDealController : BaseApiController { /// /// 交易了结 /// [HttpPost, Route("api/v1/tradeClose")] public ApiResponseModel TradeClose(TradeCloseRequestModel model) { if (model is null) { return JsonError("处理请求失败:参数为null"); } //以后转为前后端分离模式后还需要重新处理 model.ImportFlag = "WebAPI"; var result = new OtcTradeCloseService(CurUser).ExecuteClose(model); var td = result.Trade; var tc = result.TradeCash; var Notional = td.Notional; if (ConsTrade.TradeCompleteStatus.Contains(td.TradeStatus)) { Notional = 0; } var TcAction = tc.ExerciseWay == TradeCashExerciseWayEnum.到期行权 ? "到期" : "终止"; var TcTradePrice = (td.TradePrice ?? 0) * (tc.UnwindPercentRate ?? 0) * (td.BuySell == "买入" ? -1 : 1); var WinLoss = tc.Amount + TcTradePrice; //参考OtcTradeDetail类 var ret = new { td.TradeNumber, td.TradeStatus, Notional, TcAction, TcValueDate = tc.HappenedDate ?? tc.ValueDate, TcFinalPrice = tc.FinalPrice, TcUnwindPrice = tc.UnwindPrice, TcUnwindPricePercent = tc.UnwindPricePercentRate, TcUnwindNotional = tc.UnwindNotional ?? tc.Notional, TcUnwindPercent = tc.UnwindPercentRate, TcAmount = tc.Amount, WinLoss, TcTradePrice }; return JsonSuccess(ret); } /// /// 组合交易主交易了结 /// [HttpPost, Route("api/v1/trade/group_options_close_start")] public ApiResponseModel TradeGroupClose([FromBody] TradeGroupCloseRequest req) { if (req is null) { return JsonError("处理请求失败:参数为null"); } new TradeGroupCloseService(CurUser).ExecuteCloseStart(req); return JsonSuccessInfo("操作成功"); } /// /// 完成组合交易了结 /// [HttpPost, Route("api/v1/trade/group_options_close_complete")] public ApiResponseModel FinishGroupTradeCash([FromBody] TradeGroupCloseRequest req) { using (var DbContext = YLErp.Modules.DbContextFactory.GetYLDbContext()) { var trade = DbContext.trade.FirstOrDefault(x => x.TradeNumber == req.TradeNumber); if (trade == null) { return JsonError("未找到该交易编号对应的交易"); } var tradeCash = DbContext.trade_cash.OrderByDescending(x => x.id).FirstOrDefault(x => x.TradeId == trade.id && x.ValidState != "InValid" && x.Status == null && x.Action != "系统操作-期权费"); if (tradeCash == null) { return JsonError("未找到该组合交易未完成的了结记录"); } new TradeUnwindService(CurUser).FinishGroupTradeCash(tradeCash.id); return JsonSuccessInfo("已完成"); } } /// /// 期权交易-设置日终观察价格 /// [HttpPost, Route("api/v1/trade/option/setObservationPrice")] public ApiResponseModel TradeSetObservationPrice(SetObservationPriceApiRequest req) { if (req is null) { return JsonError("处理请求失败:参数为null"); } new ManuallyTradeObservationPriceService(CurUser).SetObservationPriceApi(req); return JsonSuccess(); } /// /// 撤回交易了结审核 /// [HttpPost, Route("api/v1/trade/withdrawCloseApproval")] public ApiResponseModel WithdrawCloseApproval(SingleTradeQueryModel model) { if (model is null) { return JsonError("处理请求失败:参数为null"); } new TradeRevokeService(CurUser).TradeRevoke(model.TradeNumber); return JsonSuccessInfo("成功"); } /// /// 交易无效操作 /// [HttpPost, Route("api/v1/trade/invalid")] public ApiResponseModel TradeInvalid(TradeInvalidRequest request) { if (request is null) { return JsonError("缺少必要的输入参数"); } new TradeInvalidService(CurUser).InvalidTrade(request.TradeNumber, true); return JsonSuccess("成功"); } } }