| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- // 最终修复测试
- console.log('=== 最终修复测试 ===\n');
- // 模拟修复后的替换逻辑
- function finalRobustReplace(template, variables, tenantId = 1) {
- let content = template;
- console.log(`[租户${tenantId}] 模板变量替换前:`, {
- templateContainsRemark: template.includes('{remark}'),
- templatePreview: template.substring(0, 100) + (template.length > 100 ? '...' : '')
- });
- // 使用更健壮的替换方法,处理各种格式的占位符
- for (const [key, value] of Object.entries(variables)) {
- // 处理多种格式的占位符:{key}、{ key }、{{key}}等
- const patterns = [
- `{${key}}`, // 标准格式
- `{ ${key} }`, // 有空格
- `{{${key}}}`, // 双大括号
- `{{ ${key} }}`, // 双大括号有空格
- `{${key} }`, // 右空格
- `{ ${key}}`, // 左空格
- ];
- // 确保替换值不是null或undefined
- const safeValue = value != null ? String(value) : '无备注';
- for (const pattern of patterns) {
- if (content.includes(pattern)) {
- content = content.split(pattern).join(safeValue);
- console.log(`[租户${tenantId}] 替换变量 ${key} (模式: ${pattern}): ${safeValue}`);
- }
- }
- }
- // 清理未替换的变量(特别是remark)
- // 使用正则表达式匹配各种格式的{remark}
- const remarkPatterns = [
- /\{remark\}/g,
- /\{\s*remark\s*\}/g,
- /\{\{remark\}\}/g,
- /\{\{\s*remark\s*\}\}/g,
- ];
- let hasUnreplacedRemark = false;
- for (const pattern of remarkPatterns) {
- if (pattern.test(content)) {
- hasUnreplacedRemark = true;
- const safeRemark = variables.remark != null ? String(variables.remark) : '无备注';
- console.log(`[租户${tenantId}] 模板中仍有未替换的remark占位符(模式: ${pattern.source}),使用默认值替换`);
- content = content.replace(pattern, safeRemark);
- }
- }
- // 记录是否有未替换的remark
- if (hasUnreplacedRemark) {
- console.log(`[租户${tenantId}] 清理了未替换的remark占位符`);
- }
- console.log(`[租户${tenantId}] 模板变量替换后,是否还有{remark}:`, content.includes('{remark}') || content.includes('{ remark }'));
- return content;
- }
- // 测试实际场景
- console.log('\n=== 实际场景测试 ===');
- // 场景1: 数据库模板(备注1: {remark})
- const dbTemplate = `订单号: {orderNo}
- 时间: {orderTime}
- 商品: {goodsList}
- 合计: {totalAmount}
- 备注1: {remark}
- 收货人姓名: {receiverName}
- 地址: {address}
- 联系电话: {phone}`;
- // 场景2: 实际打印模板(备注: {remark})
- const printTemplate = `订单号: {orderNo}
- 时间: {orderTime}
- 商品: {goodsList}
- 合计: {payAmount}
- 备注: {remark}
- 收货人姓名: {receiverName}
- 地址: {address}
- 联系电话: {receiverPhone}`;
- const testVariables = {
- orderNo: 'ORD20251210112844577127',
- orderTime: '2025-12-10 19:28:44',
- goodsList: '洗护产品6 × 1 = ¥0.01',
- totalAmount: '¥0.01',
- payAmount: '¥0.01',
- remark: '测试备注',
- receiverName: '1',
- address: '1',
- phone: '13100000000',
- receiverPhone: '13100000000'
- };
- console.log('\n1. 数据库模板测试:');
- const result1 = finalRobustReplace(dbTemplate, testVariables);
- console.log('\n结果:');
- console.log(result1);
- console.log('\n2. 打印模板测试:');
- const result2 = finalRobustReplace(printTemplate, testVariables);
- console.log('\n结果:');
- console.log(result2);
- console.log('\n3. 空备注测试:');
- const emptyVars = { ...testVariables, remark: null };
- const result3 = finalRobustReplace(printTemplate, emptyVars);
- console.log('\n结果:');
- console.log(result3);
- console.log('\n4. 空字符串备注测试:');
- const emptyStrVars = { ...testVariables, remark: '' };
- const result4 = finalRobustReplace(printTemplate, emptyStrVars);
- console.log('\n结果:');
- console.log(result4);
- console.log('\n5. 字符串"null"备注测试:');
- const nullStrVars = { ...testVariables, remark: 'null' };
- const result5 = finalRobustReplace(printTemplate, nullStrVars);
- console.log('\n结果:');
- console.log(result5);
- // 检查实际数据库中的模板
- console.log('\n\n=== 数据库模板分析 ===');
- console.log('数据库模板:', dbTemplate);
- console.log('实际打印模板:', printTemplate);
- console.log('\n差异分析:');
- console.log('1. 数据库: 备注1: {remark}');
- console.log('2. 打印: 备注: {remark}');
- console.log('\n可能的原因:');
- console.log('1. 模板被代码修改了');
- console.log('2. 有缓存机制');
- console.log('3. 模板配置被更新了但代码用了旧版本');
|