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