From 623c14fd99519e82ff7ceacd229bfe51e9e5a4c1 Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Wed, 10 Jun 2026 11:07:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=B7=BB=E5=8A=A0=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E9=A1=B6=E7=BA=A7=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deviceledger/vo/DeviceLedgerRespVO.java | 6 ++ .../deviceledger/DeviceLedgerDO.java | 12 ++++ .../deviceledger/DeviceLedgerServiceImpl.java | 67 ++++++++++++++++++- 3 files changed, 84 insertions(+), 1 deletion(-) diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerRespVO.java index 9fdbc9fa2..c4fbdc2d8 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerRespVO.java @@ -47,6 +47,12 @@ public class DeviceLedgerRespVO extends BaseDO { @Schema(description = "设备产线") private Integer deviceLine; + @Schema(description = "顶级分类 id") + private Long topCategoryId; + + @Schema(description = "顶级分类名称") + private String topCategoryName; + @Schema(description = "设备类型名称", example = "1") @ExcelProperty("类型") private String typeName; diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/deviceledger/DeviceLedgerDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/deviceledger/DeviceLedgerDO.java index d9c6cc78d..316a5fe52 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/deviceledger/DeviceLedgerDO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/deviceledger/DeviceLedgerDO.java @@ -73,6 +73,18 @@ public class DeviceLedgerDO extends BaseDO { * 设备产线 */ private Integer deviceLine; + + /** + * 顶级分类 id + */ + @TableField(exist = false) + private Long topCategoryId; + + /** + * 顶级分类名称 + */ + @TableField(exist = false) + private String topCategoryName; /** * 供应商 */ diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java index 41d2610bc..324d24c7c 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java @@ -449,6 +449,8 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { } List deviceLineList = deviceLineService.getDeviceLineList(new DeviceLineListReqVO()); Map> collect = deviceLineList.stream().collect(Collectors.groupingBy(DeviceLineDO::getId)); + Map deviceLineMap = deviceLineList.stream() + .collect(Collectors.toMap(DeviceLineDO::getId, Function.identity(), (a, b) -> a)); PageResult deviceLedgerDOPageResult = deviceLedgerMapper.selectPage(pageReqVO); for (DeviceLedgerDO deviceLedgerDO : deviceLedgerDOPageResult.getList()) { if (deviceLedgerDO.getDeviceType()!=null){ @@ -458,6 +460,7 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { if(deviceLedgerDO.getDeviceLine()!=null&&CollUtil.isNotEmpty(collect.get(deviceLedgerDO.getDeviceLine().longValue()))){ deviceLedgerDO.setWorkshopName(collect.get(deviceLedgerDO.getDeviceLine().longValue()).get(0).getName()); } + fillTopCategoryInfo(deviceLedgerDO, deviceLineMap); } return deviceLedgerDOPageResult; } @@ -647,7 +650,69 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { @Override public List getDeviceLedgerList() { - return deviceLedgerMapper.selectList(); + List list = deviceLedgerMapper.selectList(); + fillTopCategoryInfo(list); + return list; + } + + private void fillTopCategoryInfo(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + List deviceLineList = deviceLineService.getDeviceLineList(new DeviceLineListReqVO()); + Map deviceLineMap = deviceLineList.stream() + .collect(Collectors.toMap(DeviceLineDO::getId, Function.identity(), (a, b) -> a)); + list.forEach(item -> fillTopCategoryInfo(item, deviceLineMap)); + } + + private void fillTopCategoryInfo(DeviceLedgerDO deviceLedgerDO, Map deviceLineMap) { + if (deviceLedgerDO == null || deviceLedgerDO.getDeviceLine() == null || deviceLineMap == null || deviceLineMap.isEmpty()) { + return; + } + DeviceLineDO currentLine = deviceLineMap.get(deviceLedgerDO.getDeviceLine().longValue()); + if (currentLine == null) { + return; + } + DeviceLineDO topLine = getTopDeviceLine(currentLine, deviceLineMap); + if (topLine == null) { + return; + } + deviceLedgerDO.setTopCategoryId(topLine.getId()); + deviceLedgerDO.setTopCategoryName(topLine.getName()); + } + + private DeviceLineDO getTopDeviceLine(DeviceLineDO currentLine, Map deviceLineMap) { + Long topLineId = parseTopDeviceLineId(currentLine.getParentChain()); + if (topLineId != null && deviceLineMap.containsKey(topLineId)) { + return deviceLineMap.get(topLineId); + } + DeviceLineDO topLine = currentLine; + Set visitedIds = new HashSet<>(); + while (topLine.getParentId() != null && topLine.getParentId() > 0 && visitedIds.add(topLine.getId())) { + DeviceLineDO parentLine = deviceLineMap.get(topLine.getParentId()); + if (parentLine == null) { + break; + } + topLine = parentLine; + } + return topLine; + } + + private Long parseTopDeviceLineId(String parentChain) { + if (StringUtils.isBlank(parentChain)) { + return null; + } + String[] ids = parentChain.split(","); + for (String id : ids) { + if (StringUtils.isBlank(id)) { + continue; + } + try { + return Long.valueOf(id.trim()); + } catch (NumberFormatException ignored) { + } + } + return null; } @Override