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