refactor(qms): 优化质检回调处理逻辑

- 简化质检单存在性检查逻辑,使用exists方法替代查询列表
- 优化收货明细更新方式,改用实体对象更新替代lambdaUpdate
- 修复二维码更新中的字段映射错误,将materialCode改为barcodeCode
- 调整二维码状态更新条件,将或操作改为与操作
- 优化PDI检测回调的日志信息和事务注解位置
- 统一质检相关日志信息格式,增加业务标识区分
This commit is contained in:
曹鹏飞 2026-06-14 21:11:32 +08:00
parent ec9d08280f
commit ab3498e452
1 changed files with 14 additions and 19 deletions

View File

@ -70,14 +70,11 @@ public class QmsController extends BaseController {
@Transactional @Transactional
@PostMapping("/iqc/incoming") @PostMapping("/iqc/incoming")
public ApiResult<Void> iqcIncoming(@RequestBody @NotNull WmsIncomingInspectionTaskCallbackQO qo) { public ApiResult<Void> iqcIncoming(@RequestBody @NotNull WmsIncomingInspectionTaskCallbackQO qo) {
log.info("质检单解析完成, 单号: {}, 物料: {}, 结果: {}", qo.getDeliveryOrderNo(), qo.getMaterialNo(), qo.getInspectionResult()); log.info("IQC检测回调, 单号: {}, 物料: {}, 结果: {}", qo.getDeliveryOrderNo(), qo.getMaterialNo(), qo.getInspectionResult());
List<WmsSrmQualityInspection> inspects = srmQualityInspectionService.lambdaQuery() VUtil.trueThrowBusinessError(srmQualityInspectionService.lambdaQuery()
.eq(WmsSrmQualityInspection::getInspectionNum, qo.getTaskNo()) .eq(WmsSrmQualityInspection::getInspectionNum, qo.getTaskNo())
.list(); .exists()
if (CollectionUtil.isNotEmpty(inspects)) { ).throwMessage("质检单已存在");
log.warn("质检单已存在, 跳过处理: {}", qo.getTaskNo());
VUtil.trueThrowBusinessError(true).throwMessage("质检单已存在");
}
// 找到入库的明细 // 找到入库的明细
WmsQcReceiveItem receiveItem = qcReceiveItemService.lambdaQuery() WmsQcReceiveItem receiveItem = qcReceiveItemService.lambdaQuery()
@ -174,12 +171,10 @@ public class QmsController extends BaseController {
Pair<String, String> returnDto = sapService.zwm3a18(zwm3A18DTO); Pair<String, String> returnDto = sapService.zwm3a18(zwm3A18DTO);
log.info("SAP质检入库返回, 物料凭证: {}, 年份: {}", returnDto.getKey(), returnDto.getValue()); log.info("SAP质检入库返回, 物料凭证: {}, 年份: {}", returnDto.getKey(), returnDto.getValue());
// 更新收货明细的物料凭证和入库数量 // 更新收货明细的物料凭证和入库数量
qcReceiveItemService.lambdaUpdate() receiveItem.setInQty(BigDecimal.valueOf(qo.getQualifiedQty()));
.eq(WmsQcReceiveItem::getId, receiveItem.getId()) receiveItem.setMaterialDoc(returnDto.getKey());
.set(WmsQcReceiveItem::getInQty, qo.getQualifiedQty()) receiveItem.setMaterialDocYear(returnDto.getValue());
.set(WmsQcReceiveItem::getMaterialDoc, returnDto.getKey()) qcReceiveItemService.updateById(receiveItem);
.set(WmsQcReceiveItem::getMaterialDocYear, returnDto.getValue())
.update();
// 检查并更新收货单完成状态 // 检查并更新收货单完成状态
List<WmsQcReceiveItem> allItems = qcReceiveItemService.lambdaQuery() List<WmsQcReceiveItem> allItems = qcReceiveItemService.lambdaQuery()
@ -210,34 +205,34 @@ public class QmsController extends BaseController {
.eq(WmsQcReceive::getOrderNo, inspect.getNoteNum()) .eq(WmsQcReceive::getOrderNo, inspect.getNoteNum())
.set(WmsQcReceive::getIsCheck, isCheck) .set(WmsQcReceive::getIsCheck, isCheck)
.update(); .update();
qcReceiveItemService.updateCheckNum(inspect.getInspectionQty(), inspect.getNoteNum(), inspect.getLineNumber(), inspect.getItemCode(), inspect.getReceiveNum()); qcReceiveItemService.updateCheckNum(inspect.getInspectionQty(), inspect.getNoteNum(), inspect.getLineNumber(), inspect.getItemCode(), receiveItem.getMaterialDoc());
//更新二维码数量 //更新二维码数量
if (CollectionUtil.isNotEmpty(qo.getQrCodes())) { if (CollectionUtil.isNotEmpty(qo.getQrCodes())) {
List<WmsQrCodeMaster> qrCodeMasters = qrCodeMasterService.getByCodes(qo.getQrCodes().stream().map(MaterialQrCodeDTO::getQrCode).toList()); List<WmsQrCodeMaster> qrCodeMasters = qrCodeMasterService.getByCodes(qo.getQrCodes().stream().map(MaterialQrCodeDTO::getQrCode).toList());
qrCodeMasters.forEach(qrCodeMaster -> { qrCodeMasters.forEach(qrCodeMaster -> {
MaterialQrCodeDTO dto = qo.getQrCodes().stream() MaterialQrCodeDTO dto = qo.getQrCodes().stream()
.filter(qrCodeDTO -> StrUtil.equals(qrCodeDTO.getQrCode(), qrCodeMaster.getMaterialCode())) .filter(qrCodeDTO -> StrUtil.equals(qrCodeDTO.getQrCode(), qrCodeMaster.getBarcodeCode()))
.findFirst() .findFirst()
.get(); .get();
qrCodeMaster.setQuantity(qrCodeMaster.getQuantity().subtract(BigDecimal.valueOf(dto.getUnqualifiedQty()))); qrCodeMaster.setQuantity(qrCodeMaster.getQuantity().subtract(BigDecimal.valueOf(dto.getUnqualifiedQty())));
VUtil.trueThrowBusinessError(qrCodeMaster.getQuantity().compareTo(BigDecimal.ZERO) < 0) VUtil.trueThrowBusinessError(qrCodeMaster.getQuantity().compareTo(BigDecimal.ZERO) < 0)
.throwMessage(dto.getQrCode() + "数据异常"); .throwMessage(dto.getQrCode() + "数据异常");
if (qrCodeMaster.getQuantity().compareTo(BigDecimal.ZERO) == 0 || qrCodeMaster.getParentBarcodeId() > 0) { if (qrCodeMaster.getQuantity().compareTo(BigDecimal.ZERO) == 0 && qrCodeMaster.getParentBarcodeId() > 0) {
qrCodeMaster.setParentBarcodeId(0L); qrCodeMaster.setParentBarcodeId(0L);
} }
}); });
qrCodeMasterService.updateBarCode(qrCodeMasters);
} }
log.info("质检单处理完成: {}, 结果: {}", qo.getTaskNo(), inspect.getInspectionResult()); log.info("IQC检测回调处理完成: {}, 结果: {}", qo.getTaskNo(), inspect.getInspectionResult());
return ApiResult.success(); return ApiResult.success();
} }
/** /**
* PDI检测回调 * PDI检测回调
*/ */
@Transactional
@PostMapping("/pdi") @PostMapping("/pdi")
public ApiResult<Void> pdi(@RequestBody @NotNull PdiInspectionTaskCallbackQO qo) { public ApiResult<Void> pdi(@RequestBody @NotNull PdiInspectionTaskCallbackQO qo) {
log.info("质检单解析完成, 单号: {}, 是否合格: {}", qo.getOrderNo(), qo.isPass()); log.info("PDI检测回调, 单号: {}, 是否合格: {}", qo.getOrderNo(), qo.isPass());
WmsInProduceOrder order = produceOrderService.getByNo(qo.getOrderNo()); WmsInProduceOrder order = produceOrderService.getByNo(qo.getOrderNo());
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
WmsInProduceOrderItem item = produceOrderItemService.lambdaQuery() WmsInProduceOrderItem item = produceOrderItemService.lambdaQuery()