forked from I3-YF/i3plus-mes-pcn-yfai
step
parent
fe4c3e36cf
commit
3cd49fc831
@ -0,0 +1,195 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdRuleCfgExtService;
|
||||||
|
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.actor.shipping.dispatch.IFsmCommonService;
|
||||||
|
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||||
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||||
|
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 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.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description : 装配件匹配工步 【非排序】
|
||||||
|
* @Author : wangjie
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Service("mesAssemblyMatchNosortStepService")
|
||||||
|
public class MesAssemblyMatchNosortStepService extends BaseStepService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IFsmCommonService fsmCommonService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesProdRuleCfgExtService prodRuleCfgExtService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesNumberRuleMatchDispatchService numberRuleMatchDispatchService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StepResult execute(StationRequestBean reqBean) {
|
||||||
|
|
||||||
|
StationResultBean resultBean = new StationResultBean();
|
||||||
|
|
||||||
|
StepResult stepResult = StepResult.getSuccessComplete();
|
||||||
|
|
||||||
|
//获取上下文信息
|
||||||
|
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
|
||||||
|
|
||||||
|
//配置错误 抛出异常
|
||||||
|
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||||
|
|
||||||
|
//存储生产过程上下文对象
|
||||||
|
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
|
||||||
|
|
||||||
|
//从上下文中取出生产线对象
|
||||||
|
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
||||||
|
|
||||||
|
//获取上下文产出零件数据信息集合
|
||||||
|
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
|
||||||
|
|
||||||
|
//获取上下文进料零件条码信息集合
|
||||||
|
List<MesProductionPsInContext> productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
|
||||||
|
|
||||||
|
//获取上下文产品加工规则数据信息集合
|
||||||
|
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
|
||||||
|
|
||||||
|
//获取上下文生产扫/读信息:装配件条码
|
||||||
|
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanAssemblySnContext(reqBean);
|
||||||
|
|
||||||
|
//删除上下文扫/读信息:装配件条码
|
||||||
|
if (!CollectionUtils.isEmpty(equipVariableCollectContextList)) productionDispatchContextStepService.deleteScanAssemblySnContext(reqBean);
|
||||||
|
|
||||||
|
//计算实际需要的加工规则个数
|
||||||
|
Integer needProdRuleContextSize = calcNeedProdRuleContextSize(productionPartContextList, productionPsInContextList, cellEquipContext);
|
||||||
|
|
||||||
|
//未知腔数[工位参数]
|
||||||
|
String cavityUnknownCfg = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CAVITY_UNKNOWN_CFG);
|
||||||
|
|
||||||
|
if (!CollectionUtils.isEmpty(productionPartContextList) && !CollectionUtils.isEmpty(productionPsInContextList)) //存在产出零件 存在进料主条码
|
||||||
|
doMatchAssemblyHasPpAndPs(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, productionPartContextList, productionPsInContextList, prodRuleContextList, equipVariableCollectContextList, needProdRuleContextSize);
|
||||||
|
else if (!CollectionUtils.isEmpty(productionPartContextList)) //存在产出零件 不存在进料主条码
|
||||||
|
doMatchAssemblyHasPp(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, productionPartContextList, prodRuleContextList, equipVariableCollectContextList, needProdRuleContextSize);
|
||||||
|
else if (!CollectionUtils.isEmpty(productionPsInContextList)) //不存在产出零件 存在进料主条码
|
||||||
|
doMatchAssemblyHasPs(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, productionPsInContextList, prodRuleContextList, equipVariableCollectContextList, needProdRuleContextSize);
|
||||||
|
else if (StringUtils.isEmpty(cavityUnknownCfg)) //不存在产出零件 不存在进料主条码 根据设备腔数反向匹配加工规则
|
||||||
|
doMatchAssemblyHasCavity(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, prodRuleContextList, equipVariableCollectContextList, needProdRuleContextSize);
|
||||||
|
else //不存在产出零件 不存在进料主条码 未知腔数 反向完成匹配后获取对应的加工规则
|
||||||
|
doMatchAssemblyUnknowCavity(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, prodRuleContextList, equipVariableCollectContextList);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return stepResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//计算实际需要的加工规则个数
|
||||||
|
private Integer calcNeedProdRuleContextSize(List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList, MesCellEquipContext cellEquipContext) {
|
||||||
|
|
||||||
|
List<MesProductionPartContext> ppList = CollectionUtils.isEmpty(productionPartContextList) ? null :
|
||||||
|
productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList());
|
||||||
|
|
||||||
|
List<MesProductionPsInContext> ppiList = CollectionUtils.isEmpty(productionPsInContextList) ? null :
|
||||||
|
productionPsInContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList());
|
||||||
|
|
||||||
|
if (!CollectionUtils.isEmpty(ppList)) return ppList.size();
|
||||||
|
|
||||||
|
if (!CollectionUtils.isEmpty(ppiList)) return ppiList.size();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return cellEquipContext.getCavity();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//存在产出零件 存在进料主条码
|
||||||
|
private StepResult doMatchAssemblyHasPpAndPs(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList, Integer needProdRuleContextSize) {
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(prodRuleContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前上下文中不存在非排序加工规则数据,请重置工序!");
|
||||||
|
|
||||||
|
//存在产出零件 存在进料主条码 不存在待验证装配件条码
|
||||||
|
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return doMatchAssemblyHasPpAndPs(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, productionPartContextList, productionPsInContextList, prodRuleContextList, needProdRuleContextSize);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return stepResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//存在产出零件 存在进料主条码 不存在待验证装配件条码
|
||||||
|
private StepResult doMatchAssemblyHasPpAndPs(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList, List<MesProdRuleContext> prodRuleContextList, Integer needProdRuleContextSize) {
|
||||||
|
|
||||||
|
Boolean hasUnBindAssembly = false;
|
||||||
|
|
||||||
|
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
|
||||||
|
|
||||||
|
if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
|
||||||
|
|
||||||
|
List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext();
|
||||||
|
|
||||||
|
Optional<MesProductionAssemblyNosortContext> optional = productionAssemblyNosortContextList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0)).findFirst();
|
||||||
|
|
||||||
|
if (null == optional || !optional.isPresent()) continue;
|
||||||
|
|
||||||
|
hasUnBindAssembly = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return hasUnBindAssembly ? stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY).msg("当前上下文中不存在待验证的装配件条码,但存在未装配的装配件清单!") :
|
||||||
|
(needProdRuleContextSize.compareTo(prodRuleContextList.size()) != 0 ? stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY).msg("当前上下文中不存在待验证的装配件条码,当前上下文中的主条码数量未满足腔数!请扫描第") : stepResult);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//存在产出零件 不存在进料主条码
|
||||||
|
private void doMatchAssemblyHasPp(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesProductionPartContext> productionPartContextList, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList, Integer needProdRuleContextSize) {
|
||||||
|
}
|
||||||
|
|
||||||
|
//不存在产出零件 存在进料主条码
|
||||||
|
private void doMatchAssemblyHasPs(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesProductionPsInContext> productionPsInContextList, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList, Integer needProdRuleContextSize) {
|
||||||
|
}
|
||||||
|
|
||||||
|
//不存在产出零件 不存在进料主条码 根据设备腔数反向匹配加工规则
|
||||||
|
private void doMatchAssemblyHasCavity(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList, Integer needProdRuleContextSize) {
|
||||||
|
}
|
||||||
|
|
||||||
|
//不存在产出零件 不存在进料主条码 未知腔数 反向完成匹配后获取对应的加工规则
|
||||||
|
private void doMatchAssemblyUnknowCavity(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
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.pojo.context.MesProductionProcessContext;
|
||||||
|
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||||
|
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
|
||||||
|
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 cn.estsh.impp.framework.boot.util.SpringContextsUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description : 装配件匹配工步
|
||||||
|
* @Author : wangjie
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@Service("mesAssemblyMatchStepService")
|
||||||
|
public class MesAssemblyMatchStepService extends BaseStepService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StepResult init(StationRequestBean reqBean) {
|
||||||
|
|
||||||
|
//显示装配件扫描项工步
|
||||||
|
return ((IStepService) SpringContextsUtil.getBean("mesAssemblyShowStepService")).execute(reqBean);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StepResult execute(StationRequestBean reqBean) {
|
||||||
|
|
||||||
|
StationResultBean resultBean = new StationResultBean();
|
||||||
|
|
||||||
|
StepResult stepResult = StepResult.getSuccessComplete();
|
||||||
|
|
||||||
|
//获取上下文信息
|
||||||
|
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
|
||||||
|
|
||||||
|
//配置错误 抛出异常
|
||||||
|
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||||
|
|
||||||
|
//存储生产过程上下文对象
|
||||||
|
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
|
||||||
|
|
||||||
|
//从上下文中取出生产线对象
|
||||||
|
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
|
||||||
|
|
||||||
|
//排序线 装配件匹配工步
|
||||||
|
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) return stepResult;
|
||||||
|
|
||||||
|
//非排序线 装配件匹配工步
|
||||||
|
return ((IStepService) SpringContextsUtil.getBean("mesAssemblyMatchNosortStepService")).execute(reqBean);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue