From 02d5c0ed65752f540b75e82131eeb9c6b08f70ba 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, 19 Jun 2024 17:52:27 +0800 Subject: [PATCH] =?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 --- .../mes/pcn/api/busi/IWriteVariableService.java | 33 ++++++++ .../equiplog/MesEquipmentRwExtService.java | 9 +- .../rulematch/WriteVariableService.java | 98 ++++++++++++++++++++++ .../station/MesProductionNoSortModuleService.java | 4 +- .../step/MesSendEquipParamsCmdStepService.java | 95 +++++++-------------- 5 files changed, 170 insertions(+), 69 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteVariableService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/WriteVariableService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteVariableService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteVariableService.java new file mode 100644 index 0000000..6be41a8 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IWriteVariableService.java @@ -0,0 +1,33 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + + +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description : 发送加工参数的抽象类 + * @Author : zxw + **/ +public interface IWriteVariableService { + + /** + * 写值 + * @param value + * @param equipmentVariable + * @param kepwareFlag + */ + MesEquipVariableRwResult writeVariable(StationRequestBean reqBean, String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Integer index,Integer maxRetryTimes); + + /** + * 转成需要的值 + * @param reqBean + * @param value + * @param foreignKey + * @param index + * @return + */ + String transferValue(StationRequestBean reqBean, String value, Integer foreignKey, Integer index); + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java index 037b4a2..45af151 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.WriteVariableService; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; import cn.estsh.i3plus.platform.common.tool.HttpClientTool; @@ -14,6 +15,8 @@ import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -29,6 +32,8 @@ import java.util.stream.Collectors; @Service public class MesEquipmentRwExtService implements IMesEquipVariableRwExtService { + public static final Logger LOGGER = LoggerFactory.getLogger(WriteVariableService.class); + @Autowired private IConfigService configService; @@ -77,8 +82,10 @@ public class MesEquipmentRwExtService implements IMesEquipVariableRwExtService { params.put(MesPcnExtConstWords.CLIENT_HANDLE, equipVariableRwModel.getClientHandle().toString()); params.put(MesPcnExtConstWords.CHANNEL, equipVariableRwModel.getChannel()); params.put(MesPcnExtConstWords.EQUIPMENT_ID, equipVariableRwModel.getEquipId().toString()); - + LOGGER.info("设备数据变量写值开始-> 地址:{}, params={}", equipVariableRwModel.getWriteRequestUrl(), params); String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, equipVariableRwModel.getWriteRequestUrl(), params, null, null); + LOGGER.info("设备数据变量写值返回-> data:{} ", data); + if (!StringUtils.isEmpty(data)) return JsonUtilTool.decode(data, MesEquipVariableRwResult.class); else return result.noSuccessed().message(String.format("设备数据变量写值失败! 数据信息:[%s]!", JSONObject.toJSONString(equipVariableRwModel))); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/WriteVariableService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/WriteVariableService.java new file mode 100644 index 0000000..fd14946 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/WriteVariableService.java @@ -0,0 +1,98 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch; + + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IWriteVariableService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; + +/** + * @Description : 发送加工参数的抽象类 + * @Author : zxw + **/ +@Service +public class WriteVariableService implements IWriteVariableService { + + public static final Logger LOGGER = LoggerFactory.getLogger(WriteVariableService.class); + + + @Autowired + private IMesEquipVariableRwExtService equipVariableRwExtService; + + @Autowired + private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + + /** + * 写值 + * @param value + * @param equipmentVariable + * @param kepwareFlag + */ + public MesEquipVariableRwResult writeVariable(StationRequestBean reqBean, String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Integer index, Integer maxTimes) { + // 需要不同的策略不同的转换方式 + String newValue = transferValue(reqBean, value, foreignKey, index); + MesEquipVariableRwResult mesEquipVariableRwResult = equipVariableRwExtService.writeVariable(newValue, equipmentVariable, kepwareFlag); + if (!mesEquipVariableRwResult.getIsSuccessed() && mesEquipVariableRwResult.getIsNoCfg()) { + for (int i = 0;i < maxTimes; i++) { + + mesEquipVariableRwResult = equipVariableRwExtService.writeVariable(newValue, equipmentVariable, kepwareFlag); + if (mesEquipVariableRwResult.getIsSuccessed()){ + break; + } + } + } + return mesEquipVariableRwResult; + } + + + @Override + public String transferValue(StationRequestBean reqBean, String value, Integer foreignKey, Integer index) { + List productionPartContextList = mesProductionDispatchContextStepService.getProductionPartContext(reqBean); + List productionPsOutContexts = mesProductionDispatchContextStepService.getProductionPsOutContext(reqBean); + + MesProductionPartContext mesProductionPartContext; + MesProductionPsOutContext productionPsOutSn; + + if (!Objects.isNull(foreignKey)) { + mesProductionPartContext = productionPartContextList.stream().filter(context -> Objects.equals(context.getForeignKey(), foreignKey)).findFirst().orElse(null); + productionPsOutSn = productionPsOutContexts.stream().filter(context -> Objects.equals(context.getForeignKey(), foreignKey)).findFirst().orElse(null); + String newValue = ""; + if (value.contains("%")) { + if (value.contains("partNo")) { + newValue = mesProductionPartContext.getPartNo(); + } else if (value.contains("orderNo")) { + newValue = mesProductionPartContext.getWorkOrderNo(); + } else if (value.contains("sn")) { + newValue = productionPsOutSn.getCustSn(); + } + return newValue; + } else { + return value; + } + } else { + if (index != null && foreignKey == null) { + mesProductionPartContext = productionPartContextList.get(index); + if (mesProductionPartContext == null || Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesProductionPartContext.getIsFinishCode())) { + return null; + } + return value; + } + } + return null; + } + + +} 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 57ee2a1..31b819a 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 @@ -129,7 +129,9 @@ public class MesProductionNoSortModuleService extends BaseModuleService { DdlPackBean packBean = DdlPackBean.getDdlPackBean(); DdlPreparedPack.getNumEqualPack(Long.parseLong(mesWorkCell.getFileId()), "id", packBean); MesFile mesFile = mesFileRepository.getByProperty(packBean); - url = mesFile.getFileUrl(); + if (mesFile != null) { + url = mesFile.getFileUrl(); + } } if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.HISTOGRAM.getValue(), mesWorkCell.getIsShowMsg())) { dataType = MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue(); 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 2678ba1..b820ab7 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 @@ -23,10 +23,7 @@ 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.Collector; import java.util.stream.Collectors; @@ -44,7 +41,8 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { @Autowired private IMesProductionDispatchContextStepService productionDispatchContextStepService; - + @Autowired + private IWriteVariableService writeVariableService; @Autowired private MesEquipmentVariableRepository mesEquipmentVariableRepository; @@ -77,41 +75,23 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { } List mesEquipmentVariableList = new ArrayList<>(); List mesEquipmentProdParamCfgList = new ArrayList<>(); + Map> mesEquipmentVariableMap = getMesEquipmentProdParamCfgs(reqBean, prodRuleContextList, mesEquipmentProdParamCfgList); + + mesEquipmentVariableMap.forEach((k, v) -> { + v.stream().forEach(mesEquipmentProdParamCfg -> { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", packBean); + MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(packBean); + if (mesEquipmentVariable == null) { + return; + } + mesEquipmentVariableList.add(mesEquipmentVariable); + mesEquipmentProdParamCfgList.add(mesEquipmentProdParamCfg); + execSendEquipParamsCmd(reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), k, stepParamMap); + }); + }); - - // 获取加工参数 分排序和非排序 - mesEquipmentProdParamCfgList = getMesEquipmentProdParamCfgs(reqBean, prodRuleContextList, mesEquipmentProdParamCfgList); - - for (MesEquipmentProdParamCfg mesEquipmentProdParamCfg : mesEquipmentProdParamCfgList) {// - - String strategyClass = getStrateClass(mesEquipmentProdParamCfg.getMatchRule()); - AbstractWriteVariableService equipVariableRwExtService = ((AbstractWriteVariableService) SpringContextsUtil.getBean(strategyClass)); - - DdlPackBean packBean = DdlPackBean.getDdlPackBean(); - DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", packBean); - MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(packBean); - if (mesEquipmentVariable == null) { - continue; - } - mesEquipmentVariableList.add(mesEquipmentVariable); - mesEquipmentProdParamCfgList.add(mesEquipmentProdParamCfg); - execSendEquipParamsCmd(equipVariableRwExtService, reqBean, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()), null); - - } - /* Map> map = mesEquipmentProdParamCfgList.stream().collect(Collectors.groupingBy(MesEquipmentProdParamCfg::getMatchRule)); - Map> mapVariable = mesEquipmentVariableList.stream().collect(Collectors.groupingBy(mesEquipmentVariable -> mesEquipmentVariable.getId() + "")); -*/ - /* map.forEach((k, v) -> { - String strategyClass = getStrateClass(k); - AbstractWriteVariableService equipVariableRwExtService = ((AbstractWriteVariableService) SpringContextsUtil.getBean(strategyClass)); - v.stream().forEach(mesEquipmentProdParamCfg -> { - MesEquipmentVariable mesEquipmentVariable = mapVariable.get(mesEquipmentProdParamCfg.getEquipVariableId()+"").get(0); - execSendEquipParamsCmd(equipVariableRwExtService, reqBean, resultBean, stepParamMap, stepResult, cellEquipContext, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel())); - }); - equipVariableRwExtService.removeValue(); - });*/ - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送加工参数成功"); } @@ -122,20 +102,15 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { * @param mesEquipmentProdParamCfgList * @return */ - private List getMesEquipmentProdParamCfgs(StationRequestBean reqBean, List prodRuleContextList, List mesEquipmentProdParamCfgList) { + private Map> getMesEquipmentProdParamCfgs(StationRequestBean reqBean, List prodRuleContextList, List mesEquipmentProdParamCfgList) { MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); - + Map> map = new HashMap<>(); for (MesProdRuleContext mesProdRuleContext : prodRuleContextList) { List mesEquipmentProdParamCfgs= new ArrayList<>(); - //从上下文中取出生产线对象 MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); - - //排序线 主条码验证工步 - - // 获取加工参数 if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType()){ @@ -154,19 +129,18 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { } if (!CollectionUtils.isEmpty(mesEquipmentProdParamCfgs)) { mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgs.stream().distinct().collect(Collectors.toList()); - mesEquipmentProdParamCfgList.addAll(mesEquipmentProdParamCfgs); } + map.put(mesProdRuleContext.getForeignKey(), mesEquipmentProdParamCfgs); } - mesEquipmentProdParamCfgList = mesEquipmentProdParamCfgList.stream().distinct().collect(Collectors.toList()); - return mesEquipmentProdParamCfgList; + return map; } - private void execSendEquipParamsCmd(AbstractWriteVariableService equipVariableRwExtService, StationRequestBean reqBean, - String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey) { - - equipVariableRwExtService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey, null); - + private void execSendEquipParamsCmd(StationRequestBean reqBean, + String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Optional> stepParamMap) { + //最大重试次数[工步参数] + Integer maxRetryTimes = getMaxRetryTimes(stepParamMap); + writeVariableService.writeVariable(reqBean, value, equipmentVariable, kepwareFlag, foreignKey, null, maxRetryTimes); } //最大重试次数[工步参数] @@ -176,19 +150,6 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService { maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null; } catch (NumberFormatException e) { } - return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : MesPcnExtConstWords.MAX_RETRY_TIMES_DEFAULT; - } - private String getStrateClass(String value) { - - String strategyClass = "commonWriteVariableService"; - - if (value.contains("orderNo")) { - strategyClass = "OrderWriteVariableService"; - } else if (value.contains("partNo")) { - strategyClass = "PartWriteVariableService"; - } else if (value.contains("sn")) { - strategyClass = "SnWriteVariableService"; - } - return strategyClass; + return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : 3; } }