diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyGeneratePartNoStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyGeneratePartNoStepService.java index 606f2f6..14010a7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyGeneratePartNoStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyGeneratePartNoStepService.java @@ -212,14 +212,14 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService { } //装配件清单该数据标记已装配 - productionAssemblyNosortContext.assemblyStatus().assemblySn(equipVariableCollectContext.getEquipVariableValue()).productSnId(filterList.get(0).getProductSnId()); + productionAssemblyNosortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filterList.get(0).getProductSnId()); } } String getRepeatAssemblySn = getRepeatAssemblySn(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionAssemblyNosortContext); - if (!StringUtils.isEmpty(getRepeatAssemblySn)) productionAssemblyNosortContext.assemblyStatus().assemblySn(getRepeatAssemblySn); + if (!StringUtils.isEmpty(getRepeatAssemblySn)) productionAssemblyNosortContext.assemblyStatus(getRepeatAssemblySn); //判断当前装配件规则是否被成功匹配条码 if (productionAssemblyNosortContext.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0) break; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java index 174dbf4..174ec15 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java @@ -6,10 +6,12 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepServ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService; 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.mes.pcn.serviceimpl.fsm.IStepService; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; @@ -50,6 +52,9 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { @Autowired private IMesProductionRecordService productionRecordService; + @Autowired + private IFsmCommonService fsmCommonService; + @Override public StepResult execute(StationRequestBean reqBean) { @@ -114,11 +119,13 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { //搜集装配件条码 String assemblySn = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString(); - //匹配成功 - if (result || !hasUnBindAssembly) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); - if (result || !hasUnBindAssembly) assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList); + //匹配成功 【result=true 代表单次扫描匹配成功; hasUnBindAssembly=false 代表浑腔模式全部匹配成功】 + if (result || !hasUnBindAssembly) { + productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); + assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList); + } - //全部匹配完毕,存在进料的时候直接调用 生成零件条码工步 + //全部匹配完毕,存在进料且进料数量满足腔数的时候直接调用 生成零件条码工步 if (!hasUnBindAssembly && !CollectionUtils.isEmpty(productionPsInContextList) && productionPsInContextList.size() >= needQty) ((IStepService) SpringContextsUtil.getBean("mesProductSnGenerateStepService")).execute(reqBean); //没有待绑定数据, 验证当前是否满足腔数 没有进料主条码代码当前加工规则已经全部加载, 有的话需要判断是否全部扫完 没有扫完需要返回false继续扫描主条码 @@ -131,11 +138,44 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { if (result) return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, isSkip ? stepResult.getMsg() : String.format("上下文中的装配件条码%s匹配成功!", assemblySn)); + //匹配失败验证是否重置装配件扫描项 + MesWorkCell workCell = productionProcessContext.getWorkCell(); + if (!StringUtils.isEmpty(workCell.getIsResetScan()) && workCell.getIsResetScan().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) { + productionDispatchContextStepService.saveProdRuleDataContext(reqBean, resetAssembly(reqBean, prodRuleContextList)); + assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList); + } + return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), String.format("上下文中的装配件条码%s匹配失败!%s", assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg())); } + private List resetAssembly(StationRequestBean reqBean, List prodRuleContextList) { + + //是否支持混腔扫描[工位参数] + String cavityNosortCfg = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.CAVITY_NOSORT_CFG); + + prodRuleContextList.forEach(o -> { + + if (!StringUtils.isEmpty(o.getAssemblyDataJson())) { + + List productionAssemblyNosortContextList = o.getNosortAssemblyDataContext(); + + if (!StringUtils.isEmpty(cavityNosortCfg) || hasUnBindAssemblyOptional(productionAssemblyNosortContextList)) { + + productionAssemblyNosortContextList.forEach(i -> { if (i.getIsResetScan().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) i.assemblyStatusReset(); }); + + o.assemblyDataJson(productionAssemblyNosortContextList); + + } + + } + + }); + + return prodRuleContextList; + } + //验证当前是否属于装配件跳过码 private Boolean checkIsSkip(MesProductionProcessContext productionProcessContext, List equipVariableCollectContextList) { if (equipVariableCollectContextList.size() > 1) return false; @@ -156,19 +196,21 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { for (MesProdRuleContext prodRuleContext : prodRuleContextList) { if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue; List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); - Optional 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; + if (!hasUnBindAssemblyOptional(productionAssemblyNosortContextList)) continue; hasUnBindAssembly = true; break; } return hasUnBindAssembly; } + private Boolean hasUnBindAssemblyOptional(List productionAssemblyNosortContextList) { + Optional optional = productionAssemblyNosortContextList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0)).findFirst(); + return (null == optional || !optional.isPresent()) ? false : true; + } + //处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成] private Boolean doHandleMatchAssembly(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List prodRuleContextList, List equipVariableCollectContextList, Boolean isSkip) { - Boolean flag = false; - //遍历产品加工规则 for (MesProdRuleContext prodRuleContext : prodRuleContextList) { @@ -178,6 +220,8 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { //获取非排序装配件清单 List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); + Boolean flag = false; + //遍历装配件清单 LOOP: for (MesProductionAssemblyNosortContext productionAssemblyNosortContext : productionAssemblyNosortContextList) { @@ -239,7 +283,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { flag = true; //装配件清单该数据标记已装配 (如果是自制件赋值productSnId) - productionAssemblyNosortContext.assemblyStatus().assemblySn(equipVariableCollectContext.getEquipVariableValue()).productSnId(filterList.get(0).getProductSnId()); + productionAssemblyNosortContext.assemblyStatus(equipVariableCollectContext.getEquipVariableValue()).productSnId(filterList.get(0).getProductSnId()); } @@ -256,7 +300,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { } - return flag; + return false; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java index 9fafc72..02a5dbe 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyContext.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import io.swagger.annotations.ApiParam; import lombok.Data; @@ -34,6 +35,9 @@ public class MesProductionAssemblyContext implements Serializable { @ApiParam("装配零件状态") public Integer assemblyStatus; + @ApiParam(name = "任意装配件扫描错误判断工位isResetScan后是否重新扫描") + public Integer isResetScan = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); + @ApiParam("是否跳过") public Integer isSkip; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java index ca00672..683e7ff 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java @@ -40,25 +40,38 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon public MesProductionAssemblyNosortContext() {} public MesProductionAssemblyNosortContext copy(MesProdRuleContext prodRuleContext, MesAssemblyNosortCfg assemblyNosortCfg, String assemblySn) { + BeanUtils.copyProperties(assemblyNosortCfg, this); + BeanUtils.copyProperties(prodRuleContext, this); + this.sourceId = assemblyNosortCfg.getId(); + this.partNo = prodRuleContext.getOutPartNo(); + if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO; + this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue(); + this.isSkip = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + if (MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_50.getValue() == this.matchType || MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_60.getValue() == this.matchType) this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(); + if (!StringUtils.isEmpty(assemblySn)) { this.assemblySn = assemblySn; this.isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(); } + + if (this.assemblyStatus.compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) != 0) this.isResetScan = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + return this; } - public MesProductionAssemblyNosortContext assemblyStatus() { + public MesProductionAssemblyNosortContext assemblyStatus(String assemblySn) { this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(); + this.assemblySn = assemblySn; return this; } @@ -68,8 +81,10 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon return this; } - public MesProductionAssemblyNosortContext assemblySn(String assemblySn) { - this.assemblySn = assemblySn; + public MesProductionAssemblyNosortContext assemblyStatusReset() { + this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue(); + this.assemblySn = null; + this.isSkip = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); return this; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java index 2b86f78..bb7c87d 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblySortContext.java @@ -104,13 +104,21 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte public MesProductionAssemblySortContext() {} public MesProductionAssemblySortContext copy(MesWorkOrderAssembly workOrderAssembly, MesProductionAssembly productionAssembly) { + if (null != workOrderAssembly) BeanUtils.copyProperties(workOrderAssembly, this); + if (null != productionAssembly) BeanUtils.copyProperties(productionAssembly, this); + if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO; + if (StringUtils.isEmpty(this.isSkip)) this.isSkip = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + if (this.assemblyStatus.compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0 && (MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_50.getValue() == this.matchType || MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_60.getValue() == this.matchType)) this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(); + + if (this.assemblyStatus.compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) != 0) this.isResetScan = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + return this; }