using YLErp.BLL; using YLErp.Modules; namespace YLErp.CustomizedBizLogic { public class BizLogicZJ : BizLogicDefault { public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db) { if (reqModel is null) { throw new ArgumentNullException(nameof(reqModel)); } if (reqModel.trade.TradeDate == null) { throw new Exception("生成合同编号失败,请先确认该交易成交日期!"); } var client = DataCacheProvider.GetClientDataSource().GetData(reqModel.clientId); if (client == null) { throw new Exception("未找到客户!"); } var code = ""; var trade = reqModel.trade; var prefix = ""; var um = DataCacheProvider.GetUnderlyingDataSource().GetData(trade.UnderlyingCode); var IsBuy = false; if (trade.TradeType == "收益互换") { var swapTrade = trade.trade_swap; if (swapTrade == null) { swapTrade = db.trade_swap.AsNoTracking().FirstOrDefault(n => n.TradeId == trade.id); } if (swapTrade != null && swapTrade.PayLongShort == "多头") { IsBuy = true; } } else { if (trade.BuySell == "买入") { IsBuy = true; } } prefix += trade.TradeDate?.ToString("yyyyMMdd") + "_" + client.Number + "_" + um.UnderlyingCode + "_"; if (IsBuy) { prefix += "B_"; } else { prefix += "S_"; } var tradeNumbers = db.trade .Where(O => O.TradeNumber.StartsWith(prefix) && O.ValidState != "InValid").Select(O => O.TradeNumber).OrderByDescending(O => O); var tradeNumber = tradeNumbers.FirstOrDefault(); var tradeCount = 0; if (string.IsNullOrWhiteSpace(tradeNumber) || !int.TryParse(tradeNumber.Substring(prefix.Length), out tradeCount)) { tradeCount = 0; } do { code = $"{prefix}{tradeCount}"; tradeCount++; } while (tradeNumbers.Contains(code)); return code; } public string GenerateFlowNumber(trade_swap_flow reqModel, YLContext db) { if (reqModel is null) { throw new ArgumentNullException(nameof(reqModel)); } if (reqModel.TradeDate == null) { throw new Exception("生成合同编号失败,请先确认该流水成交日期!"); } var code = ""; var prefix = ""; var um = DataCacheProvider.GetUnderlyingDataSource().GetData(reqModel.UnderlyingCode); prefix += reqModel.TradeDate?.ToString("yyyyMMdd") + "_" + reqModel.ClientNumber + "_" + um.UnderlyingCode + "_" + reqModel.BuySell + "_"; var numbers = db.trade_swap_flow .Where(O => O.Number.StartsWith(prefix)).Select(O => O.Number).OrderByDescending(O => O); var flowNumber = numbers.FirstOrDefault(); var flowCount = 0; if (string.IsNullOrWhiteSpace(flowNumber) || !int.TryParse(flowNumber.Substring(prefix.Length), out flowCount)) { flowCount = 0; } do { code = $"{prefix}{flowCount}"; flowCount++; } while (numbers.Contains(code)); return code; } } }