From 9231dae783f875670d4b90b7f101ad1e28d5d410 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 16 Feb 2026 15:47:05 +0800 Subject: [PATCH] feat(mes): 优化工作站模块,新增获取车间列表和车间 Map 方法,重构表单弹窗逻辑 --- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java | 23 +++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/workstation/MesMdWorkstationController.java | 7 ++++--- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkshopDO.java | 2 -- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationDO.java | 5 ----- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationMachineDO.java | 1 - yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationToolDO.java | 1 - yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationWorkerDO.java | 1 - yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdProductBomServiceImpl.java | 26 +++----------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkshopService.java | 23 ++++++++++++++++++++++- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkshopServiceImpl.java | 6 ++++++ 10 files changed, 58 insertions(+), 37 deletions(-) diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java index aa523b9..28265a5 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java @@ -349,4 +349,27 @@ public class CollectionUtils { return (LinkedHashSet) toCollection(LinkedHashSet.class, elementType, value); } + public static boolean dfs(Long node, Map> graph) { + return dfs(node, graph, new HashSet<>(), new HashSet<>()); + } + + private static boolean dfs(Long node, Map> graph, Set visited, Set inStack) { + if (inStack.contains(node)) { + return true; + } + if (visited.contains(node)) { + return false; + } + visited.add(node); + inStack.add(node); + Set neighbors = graph.getOrDefault(node, Collections.emptySet()); + for (Long neighbor : neighbors) { + if (dfs(neighbor, graph, visited, inStack)) { + return true; + } + } + inStack.remove(node); + return false; + } + } \ No newline at end of file diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/workstation/MesMdWorkstationController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/workstation/MesMdWorkstationController.java index 9cf1a89..7fbdf71 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/workstation/MesMdWorkstationController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/workstation/MesMdWorkstationController.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -110,14 +111,14 @@ public class MesMdWorkstationController { // ==================== 拼接 VO ==================== + @SuppressWarnings("CodeBlock2Expr") private List buildWorkstationRespVOList(List list) { if (CollUtil.isEmpty(list)) { return Collections.emptyList(); } // 1. 批量获取车间信息 - Map workshopMap = convertMap( - workshopService.getWorkshopListByStatus(null), - MesMdWorkshopDO::getId); + Map workshopMap = workshopService.getWorkshopMap( + convertSet(list, MesMdWorkstationDO::getWorkshopId)); // 2. 拼接 VO return BeanUtils.toBean(list, MesMdWorkstationRespVO.class, vo -> { MapUtils.findAndThen(workshopMap, vo.getWorkshopId(), diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkshopDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkshopDO.java index 9c5a42e..c88c1e0 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkshopDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkshopDO.java @@ -40,14 +40,12 @@ public class MesMdWorkshopDO extends BaseDO { * 面积(平方米) */ private BigDecimal area; - // DONE @AI:通过 @ 去关联 /** * 负责人用户编号 * * 关联 AdminUserDO 的 id */ private Long chargeUserId; - // DONE @AI:通过 @ 去关联 /** * 状态 * diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationDO.java index 4c8be35..94b8e6c 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationDO.java @@ -38,28 +38,24 @@ public class MesMdWorkstationDO extends BaseDO { * 工作站地点 */ private String address; - // DONE @AI:通过 @ 去关联,按照别的模块 /** * 所在车间编号 * * 关联 {@link MesMdWorkshopDO#getId()} */ private Long workshopId; - // DONE @AI:通过 @ 去关联,按照别的模块 /** * 工序编号 * * TODO @芋艿:等 pro 模块,关联工序表 */ private Long processId; - // DONE @AI:通过 @ 去关联,按照别的模块 /** * 线边库编号 * * TODO @芋艿:等 wm 模块,关联仓库表 */ private Long warehouseId; - // DONE @AI:通过 @ 去关联,按照别的模块 /** * 库区编号 * @@ -72,7 +68,6 @@ public class MesMdWorkstationDO extends BaseDO { * TODO @芋艿:等 wm 模块,关联库位表 */ private Long areaId; - // DONE @AI:通过 @ 去关联,按照别的模块 /** * 状态 * diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationMachineDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationMachineDO.java index ead431f..099d8e7 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationMachineDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationMachineDO.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; -// DONE @AI:设备资源表;已修正所有中文注释 /** * MES 设备资源 DO * diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationToolDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationToolDO.java index dec2142..9b3ce43 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationToolDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationToolDO.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; -// DONE @AI:工装夹具资源表;已修正所有中文注释 /** * MES 工装夹具资源 DO * diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationWorkerDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationWorkerDO.java index c982184..df4fec5 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationWorkerDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationWorkerDO.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; -// DONE @AI:人力资源表;已修正所有中文注释 /** * MES 人力资源 DO * diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdProductBomServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdProductBomServiceImpl.java index 174291d..f69410e 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdProductBomServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdProductBomServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.mes.service.md.item; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.bom.MesMdProductBomPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.bom.MesMdProductBomSaveReqVO; @@ -92,6 +93,7 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService { } } + // TODO @AI:hasXXXCycle 这样? /** * 检测新增边 (itemId -> bomItemId) 后,BOM 图是否存在闭环 * @@ -108,36 +110,14 @@ public class MesMdProductBomServiceImpl implements MesMdProductBomService { // 1.3 添加待新增的边 graph.computeIfAbsent(itemId, k -> new HashSet<>()).add(bomItemId); // 2. DFS 检测环 - Set visited = new HashSet<>(); - Set inStack = new HashSet<>(); for (Long node : graph.keySet()) { - if (dfs(node, graph, visited, inStack)) { + if (CollectionUtils.dfs(node, graph)) { return true; } } return false; } - // DONE @AI:dfs 为 BOM 环检测的私有方法,属于业务逻辑,保留在 ServiceImpl 中 - private boolean dfs(Long node, Map> graph, Set visited, Set inStack) { - if (inStack.contains(node)) { - return true; - } - if (visited.contains(node)) { - return false; - } - visited.add(node); - inStack.add(node); - Set neighbors = graph.getOrDefault(node, Collections.emptySet()); - for (Long neighbor : neighbors) { - if (dfs(neighbor, graph, visited, inStack)) { - return true; - } - } - inStack.remove(node); - return false; - } - @Override public MesMdProductBomDO getProductBom(Long id) { return productBomMapper.selectById(id); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkshopService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkshopService.java index 2c20a20..6ca8477 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkshopService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkshopService.java @@ -6,9 +6,12 @@ import cn.iocoder.yudao.module.mes.controller.admin.md.workstation.vo.workshop.M import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkshopDO; import jakarta.validation.Valid; +import java.util.Collection; import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; -// DONE @AI:方法注释 /** * MES 车间 Service 接口 * @@ -55,6 +58,24 @@ public interface MesMdWorkshopService { PageResult getWorkshopPage(MesMdWorkshopPageReqVO pageReqVO); /** + * 获得车间列表 + * + * @param ids 编号列表 + * @return 车间列表 + */ + List getWorkshopList(Collection ids); + + /** + * 获得车间 Map + * + * @param ids 编号列表 + * @return 车间 Map + */ + default Map getWorkshopMap(Collection ids) { + return convertMap(getWorkshopList(ids), MesMdWorkshopDO::getId); + } + + /** * 获得指定状态的车间列表 * * @param status 状态 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkshopServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkshopServiceImpl.java index 84d4364..298b983 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkshopServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkshopServiceImpl.java @@ -14,6 +14,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.Collection; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -113,6 +114,11 @@ public class MesMdWorkshopServiceImpl implements MesMdWorkshopService { } @Override + public List getWorkshopList(Collection ids) { + return workshopMapper.selectByIds(ids); + } + + @Override public List getWorkshopListByStatus(Integer status) { return workshopMapper.selectListByStatus(status); } -- libgit2 0.21.4