diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipmentLogExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipmentLogExtService.java index 95dd788..7c0da60 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipmentLogExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipmentLogExtService.java @@ -7,7 +7,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import io.swagger.annotations.ApiOperation; -import java.util.ArrayList; import java.util.List; public interface IMesEquipmentLogExtService { @@ -24,4 +23,7 @@ public interface IMesEquipmentLogExtService { @ApiOperation(value = "获取设备数据变量对应的采集数据") List doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List equipmentVariableList, List equipmentVariableCfgList); + @ApiOperation(value = "验证设备通信质量") + Boolean checkEquipQuality(Integer quality); + } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java index 09b44e8..9f4e1f8 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java @@ -77,4 +77,6 @@ public interface IMesProductionProcessContextStepService { @ApiOperation(value = "获取设备数据变量信息") List findEquipmentVariableList(List equipmentVariableList, Integer variableType, List categoryLevelTwoList); + @ApiOperation(value = "发送设备质量信息") + void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentLogExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentLogExtService.java index 40eae16..273520f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentLogExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentLogExtService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog; @@ -21,6 +22,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; @Slf4j @@ -60,6 +62,11 @@ public class MesEquipmentLogExtService implements IMesEquipmentLogExtService { } @Override + public Boolean checkEquipQuality(Integer quality) { + return MesExtEnumUtil.EQUIP_LOG_QUALITY.checkQuality(quality); + } + + @Override public List doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List equipmentVariableList, List equipmentVariableCfgList) { if (CollectionUtils.isEmpty(equipmentVariableList) || CollectionUtils.isEmpty(equipmentVariableCfgList)) return null; @@ -67,16 +74,19 @@ public class MesEquipmentLogExtService implements IMesEquipmentLogExtService { //封装数据变量接口逻辑、数据变量、设备LOG信息的嵌套对象集合 List collectContextList = generateEquipVariableCfgCollectLogContextList(equipmentVariableList, equipmentVariableCfgList); + //标记当前设备通信默认正常 + cellEquipContext.setQuality(MesExtEnumUtil.EQUIP_LOG_QUALITY.defaultQuality()); //根据常变值分别获取设备ID分表的采集数据 Map needNewValue2Collect = getEquipmentLog(cellEquipContext, collectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue()); Map unNeedNewValue2Collect = getEquipmentLog(cellEquipContext, collectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue()); //修改常变值配置对应的设备ID分表的采集数据的状态为1 - if (!CollectionUtils.isEmpty(needNewValue2Collect)) updateEquipmentLogList(cellEquipContext.getOrganizeCode(), cellEquipContext.getEquipId(), new ArrayList<>(needNewValue2Collect.keySet())); + if (!CollectionUtils.isEmpty(needNewValue2Collect) && checkEquipQuality(cellEquipContext.getQuality())) updateEquipmentLogList(cellEquipContext.getOrganizeCode(), cellEquipContext.getEquipId(), new ArrayList<>(needNewValue2Collect.keySet())); + String equipVariableReadtime = TimeTool.getNowTime(true); for (MesEquipVariableCfgCollectContext equipVariableCfgCollectContext : collectContextList) { if (null == equipVariableCfgCollectContext || CollectionUtils.isEmpty(equipVariableCfgCollectContext.getEquipVariableCollectContextList())) continue; - equipVariableCfgCollectContext.getEquipVariableCollectContextList().forEach(o -> o.copyValue(filterEquipmentLog(needNewValue2Collect, unNeedNewValue2Collect, o.getClientHandle(), equipVariableCfgCollectContext.getNeedNewValue()))); + equipVariableCfgCollectContext.getEquipVariableCollectContextList().forEach(o -> o.copyValue(filterEquipmentLog(needNewValue2Collect, unNeedNewValue2Collect, o.getClientHandle(), equipVariableCfgCollectContext.getNeedNewValue()), equipVariableReadtime)); } return collectContextList; @@ -117,6 +127,8 @@ public class MesEquipmentLogExtService implements IMesEquipmentLogExtService { List filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getNeedNewValue().compareTo(needNewValue) == 0)).collect(Collectors.toList()); if (CollectionUtils.isEmpty(filterList)) return null; List equipmentLogList = getEquipmentLogList(cellEquipContext.getOrganizeCode(), cellEquipContext.getEquipId(), needNewValue, collectClientHandleList(filterList)); + Optional optional = CollectionUtils.isEmpty(equipmentLogList) ? null : equipmentLogList.stream().filter(o -> (null != o && !checkEquipQuality(o.getQuality()))).findFirst(); + if (null != optional && optional.isPresent()) cellEquipContext.setQuality(optional.get().getQuality()); return CollectionUtils.isEmpty(equipmentLogList) ? null : equipmentLogList.stream().filter(o -> null != o).collect(Collectors.toMap(MesEquipmentLog::getId, o -> o)); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java new file mode 100644 index 0000000..446554a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java @@ -0,0 +1,111 @@ +//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; +// +//import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService; +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService; +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +//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.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.MesMouldMultiCavity; +//import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; +//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 com.alibaba.fastjson.JSONObject; +//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.List; +//import java.util.Map; +//import java.util.Optional; +// +///** +// * @Description : 读装配件条码工步 +// * @Author : wangjie +// **/ +//@Slf4j +//@Service("mesAssemblyReadStepService") +//public class MesAssemblyReadStepService extends BaseStepService { +// +// @Autowired +// private IMesProductionProcessContextStepService productionProcessContextStepService; +// +// @Autowired +// private IMesEquipmentLogExtService equipmentLogExtService; +// +// @Autowired +// private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService; +// +// @Autowired +// private IMesMouldMultiCavityService mouldMultiCavityService; +// +// @Override +// public StepResult execute(StationRequestBean reqBean) { +// +// StationResultBean resultBean = new StationResultBean(); +// +// StepResult stepResult = StepResult.getSuccessComplete(); +// +// Optional> stepParamMap = getStepParams(reqBean); +// +// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap); +// +// productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext); +// +// //获取生产过程上下文对象有异常信息 抛出异常 +// if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage()); +// +// List equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct(); +// +// equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.ASSEMBLY.getValue()); +// +// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); +// +// //配置错误 抛出异常 +// if (CollectionUtils.isEmpty(equipmentVariableCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean, +// String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]装配件条码相关变量类别的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType())); +// +// List categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList); +// +// List equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList); +// +// //配置错误 抛出异常 +// if (CollectionUtils.isEmpty(equipmentVariableList)) execExpSendMsgAndThrowEx(reqBean, resultBean, +// String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString())); +// +// List collectContextList = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); +// this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(collectContextList), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); +// +// //读取模具号进行规则匹配 +// List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue(), collectContextList); +// +// //验证模具号的有效性 +// checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList); +// +// //设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点 +// if (!stepResult.isCompleted()) stepResult.setStateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE); +// +// productionProcessContextStepService.doCacheContext(reqBean, productionProcessContext); +// +// if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, 1000L); +// +// return stepResult; +// +// } +// +// +// +// +// +//} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java index 8188705..d6764d8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java @@ -86,11 +86,14 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { List collectContextList = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(collectContextList), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); - //读取头道模具号进行规则匹配 - List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.FIRST_MOULD_NO.getValue(), collectContextList); + //验证设备通信质量 + productionProcessContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); + if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) + execDynamicsCompleteAndSendMsg(reqBean, resultBean, stepResult, false, + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); //验证头道模具号的有效性 - checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList); + if (stepResult.isCompleted()) checkFirstMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, collectContextList); //设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点 if (!stepResult.isCompleted()) stepResult.setStateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE); @@ -103,7 +106,10 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { } - private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List equipVariableCollectContextList) { + private StepResult checkFirstMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List collectContextList) { + + //读取头道模具号进行规则匹配 + List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.FIRST_MOULD_NO.getValue(), collectContextList); if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java index 90474bb..16e3052 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java @@ -87,11 +87,14 @@ public class MesMouldNoReadStepService extends BaseStepService { List collectContextList = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(collectContextList), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); - //读取模具号进行规则匹配 - List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue(), collectContextList); + //验证设备通信质量 + productionProcessContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); + if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) + execDynamicsCompleteAndSendMsg(reqBean, resultBean, stepResult, false, + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //验证模具号的有效性 - checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList); + //验证头道模具号的有效性 + if (stepResult.isCompleted()) checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, collectContextList); //设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点 if (!stepResult.isCompleted()) stepResult.setStateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE); @@ -104,7 +107,10 @@ public class MesMouldNoReadStepService extends BaseStepService { } - private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List equipVariableCollectContextList) { + private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List collectContextList) { + + //读取模具号进行规则匹配 + List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue(), collectContextList); if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentCode())); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java index 79f176a..a45867f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java @@ -83,12 +83,13 @@ public class MesProductResultReadStepService extends BaseStepService { List collectContextList = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(collectContextList), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); - Map> variableCategoryMap = collectContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCfgCollectContext::getVariableCategory)); - - matchVariableCategoryMap(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap); + //验证设备通信质量; 设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点 + productionProcessContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); + if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) + execDynamicsCompleteAndSendMsg(reqBean, resultBean, stepResult.stateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE), false, + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //保存设备当前一轮工序的加工结果: 只保存成功/报废/可疑的结果 - if (stepResult.isCompleted()) productionProcessContext.productResult((String) stepResult.getObj()); + if (stepResult.isCompleted()) matchProductResult(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, collectContextList); productionProcessContextStepService.doCacheContext(reqBean, productionProcessContext); @@ -98,6 +99,18 @@ public class MesProductResultReadStepService extends BaseStepService { } + private void matchProductResult(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List collectContextList) { + + Map> variableCategoryMap = collectContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCfgCollectContext::getVariableCategory)); + + matchVariableCategoryMap(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap); + + //保存设备当前一轮工序的加工结果: 只保存成功/报废/可疑的结果 + if (stepResult.isCompleted()) productionProcessContext.productResult((String) stepResult.getObj()); + + } + //加工结果规则匹配:根据变量类别分组, 只要匹配一组即可; 在一组中根据规则类别分组, 相同规则类别的一组必须全部匹配, 任意一组规则类别匹配成功即可 private StepResult matchVariableCategoryMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, Map> variableCategoryMap) { @@ -118,6 +131,4 @@ public class MesProductResultReadStepService extends BaseStepService { } - - } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionProcessContextStepService.java index 23233e9..1dc0c15 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionProcessContextStepService.java @@ -8,8 +8,11 @@ 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.IFsmRouteDataService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -263,4 +266,13 @@ public class MesProductionProcessContextStepService extends BaseStepService impl equipmentVariableList.stream().filter(o -> (null != o && categoryLevelTwoList.contains(o.getCategoryLevelTwo()) && o.getVariableType().compareTo(variableType) == 0)).collect(Collectors.toList()); } + @Override + public void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext) { + StationResultBean resultBean = new StationResultBean(); + resultBean.setResultObj(MesExtEnumUtil.EQUIP_LOG_QUALITY.valueOfColor(cellEquipContext.getQuality())); + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.QUALITY_MODULE.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue()); + this.sendMessage(reqBean, resultBean); + } + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesCellEquipContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesCellEquipContext.java index 79c62f5..a9464c1 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesCellEquipContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesCellEquipContext.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import io.swagger.annotations.ApiParam; import lombok.Data; @@ -42,4 +43,7 @@ public class MesCellEquipContext { @ApiParam("是否监控停机") private String monitorDownTime; + @ApiParam("设备质量") + private Integer quality = MesExtEnumUtil.EQUIP_LOG_QUALITY.QUALITY.getValue(); + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java index 88fe2ec..8c2c305 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java @@ -80,14 +80,18 @@ public class MesEquipVariableCollectContext { @ApiParam("设备质量") private Integer quality; + @ApiParam("读取时间") + private String equipVariableReadtime; + public MesEquipVariableCollectContext() {} public MesEquipVariableCollectContext(Long equipVariableId) { this.equipVariableId = equipVariableId; } - public void copyValue(MesEquipmentLog equipmentLog) { + public void copyValue(MesEquipmentLog equipmentLog, String equipVariableReadtime) { if (null == equipmentLog) return; BeanUtils.copyProperties(equipmentLog, this); + this.equipVariableReadtime = equipVariableReadtime; } }