diff --git a/YLErpDAL/Modules/TradeModule/DocGenerateModule/GuolianContractNoGenerator.cs b/YLErpDAL/Modules/TradeModule/DocGenerateModule/GuolianContractNoGenerator.cs index 1d03dde8..b1d666a0 100644 --- a/YLErpDAL/Modules/TradeModule/DocGenerateModule/GuolianContractNoGenerator.cs +++ b/YLErpDAL/Modules/TradeModule/DocGenerateModule/GuolianContractNoGenerator.cs @@ -66,6 +66,21 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule return true; } + /// + /// 按国联确认书编号规则拼装编号(纯函数,不依赖数据库,便于单测)。 + /// 格式:GLMS-{clientCode}-{成交日期(yyyyMMdd)}-FICC-{序号}-{标的代码(去点)} + /// - 对客交易(甲方):序号用两位数字,从 01 开始 + /// - 非对客交易(乙方):序号用字母递增,从 A 开始 + /// + public static string BuildTradeNumber(trade trade, string clientCode, int sequenceNo) + { + var isClientTrade = trade.OpponentRole == "甲方"; + var underlyingCode = (trade.UnderlyingCode ?? "").Replace(".", ""); // 去掉标的代码中的点号 + var tradeDateStr = (trade.TradeDate ?? DateTime.MinValue).ToString("yyyyMMdd"); + var seq = isClientTrade ? sequenceNo.ToString("D2") : NumberToLetter(sequenceNo); + return $"GLMS-{clientCode}-{tradeDateStr}-FICC-{seq}-{underlyingCode}"; + } + /// /// 生成国贸交易确认书编号 /// @@ -78,12 +93,7 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule trade trade, string clientCode) { - // 根据trade的OpponentRole判断是否为对客交易(甲方=对客)。glms客户规定甲方=对客 - var isClientTrade = trade.OpponentRole == "甲方"; - var underlyingCode = (trade.UnderlyingCode ?? "").Replace(".", ""); // 去掉标的代码中的点号 var tradeDate = trade.TradeDate ?? DateTime.MinValue; - var tradeDateStr = tradeDate.ToString("yyyyMMdd"); - var prefix = $"GLMS-{clientCode}-{tradeDateStr}-FICC-"; lock (_syncLock) { @@ -108,14 +118,7 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule && t.id < trade.id); var sequenceNo = sameDayTradesCount + 1; - if (isClientTrade) - { - return $"{prefix}{sequenceNo:D2}-{underlyingCode}"; - } - else - { - return $"{prefix}{NumberToLetter(sequenceNo)}-{underlyingCode}"; - } + return BuildTradeNumber(trade, clientCode, sequenceNo); } }