forked from I3-YF/i3plus-mes-pcn-yfai
工步修改
parent
7f6b9e8ece
commit
bff334f032
@ -0,0 +1,155 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
|
||||||
|
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.MesProdRuleContext;
|
||||||
|
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.bean.DdlPackBean;
|
||||||
|
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||||
|
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesCavityGroupDetailCfg;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult;
|
||||||
|
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.repository.MesCavityGroupDetailCfgRepository;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentProdParamCfgRepository;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository;
|
||||||
|
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 : zxw
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Service("mesSendCavityGroupParamsCmdStepService")
|
||||||
|
public class MesSendCavityGroupParamsCmdStepService extends BaseStepService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesEquipVariableRwExtService equipVariableRwExtService;
|
||||||
|
@Autowired
|
||||||
|
private MesEquipmentVariableRepository mesEquipmentVariableRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesEquipmentProdParamCfgRepository mesEquipmentProdParamCfgRepository;
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesCavityGroupDetailCfgRepository mesCavityGroupDetailCfgRepository;
|
||||||
|
|
||||||
|
@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);
|
||||||
|
|
||||||
|
//当前工位使用的设备
|
||||||
|
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
||||||
|
|
||||||
|
//获取腔组数据信息集合
|
||||||
|
List<MesCavityGroupDetailCfg> mesCavityGroupDetailCfgs = productionProcessContext.getCavityGroupDetailList();
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(mesCavityGroupDetailCfgs)) {
|
||||||
|
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "未找到腔组信息");
|
||||||
|
}
|
||||||
|
sendEquipParamsCmd(reqBean, resultBean, stepResult, stepParamMap, cellEquipContext, mesCavityGroupDetailCfgs);
|
||||||
|
|
||||||
|
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送腔组加工参数成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送加工参数
|
||||||
|
* @param reqBean
|
||||||
|
* @param resultBean
|
||||||
|
* @param stepResult
|
||||||
|
* @param stepParamMap
|
||||||
|
* @param cellEquipContext
|
||||||
|
* @param mesCavityGroupDetailCfgs
|
||||||
|
*/
|
||||||
|
private void sendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, Optional<Map<String, MesProdRouteOptParam>> stepParamMap, MesCellEquipContext cellEquipContext, List<MesCavityGroupDetailCfg> mesCavityGroupDetailCfgs) {
|
||||||
|
for (MesCavityGroupDetailCfg mesCavityGroupDetailCfg : mesCavityGroupDetailCfgs) {
|
||||||
|
// 获取加工参数
|
||||||
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
|
||||||
|
DdlPreparedPack.getNumEqualPack(mesCavityGroupDetailCfg.getId(), "sourceId", ddlPackBean);
|
||||||
|
List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean);
|
||||||
|
for (MesEquipmentProdParamCfg mesEquipmentProdParamCfg : mesEquipmentProdParamCfgs) {//
|
||||||
|
DdlPackBean paramPackBean = DdlPackBean.getDdlPackBean();
|
||||||
|
DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", paramPackBean);
|
||||||
|
MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(paramPackBean);
|
||||||
|
if (mesEquipmentVariable == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
execSendEquipParamsCmd(reqBean, resultBean, stepParamMap, stepResult, cellEquipContext, mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private StepResult execSendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, Optional<Map<String, MesProdRouteOptParam>> stepParamMap, StepResult stepResult,
|
||||||
|
MesCellEquipContext cellEquipContext, String value, MesEquipmentVariable equipmentVariable, String kepwareFlag) {
|
||||||
|
|
||||||
|
//最大重试次数[工步参数]
|
||||||
|
Integer maxRetryTimes = getMaxRetryTimes(stepParamMap);
|
||||||
|
|
||||||
|
MesEquipVariableRwResult equipVariableRwResult;
|
||||||
|
|
||||||
|
for (int i = 1; i <= maxRetryTimes; i ++) {
|
||||||
|
//写值
|
||||||
|
equipVariableRwResult = equipVariableRwExtService.writeVariable(value, equipmentVariable, kepwareFlag);
|
||||||
|
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipVariableRwResult), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
|
||||||
|
|
||||||
|
if (!equipVariableRwResult.getIsSuccessed() && equipVariableRwResult.getIsNoCfg()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:初始化指令发送失败!原因:%s", cellEquipContext.getEquipmentCode(), equipVariableRwResult.getMessage()));
|
||||||
|
|
||||||
|
if (equipVariableRwResult.getIsSuccessed()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送成功!", cellEquipContext.getEquipmentCode()));
|
||||||
|
|
||||||
|
execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentCode(), i, equipVariableRwResult.getMessage()));
|
||||||
|
//每失败一次 睡眠
|
||||||
|
if (i != maxRetryTimes) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
|
||||||
|
}
|
||||||
|
|
||||||
|
execSendTaskCompleteAndThrowEx(reqBean, stepResult, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||||
|
|
||||||
|
return stepResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//最大重试次数[工步参数]
|
||||||
|
private Integer getMaxRetryTimes(Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
|
||||||
|
Integer maxRetryTimes = null;
|
||||||
|
try {
|
||||||
|
maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null;
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
}
|
||||||
|
return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : MesPcnExtConstWords.MAX_RETRY_TIMES_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,133 @@
|
|||||||
|
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.*;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
|
||||||
|
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.bean.DdlPackBean;
|
||||||
|
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||||
|
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentProdParamCfg;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.model.*;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentProdParamCfgRepository;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository;
|
||||||
|
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;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description : 发送加工参数
|
||||||
|
* @Author : zxw
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Service("mesSendEquipParamsCmdStepService")
|
||||||
|
public class MesSendEquipParamsCmdStepService extends BaseStepService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesEquipVariableRwExtService equipVariableRwExtService;
|
||||||
|
@Autowired
|
||||||
|
private MesEquipmentVariableRepository mesEquipmentVariableRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesEquipmentProdParamCfgRepository mesEquipmentProdParamCfgRepository;
|
||||||
|
|
||||||
|
|
||||||
|
@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);
|
||||||
|
|
||||||
|
//当前工位使用的设备
|
||||||
|
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
||||||
|
|
||||||
|
//获取上下文加工规则数据信息集合
|
||||||
|
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(prodRuleContextList)) {
|
||||||
|
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "未找到加工规则,无需发送加工参数");
|
||||||
|
}
|
||||||
|
// 获取加工参数
|
||||||
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
|
||||||
|
DdlPreparedPack.getNumEqualPack(prodRuleContextList.get(0).getPid(), "sourceId", ddlPackBean);
|
||||||
|
List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean);
|
||||||
|
mesEquipmentProdParamCfgs.forEach(mesEquipmentProdParamCfg -> {
|
||||||
|
//
|
||||||
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
|
||||||
|
DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", packBean);
|
||||||
|
MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(packBean);
|
||||||
|
if (mesEquipmentVariable == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
execSendEquipParamsCmd(reqBean, resultBean, stepParamMap, stepResult, cellEquipContext,mesEquipmentProdParamCfg.getMatchRule(), mesEquipmentVariable, cellEquipContext.getKepwareFlag(mesEquipmentVariable.getChannel()));
|
||||||
|
});
|
||||||
|
|
||||||
|
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "发送加工参数成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
private StepResult execSendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, Optional<Map<String, MesProdRouteOptParam>> stepParamMap, StepResult stepResult,
|
||||||
|
MesCellEquipContext cellEquipContext, String value, MesEquipmentVariable equipmentVariable, String kepwareFlag) {
|
||||||
|
|
||||||
|
//最大重试次数[工步参数]
|
||||||
|
Integer maxRetryTimes = getMaxRetryTimes(stepParamMap);
|
||||||
|
|
||||||
|
MesEquipVariableRwResult equipVariableRwResult;
|
||||||
|
|
||||||
|
for (int i = 1; i <= maxRetryTimes; i ++) {
|
||||||
|
//写值
|
||||||
|
equipVariableRwResult = equipVariableRwExtService.writeVariable(value, equipmentVariable, kepwareFlag);
|
||||||
|
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipVariableRwResult), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
|
||||||
|
|
||||||
|
if (!equipVariableRwResult.getIsSuccessed() && equipVariableRwResult.getIsNoCfg()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:初始化指令发送失败!原因:%s", cellEquipContext.getEquipmentCode(), equipVariableRwResult.getMessage()));
|
||||||
|
|
||||||
|
if (equipVariableRwResult.getIsSuccessed()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送成功!", cellEquipContext.getEquipmentCode()));
|
||||||
|
|
||||||
|
execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:初始化指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentCode(), i, equipVariableRwResult.getMessage()));
|
||||||
|
//每失败一次 睡眠
|
||||||
|
if (i != maxRetryTimes) threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
|
||||||
|
}
|
||||||
|
|
||||||
|
execSendTaskCompleteAndThrowEx(reqBean, stepResult, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||||
|
|
||||||
|
return stepResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//最大重试次数[工步参数]
|
||||||
|
private Integer getMaxRetryTimes(Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
|
||||||
|
Integer maxRetryTimes = null;
|
||||||
|
try {
|
||||||
|
maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ? Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null;
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
}
|
||||||
|
return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : MesPcnExtConstWords.MAX_RETRY_TIMES_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue