diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IEquipmentLogExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IEquipmentLogExtService.java deleted file mode 100644 index 555516c..0000000 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IEquipmentLogExtService.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.api.base; - -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog; -import io.swagger.annotations.ApiOperation; - -import java.util.ArrayList; -import java.util.List; - -public interface IEquipmentLogExtService { - - @ApiOperation(value = "根据设备ID 查询设备ID分表所有采集数据") - List getEquipmentLogList(String organizeCode, Integer equipId); - - @ApiOperation(value = "根据设备ID,是否常变值状态,OPC注册ID集合 查询设备ID分表采集数据") - List getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List clientHandleList); - - @ApiOperation(value = "根据设备ID,OPC注册ID集合 修改设备ID分表采集数据的状态") - void updateEquipmentLogList(String organizeCode, Integer equipId, List clientHandleList); - -} 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/IMesEquipmentExtService.java similarity index 95% rename from modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IEquipmentExtService.java rename to modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java index ff490ec..e0c8039 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/IMesEquipmentExtService.java @@ -7,7 +7,7 @@ import io.swagger.annotations.ApiOperation; import java.util.List; -public interface IEquipmentExtService { +public interface IMesEquipmentExtService { @ApiOperation(value = "根据生产线代码,工位代码查询工位设备集合") List getCellEquipmentList(String organizeCode, String workCenterCode, String workCellCode); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IProdOrgExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java similarity index 94% rename from modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IProdOrgExtService.java rename to modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java index 9a85d0a..a1031f3 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IProdOrgExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java @@ -6,7 +6,7 @@ import io.swagger.annotations.ApiOperation; import java.util.List; -public interface IProdOrgExtService { +public interface IMesProdOrgExtService { @ApiOperation(value = "根据生产线代码查询工位集合") List findWorkCell(String organizeCode, String workCenterCode); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipVariableCfgRuleMatchDispatchService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipVariableCfgRuleMatchDispatchService.java new file mode 100644 index 0000000..1bab6c1 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipVariableCfgRuleMatchDispatchService.java @@ -0,0 +1,15 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +public interface IMesEquipVariableCfgRuleMatchDispatchService { + + @ApiOperation(value = "设备数据变量接口逻辑根据变量类别规则匹配") + Boolean matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List collectContextList); + +} 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 new file mode 100644 index 0000000..95dd788 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEquipmentLogExtService.java @@ -0,0 +1,27 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog; +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 { + + @ApiOperation(value = "根据设备ID 查询设备ID分表所有采集数据") + List getEquipmentLogList(String organizeCode, Integer equipId); + + @ApiOperation(value = "根据设备ID,是否常变值状态,OPC注册ID集合 查询设备ID分表采集数据") + List getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List clientHandleList); + + @ApiOperation(value = "根据设备ID,OPC注册ID集合 修改设备ID分表采集数据的状态") + void updateEquipmentLogList(String organizeCode, Integer equipId, List clientHandleList); + + @ApiOperation(value = "获取设备数据变量对应的采集数据") + List doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List equipmentVariableList, List equipmentVariableCfgList); + +} 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 7451cee..096a626 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,7 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; 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; @@ -12,6 +11,9 @@ import java.util.List; public interface IMesProductionProcessContextStepService { + @ApiOperation(value = "存储上下文对象【工步根据业务实际情况执行,配置错误等情况无需执行】") + Boolean doCacheContext(StationRequestBean reqBean, Object o); + @ApiOperation(value = "获取生产过程上下文对象") MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean); @@ -42,14 +44,14 @@ public interface IMesProductionProcessContextStepService { @ApiOperation(value = "获取设备数据变量接口逻辑信息") MesProductionProcessContext getEquipmentVariableCfgList(MesProductionProcessContext productionProcessContext); - @ApiOperation(value = "根据变量类别过滤设备数据变量接口逻辑信息") - List filterEquipmentVariableCfgList(List equipmentVariableCfgList, String... variableCategory); + @ApiOperation(value = "根据变量类别搜集设备数据变量接口逻辑信息") + List collectEquipmentVariableCfgList(List equipmentVariableCfgList, String... variableCategory); @ApiOperation(value = "验证设备数据变量接口逻辑信息中是否存在必要的变量类型信息") MesProductionProcessContext checkNecessaryEquipmentVariableCfg(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List equipmentVariableCfgList, String... variableCategory); - @ApiOperation(value = "过滤设备数据变量接口逻辑信息中的二级变量") - List filterCategoryLevelTwoList(List equipmentVariableCfgList); + @ApiOperation(value = "搜集设备数据变量接口逻辑信息中的二级变量") + List collectCategoryLevelTwoList(List equipmentVariableCfgList); @ApiOperation(value = "获取设备数据变量信息") MesProductionProcessContext getEquipmentVariableList(StationRequestBean reqBean, Integer variableType); @@ -66,6 +68,4 @@ public interface IMesProductionProcessContextStepService { @ApiOperation(value = "获取设备数据变量信息") List findEquipmentVariableList(List equipmentVariableList, Integer variableType, List categoryLevelTwoList); - @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/controller/base/ProdOrgExtController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/ProdOrgExtController.java index 12936bc..4cea7a9 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/ProdOrgExtController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/base/ProdOrgExtController.java @@ -1,6 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.base; -import cn.estsh.i3plus.ext.mes.pcn.api.base.IProdOrgExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; @@ -29,7 +29,7 @@ import java.util.List; public class ProdOrgExtController extends MesPcnBaseController { @Autowired - private IProdOrgExtService organizeService; + private IMesProdOrgExtService organizeService; @GetMapping({"/ext/query-work-cell-by-center"}) @ApiOperation( diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/EquipmentLogExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/EquipmentLogExtService.java deleted file mode 100644 index 94cb293..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/EquipmentLogExtService.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; - -import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentLogExtService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; -import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog; -import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogRepository; -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 org.springframework.util.CollectionUtils; - -import java.util.List; - -@Slf4j -@Service -public class EquipmentLogExtService implements IEquipmentLogExtService { - - @Autowired - private MesEquipmentLogRepository equipmentLogRepository; - - @Override - public List getEquipmentLogList(String organizeCode, Integer equipId) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean); - return equipmentLogRepository.findByHqlWhere(packBean); - } - - @Override - public List getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List clientHandleList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean); - if (!CollectionUtils.isEmpty(clientHandleList) && clientHandleList.size() == 1) DdlPreparedPack.getNumEqualPack(clientHandleList.get(0), MesPcnExtConstWords.ID, packBean); - else DdlPreparedPack.getInPackList(clientHandleList, MesPcnExtConstWords.ID, packBean); - if (MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue() == needNewValue) DdlPreparedPack.getNumEqualPack(MesPcnExtConstWords.ZERO, MesPcnExtConstWords.EQUIP_VARIABLE_STATUS, packBean); - return equipmentLogRepository.findByHqlWhere(packBean); - } - - @Override - public void updateEquipmentLogList(String organizeCode, Integer equipId, List clientHandleList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean); - if (!CollectionUtils.isEmpty(clientHandleList) && clientHandleList.size() == 1) DdlPreparedPack.getNumEqualPack(clientHandleList.get(0), MesPcnExtConstWords.ID, packBean); - else DdlPreparedPack.getInPackList(clientHandleList, MesPcnExtConstWords.ID, packBean); - equipmentLogRepository.updateByProperties(new String[]{MesPcnExtConstWords.EQUIP_VARIABLE_STATUS}, new Object[]{MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue()}, packBean); - } -} 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/MesEquipmentExtService.java similarity index 97% rename from modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/EquipmentExtService.java rename to modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java index 21d26a4..7556712 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/MesEquipmentExtService.java @@ -1,6 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; -import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; @@ -26,7 +26,7 @@ import java.util.List; @Slf4j @Service -public class EquipmentExtService implements IEquipmentExtService { +public class MesEquipmentExtService implements IMesEquipmentExtService { @Autowired private MesWcEquipmentRepository wcEquipmentRepository; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ProdOrgExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java similarity index 95% rename from modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ProdOrgExtService.java rename to modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java index 6eea734..2784279 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ProdOrgExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java @@ -1,6 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; -import cn.estsh.i3plus.ext.mes.pcn.api.base.IProdOrgExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -19,7 +19,7 @@ import java.util.List; @Slf4j @Service -public class ProdOrgExtService implements IProdOrgExtService { +public class MesProdOrgExtService implements IMesProdOrgExtService { @Autowired private MesWorkCenterRepository workCenterRepository; 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 new file mode 100644 index 0000000..40eae16 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentLogExtService.java @@ -0,0 +1,133 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog; + +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.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; +import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogRepository; +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.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class MesEquipmentLogExtService implements IMesEquipmentLogExtService { + + @Autowired + private MesEquipmentLogRepository equipmentLogRepository; + + @Override + public List getEquipmentLogList(String organizeCode, Integer equipId) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean); + return equipmentLogRepository.findByHqlWhere(packBean); + } + + @Override + public List getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List clientHandleList) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || CollectionUtils.isEmpty(clientHandleList)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean); + if (!CollectionUtils.isEmpty(clientHandleList) && clientHandleList.size() == 1) DdlPreparedPack.getNumEqualPack(clientHandleList.get(0), MesPcnExtConstWords.ID, packBean); + else DdlPreparedPack.getInPackList(clientHandleList, MesPcnExtConstWords.ID, packBean); + if (!StringUtils.isEmpty(needNewValue) && MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue() == needNewValue) DdlPreparedPack.getNumEqualPack(MesPcnExtConstWords.ZERO, MesPcnExtConstWords.EQUIP_VARIABLE_STATUS, packBean); + return equipmentLogRepository.findByHqlWhere(packBean); + } + + @Override + public void updateEquipmentLogList(String organizeCode, Integer equipId, List clientHandleList) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || CollectionUtils.isEmpty(clientHandleList)) return; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean); + if (!CollectionUtils.isEmpty(clientHandleList) && clientHandleList.size() == 1) DdlPreparedPack.getNumEqualPack(clientHandleList.get(0), MesPcnExtConstWords.ID, packBean); + else DdlPreparedPack.getInPackList(clientHandleList, MesPcnExtConstWords.ID, packBean); + equipmentLogRepository.updateByProperties(new String[]{MesPcnExtConstWords.EQUIP_VARIABLE_STATUS}, new Object[]{MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue()}, packBean); + } + + @Override + public List doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List equipmentVariableList, List equipmentVariableCfgList) { + + if (CollectionUtils.isEmpty(equipmentVariableList) || CollectionUtils.isEmpty(equipmentVariableCfgList)) return null; + + //封装数据变量接口逻辑、数据变量、设备LOG信息的嵌套对象集合 + List collectContextList = generateEquipVariableCfgCollectLogContextList(equipmentVariableList, equipmentVariableCfgList); + + //根据常变值分别获取设备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())); + + 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()))); + } + + return collectContextList; + } + + private List generateEquipVariableCfgCollectLogContextList(List equipmentVariableList, List equipmentVariableCfgList) { + + List equipVariableCollectContextList = null; + + Map> categoryLevelTwoMap = equipmentVariableList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipmentVariable::getCategoryLevelTwo)); + + for (MesEquipmentVariableCfg equipmentVariableCfg : equipmentVariableCfgList) { + + if (null == equipmentVariableCfg) continue; + + MesEquipVariableCfgCollectContext equipVariableCfgCollect = new MesEquipVariableCfgCollectContext(); + BeanUtils.copyProperties(equipmentVariableCfg, equipVariableCfgCollect); + equipVariableCfgCollect.equipVariableCollectContextList(categoryLevelTwoMap.get(equipmentVariableCfg.getCategoryLevelTwo())); + + if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>(); + equipVariableCollectContextList.add(equipVariableCfgCollect); + } + + return equipVariableCollectContextList; + + } + + private MesEquipmentLog filterEquipmentLog(Map needNewValue2Collect, Map unNeedNewValue2Collect, Integer clientHandle, Integer needNewValue) { + if (!StringUtils.isEmpty(needNewValue) && MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue() == needNewValue) return filterEquipmentLog(needNewValue2Collect, clientHandle); + else return filterEquipmentLog(unNeedNewValue2Collect, clientHandle); + } + + private MesEquipmentLog filterEquipmentLog(Map collectMap, Integer clientHandle) { + return !CollectionUtils.isEmpty(collectMap) ? collectMap.get(Long.valueOf(clientHandle.toString())) : null; + } + + private Map getEquipmentLog(MesCellEquipContext cellEquipContext, 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 = getEquipmentLogList(cellEquipContext.getOrganizeCode(), cellEquipContext.getEquipId(), needNewValue, collectClientHandleList(filterList)); + return CollectionUtils.isEmpty(equipmentLogList) ? null : equipmentLogList.stream().filter(o -> null != o).collect(Collectors.toMap(MesEquipmentLog::getId, o -> o)); + } + + private List collectClientHandleList(List equipVariableCollectContextList) { + List clientHandleList = null; + for (MesEquipVariableCfgCollectContext equipVariableCfgCollectContext : equipVariableCollectContextList) { + if (null == equipVariableCfgCollectContext || CollectionUtils.isEmpty(equipVariableCfgCollectContext.getClientHandleList())) continue; + if (CollectionUtils.isEmpty(clientHandleList)) clientHandleList = new ArrayList<>(); + clientHandleList.addAll(equipVariableCfgCollectContext.getClientHandleList()); + } + return CollectionUtils.isEmpty(clientHandleList) ? null : clientHandleList.stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEquipVariableCfgRuleMatchDispatchService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEquipVariableCfgRuleMatchDispatchService.java new file mode 100644 index 0000000..493d2e5 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEquipVariableCfgRuleMatchDispatchService.java @@ -0,0 +1,44 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Primary +@Service +public class MesEquipVariableCfgRuleMatchDispatchService implements IMesEquipVariableCfgRuleMatchDispatchService { + + private Boolean matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List collectContextList, String strategyClass) { + return ((IMesEquipVariableCfgRuleMatchDispatchService) SpringContextsUtil.getBean(strategyClass)).matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList); + } + + @Override + public Boolean matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List collectContextList) { + + switch (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.getByValue(variableCategory)) { + + case PRODUCT_OK: + case PRODUCT_NOK: + case PRODUCT_SCRAP: + case PRODUCT_SUSPICIOUS: + return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, "mesEvcRuleMatchProductionResultService"); + + //TODO CASE 数据变量接口逻辑根据变量类别实现策略 + + default: + return false; + + } + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEvcRuleMatchProductionResultService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEvcRuleMatchProductionResultService.java new file mode 100644 index 0000000..e464a1d --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEvcRuleMatchProductionResultService.java @@ -0,0 +1,76 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService; +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.pojo.mes.model.StationRequestBean; +import lombok.extern.slf4j.Slf4j; +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.stream.Collectors; + +@Slf4j +@Service +public class MesEvcRuleMatchProductionResultService implements IMesEquipVariableCfgRuleMatchDispatchService { + + @Override + public Boolean matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List collectContextList) { + + Map> ruleCategoryMap = collectContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCfgCollectContext::getRuleCategory)); + + for(Map.Entry> entry : ruleCategoryMap.entrySet()) { + + if (null == entry) continue; + + //任意一组规则全部匹配 + if (matchEquipVariableCfgCollectContext(entry.getKey(), entry.getValue())) return true; + + } + + return false; + + } + + private Boolean matchEquipVariableCfgCollectContext(String ruleCategory, List collectContextList) { + + for (MesEquipVariableCfgCollectContext collectContext : collectContextList) { + + if (null == collectContext) continue; + + //任意一个规则不匹配 + if (!matchEquipVariableCfgCollectContext(collectContext)) return false; + + } + + return true; + } + + private Boolean matchEquipVariableCfgCollectContext(MesEquipVariableCfgCollectContext collectContext) { + + if (StringUtils.isEmpty(collectContext.getValue()) || CollectionUtils.isEmpty(collectContext.getEquipVariableCollectContextList())) return false; + + //一个规则如果对应多个数据变量,则默认必须全部匹配 + for (MesEquipVariableCollectContext equipVariableCollectContext : collectContext.getEquipVariableCollectContextList()) { + + if (null == equipVariableCollectContext) continue; + + if (StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) return false; + + //比对值是否相等 + if (!compareTo(collectContext.getValue(), equipVariableCollectContext.getEquipVariableValue())) return false; + + } + + return true; + } + + private Boolean compareTo(String value1, String value2) { + return value1.toLowerCase().equals(value2.toLowerCase()) ? true : false; + } + +} 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 c279240..4f8b03e 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 @@ -1,10 +1,13 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; +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.MesEquipVariableCfgCollectLogContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext; 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; @@ -17,6 +20,8 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @Description : 读取加工结果工步 @@ -29,6 +34,12 @@ public class MesProductResultReadStepService extends BaseStepService { @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService; + @Autowired + private IMesEquipmentLogExtService equipmentLogExtService; + + @Autowired + private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService; + @Override public StepResult execute(StationRequestBean reqBean) { @@ -38,39 +49,61 @@ public class MesProductResultReadStepService extends BaseStepService { MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableCfgList(reqBean); - if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); + //获取生产过程上下文对象有异常信息 抛出异常 + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage()); List equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct(); - equipmentVariableCfgList = productionProcessContextStepService.filterEquipmentVariableCfgList(equipmentVariableCfgList, + equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(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, + //配置错误 抛出异常 + if (CollectionUtils.isEmpty(equipmentVariableCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]获取加工结果相关变量类别的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType())); + //配置错误 抛出异常 if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue()).getSuccess()) - return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); + execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage()); - List categoryLevelTwoList = productionProcessContextStepService.filterCategoryLevelTwoList(equipmentVariableCfgList); + List categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList); List equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList); - if (CollectionUtils.isEmpty(equipmentVariableList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, + //配置错误 抛出异常 + if (CollectionUtils.isEmpty(equipmentVariableList)) execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString())); - List collectContextList = productionProcessContextStepService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); + List collectContextList = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); + Map> variableCategoryMap = collectContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCfgCollectContext::getVariableCategory)); + matchVariableCategoryMap(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap); + productionProcessContextStepService.doCacheContext(reqBean, productionProcessContext); + return stepResult; + + } + private void matchVariableCategoryMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, Map> variableCategoryMap) { + for (Map.Entry> entry : variableCategoryMap.entrySet()) { + if (null == entry) continue; + if (!equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, entry.getKey(), entry.getValue())) continue; + if (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue().equals(entry.getKey())) + execNonCompleteAndSendMsg(reqBean, resultBean, stepResult, String.format("%s!", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getDescription())); + else execDynamicsCompleteAndSendMsg(reqBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, + MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue().equals(entry.getKey()) ? MesPcnEnumUtil.STATION_DATA_TYPE.TEXT : MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, + String.format("%s", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey()))); + } + //设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点 + execNonCompleteAndSendMsg(reqBean, resultBean, stepResult.stateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE), String.format("读取设备[%s]数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode())); - return stepResult; } 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 d98653b..a5cdaa3 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 @@ -1,17 +1,17 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentExtService; -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.base.IMesEquipmentExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService; +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.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 com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -33,16 +33,19 @@ import java.util.stream.Collectors; public class MesProductionProcessContextStepService extends BaseStepService implements IMesProductionProcessContextStepService { @Autowired - private IProdOrgExtService prodOrgExtService; + private IMesProdOrgExtService prodOrgExtService; @Autowired - private IEquipmentExtService equipmentExtService; + private IMesEquipmentExtService equipmentExtService; @Autowired private IFsmRouteDataService fsmRouteDataService; @Autowired - private IEquipmentLogExtService equipmentLogExtService; + private IMesEquipmentLogExtService equipmentLogExtService; + + @Override + public Boolean doCacheContext(StationRequestBean reqBean, Object o) { return saveFsmBusiData(reqBean.getOrganizeCode(), getFsmBusikey(reqBean, o.getClass().getSimpleName()), JSONObject.toJSONString(o)); } @Override public MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean) { @@ -179,7 +182,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl } @Override - public List filterEquipmentVariableCfgList(List equipmentVariableCfgList, String... variableCategory) { + public List collectEquipmentVariableCfgList(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()); } @@ -192,7 +195,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl } @Override - public List filterCategoryLevelTwoList(List equipmentVariableCfgList) { + public List collectCategoryLevelTwoList(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()); } @@ -253,136 +256,4 @@ 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 List doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List equipmentVariableList, List equipmentVariableCfgList) { - - //List collectContextList = generateEquipVariableCfgCollectLogContextList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); - - - - - - return null; - } - -// 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/MesEquipVariableCfgCollectContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCfgCollectContext.java new file mode 100644 index 0000000..0dbcc21 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCfgCollectContext.java @@ -0,0 +1,58 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.context; + +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import org.springframework.beans.BeanUtils; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * 生产过程上下文对象-数据变量接口逻辑信息 + */ +@Data +public class MesEquipVariableCfgCollectContext { + + @ApiParam("组织代码") + private String organizeCode; + + @ApiParam("变量配置类型") + private String variableCfgType; + + @ApiParam("变量类别") + private String variableCategory; + + @ApiParam("二级变量") + private String categoryLevelTwo; + + @ApiParam("规则类别") + private String ruleCategory; + + @ApiParam("参考值") + private String value; + + @ApiParam("是否常变值") + private Integer needNewValue; + + @ApiParam("数据变量集合") + private List equipVariableCollectContextList; + + @ApiParam("数据变量OPC注册ID集合") + private List clientHandleList; + + public MesEquipVariableCfgCollectContext equipVariableCollectContextList(List equipVariableList) { + if (CollectionUtils.isEmpty(equipVariableList)) return this; + this.equipVariableCollectContextList = new ArrayList<>(); + this.clientHandleList = new ArrayList<>(); + for (MesEquipmentVariable equipmentVariable : equipVariableList) { + if (null == equipmentVariable) continue; + MesEquipVariableCollectContext equipVariableCollectContext = new MesEquipVariableCollectContext(equipmentVariable.getId()); + BeanUtils.copyProperties(equipmentVariable, equipVariableCollectContext); + equipVariableCollectContextList.add(equipVariableCollectContext); + clientHandleList.add(Long.valueOf(equipmentVariable.getClientHandle().toString())); + } + return this; + } +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCfgCollectLogContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java similarity index 71% rename from modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCfgCollectLogContext.java rename to modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java index 7f3954c..88fe2ec 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCfgCollectLogContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java @@ -1,31 +1,21 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog; import io.swagger.annotations.ApiParam; import lombok.Data; +import org.springframework.beans.BeanUtils; /** - * 生产过程上下文对象-设备数据变量接口逻辑采集设备LOG信息 + * 生产过程上下文对象-数据变量平铺设备LOG信息 */ @Data -public class MesEquipVariableCfgCollectLogContext { +public class MesEquipVariableCollectContext { @ApiParam("组织代码") private String organizeCode; - @ApiParam("变量类别") - private String variableCategory; - - @ApiParam("二级变量") - private String categoryLevelTwo; - - @ApiParam("规则类别") - private String ruleCategory; - - @ApiParam("参考值") - private String value; - - @ApiParam("是否常变值") - private Integer needNewValue; + @ApiParam("设备变量ID") + private Long equipVariableId; @ApiParam("设备ID") private Integer equipId; @@ -48,9 +38,15 @@ public class MesEquipVariableCfgCollectLogContext { @ApiParam("tag地址") private String tagAddress; + @ApiParam("变量配置类型") + private String variableCfgType; + @ApiParam("变量类型") private Integer variableType; + @ApiParam("二级变量") + private String categoryLevelTwo; + @ApiParam("数据类型") private Integer variableDataType; @@ -63,9 +59,6 @@ public class MesEquipVariableCfgCollectLogContext { @ApiParam("读写类型") private Integer readWrite; - @ApiParam("设备变量ID") - private Long equipVariableId; - @ApiParam("设备变量名称") private String equipVariableName; @@ -81,11 +74,20 @@ public class MesEquipVariableCfgCollectLogContext { @ApiParam("变量当前值") private String equipVariableValue; + @ApiParam("变量状态") + private String equipVariableStatus; + @ApiParam("设备质量") private Integer quality; - public MesEquipVariableCfgCollectLogContext(Long equipVariableId) { + public MesEquipVariableCollectContext() {} + + public MesEquipVariableCollectContext(Long equipVariableId) { this.equipVariableId = equipVariableId; } + public void copyValue(MesEquipmentLog equipmentLog) { + if (null == equipmentLog) return; + BeanUtils.copyProperties(equipmentLog, this); + } } 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 5843518..7cdf75c 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 @@ -101,6 +101,12 @@ public class MesProductionProcessContext { return this; } + //手动赋结果 + public MesProductionProcessContext success(Boolean success) { + this.success = success; + return this; + } + //上下文信息结果信息赋值后给工步使用 public MesProductionProcessContext message(String message) { this.success = false;