using System.Text.RegularExpressions; using YLErp.BLL; namespace YLErp.CustomizedBizLogic { class BizLogicMaoChuan : BizLogicDefault { public override string GenerateTradeNumberBeforeConfirm(TradeNumberReqModel reqModel, YLContext db) { if (!string.IsNullOrWhiteSpace(reqModel.trade.TradeNumber)) { return reqModel.trade.TradeNumber; } if (!reqModel.trade.TradeDate.HasValue) { throw new Exception("交易日期不存在,无法生成交易编号!"); } lock (_clientCodeLock) { var date = DateTime.Now; string code = ""; string codePrefix = ""; var items = new List(); switch (reqModel.trade.BuySell) { case "买入": case "多头开仓": case "空头平仓": items.Add("long"); break; case "卖出": case "空头开仓": case "多头平仓": items.Add("short"); break; default: break; } switch (reqModel.trade.TradeType) { case "远期": items.Add("f"); break; case "香草期权": case "障碍期权": case "二元期权": case "亚式期权": case "彩虹期权": case "价差期权": case "信用债": case "商品期货": case "商品现货": case "股票": case "场内期权": case "自定义交易": case "双鲨期权": case "凤凰期权": case "雪球期权": case "合成价差期权": case "牛市价差": case "熊市价差": case "亚式熊市价差": case "跨式组合": case "宽跨式组合": case "蝶式组合": default: items.Add(reqModel.trade.OptionType == "看涨" ? "C" : "P"); break; } items.Add(Regex.Replace(reqModel.trade.UnderlyingCode, @"\d+", "")); items.Add(date.ToString("yy")); codePrefix = string.Join("-", items).ToLower(); List tradeNumbers = new List(); tradeNumbers = db.trade.Where(x => x.ValidState != "InValid" && x.TradeDate.Value.Year == date.Year).Select(x => x.TradeNumber).ToList(); //获取导入 if (reqModel.importTrades != null && reqModel.importTrades.Any()) { tradeNumbers.AddRange(reqModel.importTrades.Select(O => O.TradeNumber)); } int number = tradeNumbers.Count; do { number++; code = codePrefix + number.ToString("000"); 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; string code = ""; string codePrefix = $"mczb-otc-{date.Year}"; var existingClientCodes = clientDbQuery.Where(x => x.Number.StartsWith(codePrefix)).Select(x => x.Number).ToList(); int number = existingClientCodes.Count; do { number++; code = codePrefix + number.ToString("000"); if (!existingClientCodes.Contains(code)) { break; } } while (true); clientObj.Number = code; } } } }