unis_sip/.workbuddy/memory/2026-09-08.md

5.7 KiB
Raw Blame History

2026-09-08

代码 review两轮

用户要求只 review 不改代码。范围:工作区 53 个改动文件Java 后端 + Vue 前端)。

改动主体

  • Excel 注解新增 decimalFormat 字段Excel.java + ExcelUtil.java21 个 domain 的 BigDecimal 字段加 @Excel(scale=2, decimalFormat="#,##0.00"),仅影响导出显示,安全。
  • 前端多处 toFixed(2) → 全局 formatCurrencymain.js 已注册 Vue.prototype安全。
  • ProductInfo/Mapper/前端新增 pre_system_type(预装系统类型)字段,前后端配套完整,配套 SQLsql/20290904update.sql(文件名年份疑为笔误,写的是 2029
  • OmsInventoryInnerServiceImpl.insertOmsInventoryInner 应付单生成逻辑重构(核心风险点)。

第一轮发现的问题 → 用户修复后第二轮复核结果

  1. NPEquantity/price 为 null 时直接 multiply→ 已修:usePurchaseOrder 条件含 null 检查null 时回退原公式 ✓
  2. 重复 setTaxAmount新旧两行并存→ 已清理,只留正确行(含税-未税)✓
  3. vendorInfo 为 null 时 getPayConfigDay() NPE → 已修,传 0 ✓
  4. 遗留:vendorInfo != null ? vendorInfo.getPayConfigDay() : 0 三元混合 Integer/intpayConfigDay 为 null 时仍会拆箱 NPE原代码同样会炸非回归
  5. 遗留ExcelUtil 每单元格 createCellStylePOI 上限 64000 样式,大数据量导出会失败
  6. 遗留OrderList.java 文件末尾无换行oms_web/.DS_Store 未跟踪垃圾文件

业务逻辑一致性结论H3C 判定)

  • 新华三isH3C=truestartsWith("新华三")):条件退化为原条件,金额公式走原逻辑,与原 100% 一致
  • 非新华三无采购单innerComplete 默认 true与原一致

第三轮复核(用户又修复了一批)

  1. 三元拆箱 NPE → 已修:vendorInfo != null && vendorInfo.getPayConfigDay() != null ? ... : 0
  2. ExcelUtil CellStyle → 已修:新增 moneyStyles Map 缓存(按 decimalFormat 键HashMap 已导入ExcelUtil 每次 export 新建实例,缓存作用域正确 ✓
  3. OrderList.java 末尾换行 → 已补 ✓ 仍遗留(非代码 bug提交时注意isH3C 口径需业务确认startsWith("新华三"),基于 ProductInfo.vendorNamesql/20290904update.sql 文件名年份笔误(2029)oms_web/.DS_Store 与 ruoyi-admin/.DS_Store 垃圾文件。 至此所有代码级问题均已修复H3C/无采购单场景与原逻辑一致,非新华三+有采购单为有意业务变更。

金额格式统一专项检查(第四轮,只查不改)

统一现状:全局 formatCurrencyutils/index.js:17main.js:46 注册null→'0.00'toLocaleString en-US 2位小数本次 diff 新增 72 处 formatCurrency27 个文件);后端 21 个 domain 106 个 @Excel 字段加 decimalFormat。

后端 Excel 遗漏OmsTicketBill.java:70 taxAmount税额活动注解其余单据均已加。比率类taxRate×4、planRate×2、invoiceRate、receiptRate未加属合理折扣类OrderList.discount、ProjectOrderConfigInfo.guidanceDiscount/discount需确认语义。

前端遗漏ApplyInvoice.vue:122/129/143 v-else 分支裸显示 unitPrice/amount/taxAmountwriteoff 两 index 的 $modal 提示文案 5 处无千分位轻微formatCurrency(x.toFixed(2)) 双重格式化 ~12 处(冗余无害)。

体系性发现:项目存在 7+ 处组件局部 formatAmount/formatAmountNumber 副本均为存量非本次新增purchaseorder/index.vue:589、orderFinance.vue:377(filters)、base/quotation/index.vue:535、ProductConfig.vue:497、approve/all/index.vue:1295(用zh-CN)、projectTransfer.vue:293、project/info/index.vue:491 等。差异:局部版 null→'',全局版 null→'0.00'。后续统一建议收敛到全局 formatCurrency先定 null 显示口径。

formatCurrency 边界:非数字字符串入参会显示 "NaN"Number('abc').toLocaleString → "NaN"),建议加 Number.isNaN 保护。convertCurrency大写金额依赖 toFixed 字符串InvoiceInfoView:115 / ApplyInvoice:278 / invoiceExcelUtils.js:147 的 toFixed(2) 必须保留,不是遗漏。

第五轮全量改动集成测试mvn 编译 + vue 解析)

Maven 全量编译JAVA_HOME=Corretto 87 模块 SUCCESS0 ERROR。Lombok、@Excel 注解、mapper SQL、Service 实现全部对齐。 前端 31 文件 SFC/JS 解析:用 @vue/compiler-sfc 批量 parse0 失败PaymentRefundDetail、ReceiptDetail、ReceivableInvoiceDetail、ApplyInvoice、InvoiceInfoView、EditForm×2、AddForm、receipt/index、writeoff 6 个文件、inventory/inner、ProductConfig、ProjectForm、project/info/index、OrderDetail、PurchaseOrderDetail、PurchaseOrderDetailView、PurchaseOrderSelectDialog、vendorConfirm、system/product、approve/purchaase×2、selectQuotation、projectTransfer、invoiceExcelUtils.js

本轮新增发现的位置(前几轮未深查):

  • ruoyi-admin/logback.xml把 jiliu 路径换成 kangwenjing 个人本地路径,纯个人配置切换,不影响代码(提交前建议恢复或加 .gitignore 排除)。
  • dto/InventoryInfoExcelDto.java、dto/warehouse/WarehouseInnerExcelDto.javainnerPrice 加 decimalFormat已正确 ✓
  • approve/purchaase/{approve,approved}/index.vue含税总金额列加 formatter ✓
  • base/quotation/selectQuotation.vuediscountAmount 加 formatter字段名语义为"报价金额"QuotationInfo 表的折扣后金额),没问题 ✓
  • system/product/index.vuequeryParams 已在 data() 初始声明 preSystemType: null ✓resetForm 依赖表单模板自动重置 ✓handleTypeChange 在切换非硬件时清空 preSystemType ✓
  • OmsTicketBill.java:70 税额仍 decimalFormat连续两轮没修