|
|
|
@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepServi
|
|
|
|
|
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.*;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
|
|
|
|
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
|
|
|
@ -32,7 +33,7 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @Description : 发送加工参数
|
|
|
|
|
* @Author : zxw
|
|
|
|
|
* @Author : wangjie
|
|
|
|
|
**/
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Service("mesSendEquipParamsCmdStepService2")
|
|
|
|
@ -74,7 +75,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
|
|
|
|
|
//获取生产线信息
|
|
|
|
|
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
|
|
|
|
|
|
|
|
|
|
//搜集加工参数关联ID集合
|
|
|
|
|
//搜集加工参数关联ID集合 根据生产线类型区分
|
|
|
|
|
List<Long> sourceIdList = getEquipmentProdParamCfgSourceIdList(productionProcessContext, prodRuleContextList, workCenter);
|
|
|
|
|
|
|
|
|
|
//根据来源ID查询设备加工参数信息
|
|
|
|
@ -119,7 +120,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
|
|
|
|
|
productionPsOutContexts.stream().filter(i -> (null != i && !StringUtils.isEmpty(i.getForeignKey()) && i.getForeignKey().compareTo(o.getForeignKey()) == 0)).findFirst();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
doSendEquipParamsCmd(reqBean, resultBean, o, workCenter, cellEquipContext, eppcMap2SourceId, evMap, productionProcessContext, productResult, productionPartContextOp, productionPsInContextOp, productionPsOutContextOp);
|
|
|
|
|
doSendEquipParamsCmd(reqBean, resultBean, o, cellEquipContext, eppcMap2SourceId, evMap, productResult, productionPartContextOp, productionPsInContextOp, productionPsOutContextOp);
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
@ -129,8 +130,10 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
|
|
|
|
|
//搜集加工参数关联ID集合
|
|
|
|
|
private List<Long> getEquipmentProdParamCfgSourceIdList(MesProductionProcessContext productionProcessContext, List<MesProdRuleContext> prodRuleContextList, MesWorkCenter workCenter) {
|
|
|
|
|
if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType()) {
|
|
|
|
|
//非排序
|
|
|
|
|
return prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPid()))).map(MesProdRuleContext::getPid).collect(Collectors.toList());
|
|
|
|
|
} else {
|
|
|
|
|
//排序
|
|
|
|
|
List<Long> sourceIdList = null;
|
|
|
|
|
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
|
|
|
|
|
if (StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
|
|
|
|
@ -144,19 +147,9 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//发送设备加工参数
|
|
|
|
|
private void doSendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, MesProdRuleContext prodRuleContext, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
|
|
|
|
|
Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId, Map<Long, MesEquipmentVariable> evMap, MesProductionProcessContext productionProcessContext, String productResult,
|
|
|
|
|
private void doSendEquipParamsCmd(StationRequestBean reqBean, StationResultBean resultBean, MesProdRuleContext prodRuleContext, MesCellEquipContext cellEquipContext,
|
|
|
|
|
Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId, Map<Long, MesEquipmentVariable> evMap, String productResult,
|
|
|
|
|
Optional<MesProductionPartContext> productionPartContextOp, Optional<MesProductionPsInContext> productionPsInContextOp, Optional<MesProductionPsOutContext> productionPsOutContextOp) {
|
|
|
|
|
if (MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue() == workCenter.getCenterType())
|
|
|
|
|
doSendEquipParamsCmdNosort(reqBean, resultBean, prodRuleContext, cellEquipContext, eppcMap2SourceId, evMap, productionProcessContext, productResult, productionPartContextOp, productionPsInContextOp, productionPsOutContextOp);
|
|
|
|
|
else
|
|
|
|
|
doSendEquipParamsCmdSort(reqBean, resultBean, prodRuleContext, cellEquipContext, eppcMap2SourceId, evMap, productionProcessContext, productResult, productionPartContextOp, productionPsInContextOp, productionPsOutContextOp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//发送设备加工参数【非排序】
|
|
|
|
|
private void doSendEquipParamsCmdNosort(StationRequestBean reqBean, StationResultBean resultBean, MesProdRuleContext prodRuleContext, MesCellEquipContext cellEquipContext,
|
|
|
|
|
Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId, Map<Long, MesEquipmentVariable> evMap, MesProductionProcessContext productionProcessContext, String productResult,
|
|
|
|
|
Optional<MesProductionPartContext> productionPartContextOp, Optional<MesProductionPsInContext> productionPsInContextOp, Optional<MesProductionPsOutContext> productionPsOutContextOp) {
|
|
|
|
|
|
|
|
|
|
//当前加工规则的PID对应的设备加工参数
|
|
|
|
|
List<MesEquipmentProdParamCfg> equipmentProdParamCfgList = eppcMap2SourceId.get(prodRuleContext.getPid());
|
|
|
|
@ -170,20 +163,20 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
|
|
|
|
|
MesProductionPsOutContext productionPsOutContext = (null != productionPsOutContextOp && productionPsOutContextOp.isPresent()) ? productionPsOutContextOp.get() : null;
|
|
|
|
|
|
|
|
|
|
//搜集发送规则并去重
|
|
|
|
|
List<String> matchRuleList = (equipmentProdParamCfgList.stream().filter(o -> null != o).map(o -> o.getMatchRule().toUpperCase()).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
|
|
|
|
|
List<String> matchRuleList = (equipmentProdParamCfgList.stream().filter(o -> null != o).map(o -> checkTransformUpperCase(o.getMatchRule())).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
for (String matchRule : matchRuleList) {
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(matchRule)) continue;
|
|
|
|
|
|
|
|
|
|
Optional<MesEquipmentProdParamCfg> equipmentProdParamCfgOp = equipmentProdParamCfgList.stream().filter(o -> (null != o && o.getMatchRule().toUpperCase().equals(matchRule) && evMap.containsKey(o.getEquipVariableId()))).findFirst();
|
|
|
|
|
Optional<MesEquipmentProdParamCfg> equipmentProdParamCfgOp = equipmentProdParamCfgList.stream().filter(o -> (null != o && checkTransformUpperCase(o.getMatchRule()).equals(matchRule) && evMap.containsKey(o.getEquipVariableId()))).findFirst();
|
|
|
|
|
|
|
|
|
|
if (null == equipmentProdParamCfgOp || !equipmentProdParamCfgOp.isPresent()) continue;
|
|
|
|
|
|
|
|
|
|
evMap.remove(equipmentProdParamCfgOp.get().getId());
|
|
|
|
|
|
|
|
|
|
//数据转换
|
|
|
|
|
String matchValue = transferValue(matchRule, reqBean, prodRuleContext, productionProcessContext, productResult, productionPartContext, productionPsInContext, productionPsOutContext);
|
|
|
|
|
String matchValue = transferValue(matchRule, reqBean, prodRuleContext, productResult, productionPartContext, productionPsInContext, productionPsOutContext);
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(matchValue)) {
|
|
|
|
|
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("发送设备加工参数:[%s]未匹配到业务数据", matchRule), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
|
|
|
@ -210,14 +203,13 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//发送设备加工参数【排序】
|
|
|
|
|
private void doSendEquipParamsCmdSort(StationRequestBean reqBean, StationResultBean resultBean, MesProdRuleContext prodRuleContext, MesCellEquipContext cellEquipContext,
|
|
|
|
|
Map<Long, List<MesEquipmentProdParamCfg>> eppcMap2SourceId, Map<Long, MesEquipmentVariable> evMap, MesProductionProcessContext productionProcessContext, String productResult,
|
|
|
|
|
Optional<MesProductionPartContext> productionPartContextOp, Optional<MesProductionPsInContext> productionPsInContextOp, Optional<MesProductionPsOutContext> productionPsOutContextOp) {
|
|
|
|
|
private String checkTransformUpperCase(String matchRule) {
|
|
|
|
|
matchRule = matchRule.trim();
|
|
|
|
|
return matchRule.contains(MesPcnExtConstWords.PERCENT) ? matchRule.toUpperCase() : matchRule;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//数据转换
|
|
|
|
|
private String transferValue(String matchRule, StationRequestBean reqBean, MesProdRuleContext prodRuleContext, MesProductionProcessContext productionProcessContext, String productResult,
|
|
|
|
|
private String transferValue(String matchRule, StationRequestBean reqBean, MesProdRuleContext prodRuleContext, String productResult,
|
|
|
|
|
MesProductionPartContext productionPartContext, MesProductionPsInContext productionPsInContext, MesProductionPsOutContext productionPsOutContext) {
|
|
|
|
|
switch (matchRule) {
|
|
|
|
|
case "%RESULT%" :
|
|
|
|
|