feat(material): 支持物料类别及子孙类别的展开查询与导出
- 在分页查询接口中增加物料类别编码展开,包含所有子孙类别 - 实现一次查询获取类别及其所有子孙类别编码列表的方法 - 在导出接口中同样支持物料类别编码展开 - Mapper 查询条件支持使用物料类别编码列表进行IN查询 - 修改排序规则,将分页查询结果按物料编号降序排列 - 在请求参数中新增物料类别编码列表字段,由服务层自动填充
This commit is contained in:
parent
12d0e0ca71
commit
4143924357
|
|
@ -78,6 +78,11 @@ public class QmsQcMaterialControllerService {
|
|||
* 分页查询质检物料
|
||||
*/
|
||||
public PageData<QmsQcMaterialVO> search(QmsQcMaterialSearchQO request) {
|
||||
// 若传入了物料类别编码,展开为包含当前类别及所有子孙类别的编码列表
|
||||
if (StrUtil.isNotBlank(request.getMaterialCategoryCode())) {
|
||||
request.setMaterialCategoryCodes(expandCategoryCodes(request.getMaterialCategoryCode()));
|
||||
}
|
||||
|
||||
IPage<QmsQcMaterialVO> page = qcMaterialMapper.searchPage(
|
||||
request, new Page<>(request.getPage(), request.getPageSize()));
|
||||
|
||||
|
|
@ -89,6 +94,40 @@ public class QmsQcMaterialControllerService {
|
|||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 展开物料类别编码:查询指定编码对应的类别及其所有子孙类别的编码列表(一次查询,无递归)
|
||||
* <p>
|
||||
* parentTree 存储完整祖先路径(ltree 格式,如 0.A.B.C),子孙节点满足:
|
||||
* parentTree = fullPath OR parentTree LIKE 'fullPath.%'
|
||||
* </p>
|
||||
*/
|
||||
private List<String> 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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<String> materialCategoryCodes;
|
||||
|
||||
/**
|
||||
* 物料编号(模糊匹配)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -27,9 +27,17 @@
|
|||
update_time
|
||||
FROM qms_qc_material
|
||||
<where>
|
||||
<if test="request.materialCategoryCode != null and request.materialCategoryCode != ''">
|
||||
<choose>
|
||||
<when test="request.materialCategoryCodes != null and !request.materialCategoryCodes.isEmpty()">
|
||||
AND material_category_code IN
|
||||
<foreach collection="request.materialCategoryCodes" item="code" open="(" separator="," close=")">
|
||||
#{code}
|
||||
</foreach>
|
||||
</when>
|
||||
<when test="request.materialCategoryCode != null and request.materialCategoryCode != ''">
|
||||
AND material_category_code = #{request.materialCategoryCode}
|
||||
</if>
|
||||
</when>
|
||||
</choose>
|
||||
<if test="request.materialNo != null and request.materialNo != ''">
|
||||
AND material_no ilike concat('%', #{request.materialNo}, '%')
|
||||
</if>
|
||||
|
|
@ -40,7 +48,7 @@
|
|||
AND material_name ilike concat('%', #{request.materialName}, '%')
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY id DESC
|
||||
ORDER BY material_no DESC
|
||||
</select>
|
||||
|
||||
<!--
|
||||
|
|
@ -65,9 +73,17 @@
|
|||
TO_CHAR(create_time, 'YYYY-MM-DD HH24:MI:SS') AS create_time
|
||||
FROM qms_qc_material
|
||||
<where>
|
||||
<if test="request.materialCategoryCode != null and request.materialCategoryCode != ''">
|
||||
<choose>
|
||||
<when test="request.materialCategoryCodes != null and !request.materialCategoryCodes.isEmpty()">
|
||||
AND material_category_code IN
|
||||
<foreach collection="request.materialCategoryCodes" item="code" open="(" separator="," close=")">
|
||||
#{code}
|
||||
</foreach>
|
||||
</when>
|
||||
<when test="request.materialCategoryCode != null and request.materialCategoryCode != ''">
|
||||
AND material_category_code = #{request.materialCategoryCode}
|
||||
</if>
|
||||
</when>
|
||||
</choose>
|
||||
<if test="request.materialNo != null and request.materialNo != ''">
|
||||
AND material_no ilike concat('%', #{request.materialNo}, '%')
|
||||
</if>
|
||||
|
|
|
|||
Loading…
Reference in New Issue