From 96e5b5ca588397e1804c10683b9135db83885172 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 24 Feb 2025 11:39:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8D=E5=8F=AF=E7=94=A8=E8=A7=84=E5=88=99,?= =?UTF-8?q?=20=E6=8E=92=E5=BA=8F=E7=BA=BF=20=E5=B7=A5=E4=BD=8D=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=B8=80=E5=AF=B9=E5=A4=9A=E5=85=B3=E7=B3=BB,=20?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=AF=B9=E5=BA=94=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/base/IMesEquipmentExtService.java | 9 +++++ .../mes/pcn/api/busi/IMesAssemblyExtService.java | 2 +- .../serviceimpl/base/MesEquipmentExtService.java | 38 ++++++++++++++++++---- .../serviceimpl/busi/MesAssemblyExtService.java | 12 +++---- .../serviceimpl/busi/MesProdRuleCfgExtService.java | 4 +-- .../MesProductionProcessContextStepService.java | 22 +++++++++---- 6 files changed, 65 insertions(+), 22 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java index 5c2f008..bbd39d2 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java @@ -48,9 +48,18 @@ public interface IMesEquipmentExtService { @ApiOperation(value = "根据设备代码查询加工不可用规则信息") List getProdRuleIgnoreCfgListByEquip(String organizeCode, String equipmentCode); + @ApiOperation(value = "根据设备代码集合查询加工不可用规则信息") + List getProdRuleIgnoreCfgListByWcEquips(String organizeCode, List wcEquipmentList); + + @ApiOperation(value = "根据设备代码集合查询加工不可用规则信息") + List getProdRuleIgnoreCfgListByEquips(String organizeCode, List equipmentCodeList); + @ApiOperation(value = "根据生产线代码查询加工不可用规则信息") List getProdRuleIgnoreCfgListByCenter(String organizeCode, String workCenterCode); + @ApiOperation(value = "根据工位代码查询加工不可用规则信息") + List getProdRuleIgnoreCfgListByCell(String organizeCode, String workCenterCode, String workCellCode); + @ApiOperation(value = "根据设备代码, 来源信息查询加工不可用规则信息") List getProdRuleIgnoreCfgList(String organizeCode, String equipmentCode, Integer dataSource, Long sourceId); 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 1209cf9..f358e9c 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 @@ -46,7 +46,7 @@ public interface IMesAssemblyExtService { List getProductionAssemblyNosortContextList(String organizeCode, String equipmentCode, Map> prodRuleIgnoreCfgMap); @ApiOperation(value = "获取不可用规则") - String getProdRuleIgnoreCfg(Map> prodRuleIgnoreCfgMap, Long id, String dataSorce); + String getProdRuleIgnoreCfg(Map> prodRuleIgnoreCfgMap, Long id, String equipmentCode, String dataSorce); @ApiOperation(value = "【排序线】获取生产工单装配件清单") List getWorkOrderAssemblyList(String organizeCode, String workOrderNo, String productSn, String craftCode); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java index b610355..a6e6488 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java @@ -215,6 +215,26 @@ public class MesEquipmentExtService implements IMesEquipmentExtService { new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), equipmentCode}); } + //根据设备代码集合查询加工不可用规则信息 + @Override + public List getProdRuleIgnoreCfgListByWcEquips(String organizeCode, List wcEquipmentList) { + if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(wcEquipmentList)) return null; + List equipmentCodeList = CollectionUtils.isEmpty(wcEquipmentList) ? null : + wcEquipmentList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getEquipmentCode()))).map(MesWcEquipment::getEquipmentCode).collect(Collectors.toList()); + return getProdRuleIgnoreCfgListByEquips(organizeCode, equipmentCodeList); + } + + //根据设备代码集合查询加工不可用规则信息 + @Override + public List getProdRuleIgnoreCfgListByEquips(String organizeCode, List equipmentCodeList) { + if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(equipmentCodeList)) return null; + equipmentCodeList = equipmentCodeList.stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (equipmentCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(equipmentCodeList.get(0), MesPcnExtConstWords.EQUIPMENT_CODE, packBean); + else DdlPreparedPack.getInPackList(equipmentCodeList, MesPcnExtConstWords.EQUIPMENT_CODE, packBean); + return prodRuleIgnoreCfgRepository.findByHqlWhere(packBean); + } + //根据生产线代码查询加工不可用规则信息 @Override public List getProdRuleIgnoreCfgListByCenter(String organizeCode, String workCenterCode) { @@ -222,13 +242,17 @@ public class MesEquipmentExtService implements IMesEquipmentExtService { List wcEquipmentList = wcEquipmentRepository.findByProperty( new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE}, new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode}); - List equipmentCodeList = CollectionUtils.isEmpty(wcEquipmentList) ? null : - (wcEquipmentList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getEquipmentCode()))).map(MesWcEquipment::getEquipmentCode).collect(Collectors.toList())).stream().filter(o -> null != o).distinct().collect(Collectors.toList()); - if (CollectionUtils.isEmpty(equipmentCodeList)) return null; - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - if (equipmentCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(equipmentCodeList.get(0), MesPcnExtConstWords.EQUIPMENT_CODE, packBean); - else DdlPreparedPack.getInPackList(equipmentCodeList, MesPcnExtConstWords.EQUIPMENT_CODE, packBean); - return prodRuleIgnoreCfgRepository.findByHqlWhere(packBean); + return getProdRuleIgnoreCfgListByWcEquips(organizeCode, wcEquipmentList); + } + + //根据工位代码查询加工不可用规则信息 + @Override + public List getProdRuleIgnoreCfgListByCell(String organizeCode, String workCenterCode, String workCellCode) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode) || StringUtils.isEmpty(workCellCode)) return null; + List wcEquipmentList = wcEquipmentRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode, workCellCode}); + return getProdRuleIgnoreCfgListByWcEquips(organizeCode, wcEquipmentList); } //根据设备代码, 来源信息查询加工不可用规则信息 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 3844a8b..f51df87 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 @@ -82,7 +82,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add( new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey()) - .prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getPid(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE10.getValueStr())) + .prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getPid(), o.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE10.getValueStr())) ) ); @@ -116,7 +116,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { new MesProductionAssemblySortContext() .copy(o, getProductionAssembly(productionAssemblyMap, o.getId()), getIsCheckBindSeq(getWorkCell(workCellMap, o.getWorkCellCode()))) .foreignKey(prodRuleContext.getForeignKey()) - .prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getPid(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE10.getValueStr())) + .prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getPid(), o.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE10.getValueStr())) ) ); @@ -204,7 +204,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { assemblyNosortCfgList.forEach(o -> { MesProductionAssemblyNosortContext productionAssemblyNosortContext = new MesProductionAssemblyNosortContext().copy(prodRuleContext, o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey()); productionAssemblyNosortContext.overrideAssemblyStatus(productionCustomContextStepService.getRepeatAssemblySn(prodRuleContext.getOrganizeCode(), prodRuleContext.getWorkCenterCode(), prodRuleContext.getWorkCellCode(), productionAssemblyNosortContext)) - .prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE30.getValueStr())); + .prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), o.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE30.getValueStr())); productionAssemblyNosortContextList.add(productionAssemblyNosortContext); }); @@ -213,9 +213,9 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { //获取不可用规则 @Override - public String getProdRuleIgnoreCfg(Map> prodRuleIgnoreCfgMap, Long id, String dataSorce) { + public String getProdRuleIgnoreCfg(Map> prodRuleIgnoreCfgMap, Long id, String equipmentCode, String dataSorce) { if (CollectionUtils.isEmpty(prodRuleIgnoreCfgMap) || StringUtils.isEmpty(id) || StringUtils.isEmpty(dataSorce)) return null; - String key = new StringJoiner(MesPcnExtConstWords.AND).add(dataSorce).add(id.toString()).toString(); + String key = new StringJoiner(MesPcnExtConstWords.AND).add(dataSorce).add(equipmentCode).add(id.toString()).toString(); return prodRuleIgnoreCfgMap.containsKey(key) ? JSONObject.toJSONString(prodRuleIgnoreCfgMap.get(key)) : null; } @@ -250,7 +250,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { assemblyNosortCfgList.forEach(o -> productionAssemblyNosortContextList.add( new MesProductionAssemblyNosortContext().copy(o) - .prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE30.getValueStr())) + .prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), o.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE30.getValueStr())) ) ); 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 edf2c96..f0a74e5 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 @@ -85,7 +85,7 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService { @Override public List getProdRuleNosortCfgList(List prodRuleNosortCfgList, Map> prodRuleIgnoreCfgMap) { if (CollectionUtils.isEmpty(prodRuleNosortCfgList) || CollectionUtils.isEmpty(prodRuleIgnoreCfgMap)) return prodRuleNosortCfgList; - prodRuleNosortCfgList.stream().forEach(o -> o.setProdRuleIgnoreCfg(assemblyExtService.getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE20.getValueStr()))); + prodRuleNosortCfgList.stream().forEach(o -> o.setProdRuleIgnoreCfg(assemblyExtService.getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), o.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE20.getValueStr()))); return null; } @@ -127,7 +127,7 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService { @Override public MesProdRuleContext getProdRuleNosortContextByPid(MesProdRuleContext prodRuleContext, Map> prodRuleIgnoreCfgMap) { if (null == prodRuleContext || CollectionUtils.isEmpty(prodRuleIgnoreCfgMap)) return prodRuleContext; - prodRuleContext.setProdRuleIgnoreCfg(assemblyExtService.getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, prodRuleContext.getPid(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE20.getValueStr())); + prodRuleContext.setProdRuleIgnoreCfg(assemblyExtService.getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, prodRuleContext.getPid(), prodRuleContext.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE20.getValueStr())); return prodRuleContext; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java index 1fc5153..7da3dcb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java @@ -614,14 +614,24 @@ public class MesProductionProcessContextStepService extends BaseStepService impl MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); if (null == cellEquipmentContext) cellEquipmentContext = dispatchCurCellEquipment(reqBean, productionProcessContext).getCurCellEquip(); if (!productionProcessContext.getSuccess() || !StringUtils.isEmpty(productionProcessContext.getProdRuleIgnoreCfg())) return productionProcessContext; - //根据设备代码查询加工不可用规则信息, 如果是排序线末道工位,需要查询生产线所有设备的不可用规则, 因为末道工位可能会补装配前道 - List prodRuleIgnoreCfgList = (getCenterType(reqBean).compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue()) == 0 && - (!StringUtils.isEmpty(productionProcessContext.getWorkCell().getIsEndWorkCell()) && productionProcessContext.getWorkCell().getIsEndWorkCell().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)) - ? equipmentExtService.getProdRuleIgnoreCfgListByCenter(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()) - : equipmentExtService.getProdRuleIgnoreCfgListByEquip(reqBean.getOrganizeCode(), cellEquipmentContext.getEquipmentCode()); + + List prodRuleIgnoreCfgList; + if (getCenterType(reqBean).compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) == 0) { + //如果是非排序线, 则根据工位当前设备代码查询加工不可用规则信息 + prodRuleIgnoreCfgList = equipmentExtService.getProdRuleIgnoreCfgListByEquip(reqBean.getOrganizeCode(), cellEquipmentContext.getEquipmentCode()); + } else if (!StringUtils.isEmpty(productionProcessContext.getWorkCell().getIsEndWorkCell()) && productionProcessContext.getWorkCell().getIsEndWorkCell().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) { + //如果是排序线末道工位,需要查询生产线所有设备的不可用规则, 因为末道工位可能会补装配前道 + prodRuleIgnoreCfgList = equipmentExtService.getProdRuleIgnoreCfgListByCenter(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + } else { + //如果是排序线,需要查询当前工位下所有设备的不可用规则, 排序线一个工位对应多个设备, 例如不同扭距枪的装配件对应不同的设备 + prodRuleIgnoreCfgList = equipmentExtService.getProdRuleIgnoreCfgListByCell(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + } + + //存储不可用规则到上下文 if (!CollectionUtils.isEmpty(prodRuleIgnoreCfgList)) { dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_IGNORE_CFG_CONTEXT, JSONObject.toJSONString(prodRuleIgnoreCfgList)); } + productionProcessContext.prodRuleIgnoreCfg(!CollectionUtils.isEmpty(prodRuleIgnoreCfgList) ? CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValueStr()).isNeedCache(); return productionProcessContext; } @@ -642,7 +652,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl List prodRuleIgnoreCfgList = getProdRuleIgnoreCfgContext(reqBean, productionProcessContext); return CollectionUtils.isEmpty(prodRuleIgnoreCfgList) ? null : prodRuleIgnoreCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getDataSource()) && !StringUtils.isEmpty(o.getSourceId()))) - .collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getDataSource().toString()).add(o.getSourceId().toString()).toString())); + .collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getDataSource().toString()).add(o.getEquipmentCode()).add(o.getSourceId().toString()).toString())); } }