From 824517b558e7c6c84ef15026046040cdd2befe4e Mon Sep 17 00:00:00 2001 From: jason Date: Mon, 14 Apr 2025 18:06:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E6=88=90=E9=83=BDVolvo?= =?UTF-8?q?=E5=8F=91=E8=BF=90=E5=8D=95=E5=8F=8A=E8=A3=85=E8=BD=A6=E5=8D=95?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/busi/IMesSortShippingCheckService.java | 2 + .../busi/MesSortShippingCheckController.java | 15 +++++ .../busi/MesSortShippingCheckService.java | 72 +++++++++++++++++----- .../MesShippingScanSnStrategyServiceImpl.java | 16 +++-- 4 files changed, 85 insertions(+), 20 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java index 3bbbb53..d75099f 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesSortShippingCheckService.java @@ -39,4 +39,6 @@ public interface IMesSortShippingCheckService { void updateDetail(MesShippingOrderManagementDetail item); + void saveSecondShipScanOrder(MesSortShippingCheckModel model); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java index 4ccab69..30f1ae7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesSortShippingCheckController.java @@ -257,4 +257,19 @@ public class MesSortShippingCheckController { } } + @PostMapping("/second-ship-scan-order") + @ApiOperation(value = "宁德二次发运防错扫描发运单") + public ResultBean secondShipScanOrder(@RequestBody MesSortShippingCheckModel model) { + try { + if (model.getMesPartShippingGroup() == null) { + return ResultBean.fail("未选择零件发运组"); + } + sortShippingCheckService.saveSecondShipScanOrder(model); + return ResultBean.success(model.getMsg()).setResultObject(model); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } 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 3cc5710..a709a6f 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 @@ -406,7 +406,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService throw new ImppBusiException(String.format("【%s】此发运单不存在,请检查数据!", shippingOrderManagement.getShippingCode())); } //校验发运单状态 必须是未装车条码 - if (!Stream.of(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue(),MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()).collect(Collectors.toList()).contains(orderManagement.getStatus())) { + if (!Stream.of(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue(),MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue(),MesExtEnumUtil.SHIPPING_ORDER_STATUS.UNPACKING.getValue()).collect(Collectors.toList()).contains(orderManagement.getStatus())) { throw new ImppBusiException(String.format("【%s】此发运单状态为【%s】,请选择状态为【%s】或【%s】状态的发运单,请检查数据!", shippingOrderManagement.getShippingCode(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.valueOfDescription(orderManagement.getStatus()), MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getDescription(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription())); @@ -488,7 +488,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //45550 PDA-MES-PDA发运扫描排序方式修改 List shippingBusiSoftCfgList = mesConfigService.getConfigList(orderManagement.getOrganizeCode(), MesCommonConstant.SHIPPING_BUSI_SOFT_CFG, mesPartShippingGroup.getShippingGroupCode(), null); - DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); + DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode(), orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.UNPACKING.getValue() ? CommonEnumUtil.IS_VAILD.INVAILD.getValue() : CommonEnumUtil.IS_VAILD.VAILD.getValue()); DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "pid", orderDetailPackBean); DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),"status",orderDetailPackBean); if (CollectionUtils.isEmpty(shippingBusiSoftCfgList)) { @@ -505,12 +505,14 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService if(CollectionUtils.isEmpty(detailList)){ throw new ImppBusiException(String.format("发运单【%s】明细信息不存在,请检查数据!", orderManagement.getShippingCode())); } - //已扫描数据 - detailList.forEach(k -> { - if (Stream.of(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue(),MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue()).collect(Collectors.toList()).contains(k.getStatus())){ - k.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); - } - }); + if (orderManagement.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.UNPACKING.getValue()) { + //已扫描数据 + detailList.forEach(k -> { + if (Stream.of(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue(),MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue()).collect(Collectors.toList()).contains(k.getStatus())){ + k.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); + } + }); + } //序号,总成类型顺序 if(!Objects.isNull(mesPartShippingGroup.getScanSeqWay()) && !StringUtil.isEmpty(mesPartShippingGroup.getPartType()) && mesPartShippingGroup.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE_40.getValue()){ @@ -643,9 +645,11 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService } public void saveDate(MesShippingOrderManagement orderManagement, MesSortShippingCheckModel model, String organizeCode, String userInfo) { + boolean isUnpack = orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.UNPACKING.getValue(); //若发运单状态为创建或发布 则写入开始扫描时间 if (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() || - orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()) { + orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue() || + orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.UNPACKING.getValue()) { orderManagement.setStartScanTime(TimeTool.getNowTime(true)); } MesLoadingList loadingList = null; @@ -683,7 +687,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService orderManagement.setRackNo(model.getVolvoRackNo()); //发运单明细状态修改为校验完成 - DdlPackBean orderManagementDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPackBean orderManagementDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode, isUnpack? CommonEnumUtil.IS_VAILD.INVAILD.getValue() : CommonEnumUtil.IS_VAILD.VAILD.getValue()); DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "pid", orderManagementDetailPackBean); List orderManagementDetailList = shippingOrderManagementDetailRepository.findByHqlWhere(orderManagementDetailPackBean); List detailList = model.getDetailList(); @@ -738,6 +742,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //客供品移库 customerSupplyMove(orderManagement, userInfo, sortShippingModel, shippingList, detail, shippingGroup); + detail.setIsValid(CommonEnumUtil.VALID); detail.setSystemSyncStatus(CommonEnumUtil.FALSE); detail.setActualQty(MesPcnExtConstWords.ONE); ConvertBean.serviceModelUpdate(detail, userInfo); @@ -762,12 +767,14 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList); } if (StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())) { - //发送数据给辊道线 - sendShippingFinishedCmd(model, organizeCode); - //保存当前发运单明细 - List mesJisShippings = getMesJisShippings(orderManagement, orderManagementDetailList, userInfo); - if (!CollectionUtils.isEmpty(mesJisShippings)) { - shippingList.addAll(mesJisShippings); + if (!isUnpack) { + //发送数据给辊道线 + sendShippingFinishedCmd(model, organizeCode); + //保存当前发运单明细 + List mesJisShippings = getMesJisShippings(orderManagement, orderManagementDetailList, userInfo); + if (!CollectionUtils.isEmpty(mesJisShippings)) { + shippingList.addAll(mesJisShippings); + } } } else if (isFirstInstall){ //查询装车单明细 @@ -875,6 +882,39 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService shippingOrderManagementDetailRepository.update(item); } + @Override + public void saveSecondShipScanOrder(MesSortShippingCheckModel model) { + MesShippingOrderManagement shippingOrder = checkMesShippingOrderManagement(model); + if (!Objects.equals(shippingOrder.getShippingGroupCode(), model.getMesPartShippingGroup().getShippingGroupCode())) { + MesPcnException.throwMesBusiException("发运单【%s】设不属于发运组【%s】,请检查", shippingOrder.getShippingCode(), model.getMesPartShippingGroup().getShippingGroupCode()); + } + if (!Objects.equals(shippingOrder.getStatus(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue())) { + MesPcnException.throwMesBusiException("发运单【%s】的状态不为已发运,请检查", shippingOrder.getShippingCode()); + } + + DdlPackBean orderManagementDetailPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(shippingOrder.getId(), "pid", orderManagementDetailPackBean); + List detailList = shippingOrderManagementDetailRepository.findByHqlWhere(orderManagementDetailPackBean); + for (MesShippingOrderManagementDetail detail : detailList) { + detail.setBarcode(null); + detail.setIsValid(CommonEnumUtil.IS_VAILD.INVAILD.getValue()); + ConvertBean.serviceModelUpdate(detail, model.getUserInfo()); + } + model.setDetailList(detailList); + // 更新条码状态为发运回退 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + if (detailList.size() == 1) DdlPreparedPack.getStringEqualPack(detailList.get(0).getBarcode(), MesPcnExtConstWords.CUST_SN, packBean); + else DdlPreparedPack.getInPackList(detailList.stream().map(MesShippingOrderManagementDetail::getBarcode).filter(barCode -> !StringUtil.isEmptyAndNull(barCode)).collect(Collectors.toList()), MesPcnExtConstWords.CUST_SN, packBean); + produceSnRepository.updateByPropertiesNoSync( + new String[]{MesPcnExtConstWords.SN_STATUS, + MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME}, + new Object[]{MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED_BACK.getValue(), model.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.EMPTY}, + packBean); + + shippingOrder.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.UNPACKING.getValue()); + ConvertBean.serviceModelUpdate(shippingOrder, model.getUserInfo()); + } + private void updateShippingOrderDetails(String organizeCode, String userName, long id) { if(StringUtils.isEmpty(id) || StringUtils.isEmpty(organizeCode)) { return; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnStrategyServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnStrategyServiceImpl.java index dca8099..03739c6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnStrategyServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanSnStrategyServiceImpl.java @@ -75,7 +75,7 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr @Override public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) { //校验条码 - MesProduceSn produceSn = checkSn(model); + MesProduceSn produceSn = checkSn(model, orderManagement); boolean scanFlg = false; for (MesShippingOrderManagementDetail detail : model.getDetailList()) { if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) { @@ -145,7 +145,7 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr } - private MesProduceSn checkSn(MesSortShippingCheckModel model) { + private MesProduceSn checkSn(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement) { //校验条码是否重复扫描 (不区分大小写) Optional optional = model.getDetailList().stream().filter(k -> !StringUtils.isEmpty(k.getBarcode()) && k.getBarcode().equalsIgnoreCase(model.getSn())).findFirst(); if (optional.isPresent()) { @@ -156,8 +156,16 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr 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); + if (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.UNPACKING.getValue()) { + //校验产品条码状态 必须是状态为已下线条码 + if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED_BACK.getValue()) { + throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】状态的条码,请检查数据!", model.getSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()), + MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED_BACK.getDescription())); + } + } else { + //校验状态 + checkStatus(model, produceSn); + } } else { //外部条码解析 MesShippingOrderManagementDetail mesShippingOrderManagementDetail = getMesShippingOrderManagementDetail(model);