From 4376c15c5121aeebf9f2c5eeec94127b54ce2887 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Thu, 23 May 2024 20:06:15 +0800 Subject: [PATCH] pcn step context --- .../ext/mes/pcn/api/base/IEquipmentExtService.java | 8 +- .../IMesProductionProcessContextStepService.java | 47 +-- .../serviceimpl/base/EquipmentExtService.java | 26 +- .../step/MesFirstMouldNoReadStepService.java | 65 +++++ .../step/MesProductResultReadStepService.java | 71 ++--- .../MesProductionProcessContextStepService.java | 318 ++++++++++++--------- ...a => MesEquipVariableCfgCollectLogContext.java} | 60 ++-- .../pojo/context/MesProductionProcessContext.java | 115 +++++--- 8 files changed, 421 insertions(+), 289 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java rename modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/{MesEquipVariableCollectContext.java => MesEquipVariableCfgCollectLogContext.java} (61%) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IEquipmentExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IEquipmentExtService.java index 69de402..ff490ec 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IEquipmentExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IEquipmentExtService.java @@ -12,10 +12,10 @@ public interface IEquipmentExtService { @ApiOperation(value = "根据生产线代码,工位代码查询工位设备集合") List getCellEquipmentList(String organizeCode, String workCenterCode, String workCellCode); - @ApiOperation(value = "根据设备代码,变量类型,二级变量查询设备数据变量集合") - List getEquipmentVariableList(MesCellEquipContext cellEquipmentContext, Integer variableType, List categoryLevelTwoList); + @ApiOperation(value = "根据设备变量配置类型查询设备数据变量接口逻辑集合") + List getEquipmentVariableCfgList(String organizeCode, String variableCfgType); - @ApiOperation(value = "根据设备变量配置类型,二级变量查询设备数据变量集合") - List getEquipmentVariableCfgList(MesCellEquipContext cellEquipmentContext, List categoryLevelTwoList); + @ApiOperation(value = "根据设备代码,变量类型查询设备数据变量集合") + List getEquipmentVariableList(String organizeCode, String equipmentCode, Integer variableType); } 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 8f71673..7451cee 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 @@ -1,13 +1,14 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectLogContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import io.swagger.annotations.ApiOperation; import java.util.List; -import java.util.Map; public interface IMesProductionProcessContextStepService { @@ -35,28 +36,36 @@ public interface IMesProductionProcessContextStepService { @ApiOperation(value = "获取工位当前设备信息") MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); - @ApiOperation(value = "获取设备数据变量信息") - MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, Integer variableType, String... categoryLevelTwo); - - @ApiOperation(value = "获取设备数据变量信息") - MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo); + @ApiOperation(value = "获取设备数据变量接口逻辑信息") + MesProductionProcessContext getEquipmentVariableCfgList(StationRequestBean reqBean); @ApiOperation(value = "获取设备数据变量接口逻辑信息") - MesProductionProcessContext getEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); + MesProductionProcessContext getEquipmentVariableCfgList(MesProductionProcessContext productionProcessContext); - @ApiOperation(value = "对设备数据变量信息进行必要性验证") - MesProductionProcessContext checkNecessaryEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo); + @ApiOperation(value = "根据变量类别过滤设备数据变量接口逻辑信息") + List filterEquipmentVariableCfgList(List equipmentVariableCfgList, String... variableCategory); - @ApiOperation(value = "对设备数据变量接口逻辑信息进行必要性验证") - MesProductionProcessContext checkNecessaryEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); + @ApiOperation(value = "验证设备数据变量接口逻辑信息中是否存在必要的变量类型信息") + MesProductionProcessContext checkNecessaryEquipmentVariableCfg(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List equipmentVariableCfgList, String... variableCategory); - @ApiOperation(value = "获取设备分表采集数据") - MesProductionProcessContext doHandleEquipmentLogListByIds(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); + @ApiOperation(value = "过滤设备数据变量接口逻辑信息中的二级变量") + List filterCategoryLevelTwoList(List equipmentVariableCfgList); - @ApiOperation(value = "设备数据变量接口逻辑信息数据分组") - Map> getEquipmentVariableCfgMap(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); + @ApiOperation(value = "获取设备数据变量信息") + MesProductionProcessContext getEquipmentVariableList(StationRequestBean reqBean, Integer variableType); + + @ApiOperation(value = "获取设备数据变量信息") + MesProductionProcessContext getEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType); + + @ApiOperation(value = "获取设备数据变量信息") + List findEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType); + + @ApiOperation(value = "获取设备数据变量信息") + List findEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType, List categoryLevelTwoList); + + @ApiOperation(value = "获取设备数据变量信息") + List findEquipmentVariableList(List equipmentVariableList, Integer variableType, List categoryLevelTwoList); - @ApiOperation(value = "根据设备数据变量接口逻辑信息匹配结果") - MesEquipmentVariableCfg execMatchEquipmentVariableCfgValue(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, - MesEquipVariableCollectContext collectContext, Map> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue); + @ApiOperation(value = "获取设备数据变量对应的采集数据") + List doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List equipmentVariableList, List equipmentVariableCfgList); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/EquipmentExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/EquipmentExtService.java index b1b3d6d..21d26a4 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/EquipmentExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/EquipmentExtService.java @@ -64,24 +64,20 @@ public class EquipmentExtService implements IEquipmentExtService { } @Override - public List getEquipmentVariableList(MesCellEquipContext cellEquipmentContext, Integer variableType, List categoryLevelTwoList) { - if (StringUtils.isEmpty(variableType) || null == cellEquipmentContext) return null; - DdlPackBean packBean = DdlPackBean.getDdlPackBean(cellEquipmentContext.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(cellEquipmentContext.getEquipmentCode(), MesPcnExtConstWords.EQUIPMENT_CODE, packBean); - DdlPreparedPack.getNumEqualPack(variableType, MesPcnExtConstWords.VARIABLE_TYPE, packBean); - if (!CollectionUtils.isEmpty(categoryLevelTwoList) && categoryLevelTwoList.size() == 1) DdlPreparedPack.getStringEqualPack(categoryLevelTwoList.get(0), MesPcnExtConstWords.VARIABLE_TYPE, packBean); - else DdlPreparedPack.getInPackList(categoryLevelTwoList, MesPcnExtConstWords.VARIABLE_TYPE, packBean); - return equipmentVariableRepository.findByHqlWhere(packBean); + public List getEquipmentVariableCfgList(String organizeCode, String variableCfgType) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(variableCfgType)) return null; + return equipmentVariableCfgRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.VARIABLE_CFG_TYPE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), variableCfgType}); } @Override - public List getEquipmentVariableCfgList(MesCellEquipContext cellEquipmentContext, List categoryLevelTwoList) { - if (null == cellEquipmentContext || StringUtils.isEmpty(cellEquipmentContext.getVariableCfgType()) || CollectionUtils.isEmpty(categoryLevelTwoList)) return null; - DdlPackBean packBean = DdlPackBean.getDdlPackBean(cellEquipmentContext.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(cellEquipmentContext.getVariableCfgType(), MesPcnExtConstWords.VARIABLE_CFG_TYPE, packBean); - if (!CollectionUtils.isEmpty(categoryLevelTwoList) && categoryLevelTwoList.size() == 1) DdlPreparedPack.getStringEqualPack(categoryLevelTwoList.get(0), MesPcnExtConstWords.VARIABLE_TYPE, packBean); - else DdlPreparedPack.getInPackList(categoryLevelTwoList, MesPcnExtConstWords.VARIABLE_TYPE, packBean); - return equipmentVariableCfgRepository.findByHqlWhere(packBean); + public List getEquipmentVariableList(String organizeCode, String equipmentCode, Integer variableType) { + if (StringUtils.isEmpty(variableType) || StringUtils.isEmpty(equipmentCode) || StringUtils.isEmpty(variableType)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(equipmentCode, MesPcnExtConstWords.EQUIPMENT_CODE, packBean); + DdlPreparedPack.getNumEqualPack(variableType, MesPcnExtConstWords.VARIABLE_TYPE, packBean); + return equipmentVariableRepository.findByHqlWhere(packBean); } } 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 new file mode 100644 index 0000000..e5cf0a9 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java @@ -0,0 +1,65 @@ +//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; +// +//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.MesEquipVariableCfgCollectLogContext; +//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.bean.MesEquipmentVariableCfg; +//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 java.util.List; +//import java.util.Map; +// +///** +// * @Description : 读头道模具号工步 +// * @Author : wangjie +// **/ +//@Slf4j +//@Service("mesFirstMouldNoReadStepService") +//public class MesFirstMouldNoReadStepService extends BaseStepService { +// +// @Autowired +// private IMesProductionProcessContextStepService productionProcessContextStepService; +// +// @Override +// public StepResult execute(StationRequestBean reqBean) { +// +// StationResultBean resultBean = new StationResultBean(); +// +// StepResult stepResult = StepResult.getSuccessComplete(); +// +// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariable(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.FIRST_MOULD_NO.getValue()); +// +// if (!productionProcessContextStepService.getEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess()) +// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); +// +// if (!productionProcessContextStepService.checkNecessaryEquipmentVariable(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.FIRST_MOULD_NO.getValue()).getSuccess()) +// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); +// +// if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess()) +// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); +// +// if (!productionProcessContextStepService.doHandleEquipmentLogListByIds(reqBean, productionProcessContext).getSuccess()) +// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); +// +// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); +// +// Map> equipmentVariableCfgMap = productionProcessContextStepService.getEquipmentVariableCfgMap(reqBean, productionProcessContext); +// +// List equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList(); +// +// +// +// return stepResult; +// } +// +// +// +//} 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 b4bde8b..c279240 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 @@ -2,10 +2,10 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; 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.MesEquipVariableCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectLogContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; 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.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; @@ -15,12 +15,8 @@ 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; -import java.util.stream.Collectors; /** * @Description : 读取加工结果工步 @@ -40,67 +36,42 @@ public class MesProductResultReadStepService extends BaseStepService { StepResult stepResult = StepResult.getSuccessComplete(); - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariable(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), - MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.SV_OPERATION_MODE.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.PART_OK.getValue(), - MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.PART_NOK.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.PART_SCRAP.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.PART_SUSPICIOUS.getValue()); + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableCfgList(reqBean); - if (!productionProcessContextStepService.getEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess()) - return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); + if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); - if (!productionProcessContextStepService.checkNecessaryEquipmentVariable(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.PART_OK.getValue()).getSuccess()) - return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); + List equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct(); - if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess()) - return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); + equipmentVariableCfgList = productionProcessContextStepService.filterEquipmentVariableCfgList(equipmentVariableCfgList, + MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue(), + MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SUSPICIOUS.getValue()); + + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + + if (CollectionUtils.isEmpty(equipmentVariableCfgList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]获取加工结果相关变量类别的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType())); - if (!productionProcessContextStepService.doHandleEquipmentLogListByIds(reqBean, productionProcessContext).getSuccess()) + if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue()).getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); - MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + List categoryLevelTwoList = productionProcessContextStepService.filterCategoryLevelTwoList(equipmentVariableCfgList); - Map> equipmentVariableCfgMap = productionProcessContextStepService.getEquipmentVariableCfgMap(reqBean, productionProcessContext); + List equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList); + + if (CollectionUtils.isEmpty(equipmentVariableList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString())); + + List collectContextList = productionProcessContextStepService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); - List equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList(); - //验证加工模式 - Optional optional2Mode = isExistTypeVariableType(equipVariableCollectContextList, MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.SV_OPERATION_MODE.getValue()); - if (null != optional2Mode && optional2Mode.isPresent() && !checkVariableType2Mode(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipmentVariableCfgMap, optional2Mode.get()).isCompleted()) - return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, stepResult.getMsg()); - equipVariableCollectContextList = equipVariableCollectContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getEquipVariableValue()) && !o.getCategoryLevelTwo().equals(MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.SV_OPERATION_MODE.getValue()))).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("正在持续监听设备[%s]的加工结果...", cellEquipContext.getEquipmentCode())); - //验证加工结果 - MesEquipmentVariableCfg equipmentVariableCfg = null; - for (MesEquipVariableCollectContext collectContext : equipVariableCollectContextList) { - if (null == cellEquipContext) continue; - equipmentVariableCfg = productionProcessContextStepService.execMatchEquipmentVariableCfgValue(reqBean, productionProcessContext, collectContext, equipmentVariableCfgMap, true); - if (!productionProcessContext.getSuccess()) this.sendMessage(reqBean, resultBean, productionProcessContext.getMessage(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); - productionProcessContext.success(); - if (null != equipmentVariableCfg) break; - } - if (null == equipmentVariableCfg) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("获取到设备[%s]数据变量的加工结果值与数据变量接口逻辑信息匹配失败!持续监听中...", cellEquipContext.getEquipmentCode())); - //TODO 根据二级变量+变量类别 判断结果 - //失败: return false - //成功: 成功 return true/ 零件报废 return custom - //可疑/报废: return custom - return StepResult.getSuccessComplete(); - } - private StepResult checkVariableType2Mode(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, - MesCellEquipContext cellEquipContext, Map> equipmentVariableCfgMap, MesEquipVariableCollectContext collectContext) { - if (StringUtils.isEmpty(collectContext.getEquipVariableValue())) return stepResult.isCompleted(false).msg(String.format("未获取到设备[%s]加工模式数据变量[%s]的结果值,持续监听中...", cellEquipContext.getEquipmentCode(), collectContext.getTagName())); - MesEquipmentVariableCfg equipmentVariableCfg = productionProcessContextStepService.execMatchEquipmentVariableCfgValue(reqBean, productionProcessContext, collectContext, equipmentVariableCfgMap, true); - if (!productionProcessContext.getSuccess()) return stepResult.isCompleted(false).msg(productionProcessContext.getMessage()); - if (null == equipmentVariableCfg) return stepResult.isCompleted(false).msg(String.format("获取到设备[%s]加工模式数据变量[%s]的结果值[%s]与数据变量接口逻辑信息匹配失败!持续监听中...", cellEquipContext.getEquipmentCode(), collectContext.getTagName(), collectContext.getEquipVariableValue())); return stepResult; } - private Optional isExistTypeVariableType(List equipVariableCollectContextList, String categoryLevelTwo) { - return equipVariableCollectContextList.stream().filter(o -> (null != o && o.getCategoryLevelTwo().equals(categoryLevelTwo))).findFirst(); - } } 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 3872e7b..d98653b 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 @@ -5,22 +5,23 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentLogExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IProdOrgExtService; 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.MesEquipVariableCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectLogContext; 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.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; 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.*; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -152,189 +153,236 @@ public class MesProductionProcessContextStepService extends BaseStepService impl } @Override - public MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, Integer variableType, String... categoryLevelTwo) { - return getEquipmentVariable(reqBean, getCurCellEquipment(reqBean), variableType, categoryLevelTwo); + public MesProductionProcessContext getEquipmentVariableCfgList(StationRequestBean reqBean) { + return getEquipmentVariableCfgList(getCurCellEquipment(reqBean)); } @Override - public MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo) { + public MesProductionProcessContext getEquipmentVariableCfgList(MesProductionProcessContext productionProcessContext) { if (!productionProcessContext.getSuccess()) return productionProcessContext; + //判断生产过程上下文对象是否存在数据变量接口逻辑信息 + if (!CollectionUtils.isEmpty(productionProcessContext.getEquipVariableCfgListByVct())) return productionProcessContext; + MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); - //判断生产过程上下文对象是否存在数据变量信息 - List equipmentVariableList = productionProcessContext.getEquipVariableList(); - List categoryLevelTwoList = null != categoryLevelTwo ? Arrays.asList(categoryLevelTwo) : null; - if (!CollectionUtils.isEmpty(equipmentVariableList) && !CollectionUtils.isEmpty(equipmentVariableList.stream().filter(o -> - (null != o && o.getEquipmentCode().equals(cellEquipmentContext.getEquipmentCode()) && o.getVariableType().compareTo(variableType) == 0 && - ((CollectionUtils.isEmpty(categoryLevelTwoList) && StringUtils.isEmpty(o.getCategoryLevelTwo())) || - (!CollectionUtils.isEmpty(categoryLevelTwoList) && !StringUtils.isEmpty(o.getCategoryLevelTwo()) && categoryLevelTwoList.contains(o.getCategoryLevelTwo()))))).collect(Collectors.toList()) - )) return productionProcessContext; + if (null == cellEquipmentContext || !productionProcessContext.getSuccess()) return productionProcessContext; - List equipmentVariableDbList = equipmentExtService.getEquipmentVariableList(cellEquipmentContext, variableType, categoryLevelTwoList); + List equipmentVariableCfgList = equipmentExtService.getEquipmentVariableCfgList(productionProcessContext.getOrganizeCode(), cellEquipmentContext.getVariableCfgType()); - //生产过程上下文对象赋值设备数据变量信息 - if (null != equipmentVariableDbList) return productionProcessContext.equipVariableJson(equipmentVariableDbList); + //生产过程上下文对象赋值设备数据变量接口逻辑集合信息 + if (!CollectionUtils.isEmpty(equipmentVariableCfgList)) productionProcessContext.equipVariableCfgJson(equipmentVariableCfgList); - return productionProcessContext.message(String.format("请检查设备[%s]的数据变量信息,变量类型[%s:%s],二级变量%s!", - cellEquipmentContext.getEquipmentCode(), variableType, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.valueOfDescription(variableType), !CollectionUtils.isEmpty(equipmentVariableList) ? equipmentVariableList.toString() : MesPcnExtConstWords.SQUARE_BRACKETS)); + return productionProcessContext; } @Override - public MesProductionProcessContext getEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { - - if (!productionProcessContext.getSuccess()) return productionProcessContext; - - //判断生产过程上下文对象是否存在数据变量接口逻辑信息 - List equipmentVariableList = productionProcessContext.getEquipVariableList(); - MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); - List equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgList(); - List categoryLevelTwoList = (equipmentVariableList.stream().filter(o -> null != o).map(MesEquipmentVariable::getCategoryLevelTwo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(equipmentVariableCfgList) && !CollectionUtils.isEmpty(equipmentVariableCfgList.stream().filter(o -> - (null != o && o.getVariableCfgType().equals(cellEquipmentContext.getVariableCfgType()) && CollectionUtils.isEmpty(categoryLevelTwoList) && !StringUtils.isEmpty(o.getCategoryLevelTwo()) && categoryLevelTwoList.contains(o.getCategoryLevelTwo()))).collect(Collectors.toList()) - )) return productionProcessContext; - - List equipmentVariableCfgDbList = equipmentExtService.getEquipmentVariableCfgList(cellEquipmentContext, categoryLevelTwoList); - - //生产过程上下文对象赋值设备数据变量接口逻辑信息 - if (null != equipmentVariableCfgDbList) return productionProcessContext.equipVariableCfgJson(equipmentVariableCfgDbList); - return productionProcessContext.message(String.format("请检查设备[%s]的数据变量接口逻辑信息,设备变量配置类型[%s],二级变量%s!", - cellEquipmentContext.getEquipmentCode(), cellEquipmentContext.getVariableCfgType(), !CollectionUtils.isEmpty(equipmentVariableList) ? equipmentVariableList.toString() : MesPcnExtConstWords.SQUARE_BRACKETS)); - + public List filterEquipmentVariableCfgList(List equipmentVariableCfgList, String... variableCategory) { + List variableCategoryList = null == variableCategory ? null : Arrays.asList(variableCategory); + return (CollectionUtils.isEmpty(equipmentVariableCfgList) || CollectionUtils.isEmpty(variableCategoryList)) ? null : equipmentVariableCfgList.stream().filter(o -> (null != o && variableCategoryList.contains(o.getVariableCategory()))).collect(Collectors.toList()); } @Override - public MesProductionProcessContext checkNecessaryEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo) { - List equipmentVariableList = productionProcessContext.getEquipVariableList(); - if (null == categoryLevelTwo) return productionProcessContext; - - for (String item : categoryLevelTwo) { - - if (StringUtils.isEmpty(item)) continue; - - Optional optional = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> (null != o && o.getVariableType().compareTo(variableType) == 0 && o.getCategoryLevelTwo().equals(item))).findFirst(); - - if (null != optional && optional.isPresent()) continue; - - return productionProcessContext.message(String.format("请检查设备[%s]必要的数据变量信息,变量类型[%s:%s],二级变量[%s]!", productionProcessContext.getCurCellEquip().getEquipmentCode(), variableType, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.valueOfDescription(variableType), item)); + public MesProductionProcessContext checkNecessaryEquipmentVariableCfg(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List equipmentVariableCfgList, String... variableCategory) { + List variableCategoryList = null == variableCategory ? null : Arrays.asList(variableCategory); + Optional optional = (CollectionUtils.isEmpty(equipmentVariableCfgList) || CollectionUtils.isEmpty(variableCategoryList)) ? null : equipmentVariableCfgList.stream().filter(o -> (null != o && variableCategoryList.contains(o.getVariableCategory()))).findFirst(); + return (null != optional && optional.isPresent()) ? productionProcessContext : productionProcessContext.message(String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]变量类别%s的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType(), variableCategoryList.toString())); + } - } + @Override + public List filterCategoryLevelTwoList(List equipmentVariableCfgList) { + return CollectionUtils.isEmpty(equipmentVariableCfgList) ? null : + (equipmentVariableCfgList.stream().filter(o -> null != o).map(MesEquipmentVariableCfg::getCategoryLevelTwo).collect(Collectors.toList())).stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + } - return productionProcessContext; + @Override + public MesProductionProcessContext getEquipmentVariableList(StationRequestBean reqBean, Integer variableType) { + return getEquipmentVariableList(getEquipmentVariableCfgList(reqBean), variableType); } @Override - public MesProductionProcessContext checkNecessaryEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { + public MesProductionProcessContext getEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType) { - List equipmentVariableList = productionProcessContext.getEquipVariableList(); + if (!productionProcessContext.getSuccess() || StringUtils.isEmpty(variableType)) return productionProcessContext; - Map> cfgMap = getEquipmentVariableCfgMap(reqBean, productionProcessContext); + MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); - List filterList = (CollectionUtils.isEmpty(equipmentVariableList) || CollectionUtils.isEmpty(cfgMap)) ? equipmentVariableList : - equipmentVariableList.stream().filter(o -> (null != o && !cfgMap.containsKey(new StringJoiner(MesPcnExtConstWords.AND).add(o.getCategoryLevelTwo()).add(o.getVariableCfgType()).toString()))).collect(Collectors.toList()); + //判断生产过程上下文对象是否存在数据变量信息 + if (!CollectionUtils.isEmpty(productionProcessContext.getEquipVariableListByEquVt(cellEquipmentContext.getEquipmentCode(), variableType))) return productionProcessContext; - if (CollectionUtils.isEmpty(filterList)) return productionProcessContext; + List equipmentVariableDbList = equipmentExtService.getEquipmentVariableList(productionProcessContext.getOrganizeCode(), cellEquipmentContext.getEquipmentCode(), variableType); - MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); + //生产过程上下文对象赋值设备数据变量信息 + if (null != equipmentVariableDbList) productionProcessContext.equipVariableJson(equipmentVariableDbList); + + return productionProcessContext; - return productionProcessContext.message(String.format("请检查设备[%s]必要的数据变量接口逻辑信息,设备变量配置类型[%s],二级变量%s!", - cellEquipmentContext.getEquipmentCode(), cellEquipmentContext.getVariableCfgType(), - (filterList.stream().filter(o -> null != o).map(MesEquipmentVariable::getCategoryLevelTwo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()).toString())); } @Override - public MesProductionProcessContext doHandleEquipmentLogListByIds(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { + public List findEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType) { - if (!productionProcessContext.getSuccess()) return productionProcessContext; - - //获取缓存的生产过程上下文对象中的历史变量接口逻辑采集信息并重置采集数据 - List equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList(); - if (!CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList.forEach(o -> o.clear()); - else equipVariableCollectContextList = getEquipVariableCollectContext(reqBean, productionProcessContext);//封装设备数据变量平铺接口逻辑与采集信息 + if (!productionProcessContext.getSuccess() || StringUtils.isEmpty(variableType)) return null; - if (!productionProcessContext.getSuccess() || CollectionUtils.isEmpty(equipVariableCollectContextList)) return productionProcessContext; + MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); - //根据常变值分别获取设备ID分表的采集数据 - Map needNewValue2Collect = getEquipmentLog(reqBean, equipVariableCollectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue()); - Map unNeedNewValue2Collect = getEquipmentLog(reqBean, equipVariableCollectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue()); + //判断生产过程上下文对象是否存在数据变量信息 + List equipmentVariableDbList = productionProcessContext.getEquipVariableListByEquVt(cellEquipmentContext.getEquipmentCode(), variableType); + if (!CollectionUtils.isEmpty(equipmentVariableDbList)) return equipmentVariableDbList; - //修改常变值配置对应的设备ID分表的采集数据的状态为1 - if (!CollectionUtils.isEmpty(needNewValue2Collect)) equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), productionProcessContext.getCurCellEquip().getEquipId(), new ArrayList<>(needNewValue2Collect.keySet())); + equipmentVariableDbList = equipmentExtService.getEquipmentVariableList(productionProcessContext.getOrganizeCode(), cellEquipmentContext.getEquipmentCode(), variableType); - //采集数据的值赋予生产过程上下文对象中的变量接口逻辑采集信息 - equipVariableCollectContextList.forEach(o -> copyValue(o, needNewValue2Collect, unNeedNewValue2Collect)); + //生产过程上下文对象赋值设备数据变量信息 + if (null != equipmentVariableDbList) productionProcessContext.equipVariableJson(equipmentVariableDbList); - //生产过程上下文对象赋值设备分表采集信息 - return productionProcessContext.equipVariableCfgCollectJson(equipVariableCollectContextList); + return equipmentVariableDbList; } - private void copyValue(MesEquipVariableCollectContext collectContext, Map needNewValue2Collect, Map unNeedNewValue2Collect) { - if (!CollectionUtils.isEmpty(needNewValue2Collect) && needNewValue2Collect.containsKey(collectContext.getClientHandle())) BeanUtils.copyProperties(collectContext, needNewValue2Collect.get(collectContext.getClientHandle())); - if (!CollectionUtils.isEmpty(unNeedNewValue2Collect) && unNeedNewValue2Collect.containsKey(collectContext.getClientHandle())) BeanUtils.copyProperties(collectContext, unNeedNewValue2Collect.get(collectContext.getClientHandle())); + @Override + public List findEquipmentVariableList(MesProductionProcessContext productionProcessContext, Integer variableType, List categoryLevelTwoList) { + List equipmentVariableList = findEquipmentVariableList(productionProcessContext, variableType); + return findEquipmentVariableList(equipmentVariableList, variableType, categoryLevelTwoList); } - private Map getEquipmentLog(StationRequestBean reqBean, List equipVariableCollectContextList, Integer needNewValue) { - List filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getNeedNewValue().compareTo(needNewValue) == 0)).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(filterList)) return null; - List equipmentLogList = equipmentLogExtService.getEquipmentLogList(reqBean.getOrganizeCode(), - filterList.get(0).getEquipId(), needNewValue, filterList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getClientHandle).collect(Collectors.toList())); - return CollectionUtils.isEmpty(equipmentLogList) ? null : equipmentLogList.stream().filter(o -> null != o).collect(Collectors.toMap(o -> Integer.valueOf(o.getId().toString()), o -> o)); + @Override + public List findEquipmentVariableList(List equipmentVariableList, Integer variableType, List categoryLevelTwoList) { + return (CollectionUtils.isEmpty(equipmentVariableList) || CollectionUtils.isEmpty(categoryLevelTwoList)) ? null : + equipmentVariableList.stream().filter(o -> (null != o && categoryLevelTwoList.contains(o.getCategoryLevelTwo()) && o.getVariableType().compareTo(variableType) == 0)).collect(Collectors.toList()); } - private List getEquipVariableCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { - - List equipmentVariableList = productionProcessContext.getEquipVariableList(); - - Map> cfgMap = getEquipmentVariableCfgMap(reqBean, productionProcessContext); - - List equipVariableCollectContextList = null; - for (MesEquipmentVariable equipmentVariable : equipmentVariableList) { - if (null == equipmentVariable) continue; - - //一个数据变量如果匹配多个接口逻辑信息,验证接口逻辑信息配置的常变值是否统一 - List filterList = getEquipmentVariableCfgListByMap(cfgMap, equipmentVariable.getCategoryLevelTwo(), equipmentVariable.getVariableCfgType()); - if (!CollectionUtils.isEmpty(filterList) && filterList.size() > 1 && (filterList.stream().filter(o -> null != o).map(MesEquipmentVariableCfg::getNeedNewValue).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()).size() > 1) - return productionProcessContext.message(String.format("请检查设备[%s]的数据变量接口逻辑信息,设备变量配置类型[%s],二级变量[%s]关联的多个变量类别对应的常变值未配置统一!", - equipmentVariable.getEquipmentCode(), equipmentVariable.getVariableCfgType(), equipmentVariable.getCategoryLevelTwo())).getEquipVariableCfgCollectList(); + @Override + public List doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List equipmentVariableList, List equipmentVariableCfgList) { - MesEquipVariableCollectContext collectContext = new MesEquipVariableCollectContext(equipmentVariable.getId()); - BeanUtils.copyProperties(equipmentVariable, collectContext); - collectContext.needNewValue(!CollectionUtils.isEmpty(filterList) ? filterList.get(0).getNeedNewValue() : MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue()); + //List collectContextList = generateEquipVariableCfgCollectLogContextList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); - if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>(); - equipVariableCollectContextList.add(collectContext); - } - //生产过程上下文对象赋值 设备数据变量平铺接口逻辑与采集信息 - productionProcessContext.equipVariableCfgCollectJson(equipVariableCollectContextList); - return equipVariableCollectContextList; - } - @Override - public Map> getEquipmentVariableCfgMap(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { - List equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgList(); - return CollectionUtils.isEmpty(equipmentVariableCfgList) ? null : - equipmentVariableCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getCategoryLevelTwo()).add(o.getVariableCfgType()).toString())); - } - @Override - public MesEquipmentVariableCfg execMatchEquipmentVariableCfgValue(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, - MesEquipVariableCollectContext collectContext, Map> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue) { - List equipmentVariableCfgList = getEquipmentVariableCfgListByMap(equipmentVariableCfgMap, collectContext.getCategoryLevelTwo(), collectContext.getVariableCfgType()); - if (isNeedVariableCfgValue && CollectionUtils.isEmpty(CollectionUtils.isEmpty(equipmentVariableCfgList) ? null : equipmentVariableCfgList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getValue()))).collect(Collectors.toList()))) { - productionProcessContext.message(String.format("请检查设备数据变量接口逻辑信息,设备变量配置类型[%s],二级变量[%s]对应的信息未配置参考值", collectContext.getVariableCfgType(), collectContext.getCategoryLevelTwo())); - return null; - } - Optional optional = equipmentVariableCfgList.stream().filter(o -> (null != o && o.getValue().equals(collectContext.getEquipVariableValue()))).findFirst(); - return null != optional && optional.isPresent() ? optional.get() : null; + return null; } - private List getEquipmentVariableCfgListByMap(Map> equipmentVariableCfgMap, String categoryLevelTwo, String variableCfgType) { - return CollectionUtils.isEmpty(equipmentVariableCfgMap) ? null : equipmentVariableCfgMap.get(new StringJoiner(MesPcnExtConstWords.AND).add(categoryLevelTwo).add(variableCfgType).toString()); - } +// private List generateEquipVariableCfgCollectLogContextList(MesCellEquipContext cellEquipContext, List equipmentVariableList, List equipmentVariableCfgList) { +// +// List equipVariableCollectContextList = null; +// +// Map +// +// +// for (MesEquipmentVariableCfg equipmentVariableCfg : equipmentVariableCfgList) { +// +// if (null == equipmentVariableCfg) continue; +// +// MesEquipVariableCfgCollectLogContext collectLogContext = new MesEquipVariableCfgCollectLogContext(equipmentVariable.getId()); +// BeanUtils.copyProperties(equipmentVariable, collectContext); +// collectContext.needNewValue(!CollectionUtils.isEmpty(filterList) ? filterList.get(0).getNeedNewValue() : MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue()); +// +// if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>(); +// equipVariableCollectContextList.add(collectContext); +// } +// +// +// +// +// } +// +// +// public MesProductionProcessContext doHandleEquipmentLogListByIds(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { +// +// if (!productionProcessContext.getSuccess()) return productionProcessContext; +// +// //获取缓存的生产过程上下文对象中的历史变量接口逻辑采集信息并重置采集数据 +// List equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList(); +// if (!CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList.forEach(o -> o.clear()); +// else equipVariableCollectContextList = getEquipVariableCollectContext(reqBean, productionProcessContext);//封装设备数据变量平铺接口逻辑与采集信息 +// +// if (!productionProcessContext.getSuccess() || CollectionUtils.isEmpty(equipVariableCollectContextList)) return productionProcessContext; +// +// //根据常变值分别获取设备ID分表的采集数据 +// Map needNewValue2Collect = getEquipmentLog(reqBean, equipVariableCollectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue()); +// Map unNeedNewValue2Collect = getEquipmentLog(reqBean, equipVariableCollectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue()); +// +// //修改常变值配置对应的设备ID分表的采集数据的状态为1 +// if (!CollectionUtils.isEmpty(needNewValue2Collect)) equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), productionProcessContext.getCurCellEquip().getEquipId(), new ArrayList<>(needNewValue2Collect.keySet())); +// +// //采集数据的值赋予生产过程上下文对象中的变量接口逻辑采集信息 +// equipVariableCollectContextList.forEach(o -> copyValue(o, needNewValue2Collect, unNeedNewValue2Collect)); +// +// //生产过程上下文对象赋值设备分表采集信息 +// return productionProcessContext.equipVariableCfgCollectJson(equipVariableCollectContextList); +// +// } +// +// private void copyValue(MesEquipVariableCfgCollectLogContext collectContext, Map needNewValue2Collect, Map unNeedNewValue2Collect) { +// if (!CollectionUtils.isEmpty(needNewValue2Collect) && needNewValue2Collect.containsKey(collectContext.getClientHandle())) BeanUtils.copyProperties(collectContext, needNewValue2Collect.get(collectContext.getClientHandle())); +// if (!CollectionUtils.isEmpty(unNeedNewValue2Collect) && unNeedNewValue2Collect.containsKey(collectContext.getClientHandle())) BeanUtils.copyProperties(collectContext, unNeedNewValue2Collect.get(collectContext.getClientHandle())); +// } +// +// private Map getEquipmentLog(StationRequestBean reqBean, List equipVariableCollectContextList, Integer needNewValue) { +// List filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getNeedNewValue().compareTo(needNewValue) == 0)).collect(Collectors.toList()); +// if (CollectionUtils.isEmpty(filterList)) return null; +// List equipmentLogList = equipmentLogExtService.getEquipmentLogList(reqBean.getOrganizeCode(), +// filterList.get(0).getEquipId(), needNewValue, filterList.stream().filter(o -> (null != o)).map(MesEquipVariableCfgCollectLogContext::getClientHandle).collect(Collectors.toList())); +// return CollectionUtils.isEmpty(equipmentLogList) ? null : equipmentLogList.stream().filter(o -> null != o).collect(Collectors.toMap(o -> Integer.valueOf(o.getId().toString()), o -> o)); +// } +// +// private List getEquipVariableCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { +// +// List equipmentVariableList = productionProcessContext.getEquipVariableList(); +// +// Map> cfgMap = getEquipmentVariableCfgMap(reqBean, productionProcessContext); +// +// List equipVariableCollectContextList = null; +// for (MesEquipmentVariable equipmentVariable : equipmentVariableList) { +// if (null == equipmentVariable) continue; +// +// //一个数据变量如果匹配多个接口逻辑信息,验证接口逻辑信息配置的常变值是否统一 +// List filterList = getEquipmentVariableCfgListByMap(cfgMap, equipmentVariable.getCategoryLevelTwo(), equipmentVariable.getVariableCfgType()); +// if (!CollectionUtils.isEmpty(filterList) && filterList.size() > 1 && (filterList.stream().filter(o -> null != o).map(MesEquipmentVariableCfg::getNeedNewValue).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()).size() > 1) +// return productionProcessContext.message(String.format("请检查设备[%s]的数据变量接口逻辑信息,设备变量配置类型[%s],二级变量[%s]关联的多个变量类别对应的常变值未配置统一!", +// equipmentVariable.getEquipmentCode(), equipmentVariable.getVariableCfgType(), equipmentVariable.getCategoryLevelTwo())).getEquipVariableCfgCollectList(); +// +// MesEquipVariableCfgCollectLogContext collectContext = new MesEquipVariableCfgCollectLogContext(equipmentVariable.getId()); +// BeanUtils.copyProperties(equipmentVariable, collectContext); +// collectContext.needNewValue(!CollectionUtils.isEmpty(filterList) ? filterList.get(0).getNeedNewValue() : MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue()); +// +// if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>(); +// equipVariableCollectContextList.add(collectContext); +// } +// +// //生产过程上下文对象赋值 设备数据变量平铺接口逻辑与采集信息 +// productionProcessContext.equipVariableCfgCollectJson(equipVariableCollectContextList); +// +// return equipVariableCollectContextList; +// } +// +// public Map> getEquipmentVariableCfgMap(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) { +// List equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgList(); +// return CollectionUtils.isEmpty(equipmentVariableCfgList) ? null : +// equipmentVariableCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getCategoryLevelTwo()).add(o.getVariableCfgType()).toString())); +// } +// +// +// public MesEquipmentVariableCfg execMatchEquipmentVariableCfgValue(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesEquipVariableCfgCollectLogContext collectContext, Map> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue) { +// return null; +// } +// +// public MesEquipmentVariableCfg execMatchEquipmentVariableCfgValue(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, +// MesEquipVariableCfgCollectLogContext collectContext, Map> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue) { +// List equipmentVariableCfgList = getEquipmentVariableCfgListByMap(equipmentVariableCfgMap, collectContext.getCategoryLevelTwo(), collectContext.getVariableCfgType()); +// if (isNeedVariableCfgValue && CollectionUtils.isEmpty(CollectionUtils.isEmpty(equipmentVariableCfgList) ? null : equipmentVariableCfgList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getValue()))).collect(Collectors.toList()))) { +// productionProcessContext.message(String.format("请检查设备数据变量接口逻辑信息,设备变量配置类型[%s],二级变量[%s]对应的信息未配置参考值", collectContext.getVariableCfgType(), collectContext.getCategoryLevelTwo())); +// return null; +// } +// Optional optional = equipmentVariableCfgList.stream().filter(o -> (null != o && o.getValue().equals(collectContext.getEquipVariableValue()))).findFirst(); +// return null != optional && optional.isPresent() ? optional.get() : null; +// } +// +// private List getEquipmentVariableCfgListByMap(Map> equipmentVariableCfgMap, String categoryLevelTwo, String variableCfgType) { +// return CollectionUtils.isEmpty(equipmentVariableCfgMap) ? null : equipmentVariableCfgMap.get(new StringJoiner(MesPcnExtConstWords.AND).add(categoryLevelTwo).add(variableCfgType).toString()); +// } } 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/MesEquipVariableCfgCollectLogContext.java similarity index 61% rename from modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java rename to modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCfgCollectLogContext.java index 040b466..7f3954c 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/MesEquipVariableCfgCollectLogContext.java @@ -4,21 +4,33 @@ import io.swagger.annotations.ApiParam; import lombok.Data; /** - * 生产过程上下文对象-设备数据变量平铺接口逻辑与采集信息 + * 生产过程上下文对象-设备数据变量接口逻辑采集设备LOG信息 */ @Data -public class MesEquipVariableCollectContext { +public class MesEquipVariableCfgCollectLogContext { @ApiParam("组织代码") private String organizeCode; - @ApiParam("设备变量ID") - private Long equipVariableId; + @ApiParam("变量类别") + private String variableCategory; + + @ApiParam("二级变量") + private String categoryLevelTwo; + + @ApiParam("规则类别") + private String ruleCategory; + + @ApiParam("参考值") + private String value; + + @ApiParam("是否常变值") + private Integer needNewValue; @ApiParam("设备ID") private Integer equipId; - @ApiParam("OPC注册ID") + @ApiParam("OPC注册ID(设备LOG表的主键)") private Integer clientHandle; @ApiParam("设备代码") @@ -27,23 +39,32 @@ public class MesEquipVariableCollectContext { @ApiParam("通道") private String channel; - @ApiParam("通道") + @ApiParam("终端") private String device; @ApiParam("tag名称") private String tagName; - @ApiParam("变量配置类型") - private String variableCfgType; + @ApiParam("tag地址") + private String tagAddress; @ApiParam("变量类型") private Integer variableType; - @ApiParam("二级变量") - private String categoryLevelTwo; + @ApiParam("数据类型") + private Integer variableDataType; - @ApiParam("是否常变值") - private Integer needNewValue; + @ApiParam("DB块") + private String code; + + @ApiParam("轮询时间") + private Integer scanInterval; + + @ApiParam("读写类型") + private Integer readWrite; + + @ApiParam("设备变量ID") + private Long equipVariableId; @ApiParam("设备变量名称") private String equipVariableName; @@ -63,21 +84,8 @@ public class MesEquipVariableCollectContext { @ApiParam("设备质量") private Integer quality; - public MesEquipVariableCollectContext(Long equipVariableId) { + public MesEquipVariableCfgCollectLogContext(Long equipVariableId) { this.equipVariableId = equipVariableId; } - public MesEquipVariableCollectContext needNewValue(Integer needNewValue) { - this.needNewValue = needNewValue; - return this; - } - - public void clear() { - this.equipVariableName = null; - this.equipVariableDesc = null; - this.readWriteFlag = null; - this.dataType = null; - this.equipVariableValue = null; - this.quality = null; - } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java index 573c486..5843518 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java @@ -10,8 +10,10 @@ import lombok.Data; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.TreeSet; import java.util.stream.Collectors; /** @@ -29,13 +31,13 @@ public class MesProductionProcessContext { @ApiParam("组织代码") private String organizeCode; - @ApiParam("生产线信息") + @ApiParam("生产线信息([Json]MesWorkCenter)") private String workCenterJson; - @ApiParam("工位信息") + @ApiParam("工位信息([Json]MesWorkCell)") private String workCellJson; - @ApiParam("工位设备集合信息") + @ApiParam("工位设备信息([Json]List)") private String cellEquipListJson; @ApiParam("工序代码") @@ -50,17 +52,14 @@ public class MesProductionProcessContext { @ApiParam("工艺代码") private String craftName; - @ApiParam("当前工位设备信息") + @ApiParam("当前工位设备对象([Json]MesCellEquipContext)") private String curCellEquipJson; - @ApiParam("设备变量信息") - private String equipVariableJson; - - @ApiParam("变量接口逻辑信息") + @ApiParam("变量接口逻辑信息([Json]List)") private String equipVariableCfgJson; - @ApiParam("变量接口逻辑采集信息") - private String equipVariableCfgCollectJson; + @ApiParam("设备变量集合信息([Json]List)") + private String equipVariableJson; @ApiParam("头道模具号") private String firstMouldNo; @@ -89,122 +88,158 @@ public class MesProductionProcessContext { @ApiParam("零件条码信息") private String produceSnJson; - - public MesProductionProcessContext() {} public MesProductionProcessContext(String organizeCode) { this.organizeCode = organizeCode; } + //上下文信息结果初始化 public MesProductionProcessContext success() { this.success = true; this.message = null; return this; } + //上下文信息结果信息赋值后给工步使用 public MesProductionProcessContext message(String message) { this.success = false; this.message = message; return this; } + //从上下文中取出生产线对象 public MesWorkCenter getWorkCenter() { return StringUtils.isEmpty(this.workCenterJson) ? null : JSONObject.parseObject(this.workCenterJson, MesWorkCenter.class); } + //上下文赋值生产线对象 public MesProductionProcessContext workCenterJson(MesWorkCenter workCenter) { this.workCenterJson = null != workCenter ? JSONObject.toJSONString(workCenter) : null; return this; } + //从上下文中取出工位对象 public MesWorkCell getWorkCell() { return StringUtils.isEmpty(this.workCellJson) ? null : JSONObject.parseObject(this.workCellJson, MesWorkCell.class); } + //上下文赋值工位对象 public MesProductionProcessContext workCellJson(MesWorkCell workCell) { this.workCellJson = null != workCell ? JSONObject.toJSONString(workCell) : null; return this; } + //上下文赋值工序信息 + public MesProductionProcessContext processCode(String processCode, String processName) { + this.processCode = processCode; + this.processName = processName; + return this; + } + + //上下文赋值工艺信息 + public MesProductionProcessContext craftCode(String craftCode, String craftName) { + this.craftCode = craftCode; + this.craftName = craftName; + return this; + } + + //从上下文中取出工位设备对象集合 private List getCellEquipList() { return StringUtils.isEmpty(this.cellEquipListJson) ? null : JSONObject.parseArray(this.cellEquipListJson, MesCellEquipContext.class); } + //上下文赋值工位设备对象集合 public MesProductionProcessContext cellEquipListJson(List cellEquipList) { this.cellEquipListJson = !CollectionUtils.isEmpty(cellEquipList) ? JSONObject.toJSONString(cellEquipList) : null; return this; } + //从上下文中的工位设备对象集合中取出当前要使用的设备 public MesCellEquipContext filterCurCellEquip() { List cellEquipList = getCellEquipList(); if (CollectionUtils.isEmpty(cellEquipList) || cellEquipList.size() == 1) return filterCurCellEquip(cellEquipList); return filterCurCellEquip(cellEquipList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getSeq()))).sorted(Comparator.comparing(MesCellEquipContext::getSeq)).collect(Collectors.toList())); } + //从上下文中的工位设备对象集合中根据设备代码取出当前要使用的设备 public MesCellEquipContext filterCurCellEquip(String equipmentCode) { if (StringUtils.isEmpty(equipmentCode)) return filterCurCellEquip(); List cellEquipList = getCellEquipList(); return filterCurCellEquip(CollectionUtils.isEmpty(cellEquipList) ? null : cellEquipList.stream().filter(o -> (null != o && o.getEquipmentCode().equals(equipmentCode))).collect(Collectors.toList())); } + //从上下文中的工位设备对象集合中取出第一个设备 private MesCellEquipContext filterCurCellEquip(List cellEquipContextList) { return CollectionUtils.isEmpty(cellEquipContextList) ? null : cellEquipContextList.get(0); } + //从上下文中取出工位当前要使用的设备 public MesCellEquipContext getCurCellEquip() { return StringUtils.isEmpty(this.curCellEquipJson) ? null : JSONObject.parseObject(this.curCellEquipJson, MesCellEquipContext.class); } + //上下文赋值工位当前要使用的设备 public MesProductionProcessContext curCellEquipJson(MesCellEquipContext curEquip) { this.curCellEquipJson = null != curEquip ? JSONObject.toJSONString(curEquip) : null; return this; } - public MesProductionProcessContext processCode(String processCode, String processName) { - this.processCode = processCode; - this.processName = processName; - return this; - } - - public MesProductionProcessContext craftCode(String craftCode, String craftName) { - this.craftCode = craftCode; - this.craftName = craftName; - return this; + //从上下文中取出设备数据变量接口逻辑集合 + private List getEquipVariableCfgList() { + return StringUtils.isEmpty(this.equipVariableCfgJson) ? null : JSONObject.parseArray(this.equipVariableCfgJson, MesEquipmentVariableCfg.class); } - public List getEquipVariableList() { - return StringUtils.isEmpty(this.equipVariableJson) ? null : JSONObject.parseArray(this.equipVariableJson, MesEquipmentVariable.class); + //从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合 + public List getEquipVariableCfgListByVct() { + MesCellEquipContext cellEquipContext = getCurCellEquip(); + return null == cellEquipContext ? null : getEquipVariableCfgListByVct(cellEquipContext.getVariableCfgType()); } - public MesProductionProcessContext equipVariableJson(List equipmentVariableList) { - if (CollectionUtils.isEmpty(equipmentVariableList)) return this; - if (!StringUtils.isEmpty(this.equipVariableJson)) equipmentVariableList.addAll(getEquipVariableList()); - this.equipVariableJson = JSONObject.toJSONString(equipmentVariableList); - return this; - } - - public List getEquipVariableCfgList() { - return StringUtils.isEmpty(this.equipVariableCfgJson) ? null : JSONObject.parseArray(this.equipVariableCfgJson, MesEquipmentVariableCfg.class); + //从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合 + public List getEquipVariableCfgListByVct(String variableCfgType) { + List equipmentVariableCfgList = getEquipVariableCfgList(); + return (StringUtils.isEmpty(variableCfgType) || CollectionUtils.isEmpty(equipmentVariableCfgList)) ? null : + equipmentVariableCfgList.stream().filter(o -> (null != o && o.getVariableCfgType().equals(variableCfgType))).collect(Collectors.toList()); } + //上下文赋值数据变量接口逻辑对象集合 public MesProductionProcessContext equipVariableCfgJson(List equipmentVariableCfgList) { if (CollectionUtils.isEmpty(equipmentVariableCfgList)) return this; if (!StringUtils.isEmpty(this.equipVariableCfgJson)) equipmentVariableCfgList.addAll(getEquipVariableCfgList()); + equipmentVariableCfgList = equipmentVariableCfgList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesEquipmentVariableCfg::getModifyDatetime).reversed()).collect(Collectors.toList()); + equipmentVariableCfgList = equipmentVariableCfgList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesEquipmentVariableCfg::getId))), ArrayList::new)); this.equipVariableCfgJson = JSONObject.toJSONString(equipmentVariableCfgList); return this; } - public List getEquipVariableCfgCollectList() { - if (StringUtils.isEmpty(this.equipVariableCfgCollectJson)) return null; - List equipVariableCollectContextList = JSONObject.parseArray(this.equipVariableCfgCollectJson, MesEquipVariableCollectContext.class); - return equipVariableCollectContextList; + //从上下文中取出设备数据变量对象集合 + private List getEquipVariableList() { + return StringUtils.isEmpty(this.equipVariableJson) ? null : JSONObject.parseArray(this.equipVariableJson, MesEquipmentVariable.class); } - public MesProductionProcessContext equipVariableCfgCollectJson(List equipVariableCollectContextList) { - this.equipVariableCfgCollectJson = !CollectionUtils.isEmpty(equipVariableCollectContextList) ? JSONObject.toJSONString(equipVariableCollectContextList) : null; - return this; + //从上下文的设备数据变量对象集合中取出当前设备对应具体变量类型的数据变量对象集合 + public List getEquipVariableListByEquVt(Integer variableType) { + MesCellEquipContext cellEquipContext = getCurCellEquip(); + return (null == cellEquipContext || StringUtils.isEmpty(variableType)) ? null : getEquipVariableListByEquVt(cellEquipContext.getEquipmentCode(), variableType); } + //从上下文的设备数据变量对象集合中取出当前设备对应具体变量类型的数据变量对象集合 + public List getEquipVariableListByEquVt(String equipmentCode, Integer variableType) { + List equipmentVariableList = getEquipVariableList(); + return (StringUtils.isEmpty(equipmentCode) || null == variableType || CollectionUtils.isEmpty(equipmentVariableList)) ? null : + equipmentVariableList.stream().filter(o -> (null != o && o.getEquipmentCode().equals(equipmentCode) && o.getVariableType().compareTo(variableType) == 0)).collect(Collectors.toList()); + } + + //上下文赋值数据变量对象集合 + public MesProductionProcessContext equipVariableJson(List equipmentVariableList) { + equipmentVariableList = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCategoryLevelTwo()))).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(equipmentVariableList)) return this; + if (!StringUtils.isEmpty(this.equipVariableJson)) equipmentVariableList.addAll(getEquipVariableList()); + equipmentVariableList = equipmentVariableList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesEquipmentVariable::getModifyDatetime).reversed()).collect(Collectors.toList()); + equipmentVariableList = equipmentVariableList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesEquipmentVariable::getId))), ArrayList::new)); + this.equipVariableJson = JSONObject.toJSONString(equipmentVariableList); + return this; + } }