using YLErp.BLL; namespace YLErp.CustomizedBizLogic { public class BizLogicFD : BizLogicDefault { /// /// 生成客户编号 /// 生成规则:例如 SAC-0001 , SAC-为固定字符,最后四位是序列编号,从0001开始,每增加一个客户自动加1,序号最大值9999 /// /// 客户创建时的初始编号,如果没有传null /// public override void GenerateClientCode(Client clientObj, IQueryable clientDbQuery) { var prefix = "SAC-"; if (string.IsNullOrWhiteSpace(clientObj.Number) || !clientObj.Number.StartsWith(prefix)) { lock (_clientCodeLock) { string result; var existingClientCodes = clientDbQuery.Where(x => x.Number.Contains(prefix)).Select(x => x.Number).ToList(); if (existingClientCodes.Count == 0) { result = "0001"; } else { var maxNumber = existingClientCodes.Max(x => parseNumber(x.Substring(4))); var nextNum = maxNumber + 1; if (nextNum < 10000) { result = nextNum.ToString("D4"); } else { //如果大于9999,将生成SAC-10000等字符串,需求是说不会大于10000的 result = nextNum.ToString(); } } clientObj.Number = prefix + result; } } } /// /// 在交易确认前生成交易编号 /// public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db) { if (reqModel is null) { throw new ArgumentNullException(nameof(reqModel)); } var maxNumber = reqModel.trade.TradeDate?.ToString("yyyyMMdd") + DateTime.Now.ToString("HHmmss"); return maxNumber; } private int parseNumber(string clientNumber) { int.TryParse(clientNumber, out var number); return number; } } }