test-final-fix.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. // 最终修复测试
  2. console.log('=== 最终修复测试 ===\n');
  3. // 模拟修复后的替换逻辑
  4. function finalRobustReplace(template, variables, tenantId = 1) {
  5. let content = template;
  6. console.log(`[租户${tenantId}] 模板变量替换前:`, {
  7. templateContainsRemark: template.includes('{remark}'),
  8. templatePreview: template.substring(0, 100) + (template.length > 100 ? '...' : '')
  9. });
  10. // 使用更健壮的替换方法,处理各种格式的占位符
  11. for (const [key, value] of Object.entries(variables)) {
  12. // 处理多种格式的占位符:{key}、{ key }、{{key}}等
  13. const patterns = [
  14. `{${key}}`, // 标准格式
  15. `{ ${key} }`, // 有空格
  16. `{{${key}}}`, // 双大括号
  17. `{{ ${key} }}`, // 双大括号有空格
  18. `{${key} }`, // 右空格
  19. `{ ${key}}`, // 左空格
  20. ];
  21. // 确保替换值不是null或undefined
  22. const safeValue = value != null ? String(value) : '无备注';
  23. for (const pattern of patterns) {
  24. if (content.includes(pattern)) {
  25. content = content.split(pattern).join(safeValue);
  26. console.log(`[租户${tenantId}] 替换变量 ${key} (模式: ${pattern}): ${safeValue}`);
  27. }
  28. }
  29. }
  30. // 清理未替换的变量(特别是remark)
  31. // 使用正则表达式匹配各种格式的{remark}
  32. const remarkPatterns = [
  33. /\{remark\}/g,
  34. /\{\s*remark\s*\}/g,
  35. /\{\{remark\}\}/g,
  36. /\{\{\s*remark\s*\}\}/g,
  37. ];
  38. let hasUnreplacedRemark = false;
  39. for (const pattern of remarkPatterns) {
  40. if (pattern.test(content)) {
  41. hasUnreplacedRemark = true;
  42. const safeRemark = variables.remark != null ? String(variables.remark) : '无备注';
  43. console.log(`[租户${tenantId}] 模板中仍有未替换的remark占位符(模式: ${pattern.source}),使用默认值替换`);
  44. content = content.replace(pattern, safeRemark);
  45. }
  46. }
  47. // 记录是否有未替换的remark
  48. if (hasUnreplacedRemark) {
  49. console.log(`[租户${tenantId}] 清理了未替换的remark占位符`);
  50. }
  51. console.log(`[租户${tenantId}] 模板变量替换后,是否还有{remark}:`, content.includes('{remark}') || content.includes('{ remark }'));
  52. return content;
  53. }
  54. // 测试实际场景
  55. console.log('\n=== 实际场景测试 ===');
  56. // 场景1: 数据库模板(备注1: {remark})
  57. const dbTemplate = `订单号: {orderNo}
  58. 时间: {orderTime}
  59. 商品: {goodsList}
  60. 合计: {totalAmount}
  61. 备注1: {remark}
  62. 收货人姓名: {receiverName}
  63. 地址: {address}
  64. 联系电话: {phone}`;
  65. // 场景2: 实际打印模板(备注: {remark})
  66. const printTemplate = `订单号: {orderNo}
  67. 时间: {orderTime}
  68. 商品: {goodsList}
  69. 合计: {payAmount}
  70. 备注: {remark}
  71. 收货人姓名: {receiverName}
  72. 地址: {address}
  73. 联系电话: {receiverPhone}`;
  74. const testVariables = {
  75. orderNo: 'ORD20251210112844577127',
  76. orderTime: '2025-12-10 19:28:44',
  77. goodsList: '洗护产品6 × 1 = ¥0.01',
  78. totalAmount: '¥0.01',
  79. payAmount: '¥0.01',
  80. remark: '测试备注',
  81. receiverName: '1',
  82. address: '1',
  83. phone: '13100000000',
  84. receiverPhone: '13100000000'
  85. };
  86. console.log('\n1. 数据库模板测试:');
  87. const result1 = finalRobustReplace(dbTemplate, testVariables);
  88. console.log('\n结果:');
  89. console.log(result1);
  90. console.log('\n2. 打印模板测试:');
  91. const result2 = finalRobustReplace(printTemplate, testVariables);
  92. console.log('\n结果:');
  93. console.log(result2);
  94. console.log('\n3. 空备注测试:');
  95. const emptyVars = { ...testVariables, remark: null };
  96. const result3 = finalRobustReplace(printTemplate, emptyVars);
  97. console.log('\n结果:');
  98. console.log(result3);
  99. console.log('\n4. 空字符串备注测试:');
  100. const emptyStrVars = { ...testVariables, remark: '' };
  101. const result4 = finalRobustReplace(printTemplate, emptyStrVars);
  102. console.log('\n结果:');
  103. console.log(result4);
  104. console.log('\n5. 字符串"null"备注测试:');
  105. const nullStrVars = { ...testVariables, remark: 'null' };
  106. const result5 = finalRobustReplace(printTemplate, nullStrVars);
  107. console.log('\n结果:');
  108. console.log(result5);
  109. // 检查实际数据库中的模板
  110. console.log('\n\n=== 数据库模板分析 ===');
  111. console.log('数据库模板:', dbTemplate);
  112. console.log('实际打印模板:', printTemplate);
  113. console.log('\n差异分析:');
  114. console.log('1. 数据库: 备注1: {remark}');
  115. console.log('2. 打印: 备注: {remark}');
  116. console.log('\n可能的原因:');
  117. console.log('1. 模板被代码修改了');
  118. console.log('2. 有缓存机制');
  119. console.log('3. 模板配置被更新了但代码用了旧版本');