diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java index e9ee4ef..e04ba26 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java @@ -26,6 +26,7 @@ import cn.estsh.impp.framework.boot.exception.ImppBusiException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.*; @@ -69,6 +70,10 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService private MesLoadingListDetailRepository vehiclesOrderDetailRepository; @Autowired private MesLoadingListRepository vehiclesOrderRepository; + + @Autowired + private MesCustomerPartRepository mesCustomerPartRepository; + @Override public MesSortShippingCheckModel queryShippingOrderNo(MesShippingOrderManagement shippingOrderManagement) { @@ -196,7 +201,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService public MesSortShippingCheckModel saveSn(MesSortShippingCheckModel model, String org) { //校验条码 - MesProduceSn produceSn = checkMesProduceSn(model, org); + MesProduceSn produceSn = checkSn(model, org); //校验发运单是否存在 MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model, org); @@ -214,7 +219,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService Optional minPartNO = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode())) .min(Comparator.comparingLong(k -> k.getCustInfoSeq())).map(k -> k.getPartNo()); //若扫描的不是最小顺序 则报错 - if (!minPartNO.get().equals(produceSn.getPartNo())) { + if (minPartNO.isPresent() && !minPartNO.get().equals(produceSn.getPartNo())) { throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误,请检查数据!", model.getSn())); } } @@ -242,10 +247,12 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); ConvertBean.serviceModelUpdate(detail, AuthUtil.getSessionUser().getUserName()); updateDetail(detail); - - produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); - ConvertBean.serviceModelUpdate(detail, AuthUtil.getSessionUser().getUserName()); - produceSnExtService.update(produceSn); + //内部条码更新条码状态 + if (!Objects.isNull(produceSn.getId())) { + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); + ConvertBean.serviceModelUpdate(detail, AuthUtil.getSessionUser().getUserName()); + produceSnExtService.update(produceSn); + } } } break; @@ -321,8 +328,57 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } + private MesProduceSn checkSn(MesSortShippingCheckModel model, String org) { + //校验条码是否重复扫描 + Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); + if (optional.isPresent()) { + throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); + MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); + if (!StringUtils.isEmpty(produceSn)) { + //校验状态 + checkStatus(model, produceSn); + }else{ + //外部条码解析 + MesShippingOrderManagementDetail mesShippingOrderManagementDetail = getMesShippingOrderManagementDetail(model, org); + //封装信息 + produceSn = new MesProduceSn(); + produceSn.setSerialNumber(model.getSn()); + produceSn.setPartNo(mesShippingOrderManagementDetail.getPartNo()); + } + + return produceSn; + + } + + private MesShippingOrderManagementDetail getMesShippingOrderManagementDetail(MesSortShippingCheckModel model, String org) { + List detailList = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getCustPartNo()) && model.getSn().startsWith(k.getCustPartNo()) && !StringUtils.isEmpty(k.getBarcode())).collect(Collectors.toList()); + MesShippingOrderManagementDetail mesShippingOrderManagementDetail = null; + for (MesShippingOrderManagementDetail managementDetail : detailList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); + 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 MesProduceSn checkMesProduceSn(MesSortShippingCheckModel model, String org) { + //校验条码是否已经扫描 + Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); + if (optional.isPresent()) { + throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); + } DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", packBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); @@ -332,6 +388,12 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService if (StringUtils.isEmpty(produceSn)) { throw new ImppBusiException(String.format("【%s】此产品条码不存在,请检查数据!", model.getSn())); } + //校验状态 + checkStatus(model, produceSn); + return produceSn; + } + + private void checkStatus(MesSortShippingCheckModel model, MesProduceSn produceSn) { //校验产品条码状态 必须是状态为已下线条码 if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) { throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】状态的条码", model.getSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()), @@ -342,12 +404,6 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService throw new ImppBusiException(String.format("【%s】此条码质量状态为【%s】,请选择【%s】状态的条码", model.getSn(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getDescription())); } - - Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equals(model.getSn())).findFirst(); - if (optional.isPresent()) { - throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); - } - return produceSn; } private MesShippingOrderManagement checkMesShippingOrderManagement(MesSortShippingCheckModel model, String org) { @@ -400,16 +456,17 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); - if(Objects.isNull(produceSn)){ - MesPcnException.throwMesBusiException("【%s】此产品条码不存在,请检查数据!", detail.getBarcode()); + if(!Objects.isNull(produceSn)){ + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); + ConvertBean.serviceModelUpdate(produceSn, userName); + produceSnList.add(produceSn); } - produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); - ConvertBean.serviceModelUpdate(produceSn, userName); - produceSnList.add(produceSn); } - produceSnRepository.saveAll(produceSnList); + if(!CollectionUtils.isEmpty(produceSnList)){ + produceSnRepository.saveAll(produceSnList); + } update(orderManagement); shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList); //1.更新装车单明细对应的发运单状态=发运 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java index 8027bec..0720a8a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java @@ -193,7 +193,7 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService { //获取实际值设备变量ID List realEquipVariableIdList = - model.getOrderResultList().stream().filter(k -> k.getSpotCheckItemType() == MesExtEnumUtil.SPOT_CHECK_ITEM_TYPE.AUTO.getValue()).map(MesSpotCheckOrderResult::getSetEquipVariableId).collect(Collectors.toList()); + model.getOrderResultList().stream().filter(k -> k.getSpotCheckItemType() == MesExtEnumUtil.SPOT_CHECK_ITEM_TYPE.AUTO.getValue()).map(MesSpotCheckOrderResult::getRealEquipVariableId).collect(Collectors.toList()); //获取设定值设备数据 List setEquipmentLogList = new ArrayList<>();