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/MesShippingLoadingCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java index b64766a..abf8095 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesShippingLoadingCheckService.java @@ -13,6 +13,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping; +import cn.estsh.i3plus.pojo.mes.bean.MesLoadingGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; @@ -28,6 +29,8 @@ import org.springframework.util.StringUtils; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.IntStream; +import java.util.stream.LongStream; /** * @Description : @@ -54,6 +57,8 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS @Autowired private MesPartShippingGroupService mesPartShippingGroupService; + @Autowired + private IMesLoadingGroupRepository mesLoadingGroupRDao; @Autowired private IMesSortShippingCheckService mesSortShippingCheckService; @@ -142,6 +147,9 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS if (StringUtils.isEmpty(loadingList)) { throw new ImppBusiException(String.format("【%s】此装车单不存在,请检查数据!", model.getOrderCode())); } + DdlPackBean loadingGroupPackBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(loadingList.getLoadingGroupNo(), "loadingGroupNo", loadingGroupPackBean); + MesLoadingGroup loadingGroup = mesLoadingGroupRDao.getByProperty(loadingGroupPackBean); //MesLoadingList loadingList = checkLoadingList(model.getOrderCode(), organizeCode,model.getIsPass(),userInfo); //根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。 @@ -202,6 +210,23 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS throw new ImppBusiException(String.format("【%s】此发运单扫描顺序错误,请检查数据!", model.getShippingCode())); } } + if (loadingGroup != null && loadingGroup.getLoadingSeq() != null) { + IntStream scanSeqStream = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getScanSn()) && !Objects.equals(k.getTempStatus(), MesCommonConstant.TRUE_INTEGER)).mapToInt(MesLoadingListDetail::getScanSeq); + if (loadingGroup.getLoadingSeq() == MesExtEnumUtil.LOADING_SEQ_TYPE.POSITIVE_SEQ.getValue()) { + Integer minSeq = scanSeqStream.min().orElse(0); + //若扫描的不是最小顺序 则报错 + if (!Objects.equals(minSeq, loadingListDetail.getScanSeq())) { + throw new ImppBusiException(String.format("【%s】此发运单应按装车扫描顺序正序扫描,请检查数据!", model.getShippingCode())); + } + } else if (loadingGroup.getLoadingSeq() == MesExtEnumUtil.LOADING_SEQ_TYPE.REVERSE_SEQ.getValue()) { + Integer maxSeq = scanSeqStream.max().orElse(0); + //若扫描的不是最小顺序 则报错 + if (!Objects.equals(maxSeq, loadingListDetail.getScanSeq())) { + throw new ImppBusiException(String.format("【%s】此发运单应按装车扫描顺序倒序扫描,请检查数据!", model.getShippingCode())); + } + } + + } //根据扫描的装车单找到是否先装车配置 //若配置为否,则查询装车单中所有的发运单是否都进行【排序发运校验】完成,若【排序发运校验】没完成,则提示,先进行排序发运校验。 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 a744efe..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 @@ -175,8 +175,11 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService public MesSortShippingCheckModel saveRackNo(MesSortShippingCheckModel model, String organizeCode, String userInfo) { checkVolvoRack(model, organizeCode); MesShippingOrderManagement orderManagement = checkMesShippingOrderManagement(model); - orderManagement.setRackNo(model.getVolvoRackNo()); - shippingOrderManagementRepository.update(orderManagement); + //根据是否启动记忆判断 若启用记忆,则根据保存数据库 + if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { + orderManagement.setRackNo(model.getVolvoRackNo()); + shippingOrderManagementRepository.update(orderManagement); + } return model; } @@ -311,7 +314,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService String tmpMidStr = tmpAfterBarCode.replace("[)>061B", ""); String[] splitStrArray = tmpMidStr.split("1Y"); if (splitStrArray.length > 0) { - if (StringUtils.isEmpty(orderManagement.getRackNo()) || !orderManagement.getRackNo().contains(splitStrArray[0])) { + if (StringUtils.isEmpty(model.getVolvoRackNo()) || !model.getVolvoRackNo().contains(splitStrArray[0])) { throw new ImppBusiException(String.format("料箱类型与顺序不一致,请检查数据")); } } @@ -332,7 +335,10 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService // detail.setBarcode(detail.getBarcode() + "," + model.getLocationCode()); detail.setPartPosition(model.getLocationCode()); // detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue()); - shippingOrderManagementDetailRepository.update(detail); + //根据是否启动记忆判断 若启用记忆,则根据保存数据库 + if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { + shippingOrderManagementDetailRepository.update(detail); + } break; } } @@ -400,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())); @@ -482,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)) { @@ -499,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()){ @@ -598,7 +606,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService throw new ImppBusiException(String.format("【%s】此产品条码不存在,请检查数据!", model.getSn())); } //校验状态 - checkStatus(model, produceSn); +// checkStatus(model, produceSn); return produceSn; } @@ -637,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; @@ -674,9 +684,10 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE); orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue()); orderManagement.setEndScanTime(TimeTool.getNowTime(true)); + 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(); @@ -731,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); @@ -755,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){ //查询装车单明细 @@ -868,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/mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java similarity index 84% rename from modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java rename to modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java index c3a839d..6dc9118 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl.java @@ -17,7 +17,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; -import cn.estsh.i3plus.pojo.mes.bean.edi.cd.MesCimVolvoJisRackIdDetail; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; @@ -46,7 +45,7 @@ import java.util.stream.Stream; **/ @Service @Slf4j -public class mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements IMesShippingScanStrategyService { +public class MesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements IMesShippingScanStrategyService { @Autowired private MesShippingOrderManagementRepository shippingOrderManagementRepository; @Autowired @@ -86,8 +85,8 @@ public class mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements 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)) { - if (Objects.equals(detail.getVin(), workOrder.getVinCode())) { - throw new ImppBusiException(String.format("产品条码明细【%s】与发运单明细不匹配,请重新扫描!", model.getSn())); + if (!Objects.equals(detail.getVin(), workOrder.getVinCode())) { + throw new ImppBusiException(String.format("产品条码【%s】对应工单Vince号与发运单明细的Vin号不匹配,请重新扫描!", model.getSn())); } checkDetailScanSeq(orderManagement, detail, workOrder); //校验发运明细 @@ -177,7 +176,7 @@ public class mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements throw new ImppBusiException(String.format("【%s】此条码已经扫描过,请检查数据!", model.getSn())); } DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(model.getSn(), "productSn", packBean); + DdlPreparedPack.getStringEqualPack(model.getSn(), "custSn", packBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); if (!StringUtils.isEmpty(produceSn)) { @@ -242,54 +241,41 @@ public class mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements } private void updateOrderManagementDetails(MesProduceSn produceSn, MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail, MesWorkOrder workOrder, String userInfo) { -// if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { - detail.setBarcode(produceSn.getProductSn()); - detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); - detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); - detail.setRemark("扫描完成"); - updateDetail(detail); - orderManagement.setCheckSeqCode("1"); - update(orderManagement); + detail.setBarcode(produceSn.getCustSn()); + detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); + detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + detail.setRemark("扫描完成"); + orderManagement.setCheckSeqCode("1"); + //根据是否启动记忆判断 若启用记忆,则根据保存数据库 + if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { -// MesCustSortInfo custSoftInfo = custSoftInfoRDao.getById(Long.parseLong(workOrder.getWorkOrderSource())); -// if (custSoftInfo != null) { -// MesCimVolvoJisRackIdDetail rackIdDetail = rackIdDetailRDao.getById(custSoftInfo.getSourceId()); -// if (rackIdDetail != null) { -// detail.setPartPosition(rackIdDetail.getPosition()); -// } -// } - - //根据是否启动记忆判断 若启用记忆,则根据保存数据库 - if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { - - //若发运单状态为创建或发布 则写入开始扫描时间 - if (!StringUtils.isEmpty(orderManagement.getStatus()) && (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() || - orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue())) { - orderManagement.setStartScanTime(TimeTool.getNowTime(true)); - } + //若发运单状态为创建或发布 则写入开始扫描时间 + if (!StringUtils.isEmpty(orderManagement.getStatus()) && (orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() || + orderManagement.getStatus() == MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue())) { + orderManagement.setStartScanTime(TimeTool.getNowTime(true)); + } - orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); - orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE); - ConvertBean.serviceModelUpdate(orderManagement, userInfo); - update(orderManagement); + orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); + orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(orderManagement, userInfo); + update(orderManagement); - detail.setActualQty(1); - detail.setSystemSyncStatus(CommonEnumUtil.FALSE); - detail.setVisualOrderNo(workOrder.getWorkOrderNo()); - ConvertBean.serviceModelUpdate(detail, userInfo); - updateDetail(detail); - //内部条码更新条码状态 - if (!Objects.isNull(produceSn.getId())) { - produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); - produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); - ConvertBean.serviceModelUpdate(produceSn, userInfo); - produceSnExtService.update(produceSn); - }else{ - //记录唯一性校验表 - mesShippingSnUniqueService.insertMesShippingSnUnique(orderManagement.getOrganizeCode(),detail.getBarcode(),orderManagement.getShippingCode(),userInfo); - } + detail.setActualQty(1); + detail.setSystemSyncStatus(CommonEnumUtil.FALSE); + detail.setVisualOrderNo(workOrder.getWorkOrderNo()); + ConvertBean.serviceModelUpdate(detail, userInfo); + updateDetail(detail); + //内部条码更新条码状态 + if (!Objects.isNull(produceSn.getId())) { + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); + produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(produceSn, userInfo); + produceSnExtService.update(produceSn); + }else{ + //记录唯一性校验表 + mesShippingSnUniqueService.insertMesShippingSnUnique(orderManagement.getOrganizeCode(),detail.getBarcode(),orderManagement.getShippingCode(),userInfo); } -// } + } } @MonitorLog diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingScanOrderStrategyServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanOrderStrategyServiceImpl.java similarity index 99% rename from modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingScanOrderStrategyServiceImpl.java rename to modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanOrderStrategyServiceImpl.java index d1d12de..56145e0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/mesShippingScanOrderStrategyServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/shippingscan/strategy/MesShippingScanOrderStrategyServiceImpl.java @@ -44,7 +44,7 @@ import java.util.stream.Stream; **/ @Service @Slf4j -public class mesShippingScanOrderStrategyServiceImpl implements IMesShippingScanStrategyService { +public class MesShippingScanOrderStrategyServiceImpl implements IMesShippingScanStrategyService { @Autowired private MesShippingOrderManagementRepository shippingOrderManagementRepository; @Autowired 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);