From 984a761881cc3eb982fe189722c63b4512339375 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 17 Sep 2024 20:40:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E9=81=93=E9=98=B2=E9=94=99=EF=BC=8C?= =?UTF-8?q?=20=E9=A1=BA=E5=BA=8F=E9=98=B2=E9=94=99=20=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MesProdCraftRouteCheckNosortStepService.java | 34 +++++++++-- .../MesProdCraftRouteCheckSortStepService.java | 66 ++++++++++++---------- .../step/MesProdCraftRouteCheckStepService.java | 6 -- .../step/MesProductSnScanStepService.java | 17 ++++-- .../step/MesWorkOrderCheckNosortStepService.java | 27 ++++++--- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 3 +- 6 files changed, 97 insertions(+), 56 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckNosortStepService.java index 8e8a16f..9179384 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckNosortStepService.java @@ -70,9 +70,11 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh Optional> stepParamMap = getStepParams(reqBean); Boolean needCheckIsPs = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.NEED_CHECK_IS_PS)) ? true : false; - //验证是否是自制件 - if (needCheckIsPs && !isExistProductSn(productionPsInContextList)) - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前主条码信息均为外协件,无需进行前道工艺防错验证!"); + //验证是否存在零件为空的主条码 + if (needCheckIsPs && isExistProductSnNoPart(productionPsInContextList)) { + productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList); + return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前存在主条码为外协件,前道工艺防错验证失败,主条码必须为自制件!"); + } //验证是否存在自制件 if (!isExistProductSn(productionPsInContextList)) @@ -113,6 +115,29 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh } + //验证是否存在零件为空的主条码 + private Boolean isExistProductSnNoPart(List productionPsInContextList) { + + Boolean result = false; + + for (MesProductionPsInContext productionPsInContext : productionPsInContextList) { + + if (null == productionPsInContext || !StringUtils.isEmpty(productionPsInContext.getPartNo()) || productionPsInContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) continue; + + productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + + result = true; + } + + return result; + } + + //验证是否存在自制件 + private Boolean isExistProductSn(List productionPsInContextList) { + Optional optional = productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).findFirst(); + return (null == optional || !optional.isPresent()) ? false : true; + } + private Boolean checkIsPart(List productionPsInContextList) { Optional optional = CollectionUtils.isEmpty(productionPsInContextList) ? null : productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCutCode()))).findFirst(); return (null != optional && optional.isPresent()) ? false : true; @@ -133,8 +158,7 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh //前道工艺防错验证 Boolean result = doProdCraftRouteCheckNosort(reqBean, stepResult, productionProcessContext, productionPsInContext, craftRouteDataMap.get(productionPsInContext.getPartNo()), suffix); - if (result) productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - else productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + productionPsInContext.checkCraftResult(!result ? CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() : CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); productSnList.add(productionPsInContext.getProductSn()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckSortStepService.java index 9b78929..0a03dc5 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckSortStepService.java @@ -60,27 +60,26 @@ public class MesProdCraftRouteCheckSortStepService extends MesProdCraftRouteChec //存储生产过程上下文对象 productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); - //获取进料主条码数据信息 + //获取产品条码数据信息 List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); - if (CollectionUtils.isEmpty(productionPsInContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前无主条码信息,无需进行前道工艺防错验证!"); + if (CollectionUtils.isEmpty(productionPsInContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前无产品条码信息,前道工艺防错验证异常,请重置工序!"); - //验证是否存在自制件 - if (!isExistProductSn(productionPsInContextList)) - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前主条码信息均为外协件,无需进行前道工艺防错验证!"); + //验证是否零件为空的产品条码 + if (isExistProductSnNoPart(productionPsInContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前存在零件号[空]的产品条码信息,前道工艺防错验证异常,请重置工序!"); //验证工位是否设置需要前道防错 if (!isNeedCheckCraft(productionPsInContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]未设置前道工艺防错,无需进行前道工艺防错验证!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); - //验证是否存在工艺强过码, 存在则保存 并返回强过的主条码 + //验证是否存在工艺强过码, 存在则保存 并返回强过的产品条码 List productSnList2Jump = doHandleCraftJumpCode(reqBean, productionPsInContextList); if (!CollectionUtils.isEmpty(productSnList2Jump)) - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(productSnList2Jump.toString()), stepResult, String.format("主条码%s跳过前道工艺防错验证成功!", productSnList2Jump.toString())); + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(productSnList2Jump.toString()), stepResult, String.format("产品条码%s跳过前道工艺防错验证成功!", productSnList2Jump.toString())); List partNoList = (productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()) && o.getCheckCraftResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0)).map(MesProductionPsInContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); - if (CollectionUtils.isEmpty(partNoList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "主条码均已通过前道工艺防错验证!"); + if (CollectionUtils.isEmpty(partNoList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "产品条码均已通过前道工艺防错验证!"); //从上下文中取出生产线对象 MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); @@ -90,7 +89,7 @@ public class MesProdCraftRouteCheckSortStepService extends MesProdCraftRouteChec partNoList.forEach(o -> handleProdCraftData(reqBean, workCenter, o, craftRouteDataMap, true)); if (CollectionUtils.isEmpty(craftRouteDataMap) || craftRouteDataMap.size() != partNoList.size()) { - //剔除未验证的进料主条码后保存数据 + //剔除未验证的进料产品条码后保存数据 productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toList())); return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("零件编码%s未匹配到产品工艺路线!", CollectionUtils.isEmpty(craftRouteDataMap) ? partNoList.toString() : partNoList.stream().filter(o -> (!StringUtils.isEmpty(o) && !craftRouteDataMap.containsKey(o))).collect(Collectors.toList()).toString())); @@ -103,6 +102,12 @@ public class MesProdCraftRouteCheckSortStepService extends MesProdCraftRouteChec } + //验证是否存在零件为空的产品条码 + private Boolean isExistProductSnNoPart(List productionPsInContextList) { + Optional optional = productionPsInContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && StringUtils.isEmpty(o.getPartNo()))).findFirst(); + return (null == optional || !optional.isPresent()) ? true : false; + } + //前道工艺防错验证处理 private void doHandleProdCraftRouteCheck(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, List productionPsInContextList, Map> craftRouteDataMap) { @@ -116,17 +121,16 @@ public class MesProdCraftRouteCheckSortStepService extends MesProdCraftRouteChec //前道工艺防错验证 Boolean result = doProdCraftRouteCheckSort(reqBean, stepResult, productionProcessContext, productionPsInContext, craftRouteDataMap.get(productionPsInContext.getPartNo())); - if (result) productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - else productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + productionPsInContext.checkCraftResult(!result ? CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() : CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); productSnList.add(productionPsInContext.getProductSn()); } - //保存进料主条码数据 + //保存进料产品条码数据 productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList); - if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean.writeDbLog().scanInfo(productSnList.toString()), String.format("主条码%s前道工艺防错验证成功!", productSnList), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean.writeDbLog().scanInfo(productSnList.toString()), String.format("产品条码%s前道工艺防错验证成功!", productSnList), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); else this.sendMessage(reqBean, resultBean.writeDbLog().scanInfo(productSnList.toString()), stepResult.getMsg(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); } @@ -136,60 +140,60 @@ public class MesProdCraftRouteCheckSortStepService extends MesProdCraftRouteChec String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON; - //判断主条码的当前工艺是否包含在产品工艺路线中 + //判断产品条码的当前工艺是否包含在产品工艺路线中 Optional optionalPs = StringUtils.isEmpty(productionPsInContext.getCraftCode()) ? null : craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionPsInContext.getCraftCode()))).findFirst(); if (!StringUtils.isEmpty(productionPsInContext.getCraftCode()) && (null == optionalPs || !optionalPs.isPresent())) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]对应的工艺代码[%s]不匹配零件[%s]对应的产品工艺路线[%s]", + return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]对应的工艺代码[%s]不匹配零件[%s]对应的产品工艺路线[%s]", message, productionPsInContext.getProductSn(), productionPsInContext.getCraftCode(), productionPsInContext.getPartNo(), craftRouteDetailList.get(0).getCraftRouteCode())).isCompleted(); //判断当前工位的工序对应的工艺是否包含在产品工艺路线中 Optional optionalCell = craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionProcessContext.getCraftCode()))).findFirst(); if (null == optionalCell || !optionalCell.isPresent()) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]零件[%s]对应的产品工艺路线[%s]不包含当前工位[%s]对应的工艺[%s]工序[%s]", + return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]零件[%s]对应的产品工艺路线[%s]不包含当前工位[%s]对应的工艺[%s]工序[%s]", message, productionPsInContext.getProductSn(), productionPsInContext.getPartNo(), craftRouteDetailList.get(0).getCraftRouteCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode())).isCompleted(); - //验证工艺对应工序最多经过1个: 当前主条码的工艺字段有值, 对应的工艺路线明细信息设置了【true】, 当前工位的工艺与主条码的当前工艺相同, 当前工位的工序与主条码的当前工序不相同 + //验证工艺对应工序最多经过1个: 当前产品条码的工艺字段有值, 对应的工艺路线明细信息设置了【true】, 当前工位的工艺与产品条码的当前工艺相同, 当前工位的工序与产品条码的当前工序不相同 if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getAtMostProcess().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode()) && !reqBean.getProcessCode().equals(productionPsInContext.getProcessCode())) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]产品工艺路线[%s]相同工艺对应工序最多经过1个,上道工艺[%s]当前工位工艺[%s]", + return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]产品工艺路线[%s]相同工艺对应工序最多经过1个,上道工艺[%s]当前工位工艺[%s]", message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftRouteCode(), productionPsInContext.getCraftCode(), productionProcessContext.getCraftCode())).isCompleted(); - //验证是否捆绑后道工艺: 如果当前工位的工艺与主条码的当前工艺不一致的情况下, 根据主条码的当前工艺获取在工艺路线明细的下一个工艺, 判断当前工位的工艺与下个工艺是否一致 + //验证是否捆绑后道工艺: 如果当前工位的工艺与产品条码的当前工艺不一致的情况下, 根据产品条码的当前工艺获取在工艺路线明细的下一个工艺, 判断当前工位的工艺与下个工艺是否一致 if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getIsBindNextCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && !productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode())) { Optional optional = craftRouteDetailList.stream().filter(o -> (null != o && o.getSeq().compareTo(optionalPs.get().getSeq()) > 0)).findFirst(); if (null != optionalCell && optionalCell.isPresent() && !productionProcessContext.getCraftCode().equals(optional.get().getCraftCode())) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]产品工艺路线[%s]捆绑后道工艺,上道工艺[%s]下道工艺[%s]当前工位工艺[%s]", + return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]产品工艺路线[%s]捆绑后道工艺,上道工艺[%s]下道工艺[%s]当前工位工艺[%s]", message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftRouteCode(), productionPsInContext.getCraftCode(), optional.get().getCraftCode(), productionProcessContext.getCraftCode())).isCompleted(); } - //验证已完成工序最大重复次数: 如果当前工位的工序与主条码的当前工序一致的情况下, 根据条码+物料+工序+工艺查询加工记录, 判断加工记录条数 + //验证已完成工序最大重复次数: 如果当前工位的工序与产品条码的当前工序一致的情况下, 根据条码+物料+工序+工艺查询加工记录, 判断加工记录条数 if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getRepeatTimes().compareTo(MesPcnExtConstWords.ONE) > 0 && reqBean.getProcessCode().equals(productionPsInContext.getProcessCode())) { List productionRecordList = productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), productionPsInContext.getPartNo(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()); if (!CollectionUtils.isEmpty(productionRecordList) && productionRecordList.size() >= optionalPs.get().getRepeatTimes()) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]当前工序[%s]产品工艺路线[%s]已完成工序最大重复次数[%s]", + return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]当前工序[%s]产品工艺路线[%s]已完成工序最大重复次数[%s]", message, productionPsInContext.getProductSn(), reqBean.getProcessCode(), craftRouteDetailList.get(0).getCraftRouteCode(), optionalPs.get().getRepeatTimes())).isCompleted(); } //根据当前工位对应的工艺 获取 所有前道工艺 List beforeCellCraftList = craftRouteDetailList.stream().filter(o -> (null != o && o.getSeq().compareTo(optionalCell.get().getSeq()) < 0)).collect(Collectors.toList()); - //验证首工艺: 当前主条码的工艺字段有值,并且当前工位的工艺不等于主条码的当前工艺。 如果等于已经在【验证工艺对应工序最多经过1个】与【 验证已完成工序最大重复次数】 中验证通过,所以这边只考虑不相等 + //验证首工艺: 当前产品条码的工艺字段有值,并且当前工位的工艺不等于产品条码的当前工艺。 如果等于已经在【验证工艺对应工序最多经过1个】与【 验证已完成工序最大重复次数】 中验证通过,所以这边只考虑不相等 if (CollectionUtils.isEmpty(beforeCellCraftList) && !StringUtils.isEmpty(productionPsInContext.getCraftCode()) && !productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode())) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]已经过首道工艺[%s]", message, productionPsInContext.getProductSn(), productionProcessContext.getCraftCode())).isCompleted(); + return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]已经过首道工艺[%s]", message, productionPsInContext.getProductSn(), productionProcessContext.getCraftCode())).isCompleted(); - //执行首道工艺 当前主条码验证通过 + //执行首道工艺 当前产品条码验证通过 if (CollectionUtils.isEmpty(beforeCellCraftList)) return true; - //当前主条码的工艺字段为空 验证首工艺是否存在工单装配件信息 + //当前产品条码的工艺字段为空 验证首工艺是否存在工单装配件信息 if (StringUtils.isEmpty(productionPsInContext.getCraftCode()) && craftRouteDetailList.get(0).getIsChoose().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && checkIsExistWorkOrderAssembly(productionPsInContext, craftRouteDetailList.get(0).getCraftCode())) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]未经过首道工艺[%s]", message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftCode())).isCompleted(); + return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]未经过首道工艺[%s]", message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftCode())).isCompleted(); - //搜集主条码当前工艺于当前工位对应工艺之间的未完成的工艺集合 + //搜集产品条码当前工艺于当前工位对应工艺之间的未完成的工艺集合 List unCompleteCraftList; if (StringUtils.isEmpty(productionPsInContext.getCraftCode())) unCompleteCraftList = beforeCellCraftList; else { Optional optional = beforeCellCraftList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionPsInContext.getCraftCode()))).findFirst(); - if (null == optional || !optional.isPresent()) //在工位对应的工艺之前的所有前道工艺中未找到主条码的当前工艺则表示主条码已经过当前工艺 - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]已经过当前工艺[%s]", message, productionPsInContext.getProductSn(), productionProcessContext.getCraftCode())).isCompleted(); + if (null == optional || !optional.isPresent()) //在工位对应的工艺之前的所有前道工艺中未找到产品条码的当前工艺则表示产品条码已经过当前工艺 + return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]已经过当前工艺[%s]", message, productionPsInContext.getProductSn(), productionProcessContext.getCraftCode())).isCompleted(); unCompleteCraftList = beforeCellCraftList.stream().filter(o -> (null != o && o.getSeq().compareTo(optional.get().getSeq()) > 0)).collect(Collectors.toList()); } @@ -202,7 +206,7 @@ public class MesProdCraftRouteCheckSortStepService extends MesProdCraftRouteChec //验证未完成工艺是否存在工单装配件信息 Optional optional = unCompleteCraftList.stream().filter(o -> (null != o && o.getIsChoose() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue())).findFirst(); if (unCompleteCraftList.get(0).getIsChoose().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && checkIsExistWorkOrderAssembly(productionPsInContext, unCompleteCraftList.get(0).getCraftCode())) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]未经过必过工艺[%s]", message, productionPsInContext.getProductSn(), unCompleteCraftList.get(0).getCraftCode())).isCompleted(); + return stepResult.isCompleted(false).msg(String.format("%s产品条码[%s]未经过必过工艺[%s]", message, productionPsInContext.getProductSn(), unCompleteCraftList.get(0).getCraftCode())).isCompleted(); return true; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java index 8eab5e8..da7c778 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java @@ -52,12 +52,6 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService { } - //验证是否存在自制件 - public Boolean isExistProductSn(List productionPsInContextList) { - Optional optional = productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).findFirst(); - return (null == optional || !optional.isPresent()) ? false : true; - } - //验证工位是否设置需要前道防错 public Boolean isNeedCheckCraft(List productionPsInContextList) { Optional optional = productionPsInContextList.stream().filter(o -> (null != o && diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java index 33d0937..5d44a13 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java @@ -105,11 +105,11 @@ public class MesProductSnScanStepService extends BaseStepService { checkIsAboveNeedQty(reqBean, resultBean, stepResult, scanedQty, needQty, equipVariableCollectContextList, productionPsInContextList, productionPartContextList, cellEquipContext); //验证是否支持跳过 - Boolean isAllowJump = checkIsAllowJump(productionPsInContextList); + Boolean isAllowJump = checkIsAllowJump(reqBean, productionPsInContextList); //当前不允许跳过 if (isCraftJumpCode && !isAllowJump) - return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).scanInfo(scanInfo), stepResult, String.format("当前扫描信息工艺强过码[%s],当前没有可以跳过的主条码信息!", scanInfo)); + return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()).scanInfo(scanInfo), stepResult, String.format("当前扫描信息工艺强过码[%s],当前不支持强过!", scanInfo)); //允许跳过,先更新数据 if (isCraftJumpCode && isAllowJump) { @@ -191,10 +191,19 @@ public class MesProductSnScanStepService extends BaseStepService { } //验证是否支持跳过 - private Boolean checkIsAllowJump(List productionPsInContextList) { + private Boolean checkIsAllowJump(StationRequestBean reqBean, List productionPsInContextList) { Optional optional = CollectionUtils.isEmpty(productionPsInContextList) ? null : productionPsInContextList.stream().filter(o -> (null != o && o.getCheckCraftResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst(); - return (null != optional && optional.isPresent()) ? true : false; + if (null == optional || !optional.isPresent()) return false; + //非排序是否允许强过, 默认不支持 + String isAllowJump = getIsAllowJump(reqBean); + return StringUtils.isEmpty(isAllowJump) ? false : true; + } + + //非排序是否允许强过[工位参数] + private String getIsAllowJump(StationRequestBean reqBean) { + String isAllowJump = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.IS_ALLOW_JUMP); + return (!StringUtils.isEmpty(isAllowJump) && isAllowJump.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? isAllowJump : null; } //验证扫描信息属于工艺强过码 并且支持跳过,进行数据变更 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java index 2f98d87..8464513 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java @@ -87,8 +87,8 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer //验证扫描信息是否属于工艺强过码 Boolean isCraftJumpCode = matchCraftJumpCode(productionProcessContext, equipVariableCollectContextList); - //验证是否支持跳过 - Boolean isAllowJump = checkIsAllowJump(cachedProductionPartContextList); + //验证是否支持强过 + Boolean isAllowJump = checkIsAllowJump(reqBean, cachedProductionPartContextList); //不属于工艺强过码,如果此前存在顺序验证失败的数据 则清除此前的产出零件信息 if (!isCraftJumpCode && isAllowJump) { @@ -97,12 +97,12 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer cachedProductionPartContextList = null; } - //当前不允许跳过 + //当前不允许强过 if (isCraftJumpCode && !isAllowJump) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()). - scanInfo(equipVariableCollectContextList.get(0).getEquipVariableValue()), stepResult, String.format("当前扫描信息工艺强过码[%s],当前没有可以跳过的加工单信息!", equipVariableCollectContextList.get(0).getEquipVariableValue())); + scanInfo(equipVariableCollectContextList.get(0).getEquipVariableValue()), stepResult, String.format("当前扫描信息工艺强过码[%s],当前不支持强过!", equipVariableCollectContextList.get(0).getEquipVariableValue())); - //允许跳过,先更新数据 + //允许强过,先更新数据 if (isCraftJumpCode && isAllowJump) { updateProductionPartContextList(reqBean, cachedProductionPartContextList, equipVariableCollectContextList.get(0).getEquipVariableValue()); return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.SCAN.getValue()). @@ -161,13 +161,22 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer } - //验证是否支持跳过 - private Boolean checkIsAllowJump(List productionPartContextList) { + //验证是否支持强过 + private Boolean checkIsAllowJump(StationRequestBean reqBean, List productionPartContextList) { Optional optional = CollectionUtils.isEmpty(productionPartContextList) ? null : productionPartContextList.stream().filter(o -> (null != o && o.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst(); - return (null != optional && optional.isPresent()) ? true : false; + if (null == optional || !optional.isPresent()) return false; + //非排序是否允许强过, 默认不支持 + String isAllowJump = getIsAllowJump(reqBean); + return StringUtils.isEmpty(isAllowJump) ? false : true; } - //验证扫描信息属于工艺强过码 并且支持跳过,进行数据变更 + //非排序是否允许强过[工位参数] + private String getIsAllowJump(StationRequestBean reqBean) { + String isAllowJump = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.IS_ALLOW_JUMP); + return (!StringUtils.isEmpty(isAllowJump) && isAllowJump.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? isAllowJump : null; + } + + //验证扫描信息属于工艺强过码 并且支持强过,进行数据变更 private void updateProductionPartContextList(StationRequestBean reqBean, List productionPartContextList, String craftJumpCode) { productionPartContextList.forEach(o -> { if (o.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) o.setCraftJumpCode(craftJumpCode); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index 8abcede..be64516 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -240,7 +240,8 @@ public class MesPcnExtConstWords { // 非排序需要验证主条码是否是自制件[工步参数] public static final String NEED_CHECK_IS_PS = "NEED_CHECK_IS_PS"; - + // 非排序是否支持顺序强过,前道强过[工位参数] + public static final String IS_ALLOW_JUMP = "IS_ALLOW_JUMP"; // 未知腔数[工位参数] public static final String CAVITY_UNKNOWN_CFG = "CAVITY_UNKNOWN_CFG"; // 支持混腔扫描[工位参数]