Files
zszq-trs/UnitTestProject/PluginTests/TestGuoLianConfirmTemplate.cs
T
hjhan ef4b73f1ce feat: 确认书协议段勾选框按客户主协议类型动态生成
在已合并为单段的协议段基础上,把 9 个勾选框(SAC/NAFMII 主协议与
补充协议、协会、三份定义文件)从模板硬编码(Wingdings 2 复选框与
固定文本□)改为占位符,由生成器按客户开户维护的
client_meta.MainProtocolType(1=NAFMII,其余 SAC)填 ☑/□,
避免 NAFMII 客户确认书错按 SAC 勾选展示。

- 修改 4 份确认书模板,移除全部 Wingdings 2 依赖
- TradeConfirmationGenerator 按主协议类型赋勾选值,
  主协议类型缺失时记录日志并按 SAC 展示(与原行为一致)
- 定义文件维度暂无客户协议数据,统一空框,待资料补齐后接入
- 新增 TestGuoLianConfirmTemplate 渲染测试覆盖 SAC/NAFMII 两类客户
2026-08-27 13:50:07 +08:00

87 lines
4.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.IO.Compression;
using System.Text;
using Newtonsoft.Json.Linq;
using YLErp.Office.Converters;
namespace YLErp.PluginTests
{
/// <summary>
/// 国联确认书模板协议段勾选框占位符化后的渲染验证:
/// 客户开户维护的主协议类型(client_meta.MainProtocolType1=NAFMII,其余 SAC
/// 决定协议段 ☑/□ 勾选位置,模板不再依赖 Wingdings 2 硬编码复选框。
/// </summary>
[TestClass]
public class TestGuoLianConfirmTemplate
{
private static string TemplatePath =>
Path.Combine(AppContext.BaseDirectory, "..\\..\\..\\..\\Plugins\\YLErp.Plugins.GuoLian\\App_Docs\\contract_template",
"国联民生-收益互换交易确认书-境内模板-【客户看多】-【现券】-清洁版.docx");
private static string OutputDir => Path.Combine(AppContext.BaseDirectory, "TestOutputs");
private static JsonVarDic BuildVarDic(bool isNafmii)
{
var varDic = new JsonVarDic();
varDic.SetVar("合同编号", "GL-20260827-001");
varDic.SetVar("客户名称", "测试客户");
varDic.SetVar("主协议编号", "GL-ZU-2026-001");
varDic.SetVar("补充协议编号", "GL-BC-2026-001");
static string Check(bool on) => on ? "☑" : "□";
varDic.SetVar("主协议SAC勾选", Check(!isNafmii));
varDic.SetVar("主协议NAFMII勾选", Check(isNafmii));
varDic.SetVar("补充协议SAC勾选", Check(!isNafmii));
varDic.SetVar("补充协议NAFMII勾选", Check(isNafmii));
varDic.SetVar("协会证券业勾选", "□");
varDic.SetVar("协会交易商勾选", "□");
varDic.SetVar("定义文件商品勾选", "□");
varDic.SetVar("定义文件利率勾选", "□");
varDic.SetVar("定义文件债券勾选", "□");
return varDic;
}
private static string RenderAndReadBody(bool isNafmii, string fileName)
{
Directory.CreateDirectory(OutputDir);
var targetPath = Path.Combine(OutputDir, fileName);
OfficeFileConverter.ConvertByUsingDocTemplate(TemplatePath, targetPath, BuildVarDic(isNafmii));
using var zip = ZipFile.OpenRead(targetPath);
var entry = zip.GetEntry("word/document.xml");
using var stream = entry.Open();
using var reader = new StreamReader(stream, Encoding.UTF8);
var xml = reader.ReadToEnd();
// 勾选框与协议名称分属不同 run,断言前拼接纯文本
var plainText = new StringBuilder();
foreach (System.Text.RegularExpressions.Match m in System.Text.RegularExpressions.Regex.Matches(xml, @"<w:t[^>]*>(.*?)</w:t>"))
{
plainText.Append(m.Groups[1].Value);
}
return plainText.ToString();
}
[TestMethod("测试-国联确认书-SAC客户协议段勾选")]
public void TestSacAgreementChecked()
{
var body = RenderAndReadBody(isNafmii: false, "guolian_confirm_sac.docx");
Assert.IsTrue(body.Contains("☑《中国证券期货市场衍生品交易主协议》/"), "SAC 客户主协议应勾选 SAC");
Assert.IsTrue(body.Contains("□《中国银行间市场金融衍生产品交易主协议(2009年版)》"), "SAC 客户主协议不应勾选 NAFMII");
Assert.IsTrue(body.Contains("☑《中国证券期货市场衍生品交易主协议》补充协议"), "SAC 客户补充协议应勾选 SAC");
Assert.IsFalse(body.Contains("{{主协议SAC勾选}}"), "协议段占位符应全部被替换");
}
[TestMethod("测试-国联确认书-NAFMII客户协议段勾选")]
public void TestNafmiiAgreementChecked()
{
var body = RenderAndReadBody(isNafmii: true, "guolian_confirm_nafmii.docx");
Assert.IsTrue(body.Contains("□《中国证券期货市场衍生品交易主协议》/"), "NAFMII 客户主协议不应勾选 SAC");
Assert.IsTrue(body.Contains("☑《中国银行间市场金融衍生产品交易主协议(2009年版)》"), "NAFMII 客户主协议应勾选 NAFMII");
Assert.IsTrue(body.Contains("☑《中国银行间市场金融衍生产品交易主协议(2009年版)补充协议》"), "NAFMII 客户补充协议应勾选 NAFMII");
Assert.IsFalse(body.Contains("{{主协议NAFMII勾选}}"), "协议段占位符应全部被替换");
}
}
}