From 56bf508e2d4274e8d6d1f8de2369c053c944f484 Mon Sep 17 00:00:00 2001 From: liweidong-hj Date: Thu, 21 May 2026 20:07:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=95=80=E7=A7=8D=E5=88=86?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desk/dashboard/pojo/vo/DsProModelVO.java | 5 + .../desk/dashboard/mapper/ProModelMapper.xml | 1 + .../service/impl/DsProModelServiceImpl.java | 107 +++++++++++++++++- 3 files changed, 112 insertions(+), 1 deletion(-) diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelVO.java index dfb5cf417..8d47307f5 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelVO.java @@ -30,6 +30,7 @@ import org.springblade.desk.dashboard.pojo.entity.DsProModelEntity; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serial; +import java.util.List; /** * 工艺模版 视图实体类 @@ -52,4 +53,8 @@ public class DsProModelVO extends DsProModelEntity { @Schema(description = "修改人") private String updateUserStr; + private String basicClazzCode; + // 新增字段用于二级结构 + private List children; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProModelMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProModelMapper.xml index ff8145571..1a5ff61fb 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProModelMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProModelMapper.xml @@ -52,6 +52,7 @@ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsProModelServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsProModelServiceImpl.java index 5313b2880..a26b7948f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsProModelServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsProModelServiceImpl.java @@ -28,6 +28,7 @@ package org.springblade.desk.dashboard.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springblade.core.log.exception.ServiceException; @@ -54,6 +55,8 @@ import org.springblade.core.mp.base.BaseServiceImpl; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -372,9 +375,111 @@ public class DsProModelServiceImpl extends BaseServiceImpl getModelList() { +// List dsProModelVOList = proModelMapper.selectDsProModelAll(); +// if(CollectionUtils.isEmpty(dsProModelVOList)){ +// return List.of(); +// } +// for (DsProModelVO dsProModelVO : dsProModelVOList) { +// if (dsProModelVO.getPlatingType() != null) { +// try { +// BasicClazz basicClazz = basicClazzService.getById(dsProModelVO.getPlatingType()); +// if (basicClazz != null) { +// dsProModelVO.setPlatingTypeStr(basicClazz.getName()); +// } +// } catch (Exception e) { +// log.error("查询电镀类型失败, platingType: {}", dsProModelVO.getPlatingType(), e); +// } +// } +// } +// +// //然后想根据镀种分类做成二级结构platingType +// +// +// return null; +// } + @Override public List getModelList() { - return proModelMapper.selectDsProModelAll(); + List dsProModelVOList = proModelMapper.selectDsProModelAll(); + if (CollectionUtils.isEmpty(dsProModelVOList)) { + return List.of(); + } + + + // 1. 按照镀种分类构建二级结构 + Map> groupByPlatingType = dsProModelVOList.stream() + .filter(vo -> vo.getPlatingType() != null) + .collect(Collectors.groupingBy(DsProModelVO::getPlatingType)); + + // 2. 构建二级结构的返回列表 + List result = new ArrayList<>(); + + for (Map.Entry> entry : groupByPlatingType.entrySet()) { + Integer platingTypeId = entry.getKey(); + List children = entry.getValue(); + + if (CollectionUtils.isNotEmpty(children)) { + // 获取镀种名称(从第一个子节点获取) + String platingTypeName = children.get(0).getPlatingTypeStr(); + + // 创建父节点(镀种分类) + DsProModelVO parent = new DsProModelVO(); + parent.setPlatingType(platingTypeId); + parent.setPlatingTypeStr(platingTypeName); + parent.setChildren(children); + + result.add(parent); + } + } + + + // 3.设置名称 + for (DsProModelVO dsProModelVO : result) { + if (dsProModelVO.getPlatingType() != null) { + try { + BasicClazz basicClazz = basicClazzService.getById(dsProModelVO.getPlatingType()); + if (basicClazz != null) { + dsProModelVO.setPlatingTypeStr(basicClazz.getName()); + dsProModelVO.setBasicClazzCode(basicClazz.getCode()); + } + } catch (Exception e) { + log.error("查询电镀类型失败, platingType: {}", dsProModelVO.getPlatingType(), e); + } + } + } + + // 4. 按英文部分排序 + result.sort((o1, o2) -> { + String str1 = o1.getPlatingTypeStr(); + String str2 = o2.getPlatingTypeStr(); + + if ("未分类".equals(str1)) return 1; + if ("未分类".equals(str2)) return -1; + + String english1 = extractEnglishPrefix(str1); + String english2 = extractEnglishPrefix(str2); + + if (english1 == null && english2 == null) return 0; + if (english1 == null) return 1; + if (english2 == null) return -1; + + return english1.compareTo(english2); + }); + + return result; } + // 辅助方法 + private String extractEnglishPrefix(String str) { + if (str == null) return null; + Matcher matcher = Pattern.compile("^([A-Za-z]+)").matcher(str); + if (matcher.find()) { + return matcher.group(1); + } + return str; + } + + }