Merge remote-tracking branch 'origin/qms/develop' into qms/develop

This commit is contained in:
yf001217 2026-06-15 17:34:14 +08:00
commit ce5ddd8aad
2 changed files with 63 additions and 31 deletions

View File

@ -476,8 +476,8 @@ public class IncomingInspectionTaskControllerService {
QmsIncomingInspectionTask newTask = new QmsIncomingInspectionTask() QmsIncomingInspectionTask newTask = new QmsIncomingInspectionTask()
.setRequestNo(task.getRequestNo()) .setRequestNo(task.getRequestNo())
.setTaskNo(taskNo) .setTaskNo(taskNo)
.setMaterialId(task.getId()) .setMaterialId(task.getMaterialId())
.setInspectionStandardId(task.getId()) .setInspectionStandardId(task.getInspectionStandardId())
.setTestingMethodDictItemId(testingMethodDictItemId) .setTestingMethodDictItemId(testingMethodDictItemId)
.setSupplierCode(task.getSupplierCode()) .setSupplierCode(task.getSupplierCode())
.setSupplierName(task.getSupplierName()) .setSupplierName(task.getSupplierName())
@ -501,10 +501,10 @@ public class IncomingInspectionTaskControllerService {
.setDetectionQty(task.getUnqualifiedQty()); .setDetectionQty(task.getUnqualifiedQty());
incomingInspectionTaskService.save(newTask); incomingInspectionTaskService.save(newTask);
List<QmsIncomingInspectionTaskQr> qrs = incomingInspectionTaskQrService.lambdaQuery().eq(QmsIncomingInspectionTaskQr::getTaskId, taskId).list(); if (incomingInspectionTaskQrService.lambdaQuery().eq(QmsIncomingInspectionTaskQr::getTaskId, taskId).exists()) {
if (CollectionUtil.isNotEmpty(qrs)) {
incomingInspectionTaskQrService.saveBatch(incomingInspectionTaskRecordService.lambdaQuery() incomingInspectionTaskQrService.saveBatch(incomingInspectionTaskRecordService.lambdaQuery()
.eq(QmsIncomingInspectionTaskRecord::getQualified, false) .eq(QmsIncomingInspectionTaskRecord::getTaskId, taskId)
.gt(QmsIncomingInspectionTaskRecord::getUnqualifiedQty, 0)
.list() .list()
.stream() .stream()
.map(record -> new QmsIncomingInspectionTaskQr() .map(record -> new QmsIncomingInspectionTaskQr()
@ -517,14 +517,14 @@ public class IncomingInspectionTaskControllerService {
QmsQualityInspector inspector = qualityInspectorService.getById(newTask.getInspectorId()); QmsQualityInspector inspector = qualityInspectorService.getById(newTask.getInspectorId());
User inspectorUser = userService.getById(inspector.getUserId()); User inspectorUser = userService.getById(inspector.getUserId());
String typeName = newTask.getInspectionType() == 0 ? "来料" : "库存"; String typeName = newTask.getInspectionType() == 0 ? "来料" : "库存";
Long sourceTypeId = task.getInspectionType() == 0 Long sourceTypeId = newTask.getInspectionType() == 0
? dictionaryItemService.getIdByCode("MessageType", "IQCIncomingInspectionAdd") ? dictionaryItemService.getIdByCode("MessageType", "IQCIncomingInspectionAdd")
: dictionaryItemService.getIdByCode("MessageType", "IQCInventoryInspectionAdd"); : dictionaryItemService.getIdByCode("MessageType", "IQCInventoryInspectionAdd");
QmsTodoItem qmsTodoItem = new QmsTodoItem() QmsTodoItem qmsTodoItem = new QmsTodoItem()
.setTitle("新的IQC" + typeName + "检测任务" + task.getTaskNo()) .setTitle("新的IQC" + typeName + "检测任务" + newTask.getTaskNo())
.setCode(basdeSerialNumberControllerService.generateSerialNumber(32)) .setCode(basdeSerialNumberControllerService.generateSerialNumber(32))
.setSourceTypeId(sourceTypeId) .setSourceTypeId(sourceTypeId)
.setSourceId(task.getId()) .setSourceId(newTask.getId())
.setCreateUserId(inspectorUser.getId()) .setCreateUserId(inspectorUser.getId())
.setCreateUserName(inspectorUser.getUserName()) .setCreateUserName(inspectorUser.getUserName())
.setCreateTime(LocalDateTime.now()); .setCreateTime(LocalDateTime.now());
@ -1180,21 +1180,38 @@ public class IncomingInspectionTaskControllerService {
updateWrapper.update(); updateWrapper.update();
if (request.getQualified() && task.getQualifiedQty() > 0) { long testingMethodId = dictionaryItemService.getIdByCode("InspectionStandardTestingMethod", "Full");
// 异步回调需等当前事务提交后再触发否则异步线程可能读到未提交的旧状态导致回调数据错误或漏回调 if (Objects.equals(task.getTestingMethodDictItemId(), testingMethodId)) {
Long taskId = task.getId(); //全检
if (TransactionSynchronizationManager.isSynchronizationActive()) { if (TransactionSynchronizationManager.isSynchronizationActive()) {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override @Override
public void afterCommit() { public void afterCommit() {
wmsIncomingInspectionTaskCallbackService.processAsync(taskId, (short) 0); wmsIncomingInspectionTaskCallbackService.processAsync(task.getId(), (short) 0);
} }
}); });
} else { } else {
wmsIncomingInspectionTaskCallbackService.processAsync(taskId, (short) 0); wmsIncomingInspectionTaskCallbackService.processAsync(task.getId(), (short) 0);
}
if (task.getUnqualifiedQty() > 0) {
issueTicketControllerService.initiate(task.getId());
} }
} else { } 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());
}
} }
} }

View File

@ -11,10 +11,7 @@ import com.nflg.wms.repository.entity.QmsIncomingInspectionTask;
import com.nflg.wms.repository.entity.QmsIncomingInspectionTaskRecord; import com.nflg.wms.repository.entity.QmsIncomingInspectionTaskRecord;
import com.nflg.wms.repository.entity.QmsIssueTicket; import com.nflg.wms.repository.entity.QmsIssueTicket;
import com.nflg.wms.repository.entity.WmsInventory; import com.nflg.wms.repository.entity.WmsInventory;
import com.nflg.wms.repository.service.IQmsIncomingInspectionTaskRecordService; import com.nflg.wms.repository.service.*;
import com.nflg.wms.repository.service.IQmsIncomingInspectionTaskService;
import com.nflg.wms.repository.service.IQmsIssueTicketService;
import com.nflg.wms.repository.service.IWmsInventoryService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -52,6 +49,9 @@ public class WmsIncomingInspectionTaskCallbackService {
@Resource @Resource
private IWmsInventoryService inventoryService; private IWmsInventoryService inventoryService;
@Resource
private IDictionaryItemService dictionaryItemService;
/** /**
* 向WMS系统发送来料检验任务回调 * 向WMS系统发送来料检验任务回调
*/ */
@ -75,7 +75,6 @@ public class WmsIncomingInspectionTaskCallbackService {
.setProcessingResult(processingResult); .setProcessingResult(processingResult);
List<QmsIncomingInspectionTaskRecord> records = incomingInspectionTaskRecordService.lambdaQuery() List<QmsIncomingInspectionTaskRecord> records = incomingInspectionTaskRecordService.lambdaQuery()
.select(QmsIncomingInspectionTaskRecord::getMaterialUniqueNo, QmsIncomingInspectionTaskRecord::getQualified)
.eq(QmsIncomingInspectionTaskRecord::getTaskId, taskVO.getId()) .eq(QmsIncomingInspectionTaskRecord::getTaskId, taskVO.getId())
.list(); .list();
if (processingResult == 4) { if (processingResult == 4) {
@ -86,11 +85,12 @@ public class WmsIncomingInspectionTaskCallbackService {
.map(r -> new MaterialQrCodeDTO() .map(r -> new MaterialQrCodeDTO()
.setQrCode(r.getMaterialUniqueNo()) .setQrCode(r.getMaterialUniqueNo())
.setInspectionQty(r.getInspectionQty()) .setInspectionQty(r.getInspectionQty())
.setUnqualifiedQty(r.getUnqualifiedQty()) .setUnqualifiedQty(0)
.setQualifiedQty(r.getQualifiedQty())) .setQualifiedQty(r.getQualifiedQty()))
.toList() .toList()
); );
}else if (processingResult == 2){ } else if (processingResult == 2) {
//退货
qo.setUnqualifiedQty(taskVO.getInspectionQty()); qo.setUnqualifiedQty(taskVO.getInspectionQty());
qo.setQualifiedQty(0); qo.setQualifiedQty(0);
qo.setQrCodes(records.stream() qo.setQrCodes(records.stream()
@ -103,15 +103,29 @@ public class WmsIncomingInspectionTaskCallbackService {
.toList() .toList()
); );
} else { } else {
qo.setUnqualifiedQty(taskVO.getUnqualifiedQty()); long testingMethodId = dictionaryItemService.getIdByCode("InspectionStandardTestingMethod", "Full");
qo.setQrCodes(records.stream() if (Objects.equals(taskVO.getTestingMethodDictItemId(), testingMethodId)) {
.map(r -> new MaterialQrCodeDTO() qo.setUnqualifiedQty(0);
.setQrCode(r.getMaterialUniqueNo()) qo.setQrCodes(records.stream()
.setInspectionQty(r.getInspectionQty()) .filter(QmsIncomingInspectionTaskRecord::getQualified)
.setUnqualifiedQty(r.getUnqualifiedQty()) .map(r -> new MaterialQrCodeDTO()
.setQualifiedQty(r.getQualifiedQty())) .setQrCode(r.getMaterialUniqueNo())
.toList() .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 包裹否则下面"标记失败"的更新会随异常一起回滚导致失败状态丢失 // 注意本方法不可被 @Transactional 包裹否则下面"标记失败"的更新会随异常一起回滚导致失败状态丢失
@ -179,7 +193,8 @@ public class WmsIncomingInspectionTaskCallbackService {
private void updateCallbackResult(Long taskId, boolean callbackResult) { private void updateCallbackResult(Long taskId, boolean callbackResult) {
incomingInspectionTaskService.lambdaUpdate() incomingInspectionTaskService.lambdaUpdate()
.eq(QmsIncomingInspectionTask::getId, taskId) .eq(QmsIncomingInspectionTask::getId, taskId)
.ne(QmsIncomingInspectionTask::getCallbackResult, true) .and(w -> w.ne(QmsIncomingInspectionTask::getCallbackResult, true)
.or().isNull(QmsIncomingInspectionTask::getCallbackResult))
.set(QmsIncomingInspectionTask::getCallbackResult, callbackResult) .set(QmsIncomingInspectionTask::getCallbackResult, callbackResult)
.update(); .update();
} }