From 4143924357e054c8110c35332ed73d868c416993 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 6 May 2026 18:21:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(material):=20=E6=94=AF=E6=8C=81=E7=89=A9?= =?UTF-8?q?=E6=96=99=E7=B1=BB=E5=88=AB=E5=8F=8A=E5=AD=90=E5=AD=99=E7=B1=BB?= =?UTF-8?q?=E5=88=AB=E7=9A=84=E5=B1=95=E5=BC=80=E6=9F=A5=E8=AF=A2=E4=B8=8E?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在分页查询接口中增加物料类别编码展开,包含所有子孙类别 - 实现一次查询获取类别及其所有子孙类别编码列表的方法 - 在导出接口中同样支持物料类别编码展开 - Mapper 查询条件支持使用物料类别编码列表进行IN查询 - 修改排序规则,将分页查询结果按物料编号降序排列 - 在请求参数中新增物料类别编码列表字段,由服务层自动填充 --- .../QmsQcMaterialControllerService.java | 43 +++++++++++++++++++ .../common/pojo/qo/QmsQcMaterialSearchQO.java | 7 +++ .../resources/mapper/QmsQcMaterialMapper.xml | 30 ++++++++++--- 3 files changed, 73 insertions(+), 7 deletions(-) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java index 18052a20..6afc5152 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java @@ -78,6 +78,11 @@ public class QmsQcMaterialControllerService { * 分页查询质检物料 */ public PageData search(QmsQcMaterialSearchQO request) { + // 若传入了物料类别编码,展开为包含当前类别及所有子孙类别的编码列表 + if (StrUtil.isNotBlank(request.getMaterialCategoryCode())) { + request.setMaterialCategoryCodes(expandCategoryCodes(request.getMaterialCategoryCode())); + } + IPage page = qcMaterialMapper.searchPage( request, new Page<>(request.getPage(), request.getPageSize())); @@ -89,6 +94,40 @@ public class QmsQcMaterialControllerService { return result; } + /** + * 展开物料类别编码:查询指定编码对应的类别及其所有子孙类别的编码列表(一次查询,无递归) + *

+ * parentTree 存储完整祖先路径(ltree 格式,如 0.A.B.C),子孙节点满足: + * parentTree = fullPath OR parentTree LIKE 'fullPath.%' + *

+ */ + private List expandCategoryCodes(String categoryCode) { + QmsQcMaterialCategory category = qcMaterialCategoryService.lambdaQuery() + .eq(QmsQcMaterialCategory::getCategoryCode, categoryCode) + .one(); + if (category == null) { + // 类别不存在,原样返回,Mapper 中 IN 条件查不到数据 + return List.of(categoryCode); + } + + // 构建当前节点完整路径:parentTree.id(若 parentTree 为空则直接取 id) + String fullPath = StrUtil.isBlank(category.getParentTree()) + ? String.valueOf(category.getId()) + : category.getParentTree() + "." + category.getId(); + + // 一次查询:自身 + 直接子节点(parentTree=fullPath)+ 孙级及更深(parentTree LIKE 'fullPath.%') + return qcMaterialCategoryService.lambdaQuery() + .eq(QmsQcMaterialCategory::getCategoryCode, categoryCode) + .or().eq(QmsQcMaterialCategory::getParentTree, fullPath) + .or().likeRight(QmsQcMaterialCategory::getParentTree, fullPath + ".") + .list() + .stream() + .map(QmsQcMaterialCategory::getCategoryCode) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + } + /** * 新增质检物料 */ @@ -375,6 +414,10 @@ public class QmsQcMaterialControllerService { * 导出质检物料(不分页) */ public void exportSearch(HttpServletResponse response, QmsQcMaterialSearchQO request) throws IOException { + // 导出同样支持子孙类别展开 + if (StrUtil.isNotBlank(request.getMaterialCategoryCode())) { + request.setMaterialCategoryCodes(expandCategoryCodes(request.getMaterialCategoryCode())); + } EecExcelUtil.export("质检物料", "质检物料", qcMaterialMapper.searchAll(request), response); } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsQcMaterialSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsQcMaterialSearchQO.java index 687f14c6..17890f57 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsQcMaterialSearchQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsQcMaterialSearchQO.java @@ -2,6 +2,8 @@ package com.nflg.wms.common.pojo.qo; import lombok.Data; +import java.util.List; + /** * 查询质检物料列表 请求参数(分页) */ @@ -13,6 +15,11 @@ public class QmsQcMaterialSearchQO extends PageQO { */ private String materialCategoryCode; + /** + * 物料类别编码列表(内部使用,由 Service 层自动填充,包含当前类别及其所有子孙类别编码) + */ + private List materialCategoryCodes; + /** * 物料编号(模糊匹配) */ diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsQcMaterialMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsQcMaterialMapper.xml index 1606bff3..148b6fa0 100644 --- a/nflg-wms-repository/src/main/resources/mapper/QmsQcMaterialMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/QmsQcMaterialMapper.xml @@ -27,9 +27,17 @@ update_time FROM qms_qc_material - - AND material_category_code = #{request.materialCategoryCode} - + + + AND material_category_code IN + + #{code} + + + + AND material_category_code = #{request.materialCategoryCode} + + AND material_no ilike concat('%', #{request.materialNo}, '%') @@ -40,7 +48,7 @@ AND material_name ilike concat('%', #{request.materialName}, '%') - ORDER BY id DESC + ORDER BY material_no DESC