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 c41952e..ccd4142 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 @@ -70,10 +70,14 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin //更新单据信息 model.getDetailList().stream().filter(t -> t.getId().equals(model.getLastShippingDetailId())).forEach(detail -> { //第一次扫描的是条码 - if(StringUtils.isEmpty(detail.getVisualOrderNo())){ + if (StringUtils.isEmpty(detail.getVisualOrderNo())) { + //校验目视单是否已经扫描 + checkVisualOrderNoIsScan(model); detail.setVisualOrderNo(model.getSn()); model.setSn(detail.getBarcode()); - }else{ + } else { + //校验条码是否已经扫描 + checkIsScan(model); detail.setBarcode(model.getSn()); } MesProduceSn produceSn = checkSn(model); @@ -110,14 +114,14 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin } 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)) { + //校验条码是否已经扫描 + checkIsScan(model); //如果扫描的是条码,校验条码 return checkSn(model).getPartNo(); }else{ + //校验目视单是否已经扫描 + checkVisualOrderNoIsScan(model); //校验目视单状态 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()))); @@ -146,24 +150,6 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin return workOrder; } - - private MesWorkOrder getWorkOrder(MesSortShippingCheckModel model) { - //校验目视单是否已经扫描 - if (model.getDetailList().stream().anyMatch(t -> !StringUtils.isEmpty(t.getVisualOrderNo()) && t.getVisualOrderNo().equals(model.getSn()))) { - throw new ImppBusiException(String.format("【%s】此目视单已经扫描过,请检查数据!", model.getSn())); - } - //查询工单 - MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), model.getSn()); - if (Objects.isNull(workOrder)) { - throw new ImppBusiException(String.format("目视单【%s】不存在,请检查数据!", model.getSn())); - } - //校验目视单状态 - 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; - } - private void checkShippingDetails(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup, String partNo, MesShippingOrderManagementDetail detail) { //校验发运单明细顺序 if (!Objects.isNull(shippingGroup) && !StringUtils.isEmpty(shippingGroup.getIsEnableShippingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableShippingFailSafe()) { @@ -191,25 +177,28 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin } } - private MesProduceSn checkSn(MesSortShippingCheckModel model) { + private void checkVisualOrderNoIsScan(MesSortShippingCheckModel model){ + //校验目视单是否已经扫描 + if (model.getDetailList().stream().anyMatch(t -> !StringUtils.isEmpty(t.getVisualOrderNo()) && t.getVisualOrderNo().contains(model.getSn()))) { + throw new ImppBusiException(String.format("【%s】此目视单已经扫描过,请检查数据!", model.getSn())); + } + } + + private void checkIsScan(MesSortShippingCheckModel model){ //校验条码是否重复扫描 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())); } + } + + private MesProduceSn checkSn(MesSortShippingCheckModel model) { MesProduceSn produceSn = getMesProduceSn(model.getOrganizeCode(), model.getSn()); - if (!StringUtils.isEmpty(produceSn)) { - //校验状态 - checkStatus(model, produceSn); - } else { - //外部条码解析 - MesShippingOrderManagementDetail mesShippingOrderManagementDetail = getMesShippingOrderManagementDetail(model); - //封装信息 - produceSn = new MesProduceSn(); - produceSn.setSerialNumber(model.getSn()); - produceSn.setProductSn(model.getSn()); - produceSn.setPartNo(mesShippingOrderManagementDetail.getPartNo()); + if (StringUtils.isEmpty(produceSn)) { + throw new ImppBusiException(String.format("【%s】此条码不存在,请检查数据!", model.getSn())); } + //校验状态 + checkStatus(model, produceSn); return produceSn; } @@ -233,28 +222,6 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin } } - private MesShippingOrderManagementDetail getMesShippingOrderManagementDetail(MesSortShippingCheckModel model) { - //外部解析条码长度卡控 - String cfgValue = mesConfigService.getCfgValue(model.getOrganizeCode(), MesPcnExtConstWords.MAX_SHIPPING_BARCODE_LENGTH); - if (Integer.parseInt(cfgValue) < model.getSn().length()) - MesPcnException.throwMesBusiException("【%s】此条码长度超过【%s】位,请检查数据!", model.getSn(), cfgValue); - List detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && model.getSn().startsWith(k.getCustPartNo()) && StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).collect(Collectors.toList()); - MesShippingOrderManagementDetail mesShippingOrderManagementDetail = null; - for (MesShippingOrderManagementDetail managementDetail : detailList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(managementDetail.getPartNo(), "erpPartNo", packBean); - DdlPreparedPack.getStringEqualPack(managementDetail.getCustPartNo(), "custPartNo", packBean); - if (mesCustomerPartRepository.isExitByHql(packBean)) { - mesShippingOrderManagementDetail = managementDetail; - break; - } - } - if (Objects.isNull(mesShippingOrderManagementDetail)) { - throw new ImppBusiException(String.format("【%s】此条码未匹配到数据,请检查数据!", model.getSn())); - } - return mesShippingOrderManagementDetail; - } - private void updateOrderManagementDetails(MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail, MesWorkOrder workOrder,MesProduceSn produceSn, String userInfo) { if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER);