From f87e216c670af6d4341fa31e4929d5ec06431b4b Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 12 Jun 2024 13:15:38 +0800 Subject: [PATCH 1/3] pcn --- .../station/MesProductionNoSortModuleService.java | 16 +- .../function/MesFunctionProductionLockService.java | 2 +- .../MesFunctionProductionUnlockService.java | 14 +- .../step/MesCountDownShowStepService.java | 16 +- .../step/MesProductSnCheckStepService.java | 5 +- .../step/MesProductSnScanStepService.java | 2 +- .../step/MesWorkOrderCheckNosortStepService.java | 61 +++- .../step/MesWorkOrderCheckSortStepService.java | 311 ++++++++++++++------- .../step/MesWorkOrderScanStepService.java | 8 +- .../pcn/pojo/context/MesProductionPartContext.java | 8 +- .../pcn/pojo/context/MesProductionPsInContext.java | 12 +- 11 files changed, 316 insertions(+), 139 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index ea044cc..b6f6415 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -68,20 +68,20 @@ public class MesProductionNoSortModuleService extends BaseModuleService { List prodShiftDataContext = mesProductionDispatchContextStepService.getProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); MesProdShiftContext mesProdShiftKvBean = mesProductionDispatchContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); - if (CollectionUtils.isEmpty(prodShiftDataContext)) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); - throw ImppExceptionBuilder.newInstance().setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()).setErrorCode("NO_SHOW_MSG").build(); - } +// if (CollectionUtils.isEmpty(prodShiftDataContext)) { +// this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); +// throw ImppExceptionBuilder.newInstance().setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()).setErrorCode("NO_SHOW_MSG").build(); +// } // 发送班次班组和工单 StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); this.sendMessage(reqBean, resultBean); // 整合班次加工数量 List productionStatisticsContext = mesProductionDispatchContextStepService.getProductionStatisticsContext(reqBean); - if (CollectionUtils.isEmpty(productionStatisticsContext)) { - productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工次数", "0"), - new StationKvBean("color", "颜色", MesExtEnumUtil.COLOR.BLACK.getValue())); - } +// if (CollectionUtils.isEmpty(productionStatisticsContext)) { +// productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工次数", "0"), +// new StationKvBean("color", "颜色", MesExtEnumUtil.COLOR.BLACK.getValue())); +// } StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell); this.sendMessage(reqBean, shiftCountBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionLockService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionLockService.java index 9404af0..ba430ae 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionLockService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionLockService.java @@ -33,7 +33,7 @@ public class MesFunctionProductionLockService extends BaseSwsService implements if (StringUtils.isEmpty(buttonDynamicModel.getParamCode()) || !buttonDynamicModel.getParamCode().equals(MesPcnExtConstWords.ATUO_PRODUCTION_LOCK)) { - ((MesCountDownShowStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).checkCellProductionLockIsExist(reqBean, resultBean, false, true); + ((MesCountDownShowStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).checkCellProductionLockIsExist(reqBean, resultBean, false, false, true); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java index 8a0abf7..97562e6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionProductionUnlockService.java @@ -3,7 +3,9 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.MesCountDownShowStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; @@ -21,17 +23,27 @@ public class MesFunctionProductionUnlockService extends BaseSwsService implement @Autowired private IMesProductionDispatchContextStepService productionDispatchContextStepService; + @Autowired + private IShippingDispatchService shippingDispatchService; + @Override public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { //删除上下文加工锁 productionDispatchContextStepService.deleteProductionLockContext(reqBean); - ((MesCountDownShowStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).checkCellProductionLockIsExist(reqBean, resultBean, false, false); + ((MesCountDownShowStepService) SpringContextsUtil.getBean("mesCountDownShowStepService")).checkCellProductionLockIsExist(reqBean, resultBean, false, false, false); this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); + reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); + reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setTriggerAutoFsm(true); + + shippingDispatchService.doSendScanQueueIfNoQueue(reqBean, false); + return true; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java index f84114d..d49aae9 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java @@ -63,13 +63,15 @@ public class MesCountDownShowStepService extends BaseStepService { //不用显示倒计时, 客户端默认显示绿色无数字 if (StringUtils.isEmpty(workCell.getIsShowTime()) || CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == workCell.getIsShowTime()) return stepResult; + Boolean isInit = reqBean.getDataMap().containsKey(MesPcnConstWords.WS_CMD_INIT_MODULE) ? true : false; + reqBean.getDataMap().remove(MesPcnConstWords.WS_CMD_INIT_MODULE); + //工位开启时间锁, 验证当前是否存在加工锁定状态 Boolean isOpenTimeLock = (!StringUtils.isEmpty(workCell.getIsOpenTimeLock()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == workCell.getIsOpenTimeLock()) ? true : false; - if (isOpenTimeLock) checkCellProductionLockIsExist(reqBean, resultBean, true, true); + if (isOpenTimeLock && checkCellProductionLockIsExist(reqBean, resultBean, isInit, true, true)) + execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]已被锁定!请扫描解除锁定验证码!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); - String isInit = (String) reqBean.getDataMap().get(MesPcnConstWords.WS_CMD_INIT_MODULE); - reqBean.getDataMap().remove(MesPcnConstWords.WS_CMD_INIT_MODULE); -// if (!StringUtils.isEmpty(isInit)) return stepResult; + if (isInit) return stepResult; //解析工位参数 String countDownTime = doCalcCountDownCfg(reqBean, isOpenTimeLock); @@ -79,9 +81,9 @@ public class MesCountDownShowStepService extends BaseStepService { } //验证当前是否存在加工锁定状态 - public void checkCellProductionLockIsExist(StationRequestBean reqBean, StationResultBean resultBean, Boolean isNeedCheck, Boolean isLock) { + public Boolean checkCellProductionLockIsExist(StationRequestBean reqBean, StationResultBean resultBean, Boolean isInit, Boolean isNeedCheck, Boolean isLock) { - if (isNeedCheck && !productionDispatchContextStepService.checkProductionLockIsExistContext(reqBean)) return; + if (isNeedCheck && !productionDispatchContextStepService.checkProductionLockIsExistContext(reqBean)) return false; List resultList = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(MesExtEnumUtil.COLOR.RED.getValue(), "已经超时", MesPcnExtConstWords.ZERO_STR)); @@ -91,7 +93,7 @@ public class MesCountDownShowStepService extends BaseStepService { stationResultBean.setResultMap(functionPoductionUnlock()); this.sendMessage(reqBean, stationResultBean); - if (isNeedCheck) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]已被锁定!请扫描解除锁定验证码!")); + return true; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java index 3f3c66e..9b03b9a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java @@ -88,7 +88,7 @@ public class MesProductSnCheckStepService extends BaseStepService { //封装 读/扫主条件信息到进料主条码数据信息中 List productionPsInContextList = new ArrayList<>(); if (!CollectionUtils.isEmpty(productSnList)) productSnList.stream().filter(o -> null != o).forEach(o -> createProductionPsInContext(reqBean, resultBean, stepResult, workCell, produceSnMap, o, productionPsInContextList)); - if (!CollectionUtils.isEmpty(finishCodeList)) finishCodeList.stream().filter(o -> null != o).forEach(o -> createProductionPsInContext(reqBean, resultBean, stepResult, workCell, produceSnMap, o, productionPsInContextList)); + if (!CollectionUtils.isEmpty(finishCodeList)) finishCodeList.stream().filter(o -> null != o).forEach(o -> createProductionPsInContext(reqBean, resultBean, stepResult, workCell, produceSnMap, null, productionPsInContextList)); //获取进料主条码数据信息 List productionPsInContext = productionDispatchContextStepService.getProductionPsInContext(reqBean); @@ -142,7 +142,8 @@ public class MesProductSnCheckStepService extends BaseStepService { //封装 读/扫主条件信息到进料主条码数据信息中 private void createProductionPsInContext(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCell workCell, Map produceSnMap, String productSn, List productionPsInContextList) { - MesProductionPsInContext productionPsInContext = new MesProductionPsInContext(!CollectionUtils.isEmpty(produceSnMap) ? produceSnMap.get(productSn) : null, productSn); + MesProductionPsInContext productionPsInContext = new MesProductionPsInContext( + (!CollectionUtils.isEmpty(produceSnMap) && !StringUtils.isEmpty(productSn) && produceSnMap.containsKey(productSn)) ? produceSnMap.get(productSn) : null, productSn); if (!StringUtils.isEmpty(productionPsInContext.getId())) productionPsInContext.isCheckSeq(workCell.getIsCheckSeq()).isCheckCraft(workCell.getIsCheckCraft()); productionPsInContextList.add(productionPsInContext); } 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 20ce11b..f4a86a4 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 @@ -163,7 +163,7 @@ public class MesProductSnScanStepService extends BaseStepService { private Boolean checkScanInfoMatchCraftJumpCode(StationRequestBean reqBean, String scanInfo) { if (StringUtils.isEmpty(scanInfo)) return false; String craftJumpCode = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CRAFT_JUMP_CODE); - if (StringUtils.isEmpty(craftJumpCode)) return false; + if (StringUtils.isEmpty(craftJumpCode)) craftJumpCode = MesPcnExtConstWords.CRAFT_JUMP_CODE; return scanInfo.equals(craftJumpCode) ? true : false; } 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 7559221..b37c91a 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 @@ -10,6 +10,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; @@ -26,6 +27,7 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -64,7 +66,7 @@ public class MesWorkOrderCheckNosortStepService extends BaseStepService { //获取上下文生产扫/读信息:加工单 List equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean); - if (CollectionUtils.isEmpty(equipVariableCollectContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中缺失待验证的加工单信息!"); + if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "上下文中缺失待验证的加工单信息!"); //获取上下文产出零件信息 List cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); @@ -82,6 +84,10 @@ public class MesWorkOrderCheckNosortStepService extends BaseStepService { //扫描场景下合并历史产出零件信息 if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionPartContextList.addAll(cachedProductionPartContextList); + //非扫描场景 验证是否全部为空腔 + if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && checkIsAllFinishCode(productionPartContextList)) + return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前%s信息全部为空腔!", MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(equipVariableCollectContextList.get(0).getMessageSource()))); + //保存上下文产出零件信息 productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); @@ -98,8 +104,20 @@ public class MesWorkOrderCheckNosortStepService extends BaseStepService { MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前扫描信息加工单[%s]验证工单状态成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!", equipVariableCollectContextList.get(0).getEquipVariableValue(), cellEquipmentContext.getCavity(), cellEquipmentContext.getCavity() - productionPartContextList.size())); - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息加工单[%s]验证工单状态成功,上下文中的加工单个数[%s]已满足腔数!", equipVariableCollectContextList.get(0).getEquipVariableValue(), productionPartContextList.size())); + //扫描场景 验证是否全部为空腔 + if (!checkIsAllFinishCode(productionPartContextList)) + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息加工单[%s]验证工单状态成功,上下文中的加工单个数[%s]已满足腔数!", equipVariableCollectContextList.get(0).getEquipVariableValue(), productionPartContextList.size())); + + //删除上下文产出零件信息 + productionDispatchContextStepService.deleteProductionPartContext(reqBean); + + return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前扫描信息全部为空腔!"); + + } + private Boolean checkIsAllFinishCode(List productionPartContextList) { + Optional optional = productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst(); + return (null != optional && optional.isPresent()) ? false : true; } //验证工单的有效性 @@ -108,25 +126,33 @@ public class MesWorkOrderCheckNosortStepService extends BaseStepService { //搜集生产工单号 List filterList = equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()); - List workOrderNoList = filterList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + List workOrderNoList = filterList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList()); //获取生产工单信息 Map workOrderMap = workOrderExtService.getWorkOrderMap(reqBean.getOrganizeCode(), workOrderNoList); - for (String workOrderNo : workOrderNoList) { + if (!CollectionUtils.isEmpty(workOrderNoList)) { + + for (String workOrderNo : workOrderNoList) { - if (StringUtils.isEmpty(workOrderNo)) continue; + if (StringUtils.isEmpty(workOrderNo)) continue; - MesWorkOrder workOrderDb = (CollectionUtils.isEmpty(workOrderMap) || !workOrderMap.containsKey(workOrderNo)) ? null : workOrderMap.get(workOrderNo); - if (null == workOrderDb) return stepResult.isCompleted(false).msg(String.format("加工单号[%s]无效!", workOrderNo)); + MesWorkOrder workOrderDb = (CollectionUtils.isEmpty(workOrderMap) || !workOrderMap.containsKey(workOrderNo)) ? null : workOrderMap.get(workOrderNo); + if (null == workOrderDb) + return stepResult.isCompleted(false).msg(String.format("加工单号[%s]无效!", workOrderNo)); - if (!MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workOrderDb.getWorkOrderStatus())) return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrderDb.getWorkOrderStatus()))); + if (!MesExtEnumUtil.ORDER_STATUS.checkNosortAllowStatus(workOrderDb.getWorkOrderStatus())) + return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrderDb.getWorkOrderStatus()))); - if (!workOrderDb.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", workOrderNo, workOrderDb.getWorkCenterCode(), reqBean.getWorkCenterCode())); + if (!workOrderDb.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) + return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", workOrderNo, workOrderDb.getWorkCenterCode(), reqBean.getWorkCenterCode())); + } } - equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyPartNo(workOrderMap.get(o.getEquipVariableValue())))); + //封装产出零件信息 + equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add( + new MesProductionPartContext().copyPartNo((!CollectionUtils.isEmpty(workOrderMap) && workOrderMap.containsKey(o.getEquipVariableValue())) ? workOrderMap.get(o.getEquipVariableValue()) : null))); return stepResult.obj(filterList); @@ -140,9 +166,20 @@ public class MesWorkOrderCheckNosortStepService extends BaseStepService { //封装展示组件MODULE_CONTENT内容 private List> getModuleContextData(StationRequestBean reqBean, List productionPartContextList) { List> dataList = new ArrayList<>(); - productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), - new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "工单号", o.getWorkOrderNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.QTY, "工单数", String.valueOf(o.getQty().intValue())))); + List orderList = filterProductionPartContext(productionPartContextList, true); + List finishCodeList = filterProductionPartContext(productionPartContextList, false); + if (!CollectionUtils.isEmpty(orderList)) + orderList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), + new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "工单号", o.getWorkOrderNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.QTY, "工单数", String.valueOf(o.getQty().intValue())))); + if (!CollectionUtils.isEmpty(finishCodeList)) + StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY_FINISH_CODE, "空腔数", String.valueOf(finishCodeList.size()))); return dataList; } + //根据是否空腔搜集数据 + private List filterProductionPartContext(List productionPartContextList, Boolean flag) { + return flag ? productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) != 0)).collect(Collectors.toList()) : + productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList()); + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java index b249c49..35871d7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java @@ -1,100 +1,211 @@ -//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -// -//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; -//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; -//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; -//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; -//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; -//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; -//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; -//import cn.estsh.i3plus.pojo.mes.model.StationResultBean; -//import cn.estsh.i3plus.pojo.mes.model.StepResult; -//import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.stereotype.Service; -//import org.springframework.util.CollectionUtils; -// -//import java.util.ArrayList; -//import java.util.List; -// -///** -// * @Description : 加工单验证工步【排序】 -// * @Author : wangjie -// **/ -//@Slf4j -//@Service("mesWorkOrderCheckSortStepService") -//public class MesWorkOrderCheckSortStepService extends BaseStepService { -// -// @Autowired -// private IMesProductionProcessContextStepService productionProcessContextStepService; -// -// @Autowired -// private IMesProductionDispatchContextStepService productionDispatchContextStepService; -// -// @Autowired -// private IMesWorkOrderExtService workOrderExtService; -// -// @Override -// public StepResult execute(StationRequestBean reqBean) { -// -// StationResultBean resultBean = new StationResultBean(); -// -// StepResult stepResult = StepResult.getSuccessComplete(); -// -// //获取上下文信息 -// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); -// -// //配置错误 抛出异常 -// if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); -// -// //存储生产过程上下文对象 -// productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); -// -// //获取上下文生产扫/读信息:加工单 -// List equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean); -// -// if (CollectionUtils.isEmpty(equipVariableCollectContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中缺失待验证的加工单信息!"); -// -// //获取上下文产出零件信息 -// List cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); -// -// //清除本次已获取得到的加工单信息 -// productionDispatchContextStepService.deleteScanWorkOrderNoContext(reqBean); -// -// //非扫描场景 清除历史产出零件信息 -// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionDispatchContextStepService.deleteProductionPartContext(reqBean); -// -// //验证工单的有效性 -// List productionPartContextList = new ArrayList<>(); -// if (!checkWorkOrderValid(reqBean, resultBean, stepResult, productionProcessContext, equipVariableCollectContextList, productionPartContextList).isCompleted()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); -// -// //扫描场景下合并历史产出零件信息 -// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionPartContextList.addAll(cachedProductionPartContextList); -// -// //保存上下文产出零件信息 -// productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); -// -// //更新展示组件MODULE_CONTENT内容 -// doCacheMoudleContext(reqBean, productionPartContextList); -// -// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的加工单%s验证工单状态成功!", stepResult.getObj().toString())); -// -// -// -// -// -// -// -// -// -// -// return stepResult; -// -// } -// -// -// -// -//} +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +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.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * @Description : 加工单验证工步【排序】 + * @Author : wangjie + **/ +@Slf4j +@Service("mesWorkOrderCheckSortStepService") +public class MesWorkOrderCheckSortStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesWorkOrderExtService workOrderExtService; + + @Autowired + private IFsmCommonService fsmCommonService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文生产扫/读信息:加工单 + List equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean); + + if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "上下文中缺失待验证的加工单信息!"); + + //获取上下文产出零件信息 + List cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + + //清除本次已获取得到的加工单信息 + productionDispatchContextStepService.deleteScanWorkOrderNoContext(reqBean); + + //扫描场景下验证是否匹配工艺跳过码, 验证通过则 保存到上下文扫/读信息:主条码, 传送到下个工步 主条码验证工步, 避免后续排序工单的数量不是1的情况下, 扫描工艺跳过码只能在扫描主条码工步中使用 + if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && matchCraftJumpCode(reqBean, equipVariableCollectContextList)) + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息工艺跳过码[%s]!", equipVariableCollectContextList.get(0).getEquipVariableValue())); + + //非扫描场景 清除历史产出零件信息 + if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionDispatchContextStepService.deleteProductionPartContext(reqBean); + + //验证工单的有效性 + List productionPartContextList = new ArrayList<>(); + if (!checkWorkOrderValid(reqBean, resultBean, stepResult, productionProcessContext, equipVariableCollectContextList, productionPartContextList).isCompleted()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); + + //扫描场景下合并历史产出零件信息 + if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionPartContextList.addAll(cachedProductionPartContextList); + + //非扫描场景 验证是否全部为空腔 + if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && checkIsAllFinishCode(productionPartContextList)) + return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前%s信息全部为空腔!", MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(equipVariableCollectContextList.get(0).getMessageSource()))); + + //保存上下文产出零件信息 + productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); + + //更新展示组件MODULE_CONTENT内容 + doCacheMoudleContext(reqBean, productionPartContextList); + + if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的加工单%s验证工单状态成功!", stepResult.getObj().toString())); + + //当前工位使用的设备 + MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); + + if (cellEquipmentContext.getCavity().compareTo(productionPartContextList.size()) > 0) + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前扫描信息加工单[%s]验证工单状态成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!", + equipVariableCollectContextList.get(0).getEquipVariableValue(), cellEquipmentContext.getCavity(), cellEquipmentContext.getCavity() - productionPartContextList.size())); + + //扫描场景 验证是否全部为空腔 + if (!checkIsAllFinishCode(productionPartContextList)) + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息加工单[%s]验证工单状态成功,上下文中的加工单个数[%s]已满足腔数!", equipVariableCollectContextList.get(0).getEquipVariableValue(), productionPartContextList.size())); + + //删除上下文产出零件信息 + productionDispatchContextStepService.deleteProductionPartContext(reqBean); + + return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前扫描信息全部为空腔!"); + + } + + //验证是否匹配工艺跳过码 + private Boolean matchCraftJumpCode(StationRequestBean reqBean, List equipVariableCollectContextList) { + + if (!equipVariableCollectContextList.get(0).getEquipVariableValue().equals(getCraftJumpCode(reqBean))) return false; + + //保存上下文扫/读信息:主条码, 传送到下个工步 主条码验证工步, 避免后续排序工单的数量不是1的情况下, 扫描工艺跳过码只能在扫描主条码工步中使用 + productionDispatchContextStepService.saveScanProductSnContext(reqBean, equipVariableCollectContextList); + + return true; + + } + + private Boolean checkIsAllFinishCode(List productionPartContextList) { + Optional optional = productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst(); + return (null != optional && optional.isPresent()) ? false : true; + } + + //验证工单的有效性 + private StepResult checkWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + MesProductionProcessContext productionProcessContext, List equipVariableCollectContextList, List productionPartContextList) { + + //搜集生产工单号 + List filterList = equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()); + List workOrderNoList = filterList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList()); + + //获取生产工单信息 + Map workOrderMap = workOrderExtService.getWorkOrderMap(reqBean.getOrganizeCode(), workOrderNoList); + + if (!CollectionUtils.isEmpty(workOrderNoList)) { + + for (String workOrderNo : workOrderNoList) { + + if (StringUtils.isEmpty(workOrderNo)) continue; + + MesWorkOrder workOrderDb = (CollectionUtils.isEmpty(workOrderMap) || !workOrderMap.containsKey(workOrderNo)) ? null : workOrderMap.get(workOrderNo); + if (null == workOrderDb) + return stepResult.isCompleted(false).msg(String.format("加工单号[%s]无效!", workOrderNo)); + + if (!MesExtEnumUtil.ORDER_STATUS.checkSortAllowStatus(workOrderDb.getWorkOrderStatus())) + return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrderDb.getWorkOrderStatus()))); + + if (!workOrderDb.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) + return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", workOrderNo, workOrderDb.getWorkCenterCode(), reqBean.getWorkCenterCode())); + + } + } + + //封装产出零件信息 + equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add( + new MesProductionPartContext().copyPartNo((!CollectionUtils.isEmpty(workOrderMap) && workOrderMap.containsKey(o.getEquipVariableValue())) ? workOrderMap.get(o.getEquipVariableValue()) : null))); + + return stepResult.obj(filterList); + + } + + //工艺跳过码 + private String getCraftJumpCode(StationRequestBean reqBean) { + Map wcpcMap = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean); + return wcpcMap.containsKey(MesPcnExtConstWords.CRAFT_JUMP_CODE) ? wcpcMap.get(MesPcnExtConstWords.CRAFT_JUMP_CODE) : MesPcnExtConstWords.CRAFT_JUMP_CODE; + } + + private void doCacheMoudleContext(StationRequestBean reqBean, List productionPartContextList) { + //存储展示组件MODULE_CONTENT内容 + productionDispatchContextStepService.saveModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList)); + } + + //封装展示组件MODULE_CONTENT内容 + private List> getModuleContextData(StationRequestBean reqBean, List productionPartContextList) { + List> dataList = new ArrayList<>(); + List orderList = filterProductionPartContext(productionPartContextList, true); + List finishCodeList = filterProductionPartContext(productionPartContextList, false); + if (!CollectionUtils.isEmpty(orderList)) + orderList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), + new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "工单号", o.getWorkOrderNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.QTY, "工单数", String.valueOf(o.getQty().intValue())))); + if (!CollectionUtils.isEmpty(finishCodeList)) + StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY_FINISH_CODE, "空腔数", String.valueOf(finishCodeList.size()))); + return dataList; + } + + //根据是否空腔搜集数据 + private List filterProductionPartContext(List productionPartContextList, Boolean flag) { + return flag ? productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) != 0)).collect(Collectors.toList()) : + productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList()); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java index 5be74f7..c793a2b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java @@ -71,8 +71,8 @@ public class MesWorkOrderScanStepService extends BaseStepService { //如果没有扫描信息, 取手选工单信息, 封装扫/读信息:加工单信息 List equipVariableCollectContextList; - if (!StringUtils.isEmpty(scanInfo)) equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, stepResult, scanInfo); - else equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, stepResult); + if (!StringUtils.isEmpty(scanInfo)) equipVariableCollectContextList = doHandleScanWorkOrderNoContext(reqBean, stepResult, scanInfo); + else equipVariableCollectContextList = doHandleScanWorkOrderNoContext(reqBean, stepResult); //扫描信息为空 if (CollectionUtils.isEmpty(equipVariableCollectContextList)) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), "请扫描加工单!"); @@ -86,7 +86,7 @@ public class MesWorkOrderScanStepService extends BaseStepService { //封装扫/读信息:加工单信息 (扫描) - private List doHandleScanProductSnContext(StationRequestBean reqBean, StepResult stepResult, String scanInfo) { + private List doHandleScanWorkOrderNoContext(StationRequestBean reqBean, StepResult stepResult, String scanInfo) { List equipVariableCollectContextList = new ArrayList<>(); @@ -102,7 +102,7 @@ public class MesWorkOrderScanStepService extends BaseStepService { } //封装扫/读信息:加工单信息 (选择) - private List doHandleScanProductSnContext(StationRequestBean reqBean, StepResult stepResult) { + private List doHandleScanWorkOrderNoContext(StationRequestBean reqBean, StepResult stepResult) { List chooseCavityOrder = productionDispatchContextStepService.getFunctionChooseCavityOrderContext(reqBean); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java index 2788384..456f92c 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import io.swagger.annotations.ApiParam; @@ -47,6 +48,10 @@ public class MesProductionPartContext implements Serializable { @ApiParam("模具代码") private String mouldNo; + //默认否 + @ApiParam("是否空腔") + private Integer isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + //根据一模多腔赋值 public MesProductionPartContext copyMouldMultiCavity(MesMouldMultiCavity mouldMultiCavity) { BeanUtils.copyProperties(mouldMultiCavity, this, MesPcnExtConstWords.ID); @@ -63,7 +68,8 @@ public class MesProductionPartContext implements Serializable { //根据工单信息赋值 public MesProductionPartContext copyPartNo(MesWorkOrder workOrder) { - BeanUtils.copyProperties(workOrder, this); + if (null != workOrder) BeanUtils.copyProperties(workOrder, this); + else this.isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); return this; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java index e81208d..2e0d54a 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsInContext.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import io.swagger.annotations.ApiParam; import lombok.Data; import org.springframework.beans.BeanUtils; +import org.springframework.util.StringUtils; import java.io.Serializable; @@ -45,6 +46,10 @@ public class MesProductionPsInContext implements Serializable { private String craftJumpCode; //默认否 + @ApiParam("是否空腔") + private Integer isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + + //默认否 @ApiParam("是否顺序防错") private Integer isCheckSeq = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); @@ -86,7 +91,10 @@ public class MesProductionPsInContext implements Serializable { } public MesProductionPsInContext(MesProduceSn produceSn, String productSn) { - if (null == produceSn) this.productSn = productSn; - else BeanUtils.copyProperties(produceSn, this); + if (null != produceSn) BeanUtils.copyProperties(produceSn, this); + else { + if (!StringUtils.isEmpty(productSn)) this.productSn = productSn; + else this.isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); + } } } From 27335597adb64ed122d4ad55a662d2321bc2ee3a Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 12 Jun 2024 13:21:14 +0800 Subject: [PATCH 2/3] step --- .../station/MesProductionNoSortModuleService.java | 16 ++++++++-------- .../serviceimpl/step/MesCountDownShowStepService.java | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index b6f6415..ea044cc 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -68,20 +68,20 @@ public class MesProductionNoSortModuleService extends BaseModuleService { List prodShiftDataContext = mesProductionDispatchContextStepService.getProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); MesProdShiftContext mesProdShiftKvBean = mesProductionDispatchContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); -// if (CollectionUtils.isEmpty(prodShiftDataContext)) { -// this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); -// throw ImppExceptionBuilder.newInstance().setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()).setErrorCode("NO_SHOW_MSG").build(); -// } + if (CollectionUtils.isEmpty(prodShiftDataContext)) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + throw ImppExceptionBuilder.newInstance().setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()).setErrorCode("NO_SHOW_MSG").build(); + } // 发送班次班组和工单 StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); this.sendMessage(reqBean, resultBean); // 整合班次加工数量 List productionStatisticsContext = mesProductionDispatchContextStepService.getProductionStatisticsContext(reqBean); -// if (CollectionUtils.isEmpty(productionStatisticsContext)) { -// productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工次数", "0"), -// new StationKvBean("color", "颜色", MesExtEnumUtil.COLOR.BLACK.getValue())); -// } + if (CollectionUtils.isEmpty(productionStatisticsContext)) { + productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工次数", "0"), + new StationKvBean("color", "颜色", MesExtEnumUtil.COLOR.BLACK.getValue())); + } StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell); this.sendMessage(reqBean, shiftCountBean); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java index d49aae9..388658e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java @@ -52,7 +52,7 @@ public class MesCountDownShowStepService extends BaseStepService { MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean); //获取生产过程上下文对象有异常信息 抛出异常 - if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + if (!productionProcessContext.getSuccess()) return stepResult.msg(productionProcessContext.getMessage()); //存储生产过程上下文对象 productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); From 06557113e6977a2b9d7c5a27ba835bca603e48a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Wed, 12 Jun 2024 16:10:40 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesAssemblyShowNosortStepService.java | 21 ++++++++++++++------- .../pcn/pojo/context/MesAssemblyShowContext.java | 9 +++++++++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java index d22bcf1..0f884fe 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java @@ -85,7 +85,16 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); //保存上下文产品加工规则信息集合 - if (prodRuleContextList.size() != initSize) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); + if (prodRuleContextList.size() != initSize) { + productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); + if (!CollectionUtils.isEmpty(productionPartContextList)) { + productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); + } + + if (!CollectionUtils.isEmpty(productionPsInContextList)) { + productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList); + } + } //显示装配件信息 showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList); @@ -213,9 +222,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { //获取匹配产出零件的所有加工规则 List outPartNoProdRuleList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null; - MesProdRuleNosortCfg filter = null; - Optional optional = productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()))).findFirst(); if (null == optional || !optional.isPresent()) break; @@ -267,9 +274,8 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { //显示装配件信息 private Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List prodRuleContextList, List productionPartContextList) { - Map productionPartMap = productionPartContextList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProductionPartContext::getForeignKey, o -> o)); + Map productionPartMap = productionPartContextList.stream().filter(o -> null != o && o.getForeignKey() != null).collect(Collectors.toMap(MesProductionPartContext::getForeignKey, o -> o)); - List attrBeanList = null; for (MesProdRuleContext prodRuleContext : prodRuleContextList) { @@ -282,7 +288,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { if (CollectionUtils.isEmpty(assemblyShowContextList)) continue; //装配件清单列表标题 - if (CollectionUtils.isEmpty(attrBeanList)) attrBeanList = dataAttrList(workOrderNo); + List attrBeanList = dataAttrList(workOrderNo); //封装多表格 resultBean.addStationResultBeans(new StationResultBean().dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue()).dataAttrList(attrBeanList).resultList(assemblyShowContextList)); @@ -321,9 +327,10 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { if (!StringUtils.isEmpty(workOrderNo)) assemblyShowContext.setWorkOrderNo(workOrderNo); assemblyShowContext.setPartNo(prodRuleContext.getOutPartNo()); if (StringUtils.isEmpty(assemblyShowContext.getRouteSeq())) assemblyShowContext.setRouteSeq(MesPcnExtConstWords.ZERO); + if (StringUtils.isEmpty(assemblyShowContext.getAssemblyStatus())) assemblyShowContext.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()); if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() == assemblyShowContext.getAssemblyStatus() && (MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_50.getValue() == assemblyShowContext.getMatchType() || MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_60.getValue() == assemblyShowContext.getMatchType())) assemblyShowContext.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()); - assemblyShowContext.setAssemblyStatusName(MesExtEnumUtil.ASSEMBLY_STATUS.valueOfDescription(o.getAssemblyStatus())); + assemblyShowContext.setAssemblyStatusName(MesExtEnumUtil.ASSEMBLY_STATUS.valueOfDescription(assemblyShowContext.getAssemblyStatus())); if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() != assemblyShowContext.getAssemblyStatus()) assemblyShowContext.setColor(StringUtils.isEmpty(assemblyShowContext.getShowColor()) ? MesExtEnumUtil.COLOR.GREEN.getValue() : assemblyShowContext.getShowColor()); return assemblyShowContext; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java index 784417e..b2380d7 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesAssemblyShowContext.java @@ -46,4 +46,13 @@ public class MesAssemblyShowContext implements Serializable { @ApiParam("装配零件状态") private String assemblyStatusName; + @ApiParam("序号") + private Integer index; + + + public MesAssemblyShowContext index(Integer index){ + this.index = index; + return this; + } + }