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(); }