From 98311a5c2d2c0d25878c4a08b9a9a286f34830f5 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sat, 8 Mar 2025 22:00:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=8A=A0=E5=B7=A5=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E3=80=90=E6=8E=92=E5=BA=8F=E3=80=91=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesSendEquipParamsCmdStepService.java | 101 ++++++++++++--------- 1 file changed, 58 insertions(+), 43 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java index 29563e8..0d6e8d1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSendEquipParamsCmdStepService.java @@ -26,11 +26,9 @@ 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.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Description : 发送加工参数 @@ -78,8 +76,11 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { //获取生产线信息 MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + //搜集数据:根据数据关联键分组加工参数关联ID集合 + Map> sourceIdMap2ForeignKey = new HashMap<>(); + //搜集加工参数关联ID集合 根据生产线类型区分 - List sourceIdList = getEquipmentProdParamCfgSourceIdList(productionProcessContext, prodRuleContextList, workCenter); + List sourceIdList = getEquipmentProdParamCfgSourceIdList(productionProcessContext, prodRuleContextList, workCenter, sourceIdMap2ForeignKey); //根据来源ID查询设备加工参数信息 List equipmentProdParamCfgList = equipmentProdParamCfgService.getEquipmentProdParamCfgList(reqBean.getOrganizeCode(), sourceIdList); @@ -123,7 +124,7 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { productionPsOutContexts.stream().filter(i -> (null != i && !StringUtils.isEmpty(i.getForeignKey()) && i.getForeignKey().compareTo(o.getForeignKey()) == 0)).findFirst(); - doSendEquipParamsCmd(reqBean, resultBean, o, cellEquipContext, eppcMap2SourceId, evMap, productResult, productionPartContextOp, productionPsInContextOp, productionPsOutContextOp); + doSendEquipParamsCmd(reqBean, resultBean, o, sourceIdMap2ForeignKey.get(o.getForeignKey()), cellEquipContext, eppcMap2SourceId, evMap, productResult, productionPartContextOp, productionPsInContextOp, productionPsOutContextOp); }); @@ -131,18 +132,24 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { } //搜集加工参数关联ID集合 - private List getEquipmentProdParamCfgSourceIdList(MesProductionProcessContext productionProcessContext, List prodRuleContextList, MesWorkCenter workCenter) { + private List getEquipmentProdParamCfgSourceIdList(MesProductionProcessContext productionProcessContext, List prodRuleContextList, MesWorkCenter workCenter, Map> sourceIdMap2ForeignKey) { if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType()) { //非排序 - return prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPid()))).map(MesProdRuleContext::getPid).collect(Collectors.toList()); + List sourceIdList = new ArrayList<>(); + prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPid()))).forEach(o -> { + sourceIdMap2ForeignKey.put(o.getForeignKey(), Stream.of(o.getPid()).collect(Collectors.toList())); + sourceIdList.add(o.getPid()); + }); + return sourceIdList; } else { //排序 List sourceIdList = null; for (MesProdRuleContext prodRuleContext : prodRuleContextList) { if (StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; - List itemIdList = prodRuleContext.getSortAssemblyDataContext().stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getSourceId()))).map(MesProductionAssemblySortContext::getSourceId).collect(Collectors.toList()); + List itemIdList = prodRuleContext.getSortAssemblyDataContext().stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPid()))).map(MesProductionAssemblySortContext::getPid).collect(Collectors.toList()); if (CollectionUtils.isEmpty(itemIdList)) continue; if (CollectionUtils.isEmpty(sourceIdList)) sourceIdList = new ArrayList<>(); + sourceIdMap2ForeignKey.put(prodRuleContext.getForeignKey(), itemIdList); sourceIdList.addAll(itemIdList); } return sourceIdList; @@ -150,57 +157,65 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { } //发送设备加工参数 - private void doSendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, MesProdRuleContext prodRuleContext, MesCellEquipContext cellEquipContext, - Map> eppcMap2SourceId, Map evMap, String productResult, - Optional productionPartContextOp, Optional productionPsInContextOp, Optional productionPsOutContextOp) { + private void doSendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, MesProdRuleContext prodRuleContext, List sourceIdList, MesCellEquipContext cellEquipContext, + Map> eppcMap2SourceId, Map evMap, String productResult, + Optional productionPartContextOp, Optional productionPsInContextOp, Optional productionPsOutContextOp) { - //当前加工规则的PID对应的设备加工参数 - List equipmentProdParamCfgList = eppcMap2SourceId.get(prodRuleContext.getPid()); + if (CollectionUtils.isEmpty(sourceIdList)) return; - if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) return; + for (Long sourceId : sourceIdList) { - MesProductionPartContext productionPartContext = (null != productionPartContextOp && productionPartContextOp.isPresent()) ? productionPartContextOp.get() : null; + if (StringUtils.isEmpty(sourceId)) continue; - MesProductionPsInContext productionPsInContext = (null != productionPsInContextOp && productionPsInContextOp.isPresent()) ? productionPsInContextOp.get() : null; + //当前加工规则的PID对应的设备加工参数 + List equipmentProdParamCfgList = eppcMap2SourceId.get(sourceId); - MesProductionPsOutContext productionPsOutContext = (null != productionPsOutContextOp && productionPsOutContextOp.isPresent()) ? productionPsOutContextOp.get() : null; + if (CollectionUtils.isEmpty(equipmentProdParamCfgList)) continue; - //搜集发送规则并去重 - List matchRuleList = (equipmentProdParamCfgList.stream().filter(o -> null != o).map(o -> checkTransformUpperCase(o.getMatchRule())).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + MesProductionPartContext productionPartContext = (null != productionPartContextOp && productionPartContextOp.isPresent()) ? productionPartContextOp.get() : null; - for (String matchRule : matchRuleList) { + MesProductionPsInContext productionPsInContext = (null != productionPsInContextOp && productionPsInContextOp.isPresent()) ? productionPsInContextOp.get() : null; - if (StringUtils.isEmpty(matchRule)) continue; + MesProductionPsOutContext productionPsOutContext = (null != productionPsOutContextOp && productionPsOutContextOp.isPresent()) ? productionPsOutContextOp.get() : null; - Optional equipmentProdParamCfgOp = equipmentProdParamCfgList.stream().filter(o -> (null != o && checkTransformUpperCase(o.getMatchRule()).equals(matchRule) && evMap.containsKey(o.getEquipVariableId()))).findFirst(); + //搜集发送规则并去重 + List matchRuleList = (equipmentProdParamCfgList.stream().filter(o -> null != o).map(o -> checkTransformUpperCase(o.getMatchRule())).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); - if (null == equipmentProdParamCfgOp || !equipmentProdParamCfgOp.isPresent()) continue; + for (String matchRule : matchRuleList) { - evMap.remove(equipmentProdParamCfgOp.get().getId()); + if (StringUtils.isEmpty(matchRule)) continue; - //数据转换 - String matchValue = transferValue(matchRule, reqBean, prodRuleContext, productResult, productionPartContext, productionPsInContext, productionPsOutContext); + Optional equipmentProdParamCfgOp = equipmentProdParamCfgList.stream().filter(o -> (null != o && checkTransformUpperCase(o.getMatchRule()).equals(matchRule) && evMap.containsKey(o.getEquipVariableId()))).findFirst(); - if (StringUtils.isEmpty(matchValue)) { - this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("发送设备加工参数:[%s]未匹配到业务数据", matchRule), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); - continue; - } + if (null == equipmentProdParamCfgOp || !equipmentProdParamCfgOp.isPresent()) continue; - MesEquipmentVariable equipmentVariable = evMap.get(equipmentProdParamCfgOp.get().getEquipVariableId()); - if (null == equipmentVariable) { - this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("发送设备加工参数:设备加工参数信息ID[%s]关联的设备数据变量ID[%s]未维护有效的设备数据变量信息!", equipmentProdParamCfgOp.get().getId(), equipmentProdParamCfgOp.get().getEquipVariableId()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); - continue; - } + evMap.remove(equipmentProdParamCfgOp.get().getId()); - //写值 - MesEquipVariableRwResult equipVariableRwResult = equipVariableRwExtService.writeVariable(matchValue, equipmentVariable, cellEquipContext.getKepwareFlag(equipmentVariable.getChannel())); + //数据转换 + String matchValue = transferValue(matchRule, reqBean, prodRuleContext, productResult, productionPartContext, productionPsInContext, productionPsOutContext); - if (!equipVariableRwResult.getIsSuccessed()) { - this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), String.format("设备[%s]:发送设备加工参数失败!原因:%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); - continue; - } + if (StringUtils.isEmpty(matchValue)) { + this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("发送设备加工参数:[%s]未匹配到业务数据", matchRule), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + continue; + } - this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("设备[%s]:发送设备加工参数成功!%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + MesEquipmentVariable equipmentVariable = evMap.get(equipmentProdParamCfgOp.get().getEquipVariableId()); + if (null == equipmentVariable) { + this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("发送设备加工参数:设备加工参数信息ID[%s]关联的设备数据变量ID[%s]未维护有效的设备数据变量信息!", equipmentProdParamCfgOp.get().getId(), equipmentProdParamCfgOp.get().getEquipVariableId()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + continue; + } + + //写值 + MesEquipVariableRwResult equipVariableRwResult = equipVariableRwExtService.writeVariable(matchValue, equipmentVariable, cellEquipContext.getKepwareFlag(equipmentVariable.getChannel())); + + if (!equipVariableRwResult.getIsSuccessed()) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(), String.format("设备[%s]:发送设备加工参数失败!原因:%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + continue; + } + + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("设备[%s]:发送设备加工参数成功!%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + + } }