diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java index 5b3bdb6..7da2983 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java @@ -5,15 +5,12 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesPartDat import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; 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.api.iservice.base.IPartService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; -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; @@ -29,7 +26,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** @@ -61,9 +57,6 @@ public class MesProductionPartNoReadStepService extends BaseStepService { @Autowired private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService; - @Autowired - private IPartService partService; - @Override public void title(StationRequestBean reqBean) { this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("工步: %s", reqBean.getStepName()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE); @@ -177,7 +170,8 @@ public class MesProductionPartNoReadStepService extends BaseStepService { productionCustomContextStepService.sendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); //从读取信息中搜集零件编码并去重 - List partNoList = (equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + List readList = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()); + List partNoList = readList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList()); if (!partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, false).isCompleted()) { this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).checkRepeat(), @@ -196,42 +190,16 @@ public class MesProductionPartNoReadStepService extends BaseStepService { String.format("读取到设备[%s]产出零件号的详细JSON内容: %s", cellEquipContext.getEquipmentName(), JSONObject.toJSONString(equipLogDispatchContext)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); //获取产出零件信息信息 - List productionPartContextList = getProductionPartContext(reqBean, resultBean, partDataMap, equipVariableCollectContextList); - - //更新展示组件MODULE_CONTENT内容 - doCacheMoudleContext(reqBean, productionPartContextList); - - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).scanInfo(scanInfo), stepResult, String.format("当前已读取到设备[%s]产出零件号[%s]!", cellEquipContext.getEquipmentName(), scanInfo)); - - } - - //获取产出零件信息信息 - private List getProductionPartContext(StationRequestBean reqBean, StationResultBean resultBean, Map partDataMap, List equipVariableCollectContextList) { + List productionPartContextList = partDataMapSaveStepService.getProductionPartContext(reqBean, productionProcessContext, new ArrayList<>(), partDataMap, readList); - List productionPartContextList = new ArrayList<>(); - equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyPartNo(reqBean.getOrganizeCode(), o.getEquipVariableValue(), partDataMap.get(o.getEquipVariableValue()).getPartName()))); - - //保存设备当前一轮工序的产出零件号,产出零件信息,零件信息 + //保存设备当前一轮工序的产出零件信息 productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList); - return productionPartContextList; - - } - - //更新展示组件MODULE_CONTENT内容 - private void doCacheMoudleContext(StationRequestBean reqBean, List productionPartContextList) { //存储展示组件MODULE_CONTENT内容 - productionDispatchContextStepService.dispatchModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList)); - } + productionDispatchContextStepService.dispatchModuleContentContext(reqBean, partDataMapSaveStepService.getModuleContextData2PartNo(reqBean, productionPartContextList)); + + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()).scanInfo(scanInfo), stepResult, String.format("当前已读取到设备[%s]产出零件号[%s]!", cellEquipContext.getEquipmentName(), scanInfo)); - //封装展示组件MODULE_CONTENT内容 - private List> getModuleContextData(StationRequestBean reqBean, List productionPartContextList) { - List> dataList = new ArrayList<>(); - AtomicReference index = new AtomicReference<>(0); - productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), - new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName()), - new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", index.updateAndGet(v -> v + 1) + "/" + productionPartContextList.size()))); - return dataList; } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoScanStepService.java index 3c7344c..bd4f58e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoScanStepService.java @@ -3,10 +3,11 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; 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.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; 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.api.iservice.base.IPartService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPart; @@ -45,7 +46,7 @@ public class MesProductionPartNoScanStepService extends BaseStepService { private IMesProductionCustomContextStepService productionCustomContextStepService; @Autowired - private IPartService partService; + private MesPartDataMapSaveStepService partDataMapSaveStepService; @Override public StepResult guide(StationRequestBean reqBean) { @@ -78,61 +79,80 @@ public class MesProductionPartNoScanStepService extends BaseStepService { //获取手动选择的腔数及零件信息上下文 List chooseCavityPart = productionProcessContextStepService.getFunctionChooseCavityPartContext(reqBean); - List productionPartContextList = null; - if (CollectionUtils.isEmpty(chooseCavityPart) && StringUtils.isEmpty(scanInfo)) stepSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描产成零件!"); - //从上下文中取出零件信息集合 - Map partDataMap = productionProcessContextStepService.getPartDataContext(reqBean); + List productionPartContextList = null; + List readList; + List partNoList; + String suffix = null; if (!CollectionUtils.isEmpty(chooseCavityPart)) { String cellMessageSorce = chooseCavityPart.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.CELL_MESSAGE_SOURCE))).findFirst().get().getValue(); - List chooseList = new ArrayList<>(Arrays.asList(chooseCavityPart.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.PART_NO))).findFirst().get().getValue().split(MesPcnExtConstWords.SEMICOLON))); + readList = new ArrayList<>(Arrays.asList(chooseCavityPart.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.PART_NO))).findFirst().get().getValue().split(MesPcnExtConstWords.SEMICOLON))); //发送工步内容 scanInfo = chooseCavityPart.stream().filter(o -> (null != o && !o.getKey().equals(MesPcnExtConstWords.CELL_MESSAGE_SOURCE))).map(o -> o.getName() + MesPcnExtConstWords.SQUARE_BRACKETS_L + o.getValue() + MesPcnExtConstWords.SQUARE_BRACKETS_R).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); productionCustomContextStepService.sendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.getByValue(Integer.valueOf(cellMessageSorce))); //零件编码去重 - List partNoList = chooseList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + partNoList = readList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList()); - //验证上下文中取出零件信息集合是否读取信息中搜集零件编码 - if (CollectionUtils.isEmpty(partDataMap) || !partDataMap.keySet().containsAll(partNoList)) partDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList); + //验证零件编码有效性 + if (!CollectionUtils.isEmpty(partNoList)) partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, false); - //零件信息缺失 抛出异常 - productionPartContextList = getProductionPartContext(reqBean, resultBean, partNoList, partDataMap, chooseList); + //验证失败,删除手动选择的腔数及零件信息上下文 + if (CollectionUtils.isEmpty(partNoList) || !stepResult.isCompleted()) productionProcessContextStepService.removeFunctionChooseCavityPartContext(reqBean); + else suffix = String.format("%s:%s", MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(Integer.valueOf(cellMessageSorce)), scanInfo); } else { + //获取上下文产出零件信息 productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + //搜集上下文产出零件编码 + readList = CollectionUtils.isEmpty(productionPartContextList) ? new ArrayList<>() : productionPartContextList.stream().filter(o -> !StringUtils.isEmpty(o)).map(MesProductionPartContext::getPartNo).collect(Collectors.toList()); + //合并当前扫描的零件编码 + readList.add(scanInfo); + //零件编码去重 + partNoList = readList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList()); + //验证零件编码有效性 + if (!CollectionUtils.isEmpty(partNoList)) partDataMapSaveStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, true, true); - - - + if (stepResult.isCompleted()) suffix = String.format("%s:%s[%s]", MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getDescription(), !scanInfo.equals(productionProcessContext.getFinishCode()) ? "零件编码" : "空腔嘛", scanInfo); } + //验证失败 + if (!stepResult.isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); -// stepResult.msg(String.format("当前%s%s!", MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(Integer.valueOf(cellMessageSorce)), scanInfo)); - return null; + //封装产出零件信息信息 + if (CollectionUtils.isEmpty(productionPartContextList)) productionPartContextList = new ArrayList<>(); + productionPartContextList = partDataMapSaveStepService.getProductionPartContext(reqBean, productionProcessContext, productionPartContextList, (Map) stepResult.getObj(), readList); - } + //验证是否全部为空腔 + if (partDataMapSaveStepService.checkIsAllFinishCode(productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前产成零件信息全部为空腔,已清除当前的空腔数据!"); - private List getProductionPartContext(StationRequestBean reqBean, StationResultBean resultBean, List partNoList, Map partDataMap, List chooseList) { - List filterList = CollectionUtils.isEmpty(partDataMap) ? null : partNoList.stream().filter(o -> (!StringUtils.isEmpty(o) && !partDataMap.containsKey(o))).collect(Collectors.toList()); + //保存设备当前一轮工序的产出零件信息 + productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList); + + //扫描模式下判断当前是否满足设备腔数 + if (CollectionUtils.isEmpty(chooseCavityPart)) { + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + if (cellEquipContext.getCavity().compareTo(productionPartContextList.size()) > 0) return stepDynamicsCompleteAndSendMsgReturn( + reqBean, resultBean.writeDbLog().scanInfo(scanInfo), + stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, + String.format("当前%s验证成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!", suffix, cellEquipContext.getCavity(), cellEquipContext.getCavity() - productionPartContextList.size())); + } - //验证错误 抛出异常 - if (CollectionUtils.isEmpty(partDataMap) || !CollectionUtils.isEmpty(filterList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(partDataMap) ? partNoList.toString() : filterList.toString())); + //存储展示组件MODULE_CONTENT内容 + productionDispatchContextStepService.dispatchModuleContentContext(reqBean, partDataMapSaveStepService.getModuleContextData2PartNo(reqBean, productionPartContextList)); - List productionPartContextList = new ArrayList<>(); - chooseList.stream().filter(o -> !StringUtils.isEmpty(o)).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyPartNo(reqBean.getOrganizeCode(), o, partDataMap.get(o).getPartName()))); + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(scanInfo), stepResult, String.format("当前%s验证成功!", suffix)); - return productionPartContextList; } } 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 6e6ff6f..8e4d1d0 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 @@ -105,7 +105,7 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionPartContextList.addAll(cachedProductionPartContextList); //验证是否全部为空腔 - if (checkIsAllFinishCode(reqBean, productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工单信息全部为空腔,已清除当前的空腔数据!"); + if (partDataMapSaveStepService.checkIsAllFinishCode(productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工单信息全部为空腔,已清除当前的空腔数据!"); //保存零件数据信息 if (!partDataMapSaveStepService.savePartDataMap2PPC(reqBean, resultBean, stepResult, productionPartContextList, true, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); @@ -222,8 +222,8 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer List> dataList = new ArrayList<>(); - List orderList = filterProductionPartContext(productionPartContextList, true); - List finishCodeList = filterProductionPartContext(productionPartContextList, false); + List orderList = partDataMapSaveStepService.filterProductionPartContext(productionPartContextList, true); + List finishCodeList = partDataMapSaveStepService.filterProductionPartContext(productionPartContextList, false); AtomicReference index = new AtomicReference<>(0); 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 5133f73..4a25b15 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 @@ -113,7 +113,7 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi } //验证是否全部为空腔 - if (checkIsAllFinishCode(reqBean, productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工单信息全部为空腔,已清除当前的空腔数据!"); + if (partDataMapSaveStepService.checkIsAllFinishCode(productionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工单信息全部为空腔,已清除当前的空腔数据!"); //验证是否存在相同的零件生产组的加工单, 存在则清除已缓存的数据 if (checkPartProdGroupCodeIsExistRepeat(reqBean, productionPartContextList, cachedProductionPartContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "不支持生产相同的零件生产组的加工单,已清除当前的加工单数据!"); @@ -233,8 +233,8 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi List> dataList = new ArrayList<>(); - List orderList = filterProductionPartContext(productionPartContextList, true); - List finishCodeList = filterProductionPartContext(productionPartContextList, false); + List orderList = partDataMapSaveStepService.filterProductionPartContext(productionPartContextList, true); + List finishCodeList = partDataMapSaveStepService.filterProductionPartContext(productionPartContextList, false); AtomicReference index = new AtomicReference<>(0); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java index 7c3b1f3..f4d9327 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java @@ -9,7 +9,6 @@ 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.mes.pcn.serviceimpl.fsm.IStepService; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -19,8 +18,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; /** * @Description : 加工单验证工步 @@ -68,17 +65,4 @@ public class MesWorkOrderCheckStepService extends BaseStepService { return true; } - //根据是否空腔搜集数据 - public 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.TRUE.getValue()) == 0)).collect(Collectors.toList()); - } - - //验证是否全部为空腔 - public Boolean checkIsAllFinishCode(StationRequestBean reqBean, List productionPartContextList) { - Optional optional = productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst(); - if (null != optional && optional.isPresent()) return false; - return true; - } - } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesPartDataMapSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesPartDataMapSaveStepService.java index ee61db8..34b221a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesPartDataMapSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesPartDataMapSaveStepService.java @@ -2,9 +2,14 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; 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.api.iservice.base.IPartService; 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.mes.bean.MesPart; +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; @@ -14,8 +19,8 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** @@ -62,7 +67,10 @@ public class MesPartDataMapSaveStepService extends BaseStepService { //保存零件数据信息 【isBackError=false: 抛出异常】【isFilter=false: 重新查询所有零件;true: 过滤之后查询未缓存的零件之后再进行合并前面已缓存过的零件】 public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List partNoList, Boolean isBackError, Boolean isFilter, Boolean isSave) { - if (CollectionUtils.isEmpty(partNoList)) return stepResult; + if (CollectionUtils.isEmpty(partNoList)) { + stepResult.isCompleted(false).msg("获取零件信息失败,零件编码不存在!"); + if (!isBackError) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.getMsg()); + } //从上下文中取出零件信息集合 Map partDataMap = productionProcessContextStepService.getPartDataContext(reqBean); @@ -104,4 +112,52 @@ public class MesPartDataMapSaveStepService extends BaseStepService { } + //验证是否全部为空腔 + public Boolean checkIsAllFinishCode(List productionPartContextList) { + Optional optional = productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst(); + if (null != optional && optional.isPresent()) return false; + return true; + } + + //根据是否空腔搜集数据 + public 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.TRUE.getValue()) == 0)).collect(Collectors.toList()); + } + + //获取产出零件信息信息 + public List getProductionPartContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, + List productionPartContextList, Map partDataMap, List partNoList) { + partNoList.stream().filter(o -> !StringUtils.isEmpty(o)).forEach(o -> productionPartContextList.add(getProductionPartContextByPartNo(reqBean, o, productionProcessContext, partDataMap))); + return productionPartContextList; + } + + private MesProductionPartContext getProductionPartContextByPartNo(StationRequestBean reqBean, String partNo, MesProductionProcessContext productionProcessContext, Map partDataMap) { + if (!partNo.equals(productionProcessContext.getFinishCode())) return new MesProductionPartContext().copyPartNo(reqBean.getOrganizeCode(), partNo, partDataMap.get(partNo).getPartName()); + return new MesProductionPartContext().isFinishCode(); + } + + //封装展示组件MODULE_CONTENT内容 + public List> getModuleContextData2PartNo(StationRequestBean reqBean, List productionPartContextList) { + + List> dataList = new ArrayList<>(); + + List orderList = filterProductionPartContext(productionPartContextList, true); + List finishCodeList = filterProductionPartContext(productionPartContextList, false); + + AtomicReference index = new AtomicReference<>(0); + + if (!CollectionUtils.isEmpty(orderList)) { + orderList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), + new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName()), + new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(String.valueOf(index.updateAndGet(v -> v + 1))).add(String.valueOf(productionPartContextList.size())).toString()))); + } + + if (!CollectionUtils.isEmpty(finishCodeList)) { + StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY_FINISH_CODE, "空腔数", String.valueOf(finishCodeList.size()))); + } + + return dataList; + } + }