#EQD-6604 国联民生-确认书编码生成环节移到簿记(支持手工录入)

feat: 国联民生收益互换簿记后按确认书规则生成交易编
- 补充单测文件
This commit is contained in:
tengyufan
2026-07-29 17:14:40 +08:00
parent e1c5f72418
commit d1f697c524
2 changed files with 87 additions and 1 deletions
@@ -0,0 +1,70 @@
using YLErp.Configuration;
using YLErp.DBModels;
using YLErp.Modules.TradeModule.DocGenerateModule;
namespace YLErp.UnitTestProject.Modules.TradeModule.DocGenerateModule
{
[TestClass]
public class GuolianContractNoGeneratorTest
{
[TestMethod]
public void IsGuolianSwapTrade_OnlyMatchesGuolianSwap()
{
var swapTrade = CreateSwapTrade();
Assert.IsTrue(GuolianContractNoGenerator.IsGuolianSwapTrade(swapTrade, CompanyEnum.));
Assert.IsFalse(GuolianContractNoGenerator.IsGuolianSwapTrade(
new trade { TradeType = "香草期权" }, CompanyEnum.));
Assert.IsFalse(GuolianContractNoGenerator.IsGuolianSwapTrade(swapTrade, CompanyEnum.));
}
[TestMethod]
public void ShouldGenerateTradeNumberAfterSave_OnlyGeneratesForBlankTradeNumber()
{
var blankTrade = CreateSwapTrade();
var manualTrade = CreateSwapTrade();
manualTrade.TradeNumber = "MANUAL-001";
Assert.IsTrue(GuolianContractNoGenerator.ShouldGenerateTradeNumberAfterSave(
blankTrade, CompanyEnum.));
Assert.IsFalse(GuolianContractNoGenerator.ShouldGenerateTradeNumberAfterSave(
manualTrade, CompanyEnum.));
Assert.IsFalse(GuolianContractNoGenerator.ShouldGenerateTradeNumberAfterSave(
blankTrade, CompanyEnum.));
}
[TestMethod]
public void BuildTradeNumber_ClientTrade_UsesNumericSequenceAndSanitizesUnderlyingCode()
{
var trade = CreateSwapTrade();
trade.OpponentRole = "甲方";
trade.TradeDate = new DateTime(2026, 7, 24);
trade.UnderlyingCode = "250210.IB";
var number = GuolianContractNoGenerator.BuildTradeNumber(trade, "IS", 3);
Assert.AreEqual("GLMS-IS-20260724-FICC-03-250210IB", number);
}
[DataTestMethod]
[DataRow(1, "A")]
[DataRow(26, "Z")]
[DataRow(27, "AA")]
public void BuildTradeNumber_NonClientTrade_UsesLetterSequence(int sequenceNo, string sequenceCode)
{
var trade = CreateSwapTrade();
trade.OpponentRole = "乙方";
trade.TradeDate = new DateTime(2026, 7, 24);
trade.UnderlyingCode = "180205.IB";
var number = GuolianContractNoGenerator.BuildTradeNumber(trade, "glmscounter", sequenceNo);
Assert.AreEqual($"GLMS-glmscounter-20260724-FICC-{sequenceCode}-180205IB", number);
}
private static trade CreateSwapTrade()
{
return new trade { TradeType = "收益互换" };
}
}
}
@@ -20,10 +20,26 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule
public static bool IsGuolianSwapTrade(trade trade) public static bool IsGuolianSwapTrade(trade trade)
{ {
return PS.Config.Company == CompanyEnum. return IsGuolianSwapTrade(trade, PS.Config.Company);
}
public static bool IsGuolianSwapTrade(trade trade, CompanyEnum company)
{
return company == CompanyEnum.
&& trade?.TradeType == "收益互换"; && trade?.TradeType == "收益互换";
} }
public static bool ShouldGenerateTradeNumberAfterSave(trade trade, CompanyEnum company)
{
return IsGuolianSwapTrade(trade, company)
&& string.IsNullOrWhiteSpace(trade.TradeNumber);
}
public static bool CanReuseRejectedTradeNumber(trade trade, CompanyEnum company)
{
return IsGuolianSwapTrade(trade, company);
}
/// <summary> /// <summary>
/// 交易首次入库后按国联交易确认书编号规则回写交易编号。 /// 交易首次入库后按国联交易确认书编号规则回写交易编号。
/// </summary> /// </summary>