using YLErp.BLL; using YLErp.Modules; namespace YLErp.CustomizedBizLogic { public class BizLogicDZ : 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("生成合同编号失败,请先确认该交易成交日期!"); } if (reqModel.clientId == 0) { throw new Exception("生成合同编号失败,请先确认该交易交易对手方!"); } var code = ""; var clientNumber = DataCacheProvider.GetClientDataSource().GetData(reqModel.clientId)?.Number.TrimToNull(); var prefix = reqModel.trade.TradeDate?.ToString("yyyyMMdd"); prefix += "-" + clientNumber + "-"; var tradeNumbers = db.trade .Where(O => O.TradeNumber.StartsWith(prefix) && O.ValidState != "InValid").Select(O => O.TradeNumber).OrderByDescending(O => O); var tradeNumber = tradeNumbers.FirstOrDefault(); if (string.IsNullOrWhiteSpace(tradeNumber) || !int.TryParse(tradeNumber.Substring(prefix.Length).Split('-')[0], out var tradeCount)) { tradeCount = 0; } do { tradeCount++; code = $"{prefix}{tradeCount:D2}"; } while (tradeNumbers.Contains(code)); return code; } } }