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);
}
}