From b920d304453f8b69a173f15bb72e5ce06f475205 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 31 Mar 2025 21:33:45 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=BA=86=20=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=89=8D=E9=81=93=E6=89=80=E6=9C=89=E8=A3=85=E9=85=8D=E4=BB=B6?= =?UTF-8?q?=20=E9=85=8D=E7=BD=AE=20=E8=80=83=E8=99=91=E5=B9=B3=E8=A1=8C?= =?UTF-8?q?=E4=B8=8E=E5=90=8E=E7=AB=AF=E7=9A=84=E6=95=B0=E6=8D=AE=E8=BF=87?= =?UTF-8?q?=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/busi/IMesAssemblyExtService.java | 9 ++--- .../pcn/api/busi/IMesProdRuleCfgExtService.java | 5 +-- .../serviceimpl/busi/MesAssemblyExtService.java | 42 ++++++++++++++-------- .../serviceimpl/busi/MesProdRuleCfgExtService.java | 6 ++-- .../MesAssemblyShowSortPreCraftStepService.java | 20 ++++++++++- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 4 +++ 6 files changed, 61 insertions(+), 25 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java index 1aa24bf..837974e 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java @@ -15,14 +15,15 @@ public interface IMesAssemblyExtService { @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 -同时- 关联不可用规则") List getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext, Map> prodRuleIgnoreCfgMap); - @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 [前道所有装配件] -同时- 关联不可用规则") - List getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map workCellMap, Map> prodRuleIgnoreCfgMap); + @ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 [前道所有装配件] -同时- 关联不可用规则 ; 判断是否剔除平行工位 ; 判断是否根据工序顺序号过滤后道") + List getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map workCellMap, + Map> prodRuleIgnoreCfgMap, Boolean isFilterParallel, Boolean isFilterAfterCraft); @ApiOperation(value = "【排序线】获取生产工单装配件清单") List getWorkOrderAssemblyList(MesProdRuleContext prodRuleContext, Boolean isShowAll); - @ApiOperation(value = "【排序线】获取生产工单装配件清单[前道所有装配件]") - List getWorkOrderAssemblyListAllCell(MesProdRuleContext prodRuleContext, List workCellList); + @ApiOperation(value = "【排序线】获取生产工单装配件清单[前道所有装配件] 判断是否剔除平行工位 ; 判断是否过滤后道") + List getWorkOrderAssemblyListPreCraft(MesProdRuleContext prodRuleContext, Boolean isParallel, Boolean isFilterAfterCraft); @ApiOperation(value = "获取装配件绑定记录【排序】") List getProductionAssemblySortList(String organizeCode, String productSn); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdRuleCfgExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdRuleCfgExtService.java index 7905bae..1a94cbe 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdRuleCfgExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdRuleCfgExtService.java @@ -35,7 +35,8 @@ public interface IMesProdRuleCfgExtService { @ApiOperation(value = "【排序线】获取产品加工规则(条码对应的装配件绑定记录,目前条码等同工单) -同时- 关联不可用规则") MesProdRuleContext getProdRuleSortContext(MesProdRuleContext prodRuleContext, Map> prodRuleIgnoreCfgMap); - @ApiOperation(value = "【排序线】获取产品加工规则 [前道所有装配件] -同时- 关联不可用规则") - MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext, Map workCellMap, Map> prodRuleIgnoreCfgMap); + @ApiOperation(value = "【排序线】获取产品加工规则 [前道所有装配件] -同时- 关联不可用规则; 判断是否剔除平行工位 ; 判断是否根据工序顺序号过滤后道") + MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext, Map workCellMap, + Map> prodRuleIgnoreCfgMap, Boolean isFilterParallel, Boolean isFilterAfterCraft); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java index 8dc21a3..f0ae9a3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java @@ -25,10 +25,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.StringJoiner; +import java.util.*; import java.util.stream.Collectors; @Slf4j @@ -89,9 +86,9 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { return productionAssemblySortContextList; } - //【排序线】获取生产工单装配件绑定记录 [前道所有装配件,无爆炸图与音频文件逻辑] -同时- 关联不可用规则 + //【排序线】获取生产工单装配件绑定记录 [前道所有装配件,无爆炸图与音频文件逻辑] -同时- 关联不可用规则 ; 判断是否剔除平行工位 ; 判断是否根据工序顺序号过滤后道 @Override - public List getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map workCellMap, Map> prodRuleIgnoreCfgMap) { + public List getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map workCellMap, Map> prodRuleIgnoreCfgMap, Boolean isFilterParallel, Boolean isFilterAfterCraft) { if (null == prodRuleContext) return null; @@ -99,7 +96,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { StringUtils.isEmpty(prodRuleContext.getWorkCellCode()) || StringUtils.isEmpty(prodRuleContext.getProcessCode()) || StringUtils.isEmpty(prodRuleContext.getProductSn())) return null; //【排序线】获取生产工单装配件清单 [前道所有装配件] - List workOrderAssemblyList = getWorkOrderAssemblyListAllCell(prodRuleContext, new ArrayList<>(workCellMap.values())); + List workOrderAssemblyList = getWorkOrderAssemblyListPreCraft(prodRuleContext, isFilterParallel, isFilterAfterCraft); if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null; @@ -150,18 +147,33 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { } - //【排序线】获取生产工单装配件清单[前道所有装配件] + //【排序线】获取生产工单装配件清单[前道所有装配件] 判断是否剔除平行工位 ; 判断是否过滤后道 @Override - public List getWorkOrderAssemblyListAllCell(MesProdRuleContext prodRuleContext, List workCellList) { + public List getWorkOrderAssemblyListPreCraft(MesProdRuleContext prodRuleContext, Boolean isFilterParallel, Boolean isFilterAfterCraft) { + //【排序线】获取生产工单装配件清单 List workOrderAssemblyList = getWorkOrderAssemblyList(prodRuleContext, true); if (CollectionUtils.isEmpty(workOrderAssemblyList)) return workOrderAssemblyList; - //判断是否存在其他末道工位[可能存在平行工位] - List workCellList2End = workCellList.stream().filter(o -> (null != o - && o.getIsEndWorkCell().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 - && !o.getWorkCellCode().equals(prodRuleContext.getWorkCellCode()))).map(MesWorkCell::getWorkCellCode).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(workCellList2End)) return workOrderAssemblyList; - return workOrderAssemblyList.stream().filter(o -> (null != o && !workCellList2End.contains(o.getWorkCellCode()))).collect(Collectors.toList()); + + //获取当前工位的第一个装配件的工艺顺序号 + Optional optional = workOrderAssemblyList.stream().filter(o -> (null != o && prodRuleContext.getWorkCellCode().equals(o.getWorkCellCode()))).findFirst(); + if ((null == optional || !optional.isPresent()) || StringUtils.isEmpty(optional.get().getProcessSeq())) return workOrderAssemblyList; + + //平行工位, 需要剔除相同工艺顺序号的工位的装配件 + if (isFilterParallel) { + workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> (null != o && (StringUtils.isEmpty(o.getProcessSeq()) || + o.getProcessSeq().compareTo(optional.get().getProcessSeq()) != 0 || o.getWorkCellCode().equals(prodRuleContext.getWorkCellCode())))).collect(Collectors.toList()); + } + + if (CollectionUtils.isEmpty(workOrderAssemblyList)) return workOrderAssemblyList; + + //根据工序顺序号过滤后道 + if (isFilterAfterCraft) { + workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> (null != o && + (StringUtils.isEmpty(o.getProcessSeq()) || o.getProcessSeq().compareTo(optional.get().getProcessSeq()) <= 0))).collect(Collectors.toList()); + } + + return workOrderAssemblyList; } //获取装配件绑定记录【排序】 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java index f0a74e5..4af10b1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdRuleCfgExtService.java @@ -137,10 +137,10 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService { return prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblySortContextList(prodRuleContext, prodRuleIgnoreCfgMap)); } - //【排序线】获取产品加工规则 [前道所有装配件] -同时- 关联不可用规则 + //【排序线】获取产品加工规则 [前道所有装配件] -同时- 关联不可用规则; 判断是否剔除平行工位 ; 判断是否根据工序顺序号过滤后道 @Override - public MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext, Map workCellMap, Map> prodRuleIgnoreCfgMap) { - return prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblySortPreCraftContextList(prodRuleContext, workCellMap, prodRuleIgnoreCfgMap)); + public MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext, Map workCellMap, Map> prodRuleIgnoreCfgMap, Boolean isFilterParallel, Boolean isFilterAfterCraft) { + return prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblySortPreCraftContextList(prodRuleContext, workCellMap, prodRuleIgnoreCfgMap, isFilterParallel, isFilterAfterCraft)); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java index 86fa74a..599cee3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortPreCraftStepService.java @@ -4,6 +4,8 @@ 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.context.MesProductionPsInContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleIgnoreCfg; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; @@ -12,9 +14,11 @@ import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.util.List; import java.util.Map; +import java.util.Optional; /** * @Description : 显示前道所有工序装配件工步【排序】 @@ -34,11 +38,25 @@ public class MesAssemblyShowSortPreCraftStepService extends MesAssemblyShowSortS Map workCellMap = productionProcessContextStepService.dispatchWorkCellMap(reqBean); MesProdRuleContext prodRuleContext = new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()) .equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey()); - return prodRuleCfgExtService.getProdRuleSortPreCraftContext(prodRuleContext, workCellMap, prodRuleIgnoreCfgMap); + + //获取工步参数 + Optional> stepParamMap = getStepParams(reqBean); + //是否剔除平行工位[工步参数] + String isFilterParallel = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.IS_FILTER_PARALLEL)) ? stepParamMap.get().get(MesPcnExtConstWords.IS_FILTER_PARALLEL).getParamValue() : null; + //是否根据工序顺序号过滤后道[工步参数] + String isFilterAfterCraft = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.IS_FILTER_AFTER_CRAFT)) ? stepParamMap.get().get(MesPcnExtConstWords.IS_FILTER_AFTER_CRAFT).getParamValue() : null; + + //【排序线】获取产品加工规则 [前道所有装配件] -同时- 关联不可用规则; 不剔除平行工位 ; 不过滤后道 + return prodRuleCfgExtService.getProdRuleSortPreCraftContext(prodRuleContext, workCellMap, prodRuleIgnoreCfgMap, isFilterCfg(isFilterParallel), isFilterCfg(isFilterAfterCraft)); } public Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, List prodRuleContextList) { return showProductionAssembly(reqBean, resultBean, workCenter, prodRuleContextList, true, false); } + //判断配置设置是否过滤数据的标志 + private Boolean isFilterCfg(String isFilterCfg) { + return StringUtils.isEmpty(isFilterCfg) ? false : true; + } + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index fd9daf8..4d6479b 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -473,6 +473,10 @@ public class MesPcnExtConstWords { public static final String REPLACE_LENGTH = "replaceLength"; //替换信息[工步参数] public static final String REPLACE_INFO = "replaceInfo"; + //是否剔除平行工位[工步参数] + public static final String IS_FILTER_PARALLEL = "isFilterParallel"; + //是否根据工序顺序号过滤后道[工步参数] + public static final String IS_FILTER_AFTER_CRAFT = "isFilterAfterCraft"; // 装配件显示规则配置[工位参数] public static final String ASSEMBLY_SHOW_MR_CFG = "ASSEMBLY_SHOW_MR_CFG";