From 7a4df0d18409c82d16e0e5ec37e02cf21541b047 Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 12 Oct 2024 19:40:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=8F=91=E8=BF=90=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...sShippingScanSnAndOrderStrategyServiceImpl.java | 54 ++++++++++++++++------ 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java index 5ad1559..c41952e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnAndOrderStrategyServiceImpl.java @@ -67,23 +67,34 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin @Override public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) { if (!Objects.isNull(model.getLastShippingDetailId())) { - //校验条码 - MesProduceSn produceSn = checkSn(model); //更新单据信息 model.getDetailList().stream().filter(t -> t.getId().equals(model.getLastShippingDetailId())).forEach(detail -> { - detail.setBarcode(model.getSn()); + //第一次扫描的是条码 + if(StringUtils.isEmpty(detail.getVisualOrderNo())){ + detail.setVisualOrderNo(model.getSn()); + model.setSn(detail.getBarcode()); + }else{ + detail.setBarcode(model.getSn()); + } + MesProduceSn produceSn = checkSn(model); updateOrderManagementDetails(orderManagement, detail, getMesWorkOrder(model, produceSn, detail), produceSn, model.getUserInfo()); }); model.setLastShippingDetailId(null); } else { - //校验目视单 - MesWorkOrder workOrder = getWorkOrder(model); + //查询工单 + MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), model.getSn()); + //扫描的工单或条码对应的零件 + String partNo = getPartNo(model, workOrder); boolean scanFlg = false; for (MesShippingOrderManagementDetail detail : model.getDetailList()) { - if (detail.getPartNo().equals(workOrder.getPartNo()) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) { + if (detail.getPartNo().equals(partNo) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) { //校验发运明细 - checkShippingDetails(model, orderManagement, shippingGroup, workOrder.getPartNo(), detail); - detail.setVisualOrderNo(model.getSn()); + checkShippingDetails(model, orderManagement, shippingGroup, partNo, detail); + detail.setBarcode(model.getSn()); + //如果第一次扫描的是目视单,先缓存数据用于第二次校验 + if(!Objects.isNull(workOrder)){ + detail.setVisualOrderNo(model.getSn()); + } //校验通过的明细ID model.setLastShippingDetailId(detail.getId()); scanFlg = true; @@ -91,25 +102,42 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin } } if (!scanFlg) { - throw new ImppBusiException(String.format("【%s】此目视单对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), workOrder.getPartNo())); + throw new ImppBusiException(String.format("【%s】此目视单对应的【%s】物料号与发运单中物料号不匹配,请检查数据!", model.getSn(), partNo)); } } return model; } + private String getPartNo(MesSortShippingCheckModel model, MesWorkOrder workOrder) { + //校验目视单是否已经扫描 + if (model.getDetailList().stream().anyMatch(t -> !StringUtils.isEmpty(t.getVisualOrderNo()) && t.getVisualOrderNo().contains(model.getSn()))) { + throw new ImppBusiException(String.format("【%s】此目视单已经扫描过,请检查数据!", model.getSn())); + } + if (Objects.isNull(workOrder)) { + //如果扫描的是条码,校验条码 + return checkSn(model).getPartNo(); + }else{ + //校验目视单状态 + if (MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() != workOrder.getWorkOrderStatus() || MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != workOrder.getQcStatus()) { + throw new ImppBusiException(String.format("目视单【%s】状态为【%s】质量状态为【%s】,不允许发运!", model.getSn(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(workOrder.getQcStatus()))); + } + return workOrder.getPartNo(); + } + } + private MesWorkOrder getMesWorkOrder(MesSortShippingCheckModel model, MesProduceSn produceSn, MesShippingOrderManagementDetail detail) { MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), detail.getVisualOrderNo()); if (Objects.isNull(workOrder)) { - throw new ImppBusiException(String.format("目视单【%s】不存在,请检查数据!", model.getSn())); + throw new ImppBusiException(String.format("目视单【%s】不存在,请检查数据!", detail.getVisualOrderNo())); } //校验目视单状态 if (MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() != workOrder.getWorkOrderStatus() || MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != workOrder.getQcStatus()) { - throw new ImppBusiException(String.format("目视单【%s】状态为【%s】质量状态为【%s】,不允许发运!", model.getSn(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(workOrder.getQcStatus()))); + throw new ImppBusiException(String.format("目视单【%s】状态为【%s】质量状态为【%s】,不允许发运!", detail.getVisualOrderNo(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(workOrder.getQcStatus()))); } //校验条码是否匹配 if (!Objects.equals(produceSn.getCustSn(), workOrder.getCustSn())) { - throw new ImppBusiException(String.format("目视单【%s】条码【%s】与扫描条码【%s】,不匹配!", detail.getVisualOrderNo(), workOrder.getCustSn(), model.getSn())); + throw new ImppBusiException(String.format("目视单【%s】条码【%s】与扫描条码【%s】,不匹配!", detail.getVisualOrderNo(), workOrder.getCustSn(), produceSn.getCustSn())); } //校验零件是否匹配 if (!Objects.equals(produceSn.getPartNo(), workOrder.getPartNo())) { @@ -165,7 +193,7 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin private MesProduceSn checkSn(MesSortShippingCheckModel model) { //校验条码是否重复扫描 - Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); + Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().contains(model.getSn())).findFirst(); if (optional.isPresent()) { throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); }