using YLErp.BLL; namespace YLErp.CustomizedBizLogic { class BizLogicHongYe : BizLogicDefault { public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db) { if (reqModel is null) { throw new ArgumentNullException(nameof(reqModel)); } if (!string.IsNullOrWhiteSpace(reqModel.trade.TradeNumber)) { return reqModel.trade.TradeNumber; } if (!reqModel.trade.TradeDate.HasValue) { throw new Exception("交易日期不存在,无法生成交易编号!"); } var client = GetClient(reqModel.clientId); if (string.IsNullOrEmpty(client.Code)) { throw new Exception("客户代码未填写,无法生成交易编号!"); } lock (_clientCodeLock) { string code = ""; string codePrefix = ""; var tradeNumbers = new List(); codePrefix = "HYZBOTC"; codePrefix += reqModel.trade.TradeDate?.ToString("yyyy"); codePrefix += GetClient(reqModel.clientId)?.Code; codePrefix += "148-"; tradeNumbers = db.trade.Where(x => x.ParentTradeId == 0 && x.TradeNumber.StartsWith(codePrefix)).Select(x => x.TradeNumber).ToList(); int number = tradeNumbers.Count; do { number++; code = codePrefix + number.ToString("0"); if (!tradeNumbers.Contains(code)) { break; } } while (true); return code; } } public override void GenerateClientCode(Client clientObj, IQueryable clientDbQuery) { if (!string.IsNullOrEmpty(clientObj.Number)) { return; } lock (_clientCodeLock) { DateTime date = DateTime.Now; int number = 0; var code = ""; string codePrefix = date.ToString("yyyyMMdd"); var existingClientCodes = clientDbQuery.Where(x => x.Number != null && x.Number != "").Select(x => x.Number).ToList(); number = existingClientCodes.Count(); do { number++; code = codePrefix + number.ToString("00"); if (!existingClientCodes.Contains(code)) { break; } } while (true); clientObj.Number = code; } } } }