using YLErp.BLL; using YLErp.Model.Enum; namespace YLErp.Modules.TradeModule.DealModule { /// /// 交易拒绝服务 /// public class TradeRejectService : TradeServiceBase { public TradeRejectService(YLBaseService baseService) : base(baseService) { } public TradeRejectService(OptUserInfo userInfo) : base(userInfo) { } /// /// from tradecontroller.TradeReject /// public void OtcOptionTradeReject(trade req, int tradeId) { if (req is null) { throw new ArgumentNullException(nameof(req)); } var trade = DbContext.trade.Find(tradeId); if (trade == null) { throw new ServiceException("系统中没有此交易"); } trade.MetaDic = DbContext.TradeMeta.Where(a => a.TradeId == req.id).ToDictionary(a => a.MetaKey, a => a.MetaValue); if (trade.TradeStatus != ConsTrade.审批中 && trade.TradeStatus != ConsTrade.行权待复核 && trade.TradeStatus != ConsTrade.平仓待复核 && trade.TradeStatus != ConsTrade.互换待复核) { throw new ServiceException("该交易状态已变更,不能被拒绝,请先刷新页面"); } tradeBLL.SetFieldsByTradeType(trade); //if (req.TradeOpenVolatility.HasValue && req.TradeOpenVolatility.Value < 0) //{ // throw new ServiceException("成交波动率不能小于0"); //} //if (req.TradeCloseVolatility.HasValue && req.TradeCloseVolatility.Value < 0) //{ // throw new ServiceException("目标波动率不能小于0"); //} if (!req.PremiumPayDate.HasValue) { req.PremiumPayDate = req.TradeDate; } //else if (req.PremiumPayDate < req.TradeDate && req.PremiumPayDate > req.ExerciseDate) //{ // throw new ServiceException("权利金应付日必须介于交易日与到期日之间!"); //} //if (req.NumOfSmoothingDays.HasValue) //{ // if (req.NumOfSmoothingDays.Value < 0) // { // throw new ServiceException("平滑过渡天数不能小于0"); // } //} //if (req.TradeType == "价差期权") //{ // var errMsg = SpreadOptionValidator.Validate(req); // if (!string.IsNullOrEmpty(errMsg)) // { // throw new ServiceException(errMsg); // } //} if (trade != null) { trade.ProcessOrderId = Convert.ToInt32(PStatusEnum.reject); trade.TradeStatus = ConsTrade.已拒绝; trade.ProcessOptDate = DateTime.Now; trade.ProcessStatus = "已拒绝"; trade.CheckStatus = 0; } var diffList = TradeCheckUtil.GetDiffs(trade, req); if (diffList?.Count > 0) { TradeCheckUtil.SaveTradeCheck(trade, req, UserId, UserName); } AddTradeOperationHistoryAndSetParentTradeInfo(false, trade, "交易复核拒绝成功"); DbContext.SaveChanges(); } /// /// from forwardtradecontroller.TradeReject /// public void ForwardTradeReject(trade req, int tradeId) { if (req is null) { throw new ArgumentNullException(nameof(req)); } var trade = DbContext.trade.Find(tradeId); if (trade == null) { throw new ServiceException("系统中没有此交易"); } tradeBLL.SetFieldsByTradeType(trade); if (trade != null) { trade.ProcessOrderId = Convert.ToInt32(PStatusEnum.reject); trade.TradeStatus = ConsTrade.已拒绝; trade.ProcessOptDate = DateTime.Now; trade.ProcessStatus = "已拒绝"; trade.CheckStatus = 0; } var diffList = TradeCheckUtil.GetDiffs(trade, req); if (diffList?.Count > 0) { TradeCheckUtil.SaveTradeCheck(trade, req, UserId, UserName); } AddTradeOperationHistoryAndSetParentTradeInfo(false, trade, "交易复核拒绝成功"); DbContext.SaveChanges(); } } }