fix(EQD-6604): 补 GuolianContractNoGenerator.BuildTradeNumber 纯函数,修复 UnitTestProject 编译失败
测试 GuolianContractNoGeneratorTest 调用了 BuildTradeNumber(trade, clientCode, sequenceNo) 纯函数,
但生产类此前只有依赖数据库的 Generate(YLContext, ...)。抽出不连库的 BuildTradeNumber 供测试与 Generate
共用,编号格式与现有 Generate 输出完全一致(GLMS-{client}-{yyyyMMdd}-FICC-{序号}-{去点标的})。
6 个单测全部通过,生产行为不变。
This commit is contained in:
@@ -66,6 +66,21 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按国联确认书编号规则拼装编号(纯函数,不依赖数据库,便于单测)。
|
||||
/// 格式:GLMS-{clientCode}-{成交日期(yyyyMMdd)}-FICC-{序号}-{标的代码(去点)}
|
||||
/// - 对客交易(甲方):序号用两位数字,从 01 开始
|
||||
/// - 非对客交易(乙方):序号用字母递增,从 A 开始
|
||||
/// </summary>
|
||||
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}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成国贸交易确认书编号
|
||||
/// </summary>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user