feature: 确认书模板修改
This commit is contained in:
@@ -8,8 +8,10 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule
|
||||
/// <summary>
|
||||
/// 国贸交易确认书编号生成器
|
||||
/// 规则:
|
||||
/// - 对客交易(OpponentRole为"甲方"):GLMS-{对手方代码}-{成交日期(yyyyMMdd)}-{标的代码}-{当日第N笔对客交易(数字递增)},从001开始
|
||||
/// - 非对客交易(OpponentRole为"乙方"):GLMS-{对手方代码}-{成交日期(yyyyMMdd)}-{标的代码}-{当日第N笔非对客交易(字母递增)},从A开始
|
||||
/// - 对客交易(OpponentRole为"乙方"):GLMS-{对手方代码}-{成交日期(yyyyMMdd)}-{当日第N笔对客交易(数字递增)}-{标的代码},从01开始
|
||||
/// 例:GLMS-IS-20260424-01-250210IB
|
||||
/// - 非对客交易(OpponentRole为"甲方"):GLMS-{对手方代码}-{成交日期(yyyyMMdd)}-{当日第N笔非对客交易使用字母递增}-{标的代码},从A开始
|
||||
/// 例:GLMS-IS-20260424-A-250210IB
|
||||
/// </summary>
|
||||
public class GuolianContractNoGenerator
|
||||
{
|
||||
@@ -27,12 +29,12 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule
|
||||
trade trade,
|
||||
string clientCode)
|
||||
{
|
||||
// 根据trade的OpponentRole判断是否为对客交易
|
||||
var isClientTrade = trade.OpponentRole == "甲方";
|
||||
var underlyingCode = trade.UnderlyingCode ?? "";
|
||||
// 根据trade的OpponentRole判断是否为对客交易(乙方=对客)
|
||||
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}-{underlyingCode}-";
|
||||
var prefix = $"GLMS-{clientCode}-{tradeDateStr}-";
|
||||
|
||||
lock (_syncLock)
|
||||
{
|
||||
@@ -63,62 +65,65 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule
|
||||
|
||||
if (isClientTrade)
|
||||
{
|
||||
// 对客交易:GLMS-{clientCode}-{date}-{counter:D2}-{underlyingCode}
|
||||
var maxNo = 0;
|
||||
var prefixLen = prefix.Length;
|
||||
for (var i = 0; i < existingCodes.Count; i++)
|
||||
{
|
||||
var code = existingCodes[i];
|
||||
if (string.IsNullOrEmpty(code) || code.Length <= prefixLen)
|
||||
if (string.IsNullOrEmpty(code) || code.Length <= prefixLen + 2)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var suffix = code.Substring(prefixLen);
|
||||
if (int.TryParse(suffix, out var n) && n > maxNo)
|
||||
var counterStr = code.Substring(prefixLen, 2);
|
||||
if (int.TryParse(counterStr, out var n) && n > maxNo)
|
||||
{
|
||||
maxNo = n;
|
||||
}
|
||||
}
|
||||
|
||||
var nextNo = maxNo + 1;
|
||||
var contractNo = $"{prefix}{nextNo:D3}";
|
||||
var contractNo = $"{prefix}{nextNo:D2}-{underlyingCode}";
|
||||
while (existingCodeSet.Contains(contractNo))
|
||||
{
|
||||
nextNo++;
|
||||
contractNo = $"{prefix}{nextNo:D3}";
|
||||
contractNo = $"{prefix}{nextNo:D2}-{underlyingCode}";
|
||||
}
|
||||
return contractNo;
|
||||
}
|
||||
else
|
||||
{
|
||||
var maxNo = 0;
|
||||
// 非对客交易:GLMS-{clientCode}-{date}-{letter}-{underlyingCode}
|
||||
// 找当日已有的非对客交易最大字母序号
|
||||
var maxLetter = 0;
|
||||
var prefixLen = prefix.Length;
|
||||
for (var i = 0; i < existingCodes.Count; i++)
|
||||
{
|
||||
var code = existingCodes[i];
|
||||
if (string.IsNullOrEmpty(code) || code.Length <= prefixLen)
|
||||
if (string.IsNullOrEmpty(code) || code.Length <= prefixLen + 2)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var suffix = code.Substring(prefixLen);
|
||||
if (!TryParseLettersToNumber(suffix, out var n))
|
||||
var rest = code.Substring(prefixLen);
|
||||
var dashIdx = rest.IndexOf('-');
|
||||
if (dashIdx > 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (n > maxNo)
|
||||
{
|
||||
maxNo = n;
|
||||
var letterPart = rest.Substring(0, dashIdx);
|
||||
if (TryParseLettersToNumber(letterPart, out var ln) && ln > maxLetter)
|
||||
{
|
||||
maxLetter = ln;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var nextNo = maxNo + 1;
|
||||
var contractNo = $"{prefix}{NumberToLetter(nextNo)}";
|
||||
var nextLetter = maxLetter + 1;
|
||||
var contractNo = $"{prefix}{NumberToLetter(nextLetter)}-{underlyingCode}";
|
||||
while (existingCodeSet.Contains(contractNo))
|
||||
{
|
||||
nextNo++;
|
||||
contractNo = $"{prefix}{NumberToLetter(nextNo)}";
|
||||
nextLetter++;
|
||||
contractNo = $"{prefix}{NumberToLetter(nextLetter)}-{underlyingCode}";
|
||||
}
|
||||
return contractNo;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user