From fc0c27ca0e4e3f2c32c61469a0e372851b694485 Mon Sep 17 00:00:00 2001 From: qiankanghui Date: Mon, 21 Sep 2026 14:42:47 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(inspection):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=89=93=E6=A0=B7=E5=8D=95=E5=8F=96=E6=B6=88=E5=AE=A1=E6=A0=B8?= =?UTF-8?q?=E6=97=B6=E6=B8=85=E7=A9=BA=E9=AA=8C=E8=B4=A7=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现了 clearSamplePoOfficeInspectionOnRollback 方法用于清空验货完成时回写的 c_china_office_inspection_date 与 c_inspection_result - 与 syncSamplePoOfficeInspectionOnCompleted 对称处理 order_type='Sample' 的订单 - 采用相同的定位/去重/容错策略确保审核-取消审核可反复往返不残留脏数据 - 在 rollbackInspectionResult 方法中调用清空逻辑确保数据一致性 - 添加了 SQL Server 驱动的 jdbcType 显式指定避免 DATE 列转换错误 - 实现了详细的日志记录用于跟踪清空操作的成功与失败情况 ``` --- .../impl/InspectionRequestServiceImpl.java | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/main/java/com/xujie/modules/inspection/service/impl/InspectionRequestServiceImpl.java b/src/main/java/com/xujie/modules/inspection/service/impl/InspectionRequestServiceImpl.java index c048bcc..0b24a0e 100644 --- a/src/main/java/com/xujie/modules/inspection/service/impl/InspectionRequestServiceImpl.java +++ b/src/main/java/com/xujie/modules/inspection/service/impl/InspectionRequestServiceImpl.java @@ -2066,6 +2066,61 @@ public class InspectionRequestServiceImpl extends ServiceImpl subList) { + if (subList == null || subList.isEmpty()) { + return; + } + + Set updatedPoKeys = new HashSet<>(); + Map samplePoCache = new HashMap<>(); + for (InspectionRequestDetailSub sub : subList) { + if (sub == null || !StringUtils.hasText(sub.getPoNo()) || sub.getPoItemNo() == null) { + continue; + } + String poNo = sub.getPoNo().trim(); + String poKey = poNo + "#" + sub.getPoItemNo(); + if (!updatedPoKeys.add(poKey)) { + continue; + } + Boolean isSamplePo = samplePoCache.computeIfAbsent(poNo, key -> { + POHeader poHeader = poheaderMapper.selectOne( + new LambdaQueryWrapper() + .eq(POHeader::getSite, site) + .eq(POHeader::getOrderNo, key) + ); + return poHeader != null && "Sample".equals(poHeader.getOrderType()); + }); + if (!Boolean.TRUE.equals(isSamplePo)) { + continue; + } + + int affectedRows = podetailMapper.update(null, + new LambdaUpdateWrapper() + .eq(PODetail::getSite, site) + .eq(PODetail::getOrderNo, poNo) + .eq(PODetail::getItemNo, sub.getPoItemNo()) + // SQL Server 驱动会把未声明 jdbcType 的 null 按 varbinary 绑定,DATE 列不接受隐式转换,必须显式指定 + .set(PODetail::getChinaOfficeInspectionDate, null, "jdbcType=DATE") + .set(PODetail::getInspectionResult, null, "jdbcType=VARCHAR") + ); + if (affectedRows == 0) { + log.warn("打样单取消审核清空PODetail回写未命中: site={}, requestNo={}, itemNo={}, poNo={}, poItemNo={}", + site, requestNo, itemNo, poNo, sub.getPoItemNo()); + continue; + } + log.info("打样单取消审核清空PODetail回写成功: site={}, requestNo={}, itemNo={}, poNo={}, poItemNo={}", + site, requestNo, itemNo, poNo, sub.getPoItemNo()); + } + } + @Transactional(rollbackFor = Exception.class) @Override public void rollbackInspectionResult(String site, String requestNo, Integer itemNo) { @@ -2097,6 +2152,9 @@ public class InspectionRequestServiceImpl extends ServiceImpl()