pcn step 读取加工结果

tags/yfai-pcn-ext-v1.0
王杰 12 months ago
parent f0f143e246
commit dd5744a9c1

@ -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<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId);
@ApiOperation(value = "根据设备ID,是否常变值状态,OPC注册ID集合 查询设备ID分表采集数据")
List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List<Integer> clientHandleList);
@ApiOperation(value = "根据设备ID,OPC注册ID集合 修改设备ID分表采集数据的状态")
void updateEquipmentLogList(String organizeCode, Integer equipId, List<Integer> clientHandleList);
}

@ -7,7 +7,7 @@ import io.swagger.annotations.ApiOperation;
import java.util.List; import java.util.List;
public interface IEquipmentExtService { public interface IMesEquipmentExtService {
@ApiOperation(value = "根据生产线代码,工位代码查询工位设备集合") @ApiOperation(value = "根据生产线代码,工位代码查询工位设备集合")
List<MesCellEquipContext> getCellEquipmentList(String organizeCode, String workCenterCode, String workCellCode); List<MesCellEquipContext> getCellEquipmentList(String organizeCode, String workCenterCode, String workCellCode);

@ -6,7 +6,7 @@ import io.swagger.annotations.ApiOperation;
import java.util.List; import java.util.List;
public interface IProdOrgExtService { public interface IMesProdOrgExtService {
@ApiOperation(value = "根据生产线代码查询工位集合") @ApiOperation(value = "根据生产线代码查询工位集合")
List<MesWorkCell> findWorkCell(String organizeCode, String workCenterCode); List<MesWorkCell> findWorkCell(String organizeCode, String workCenterCode);

@ -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<MesEquipVariableCfgCollectContext> collectContextList);
}

@ -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<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId);
@ApiOperation(value = "根据设备ID,是否常变值状态,OPC注册ID集合 查询设备ID分表采集数据")
List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List<Long> clientHandleList);
@ApiOperation(value = "根据设备ID,OPC注册ID集合 修改设备ID分表采集数据的状态")
void updateEquipmentLogList(String organizeCode, Integer equipId, List<Long> clientHandleList);
@ApiOperation(value = "获取设备数据变量对应的采集数据")
List<MesEquipVariableCfgCollectContext> doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList);
}

@ -1,7 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi; 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.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.context.MesProductionProcessContext;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
@ -12,6 +11,9 @@ import java.util.List;
public interface IMesProductionProcessContextStepService { public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "存储上下文对象【工步根据业务实际情况执行,配置错误等情况无需执行】")
Boolean doCacheContext(StationRequestBean reqBean, Object o);
@ApiOperation(value = "获取生产过程上下文对象") @ApiOperation(value = "获取生产过程上下文对象")
MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean); MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean);
@ -42,14 +44,14 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "获取设备数据变量接口逻辑信息") @ApiOperation(value = "获取设备数据变量接口逻辑信息")
MesProductionProcessContext getEquipmentVariableCfgList(MesProductionProcessContext productionProcessContext); MesProductionProcessContext getEquipmentVariableCfgList(MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "根据变量类别过滤设备数据变量接口逻辑信息") @ApiOperation(value = "根据变量类别搜集设备数据变量接口逻辑信息")
List<MesEquipmentVariableCfg> filterEquipmentVariableCfgList(List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory); List<MesEquipmentVariableCfg> collectEquipmentVariableCfgList(List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory);
@ApiOperation(value = "验证设备数据变量接口逻辑信息中是否存在必要的变量类型信息") @ApiOperation(value = "验证设备数据变量接口逻辑信息中是否存在必要的变量类型信息")
MesProductionProcessContext checkNecessaryEquipmentVariableCfg(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory); MesProductionProcessContext checkNecessaryEquipmentVariableCfg(MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory);
@ApiOperation(value = "过滤设备数据变量接口逻辑信息中的二级变量") @ApiOperation(value = "搜集设备数据变量接口逻辑信息中的二级变量")
List<String> filterCategoryLevelTwoList(List<MesEquipmentVariableCfg> equipmentVariableCfgList); List<String> collectCategoryLevelTwoList(List<MesEquipmentVariableCfg> equipmentVariableCfgList);
@ApiOperation(value = "获取设备数据变量信息") @ApiOperation(value = "获取设备数据变量信息")
MesProductionProcessContext getEquipmentVariableList(StationRequestBean reqBean, Integer variableType); MesProductionProcessContext getEquipmentVariableList(StationRequestBean reqBean, Integer variableType);
@ -66,6 +68,4 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "获取设备数据变量信息") @ApiOperation(value = "获取设备数据变量信息")
List<MesEquipmentVariable> findEquipmentVariableList(List<MesEquipmentVariable> equipmentVariableList, Integer variableType, List<String> categoryLevelTwoList); List<MesEquipmentVariable> findEquipmentVariableList(List<MesEquipmentVariable> equipmentVariableList, Integer variableType, List<String> categoryLevelTwoList);
@ApiOperation(value = "获取设备数据变量对应的采集数据")
List<MesEquipVariableCfgCollectLogContext> doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList);
} }

@ -1,6 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.base; 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.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
@ -29,7 +29,7 @@ import java.util.List;
public class ProdOrgExtController extends MesPcnBaseController { public class ProdOrgExtController extends MesPcnBaseController {
@Autowired @Autowired
private IProdOrgExtService organizeService; private IMesProdOrgExtService organizeService;
@GetMapping({"/ext/query-work-cell-by-center"}) @GetMapping({"/ext/query-work-cell-by-center"})
@ApiOperation( @ApiOperation(

@ -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<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean);
return equipmentLogRepository.findByHqlWhere(packBean);
}
@Override
public List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List<Integer> 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<Integer> 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);
}
}

@ -1,6 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; 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.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
@ -26,7 +26,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
public class EquipmentExtService implements IEquipmentExtService { public class MesEquipmentExtService implements IMesEquipmentExtService {
@Autowired @Autowired
private MesWcEquipmentRepository wcEquipmentRepository; private MesWcEquipmentRepository wcEquipmentRepository;

@ -1,6 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; 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.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -19,7 +19,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
public class ProdOrgExtService implements IProdOrgExtService { public class MesProdOrgExtService implements IMesProdOrgExtService {
@Autowired @Autowired
private MesWorkCenterRepository workCenterRepository; private MesWorkCenterRepository workCenterRepository;

@ -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<MesEquipmentLog> 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<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List<Long> 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<Long> 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<MesEquipVariableCfgCollectContext> doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
if (CollectionUtils.isEmpty(equipmentVariableList) || CollectionUtils.isEmpty(equipmentVariableCfgList)) return null;
//封装数据变量接口逻辑、数据变量、设备LOG信息的嵌套对象集合
List<MesEquipVariableCfgCollectContext> collectContextList = generateEquipVariableCfgCollectLogContextList(equipmentVariableList, equipmentVariableCfgList);
//根据常变值分别获取设备ID分表的采集数据
Map<Long, MesEquipmentLog> needNewValue2Collect = getEquipmentLog(cellEquipContext, collectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue());
Map<Long, MesEquipmentLog> 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<MesEquipVariableCfgCollectContext> generateEquipVariableCfgCollectLogContextList(List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
List<MesEquipVariableCfgCollectContext> equipVariableCollectContextList = null;
Map<String, List<MesEquipmentVariable>> 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<Long, MesEquipmentLog> needNewValue2Collect, Map<Long, MesEquipmentLog> 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<Long, MesEquipmentLog> collectMap, Integer clientHandle) {
return !CollectionUtils.isEmpty(collectMap) ? collectMap.get(Long.valueOf(clientHandle.toString())) : null;
}
private Map<Long, MesEquipmentLog> getEquipmentLog(MesCellEquipContext cellEquipContext, List<MesEquipVariableCfgCollectContext> equipVariableCollectContextList, Integer needNewValue) {
List<MesEquipVariableCfgCollectContext> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getNeedNewValue().compareTo(needNewValue) == 0)).collect(Collectors.toList());
if (CollectionUtils.isEmpty(filterList)) return null;
List<MesEquipmentLog> 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<Long> collectClientHandleList(List<MesEquipVariableCfgCollectContext> equipVariableCollectContextList) {
List<Long> 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());
}
}

@ -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<MesEquipVariableCfgCollectContext> collectContextList, String strategyClass) {
return ((IMesEquipVariableCfgRuleMatchDispatchService) SpringContextsUtil.getBean(strategyClass)).matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList);
}
@Override
public Boolean matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> 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;
}
}
}

@ -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<MesEquipVariableCfgCollectContext> collectContextList) {
Map<String, List<MesEquipVariableCfgCollectContext>> ruleCategoryMap = collectContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesEquipVariableCfgCollectContext::getRuleCategory));
for(Map.Entry<String, List<MesEquipVariableCfgCollectContext>> entry : ruleCategoryMap.entrySet()) {
if (null == entry) continue;
//任意一组规则全部匹配
if (matchEquipVariableCfgCollectContext(entry.getKey(), entry.getValue())) return true;
}
return false;
}
private Boolean matchEquipVariableCfgCollectContext(String ruleCategory, List<MesEquipVariableCfgCollectContext> 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;
}
}

@ -1,10 +1,13 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; 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.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; 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.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; 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.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -17,6 +20,8 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* @Description : * @Description :
@ -29,6 +34,12 @@ public class MesProductResultReadStepService extends BaseStepService {
@Autowired @Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService; private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesEquipmentLogExtService equipmentLogExtService;
@Autowired
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
@ -38,39 +49,61 @@ public class MesProductResultReadStepService extends BaseStepService {
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableCfgList(reqBean); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableCfgList(reqBean);
if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage()); //获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage());
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct(); List<MesEquipmentVariableCfg> 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_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()); MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SUSPICIOUS.getValue());
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); 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())); String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]获取加工结果相关变量类别的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType()));
//配置错误 抛出异常
if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue()).getSuccess()) 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<String> categoryLevelTwoList = productionProcessContextStepService.filterCategoryLevelTwoList(equipmentVariableCfgList); List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList); List<MesEquipmentVariable> 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())); String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString()));
List<MesEquipVariableCfgCollectLogContext> collectContextList = productionProcessContextStepService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); List<MesEquipVariableCfgCollectContext> collectContextList = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
Map<String, List<MesEquipVariableCfgCollectContext>> 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<String, List<MesEquipVariableCfgCollectContext>> variableCategoryMap) {
for (Map.Entry<String, List<MesEquipVariableCfgCollectContext>> 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;
} }

@ -1,17 +1,17 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; 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.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentLogExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IProdOrgExtService; 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.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; 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.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; 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.actor.shipping.dispatch.IFsmRouteDataService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -33,16 +33,19 @@ import java.util.stream.Collectors;
public class MesProductionProcessContextStepService extends BaseStepService implements IMesProductionProcessContextStepService { public class MesProductionProcessContextStepService extends BaseStepService implements IMesProductionProcessContextStepService {
@Autowired @Autowired
private IProdOrgExtService prodOrgExtService; private IMesProdOrgExtService prodOrgExtService;
@Autowired @Autowired
private IEquipmentExtService equipmentExtService; private IMesEquipmentExtService equipmentExtService;
@Autowired @Autowired
private IFsmRouteDataService fsmRouteDataService; private IFsmRouteDataService fsmRouteDataService;
@Autowired @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 @Override
public MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean) { public MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean) {
@ -179,7 +182,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
} }
@Override @Override
public List<MesEquipmentVariableCfg> filterEquipmentVariableCfgList(List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory) { public List<MesEquipmentVariableCfg> collectEquipmentVariableCfgList(List<MesEquipmentVariableCfg> equipmentVariableCfgList, String... variableCategory) {
List<String> variableCategoryList = null == variableCategory ? null : Arrays.asList(variableCategory); List<String> 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()); 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 @Override
public List<String> filterCategoryLevelTwoList(List<MesEquipmentVariableCfg> equipmentVariableCfgList) { public List<String> collectCategoryLevelTwoList(List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
return CollectionUtils.isEmpty(equipmentVariableCfgList) ? null : 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()); (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()); equipmentVariableList.stream().filter(o -> (null != o && categoryLevelTwoList.contains(o.getCategoryLevelTwo()) && o.getVariableType().compareTo(variableType) == 0)).collect(Collectors.toList());
} }
@Override
public List<MesEquipVariableCfgCollectLogContext> doHandleEquipmentLogList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
//List<MesEquipVariableCfgCollectLogContext> collectContextList = generateEquipVariableCfgCollectLogContextList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
return null;
}
// private List<MesEquipVariableCfgCollectLogContext> generateEquipVariableCfgCollectLogContextList(MesCellEquipContext cellEquipContext, List<MesEquipmentVariable> equipmentVariableList, List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
//
// List<MesEquipVariableCfgCollectLogContext> equipVariableCollectContextList = null;
//
// Map<String, >
//
//
// 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<MesEquipVariableCfgCollectLogContext> 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<Integer, MesEquipmentLog> needNewValue2Collect = getEquipmentLog(reqBean, equipVariableCollectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue());
// Map<Integer, MesEquipmentLog> 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<Integer, MesEquipmentLog> needNewValue2Collect, Map<Integer, MesEquipmentLog> 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<Integer, MesEquipmentLog> getEquipmentLog(StationRequestBean reqBean, List<MesEquipVariableCfgCollectLogContext> equipVariableCollectContextList, Integer needNewValue) {
// List<MesEquipVariableCfgCollectLogContext> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getNeedNewValue().compareTo(needNewValue) == 0)).collect(Collectors.toList());
// if (CollectionUtils.isEmpty(filterList)) return null;
// List<MesEquipmentLog> 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<MesEquipVariableCfgCollectLogContext> getEquipVariableCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
//
// List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
//
// Map<String, List<MesEquipmentVariableCfg>> cfgMap = getEquipmentVariableCfgMap(reqBean, productionProcessContext);
//
// List<MesEquipVariableCfgCollectLogContext> equipVariableCollectContextList = null;
// for (MesEquipmentVariable equipmentVariable : equipmentVariableList) {
// if (null == equipmentVariable) continue;
//
// //一个数据变量如果匹配多个接口逻辑信息,验证接口逻辑信息配置的常变值是否统一
// List<MesEquipmentVariableCfg> 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<String, List<MesEquipmentVariableCfg>> getEquipmentVariableCfgMap(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
// List<MesEquipmentVariableCfg> 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<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue) {
// return null;
// }
//
// public MesEquipmentVariableCfg execMatchEquipmentVariableCfgValue(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext,
// MesEquipVariableCfgCollectLogContext collectContext, Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue) {
// List<MesEquipmentVariableCfg> 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<MesEquipmentVariableCfg> optional = equipmentVariableCfgList.stream().filter(o -> (null != o && o.getValue().equals(collectContext.getEquipVariableValue()))).findFirst();
// return null != optional && optional.isPresent() ? optional.get() : null;
// }
//
// private List<MesEquipmentVariableCfg> getEquipmentVariableCfgListByMap(Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, String categoryLevelTwo, String variableCfgType) {
// return CollectionUtils.isEmpty(equipmentVariableCfgMap) ? null : equipmentVariableCfgMap.get(new StringJoiner(MesPcnExtConstWords.AND).add(categoryLevelTwo).add(variableCfgType).toString());
// }
} }

@ -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<MesEquipVariableCollectContext> equipVariableCollectContextList;
@ApiParam("数据变量OPC注册ID集合")
private List<Long> clientHandleList;
public MesEquipVariableCfgCollectContext equipVariableCollectContextList(List<MesEquipmentVariable> 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;
}
}

@ -1,31 +1,21 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context; package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
import org.springframework.beans.BeanUtils;
/** /**
* -LOG * -LOG
*/ */
@Data @Data
public class MesEquipVariableCfgCollectLogContext { public class MesEquipVariableCollectContext {
@ApiParam("组织代码") @ApiParam("组织代码")
private String organizeCode; private String organizeCode;
@ApiParam("变量类别") @ApiParam("设备变量ID")
private String variableCategory; private Long equipVariableId;
@ApiParam("二级变量")
private String categoryLevelTwo;
@ApiParam("规则类别")
private String ruleCategory;
@ApiParam("参考值")
private String value;
@ApiParam("是否常变值")
private Integer needNewValue;
@ApiParam("设备ID") @ApiParam("设备ID")
private Integer equipId; private Integer equipId;
@ -48,9 +38,15 @@ public class MesEquipVariableCfgCollectLogContext {
@ApiParam("tag地址") @ApiParam("tag地址")
private String tagAddress; private String tagAddress;
@ApiParam("变量配置类型")
private String variableCfgType;
@ApiParam("变量类型") @ApiParam("变量类型")
private Integer variableType; private Integer variableType;
@ApiParam("二级变量")
private String categoryLevelTwo;
@ApiParam("数据类型") @ApiParam("数据类型")
private Integer variableDataType; private Integer variableDataType;
@ -63,9 +59,6 @@ public class MesEquipVariableCfgCollectLogContext {
@ApiParam("读写类型") @ApiParam("读写类型")
private Integer readWrite; private Integer readWrite;
@ApiParam("设备变量ID")
private Long equipVariableId;
@ApiParam("设备变量名称") @ApiParam("设备变量名称")
private String equipVariableName; private String equipVariableName;
@ -81,11 +74,20 @@ public class MesEquipVariableCfgCollectLogContext {
@ApiParam("变量当前值") @ApiParam("变量当前值")
private String equipVariableValue; private String equipVariableValue;
@ApiParam("变量状态")
private String equipVariableStatus;
@ApiParam("设备质量") @ApiParam("设备质量")
private Integer quality; private Integer quality;
public MesEquipVariableCfgCollectLogContext(Long equipVariableId) { public MesEquipVariableCollectContext() {}
public MesEquipVariableCollectContext(Long equipVariableId) {
this.equipVariableId = equipVariableId; this.equipVariableId = equipVariableId;
} }
public void copyValue(MesEquipmentLog equipmentLog) {
if (null == equipmentLog) return;
BeanUtils.copyProperties(equipmentLog, this);
}
} }

@ -101,6 +101,12 @@ public class MesProductionProcessContext {
return this; return this;
} }
//手动赋结果
public MesProductionProcessContext success(Boolean success) {
this.success = success;
return this;
}
//上下文信息结果信息赋值后给工步使用 //上下文信息结果信息赋值后给工步使用
public MesProductionProcessContext message(String message) { public MesProductionProcessContext message(String message) {
this.success = false; this.success = false;

Loading…
Cancel
Save