From 3e585496f739956e8a3e5dc74b35e95489e67879 Mon Sep 17 00:00:00 2001 From: qiankanghui Date: Tue, 23 Jun 2026 09:37:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(qms):=20=E6=B7=BB=E5=8A=A0=E6=A3=80?= =?UTF-8?q?=E9=AA=8C=E5=8D=95=E5=88=A0=E9=99=A4=E6=97=B6=E7=9A=84=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=9B=9E=E6=BB=9A=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 rollbackHeaderToScheduled 方法用于回滚头表状态为已排程 - 在 IQC 记录删除时添加状态一致性校验 - 实现明细回滚后检查是否全部为已排程状态 - 当所有明细都回滚为已排程时自动更新主单状态 - 优化 PO 行号转换逻辑并添加异常处理 - 添加详细的日志记录用于调试跟踪 --- .../mapper/InspectionRequestHeaderMapper.java | 6 ++ .../qms/service/impl/QcServiceImpl.java | 72 ++++++++++++++----- .../InspectionRequestHeaderMapper.xml | 11 ++- 3 files changed, 72 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/xujie/modules/inspection/mapper/InspectionRequestHeaderMapper.java b/src/main/java/com/xujie/modules/inspection/mapper/InspectionRequestHeaderMapper.java index 4e4afe4..04fea59 100644 --- a/src/main/java/com/xujie/modules/inspection/mapper/InspectionRequestHeaderMapper.java +++ b/src/main/java/com/xujie/modules/inspection/mapper/InspectionRequestHeaderMapper.java @@ -75,4 +75,10 @@ public interface InspectionRequestHeaderMapper extends BaseMapper !state.equals(a.getState())); - if (bool) { + + List list = data.getSubmitList(); + if (list == null || list.isEmpty()) { + return; + } + + // 1. 校验状态一致性 + String firstState = list.get(0).getState(); + boolean inconsistent = list.stream() + .anyMatch(a -> !Objects.equals(firstState, a.getState())); + + if (inconsistent) { throw new RuntimeException("所选检验单状态不一致,请确认!"); } - for (QcFAIRecordData qcData : data.getSubmitList()){ - // 判断状态 + + // 2. 循环处理删除 + for (QcFAIRecordData qcData : list) { + + // 状态校验 if ("已完成".equals(qcData.getState())) { throw new RuntimeException("检验单已完成,不允许删除!"); } - - // 回滚验货申请明细:清空inspect_no并更新状态为已排程 + + // ===== 回滚逻辑 ===== if (qcData.getPoOrderNo() != null && qcData.getPoItemNo() != null) { + try { - Integer poItemNo = Integer.parseInt(qcData.getPoItemNo()); + Integer poItemNo = Integer.valueOf(qcData.getPoItemNo()); + // 回滚明细 inspectionRequestDetailMapper.rollbackInspectRequestDetail( qcData.getSite(), qcData.getPoOrderNo(), poItemNo ); + + // 查询明细 + List detailList = + inspectionRequestDetailMapper.selectList( + new LambdaQueryWrapper() + .eq(InspectionRequestDetail::getSite, qcData.getSite()) + .eq(InspectionRequestDetail::getRequestNo, qcData.getPoOrderNo()) + ); + + // 判断是否全部 Scheduled + boolean allScheduled = detailList.stream() + .allMatch(d -> "Scheduled".equals(d.getStatusDb())); + + // 更新主表 + if (allScheduled) { + log.info("所有明细已回滚为Scheduled,更新主单: {}", qcData.getPoOrderNo()); + + int count = inspectionRequestHeaderMapper.rollbackHeaderToScheduled( + qcData.getSite(), + qcData.getPoOrderNo() + ); + + if (count == 0) { + throw new RuntimeException("更新主记录状态失败"); + } + } else { + log.info("存在未回滚明细,不更新主单: {}, size={}", + qcData.getPoOrderNo(), detailList.size()); + } + } catch (NumberFormatException e) { - // poItemNo格式错误时忽略,继续执行删除逻辑 + throw new RuntimeException("PO行号格式错误: " + qcData.getPoItemNo(), e); } } - - // 删除检验记录 + + // ===== 删除业务数据 ===== qcMapper.deleteIQCRecord(qcData); - // 删除明细记录信息 qcMapper.deleteIQCDetailedRecord(qcData); - // 删除子明细记录信息 qcMapper.deleteIQCSubDetailedRecord(qcData); - // 删除数据采集的数据 qcMapper.deleteEquipmentDataAcquisition(qcData); - // 删除文件 qcMapper.deleteInspectionFiles(qcData); } } diff --git a/src/main/resources/mapper/inspection/InspectionRequestHeaderMapper.xml b/src/main/resources/mapper/inspection/InspectionRequestHeaderMapper.xml index 20dc361..b4193ad 100644 --- a/src/main/resources/mapper/inspection/InspectionRequestHeaderMapper.xml +++ b/src/main/resources/mapper/inspection/InspectionRequestHeaderMapper.xml @@ -51,7 +51,7 @@ and h.plan_start_date >= #{query.planStartDateStr} and h.plan_end_date <= #{query.planEndDateStr} - order by h.request_date desc + order by h.request_no desc