From 15102dd5107a8cfbae119695ed7abb9b048fb816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 15 Jun 2026 17:13:35 +0800 Subject: [PATCH] =?UTF-8?q?fix(inspection):=20=E4=BF=AE=E5=A4=8D=E6=9D=A5?= =?UTF-8?q?=E6=96=99=E6=A3=80=E9=AA=8C=E4=BB=BB=E5=8A=A1=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E5=92=8C=E5=9B=9E=E8=B0=83=E5=A4=84=E7=90=86=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=98=A0=E5=B0=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复了新任务创建时materialId和inspectionStandardId字段的错误赋值 - 优化了不合格品数量判断逻辑,避免重复生成质检二维码记录 - 修正了待办事项中任务编号、类型和源ID的引用对象 - 重构了全检和抽检的处理流程,区分不同检测方法的任务回调逻辑 - 更新了WMS回调服务中不合格数量的计算方式,区分全检和抽检场景 - 修复了回调结果更新条件,确保初始状态的回调结果也能被正确更新 --- ...comingInspectionTaskControllerService.java | 45 +++++++++++------ ...IncomingInspectionTaskCallbackService.java | 49 ++++++++++++------- 2 files changed, 63 insertions(+), 31 deletions(-) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java index a6597fd3..855e1b25 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java @@ -476,8 +476,8 @@ public class IncomingInspectionTaskControllerService { QmsIncomingInspectionTask newTask = new QmsIncomingInspectionTask() .setRequestNo(task.getRequestNo()) .setTaskNo(taskNo) - .setMaterialId(task.getId()) - .setInspectionStandardId(task.getId()) + .setMaterialId(task.getMaterialId()) + .setInspectionStandardId(task.getInspectionStandardId()) .setTestingMethodDictItemId(testingMethodDictItemId) .setSupplierCode(task.getSupplierCode()) .setSupplierName(task.getSupplierName()) @@ -501,10 +501,10 @@ public class IncomingInspectionTaskControllerService { .setDetectionQty(task.getUnqualifiedQty()); incomingInspectionTaskService.save(newTask); - List qrs = incomingInspectionTaskQrService.lambdaQuery().eq(QmsIncomingInspectionTaskQr::getTaskId, taskId).list(); - if (CollectionUtil.isNotEmpty(qrs)) { + if (incomingInspectionTaskQrService.lambdaQuery().eq(QmsIncomingInspectionTaskQr::getTaskId, taskId).exists()) { incomingInspectionTaskQrService.saveBatch(incomingInspectionTaskRecordService.lambdaQuery() - .eq(QmsIncomingInspectionTaskRecord::getQualified, false) + .eq(QmsIncomingInspectionTaskRecord::getTaskId, taskId) + .gt(QmsIncomingInspectionTaskRecord::getUnqualifiedQty, 0) .list() .stream() .map(record -> new QmsIncomingInspectionTaskQr() @@ -517,14 +517,14 @@ public class IncomingInspectionTaskControllerService { QmsQualityInspector inspector = qualityInspectorService.getById(newTask.getInspectorId()); User inspectorUser = userService.getById(inspector.getUserId()); String typeName = newTask.getInspectionType() == 0 ? "来料" : "库存"; - Long sourceTypeId = task.getInspectionType() == 0 + Long sourceTypeId = newTask.getInspectionType() == 0 ? dictionaryItemService.getIdByCode("MessageType", "IQCIncomingInspectionAdd") : dictionaryItemService.getIdByCode("MessageType", "IQCInventoryInspectionAdd"); QmsTodoItem qmsTodoItem = new QmsTodoItem() - .setTitle("新的IQC" + typeName + "检测任务" + task.getTaskNo()) + .setTitle("新的IQC" + typeName + "检测任务" + newTask.getTaskNo()) .setCode(basdeSerialNumberControllerService.generateSerialNumber(32)) .setSourceTypeId(sourceTypeId) - .setSourceId(task.getId()) + .setSourceId(newTask.getId()) .setCreateUserId(inspectorUser.getId()) .setCreateUserName(inspectorUser.getUserName()) .setCreateTime(LocalDateTime.now()); @@ -1180,21 +1180,38 @@ public class IncomingInspectionTaskControllerService { updateWrapper.update(); - if (request.getQualified() && task.getQualifiedQty() > 0) { - // 异步回调需等当前事务提交后再触发,否则异步线程可能读到未提交的旧状态,导致回调数据错误或漏回调 - Long taskId = task.getId(); + long testingMethodId = dictionaryItemService.getIdByCode("InspectionStandardTestingMethod", "Full"); + if (Objects.equals(task.getTestingMethodDictItemId(), testingMethodId)) { + //全检 if (TransactionSynchronizationManager.isSynchronizationActive()) { TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { @Override public void afterCommit() { - wmsIncomingInspectionTaskCallbackService.processAsync(taskId, (short) 0); + wmsIncomingInspectionTaskCallbackService.processAsync(task.getId(), (short) 0); } }); } else { - wmsIncomingInspectionTaskCallbackService.processAsync(taskId, (short) 0); + wmsIncomingInspectionTaskCallbackService.processAsync(task.getId(), (short) 0); + } + if (task.getUnqualifiedQty() > 0) { + issueTicketControllerService.initiate(task.getId()); } } else { - issueTicketControllerService.initiate(task.getId()); + //抽样 + if (request.getQualified()) { + if (TransactionSynchronizationManager.isSynchronizationActive()) { + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + @Override + public void afterCommit() { + wmsIncomingInspectionTaskCallbackService.processAsync(task.getId(), (short) 0); + } + }); + } else { + wmsIncomingInspectionTaskCallbackService.processAsync(task.getId(), (short) 0); + } + } else { + issueTicketControllerService.initiate(task.getId()); + } } } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/WmsIncomingInspectionTaskCallbackService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/WmsIncomingInspectionTaskCallbackService.java index 22374612..40248d55 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/WmsIncomingInspectionTaskCallbackService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/WmsIncomingInspectionTaskCallbackService.java @@ -11,10 +11,7 @@ import com.nflg.wms.repository.entity.QmsIncomingInspectionTask; import com.nflg.wms.repository.entity.QmsIncomingInspectionTaskRecord; import com.nflg.wms.repository.entity.QmsIssueTicket; import com.nflg.wms.repository.entity.WmsInventory; -import com.nflg.wms.repository.service.IQmsIncomingInspectionTaskRecordService; -import com.nflg.wms.repository.service.IQmsIncomingInspectionTaskService; -import com.nflg.wms.repository.service.IQmsIssueTicketService; -import com.nflg.wms.repository.service.IWmsInventoryService; +import com.nflg.wms.repository.service.*; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -52,6 +49,9 @@ public class WmsIncomingInspectionTaskCallbackService { @Resource private IWmsInventoryService inventoryService; + @Resource + private IDictionaryItemService dictionaryItemService; + /** * 向WMS系统发送来料检验任务回调 */ @@ -75,7 +75,6 @@ public class WmsIncomingInspectionTaskCallbackService { .setProcessingResult(processingResult); List records = incomingInspectionTaskRecordService.lambdaQuery() - .select(QmsIncomingInspectionTaskRecord::getMaterialUniqueNo, QmsIncomingInspectionTaskRecord::getQualified) .eq(QmsIncomingInspectionTaskRecord::getTaskId, taskVO.getId()) .list(); if (processingResult == 4) { @@ -86,11 +85,12 @@ public class WmsIncomingInspectionTaskCallbackService { .map(r -> new MaterialQrCodeDTO() .setQrCode(r.getMaterialUniqueNo()) .setInspectionQty(r.getInspectionQty()) - .setUnqualifiedQty(r.getUnqualifiedQty()) + .setUnqualifiedQty(0) .setQualifiedQty(r.getQualifiedQty())) .toList() ); - }else if (processingResult == 2){ + } else if (processingResult == 2) { + //退货 qo.setUnqualifiedQty(taskVO.getInspectionQty()); qo.setQualifiedQty(0); qo.setQrCodes(records.stream() @@ -103,15 +103,29 @@ public class WmsIncomingInspectionTaskCallbackService { .toList() ); } else { - qo.setUnqualifiedQty(taskVO.getUnqualifiedQty()); - qo.setQrCodes(records.stream() - .map(r -> new MaterialQrCodeDTO() - .setQrCode(r.getMaterialUniqueNo()) - .setInspectionQty(r.getInspectionQty()) - .setUnqualifiedQty(r.getUnqualifiedQty()) - .setQualifiedQty(r.getQualifiedQty())) - .toList() - ); + long testingMethodId = dictionaryItemService.getIdByCode("InspectionStandardTestingMethod", "Full"); + if (Objects.equals(taskVO.getTestingMethodDictItemId(), testingMethodId)) { + qo.setUnqualifiedQty(0); + qo.setQrCodes(records.stream() + .filter(QmsIncomingInspectionTaskRecord::getQualified) + .map(r -> new MaterialQrCodeDTO() + .setQrCode(r.getMaterialUniqueNo()) + .setInspectionQty(r.getInspectionQty()) + .setUnqualifiedQty(0) + .setQualifiedQty(r.getQualifiedQty())) + .toList() + ); + } else { + qo.setUnqualifiedQty(taskVO.getUnqualifiedQty()); + qo.setQrCodes(records.stream() + .map(r -> new MaterialQrCodeDTO() + .setQrCode(r.getMaterialUniqueNo()) + .setInspectionQty(r.getInspectionQty()) + .setUnqualifiedQty(r.getUnqualifiedQty()) + .setQualifiedQty(r.getQualifiedQty())) + .toList() + ); + } } // 注意:本方法不可被 @Transactional 包裹,否则下面"标记失败"的更新会随异常一起回滚,导致失败状态丢失 @@ -179,7 +193,8 @@ public class WmsIncomingInspectionTaskCallbackService { private void updateCallbackResult(Long taskId, boolean callbackResult) { incomingInspectionTaskService.lambdaUpdate() .eq(QmsIncomingInspectionTask::getId, taskId) - .ne(QmsIncomingInspectionTask::getCallbackResult, true) + .and(w -> w.ne(QmsIncomingInspectionTask::getCallbackResult, true) + .or().isNull(QmsIncomingInspectionTask::getCallbackResult)) .set(QmsIncomingInspectionTask::getCallbackResult, callbackResult) .update(); }