using YLErp.BLL; namespace YLErp.CustomizedBizLogic { /// /// 瑞达 /// class BizLogicRD : 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 code = ""; var prefix = "OTC-"; //远期 if (reqModel.trade.TradeType == "远期") { //掉期 if (reqModel.trade.StructureType == "掉期") { prefix += "SW-"; } else { prefix += "FW-"; } } prefix += reqModel.trade.TradeDate?.ToString("yyyyMM"); 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 { tradeCount++; code = $"{prefix}{tradeCount:D3}"; } while (tradeNumbers.Contains(code)); return code; } public override void GenerateClientCode(Client clientObj, IQueryable clientDbQuery) { if (!string.IsNullOrEmpty(clientObj.Number)) { return; } if (string.IsNullOrWhiteSpace(clientObj.Code)) { throw new Exception("生成客户编号失败,请先添加客户代码"); } lock (_clientCodeLock) { var prefix = "RDXK-" + clientObj.ProcessOptDate?.ToString("yyyyMMdd"); var last = $"-{clientObj.Code}"; var existingClientCodes = clientDbQuery.Where(o => o.Number != null && o.Number.StartsWith(prefix)) .Select(x => x.Number).OrderByDescending(O => O); var existingClientCode = existingClientCodes.FirstOrDefault(); string code; var number = 0; { if (!string.IsNullOrWhiteSpace(existingClientCode)) { var temp = existingClientCode.Substring(prefix.Length); temp = temp.Substring(0, temp.IndexOf('-')); int.TryParse(temp, out number); } do { number++; code = $"{prefix}{number:D2}{last}"; } while (existingClientCodes.Contains(code)); } clientObj.Number = code; } } } }