pcn 工步 读取加工结果

tags/yfai-pcn-ext-v1.0
王杰 1 year ago
parent dd5744a9c1
commit 26b0de1402

@ -4,10 +4,13 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
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;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional;
public interface IMesProductionProcessContextStepService { public interface IMesProductionProcessContextStepService {
@ -38,6 +41,12 @@ public interface IMesProductionProcessContextStepService {
@ApiOperation(value = "获取工位当前设备信息") @ApiOperation(value = "获取工位当前设备信息")
MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
@ApiOperation(value = "获取工位当前设备信息")
MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, Optional<Map<String, MesProdRouteOptParam>> stepParamMap);
@ApiOperation(value = "获取工位当前设备信息")
MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Optional<Map<String, MesProdRouteOptParam>> stepParamMap);
@ApiOperation(value = "获取设备数据变量接口逻辑信息") @ApiOperation(value = "获取设备数据变量接口逻辑信息")
MesProductionProcessContext getEquipmentVariableCfgList(StationRequestBean reqBean); MesProductionProcessContext getEquipmentVariableCfgList(StationRequestBean reqBean);

@ -1,65 +1,22 @@
//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.busi.IMesProductionProcessContextStepService;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectLogContext; import lombok.extern.slf4j.Slf4j;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import org.springframework.beans.factory.annotation.Autowired;
//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import org.springframework.stereotype.Service;
//import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; /**
//import cn.estsh.i3plus.pojo.mes.model.StationResultBean; * @Description :
//import cn.estsh.i3plus.pojo.mes.model.StepResult; * @Author : wangjie
//import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; **/
//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 java.util.List; @Autowired
//import java.util.Map; private IMesProductionProcessContextStepService productionProcessContextStepService;
//
///**
// * @Description : 读头道模具号工步
// * @Author : wangjie }
// **/
//@Slf4j
//@Service("mesFirstMouldNoReadStepService")
//public class MesFirstMouldNoReadStepService extends BaseStepService {
//
// @Autowired
// private IMesProductionProcessContextStepService productionProcessContextStepService;
//
// @Override
// public StepResult execute(StationRequestBean reqBean) {
//
// StationResultBean resultBean = new StationResultBean();
//
// StepResult stepResult = StepResult.getSuccessComplete();
//
// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariable(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.FIRST_MOULD_NO.getValue());
//
// if (!productionProcessContextStepService.getEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess())
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
//
// if (!productionProcessContextStepService.checkNecessaryEquipmentVariable(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtEnumUtil.EQUIP_CATEGORY_LEVEL_TWO.FIRST_MOULD_NO.getValue()).getSuccess())
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
//
// if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(reqBean, productionProcessContext).getSuccess())
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
//
// if (!productionProcessContextStepService.doHandleEquipmentLogListByIds(reqBean, productionProcessContext).getSuccess())
// return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, productionProcessContext.getMessage());
//
// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//
// Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap = productionProcessContextStepService.getEquipmentVariableCfgMap(reqBean, productionProcessContext);
//
// List<MesEquipVariableCfgCollectLogContext> equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList();
//
//
//
// return stepResult;
// }
//
//
//
//}

@ -6,10 +6,12 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepServ
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.MesEquipVariableCfgCollectContext; 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.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
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.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.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult; import cn.estsh.i3plus.pojo.mes.model.StepResult;
@ -18,9 +20,12 @@ 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;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -47,7 +52,11 @@ public class MesProductResultReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableCfgList(reqBean); Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext);
//获取生产过程上下文对象有异常信息 抛出异常 //获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage()); if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean, productionProcessContext.getMessage());
@ -82,29 +91,43 @@ public class MesProductResultReadStepService extends BaseStepService {
matchVariableCategoryMap(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap); matchVariableCategoryMap(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap);
//保存设备当前一轮工序的加工结果: 只保存成功/报废/可疑的结果
if (stepResult.isCompleted()) productionProcessContext.productResult((String) stepResult.getObj());
productionProcessContextStepService.doCacheContext(reqBean, productionProcessContext); productionProcessContextStepService.doCacheContext(reqBean, productionProcessContext);
if (!stepResult.isCompleted()) threadSleep(stepParamMap);
return stepResult; return stepResult;
} }
private void matchVariableCategoryMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
//加工结果规则匹配:根据变量类别分组, 只要匹配一组即可; 在一组中根据规则类别分组, 相同规则类别的一组必须全部匹配, 任意一组规则类别匹配成功即可
private StepResult matchVariableCategoryMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, Map<String, List<MesEquipVariableCfgCollectContext>> variableCategoryMap) { MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, Map<String, List<MesEquipVariableCfgCollectContext>> variableCategoryMap) {
for (Map.Entry<String, List<MesEquipVariableCfgCollectContext>> entry : variableCategoryMap.entrySet()) { for (Map.Entry<String, List<MesEquipVariableCfgCollectContext>> entry : variableCategoryMap.entrySet()) {
if (null == entry) continue; if (null == entry) continue;
if (!equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, entry.getKey(), entry.getValue())) continue; if (!equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, entry.getKey(), entry.getValue())) continue;
if (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue().equals(entry.getKey())) 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())); return execNonCompleteAndSendMsgReturn(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, return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.obj(entry.getKey()), 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, 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()))); String.format("%s", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey())));
} }
//设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点 //设置STATE_CMD: 失败返回至结束状态, 下次触发流程直接强制执行当前状态点
execNonCompleteAndSendMsg(reqBean, resultBean, stepResult.stateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE), String.format("读取设备[%s]数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode())); return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult.stateCmd(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.FORCE_STATE), String.format("读取设备[%s]数据变量值匹配接口逻辑规则失败,持续监听中...", cellEquipContext.getEquipmentCode()));
} }
private void threadSleep(Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
String readFailureSleep = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.READ_FAILURE_SLEEP)) ? stepParamMap.get().get(MesPcnExtConstWords.READ_FAILURE_SLEEP).getParamValue() : null;
try {
TimeUnit.MILLISECONDS.sleep(StringUtils.isEmpty(readFailureSleep) ? 1000L : Long.valueOf(readFailureSleep));
} catch (InterruptedException e) {
}
}
} }

@ -135,8 +135,19 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
if (!productionProcessContext.getSuccess()) return productionProcessContext; if (!productionProcessContext.getSuccess()) return productionProcessContext;
//获取当前工步的参数集合 return getCurCellEquipment(reqBean, productionProcessContext, getStepParams(reqBean));
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
}
@Override
public MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
return getCurCellEquipment(reqBean, getCellEquipmentList(reqBean), stepParamMap);
}
@Override
public MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
if (!productionProcessContext.getSuccess()) return productionProcessContext;
//获取当前工步的设备参数 //获取当前工步的设备参数
String equipmentCode = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.EQUIPMENT_CODE_UC)) ? stepParamMap.get().get(MesPcnExtConstWords.EQUIPMENT_CODE_UC).getParamValue() : null; String equipmentCode = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.EQUIPMENT_CODE_UC)) ? stepParamMap.get().get(MesPcnExtConstWords.EQUIPMENT_CODE_UC).getParamValue() : null;

@ -61,6 +61,16 @@ public class MesProductionProcessContext {
@ApiParam("设备变量集合信息([Json]List<MesEquipmentVariable>)") @ApiParam("设备变量集合信息([Json]List<MesEquipmentVariable>)")
private String equipVariableJson; private String equipVariableJson;
//-----------------根据业务执行情况必要时清理-----------------
@ApiParam("加工结果:成功/报废/可疑 【报废/可疑: 在保存逻辑条码时有特殊业务处理】")
private String productResult;
//--------------------------------------------------------
@ApiParam("头道模具号") @ApiParam("头道模具号")
private String firstMouldNo; private String firstMouldNo;
@ -248,4 +258,16 @@ public class MesProductionProcessContext {
return this; return this;
} }
//上下文赋值加工结果
public MesProductionProcessContext productResult(String productResult) {
this.equipVariableJson = productResult;
return this;
}
//上下文清除加工结果
public MesProductionProcessContext productResultClear() {
this.equipVariableJson = null;
return this;
}
} }

@ -52,8 +52,6 @@ public class MesPcnExtConstWords {
public static final String EQUIPMENT_CODE = "equipmentCode"; public static final String EQUIPMENT_CODE = "equipmentCode";
// 设备ID // 设备ID
public static final String EQUIP_ID = "equipId"; public static final String EQUIP_ID = "equipId";
// 设备代码[工步参数]
public static final String EQUIPMENT_CODE_UC = "EQUIPMENT_CODE";
// 变量类型 // 变量类型
public static final String VARIABLE_TYPE = "variableType"; public static final String VARIABLE_TYPE = "variableType";
// 二级变量 // 二级变量
@ -66,7 +64,10 @@ public class MesPcnExtConstWords {
// 设备代码[工步参数]
public static final String EQUIPMENT_CODE_UC = "EQUIPMENT_CODE";
// 读取失败睡眠毫秒数[工步参数]
public static final String READ_FAILURE_SLEEP = "READ_FAILURE_SLEEP";

Loading…
Cancel
Save