forked from I3-YF/i3plus-mes-pcn-yfai
Merge remote-tracking branch 'origin/dev' into dev
commit
68304526ee
@ -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);
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,13 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.api.base;
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface IMesMouldMultiCavityService {
|
||||||
|
|
||||||
|
@ApiOperation(value = "根据设备代码,模具号查询一模多腔信息")
|
||||||
|
List<MesMouldMultiCavity> getMouldMultiCavityList(String organizeCode, String equipmentCode, String mouldNo);
|
||||||
|
|
||||||
|
}
|
@ -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 = "设备数据变量接口逻辑根据变量类别规则匹配")
|
||||||
|
Object 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,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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,29 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||||
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.MesMouldMultiCavityRepository;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class MesMouldMultiCavityService implements IMesMouldMultiCavityService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesMouldMultiCavityRepository mouldMultiCavityRepository;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MesMouldMultiCavity> getMouldMultiCavityList(String organizeCode, String equipmentCode, String mouldNo) {
|
||||||
|
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipmentCode) || StringUtils.isEmpty(mouldNo)) return null;
|
||||||
|
return mouldMultiCavityRepository.findByProperty(
|
||||||
|
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.EQUIPMENT_CODE, MesPcnExtConstWords.MOULD_NO},
|
||||||
|
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), equipmentCode, mouldNo});
|
||||||
|
}
|
||||||
|
}
|
@ -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,47 @@
|
|||||||
|
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 Object matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList, String strategyClass) {
|
||||||
|
return ((IMesEquipVariableCfgRuleMatchDispatchService) SpringContextsUtil.getBean(strategyClass)).matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object 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, "mesEvcRuleMatchCompareValueService");
|
||||||
|
case FIRST_MOULD_NO:
|
||||||
|
case MOULD_NO:
|
||||||
|
return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, "mesEvcRuleMatchBackValueService");
|
||||||
|
|
||||||
|
//TODO CASE 数据变量接口逻辑根据变量类别实现策略
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
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.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将不为空的数据变量全部返回
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class MesEvcRuleMatchBackValueService implements IMesEquipVariableCfgRuleMatchDispatchService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MesEquipVariableCollectContext> matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList) {
|
||||||
|
|
||||||
|
List<MesEquipVariableCollectContext> backList = null;
|
||||||
|
|
||||||
|
for (MesEquipVariableCfgCollectContext collectContext : collectContextList) {
|
||||||
|
|
||||||
|
if (null == collectContext || CollectionUtils.isEmpty(collectContext.getEquipVariableCollectContextList())) continue;
|
||||||
|
|
||||||
|
for (MesEquipVariableCollectContext equipVariableCollectContext : collectContext.getEquipVariableCollectContextList()) {
|
||||||
|
|
||||||
|
if (null == equipVariableCollectContext || StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) continue;
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(backList)) backList = new ArrayList<>();
|
||||||
|
|
||||||
|
backList.add(equipVariableCollectContext);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return backList;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,79 @@
|
|||||||
|
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 MesEvcRuleMatchCompareValueService 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,65 +1,124 @@
|
|||||||
//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.IMesProductionProcessContextStepService;
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
|
||||||
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
|
||||||
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectLogContext;
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
|
||||||
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
|
||||||
//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
|
||||||
//import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext;
|
||||||
//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
|
||||||
//import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
|
||||||
//import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||||
//import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||||
//import lombok.extern.slf4j.Slf4j;
|
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||||
//import org.springframework.beans.factory.annotation.Autowired;
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
|
||||||
//import org.springframework.stereotype.Service;
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
|
||||||
//
|
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
|
||||||
//import java.util.List;
|
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
|
||||||
//import java.util.Map;
|
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||||
//
|
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||||
///**
|
import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
||||||
// * @Description : 读头道模具号工步
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||||
// * @Author : wangjie
|
import com.alibaba.fastjson.JSONObject;
|
||||||
// **/
|
import lombok.extern.slf4j.Slf4j;
|
||||||
//@Slf4j
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
//@Service("mesFirstMouldNoReadStepService")
|
import org.springframework.stereotype.Service;
|
||||||
//public class MesFirstMouldNoReadStepService extends BaseStepService {
|
import org.springframework.util.CollectionUtils;
|
||||||
//
|
|
||||||
// @Autowired
|
import java.util.List;
|
||||||
// private IMesProductionProcessContextStepService productionProcessContextStepService;
|
import java.util.Map;
|
||||||
//
|
import java.util.Optional;
|
||||||
// @Override
|
|
||||||
// public StepResult execute(StationRequestBean reqBean) {
|
/**
|
||||||
//
|
* @Description : 读头道模具号工步
|
||||||
// StationResultBean resultBean = new StationResultBean();
|
* @Author : wangjie
|
||||||
//
|
**/
|
||||||
// StepResult stepResult = StepResult.getSuccessComplete();
|
@Slf4j
|
||||||
//
|
@Service("mesFirstMouldNoReadStepService")
|
||||||
// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariable(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.FIRST_MOULD_NO.getValue());
|
public class MesFirstMouldNoReadStepService extends BaseStepService {
|
||||||
//
|
|
||||||
// if (!productionProcessContextStepService.getEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess())
|
@Autowired
|
||||||
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
|
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||||
//
|
|
||||||
// if (!productionProcessContextStepService.checkNecessaryEquipmentVariable(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.FIRST_MOULD_NO.getValue()).getSuccess())
|
@Autowired
|
||||||
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
|
private IMesEquipmentLogExtService equipmentLogExtService;
|
||||||
//
|
|
||||||
// if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess())
|
@Autowired
|
||||||
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
|
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
|
||||||
//
|
|
||||||
// if (!productionProcessContextStepService.doHandleEquipmentLogListByIds(reqBean, productionProcessContext).getSuccess())
|
@Autowired
|
||||||
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
|
private IMesMouldMultiCavityService mouldMultiCavityService;
|
||||||
//
|
|
||||||
// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
@Override
|
||||||
//
|
public StepResult execute(StationRequestBean reqBean) {
|
||||||
// Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap = productionProcessContextStepService.getEquipmentVariableCfgMap(reqBean, productionProcessContext);
|
|
||||||
//
|
StationResultBean resultBean = new StationResultBean();
|
||||||
// List<MesEquipVariableCfgCollectLogContext> equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList();
|
|
||||||
//
|
StepResult stepResult = StepResult.getSuccessComplete();
|
||||||
//
|
|
||||||
//
|
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
|
||||||
// return stepResult;
|
|
||||||
// }
|
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
|
||||||
//
|
|
||||||
//
|
productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext);
|
||||||
//
|
|
||||||
//}
|
//获取生产过程上下文对象有异常信息 抛出异常
|
||||||
|
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage());
|
||||||
|
|
||||||
|
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
|
||||||
|
|
||||||
|
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.FIRST_MOULD_NO.getValue());
|
||||||
|
|
||||||
|
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
||||||
|
|
||||||
|
//配置错误 抛出异常
|
||||||
|
if (CollectionUtils.isEmpty(equipmentVariableCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
|
||||||
|
String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]头道模具号相关变量类别的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType()));
|
||||||
|
|
||||||
|
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
|
||||||
|
|
||||||
|
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
|
||||||
|
|
||||||
|
//配置错误 抛出异常
|
||||||
|
if (CollectionUtils.isEmpty(equipmentVariableList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
|
||||||
|
String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString()));
|
||||||
|
|
||||||
|
List<MesEquipVariableCfgCollectContext> collectContextList = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
|
||||||
|
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(collectContextList), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
|
||||||
|
|
||||||
|
//读取头道模具号进行规则匹配
|
||||||
|
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.FIRST_MOULD_NO.getValue(), collectContextList);
|
||||||
|
|
||||||
|
//验证头道模具号的有效性
|
||||||
|
checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList);
|
||||||
|
|
||||||
|
//设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点
|
||||||
|
if (!stepResult.isCompleted()) stepResult.setStateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE);
|
||||||
|
|
||||||
|
productionProcessContextStepService.doCacheContext(reqBean, productionProcessContext);
|
||||||
|
|
||||||
|
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, 1000L);
|
||||||
|
|
||||||
|
return stepResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
|
||||||
|
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]头道模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
|
||||||
|
|
||||||
|
String firstMouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue();
|
||||||
|
|
||||||
|
List<MesMouldMultiCavity> mouldMultiCavityList = mouldMultiCavityService.getMouldMultiCavityList(reqBean.getOrganizeCode(), cellEquipContext.getEquipmentCode(), firstMouldNo);
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(mouldMultiCavityList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("当前设备[%s]与读取到的头道模具号[%s]未维护有效的一模多腔信息!", cellEquipContext.getEquipmentCode(), firstMouldNo));
|
||||||
|
|
||||||
|
//保存设备当前一轮工序的头道模具号与一模多腔信息
|
||||||
|
productionProcessContext.firstMouldNo(firstMouldNo).mouldCavityJson(mouldMultiCavityList);
|
||||||
|
|
||||||
|
return stepResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -0,0 +1,136 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMouldMultiCavityService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||||
|
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||||
|
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description : 读模具号工步
|
||||||
|
* @Author : wangjie
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Service("mesMouldNoReadStepService")
|
||||||
|
public class MesMouldNoReadStepService extends BaseStepService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesEquipmentLogExtService equipmentLogExtService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesMouldMultiCavityService mouldMultiCavityService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StepResult execute(StationRequestBean reqBean) {
|
||||||
|
|
||||||
|
StationResultBean resultBean = new StationResultBean();
|
||||||
|
|
||||||
|
StepResult stepResult = StepResult.getSuccessComplete();
|
||||||
|
|
||||||
|
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
|
||||||
|
|
||||||
|
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
|
||||||
|
|
||||||
|
productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext);
|
||||||
|
|
||||||
|
//获取生产过程上下文对象有异常信息 抛出异常
|
||||||
|
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage());
|
||||||
|
|
||||||
|
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
|
||||||
|
|
||||||
|
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue());
|
||||||
|
|
||||||
|
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
||||||
|
|
||||||
|
//配置错误 抛出异常
|
||||||
|
if (CollectionUtils.isEmpty(equipmentVariableCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
|
||||||
|
String.format("请检查设备数据变量接口逻辑信息,设备[%s]未配置变量配置类型[%s]模具号相关变量类别的数据变量接口逻辑信息", cellEquipContext.getEquipmentCode(), cellEquipContext.getVariableCfgType()));
|
||||||
|
|
||||||
|
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
|
||||||
|
|
||||||
|
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
|
||||||
|
|
||||||
|
//配置错误 抛出异常
|
||||||
|
if (CollectionUtils.isEmpty(equipmentVariableList)) execExpSendMsgAndThrowEx(reqBean, resultBean,
|
||||||
|
String.format("请检查设备数据变量信息,根据设备[%s]对应的数据变量接口逻辑信息,未配置变量类型[%s]二级变量%s相关的数据变量信息", cellEquipContext.getEquipmentCode(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getDescription(), categoryLevelTwoList.toString()));
|
||||||
|
|
||||||
|
List<MesEquipVariableCfgCollectContext> collectContextList = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
|
||||||
|
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(collectContextList), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
|
||||||
|
|
||||||
|
//读取模具号进行规则匹配
|
||||||
|
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.MOULD_NO.getValue(), collectContextList);
|
||||||
|
|
||||||
|
//验证模具号的有效性
|
||||||
|
checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipVariableCollectContextList);
|
||||||
|
|
||||||
|
//设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点
|
||||||
|
if (!stepResult.isCompleted()) stepResult.setStateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE);
|
||||||
|
|
||||||
|
productionProcessContextStepService.doCacheContext(reqBean, productionProcessContext);
|
||||||
|
|
||||||
|
if (!stepResult.isCompleted()) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, 1000L);
|
||||||
|
|
||||||
|
return stepResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
|
||||||
|
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("当前未读取到设备[%s]模具号,持续监听中...", cellEquipContext.getEquipmentCode()));
|
||||||
|
|
||||||
|
String mouldNo = equipVariableCollectContextList.get(0).getEquipVariableValue();
|
||||||
|
|
||||||
|
if (StringUtils.isEmpty(productionProcessContext.getFirstMouldNo()) && !checkMouldNoValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, mouldNo).isCompleted()) return stepResult;
|
||||||
|
|
||||||
|
//保存设备当前一轮工序的模具号
|
||||||
|
productionProcessContext.mouldNo(mouldNo);
|
||||||
|
|
||||||
|
return stepResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private StepResult checkMouldNoValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, String mouldNo) {
|
||||||
|
|
||||||
|
List<MesMouldMultiCavity> mouldMultiCavityList = mouldMultiCavityService.getMouldMultiCavityList(reqBean.getOrganizeCode(), cellEquipContext.getEquipmentCode(), mouldNo);
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(mouldMultiCavityList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("当前设备[%s]与读取到的模具号[%s]未维护有效的一模多腔信息!", cellEquipContext.getEquipmentCode(), mouldNo));
|
||||||
|
|
||||||
|
//保存设备当前一轮工序的头道模具号与一模多腔信息
|
||||||
|
productionProcessContext.firstMouldNo(mouldNo).mouldCavityJson(mouldMultiCavityList);
|
||||||
|
|
||||||
|
return stepResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue