diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java index 4f4c593..81686cf 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageLineMapper.java @@ -15,11 +15,9 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface MesWmPackageLineMapper extends BaseMapperX { - default PageResult selectPage(MesWmPackageLinePageReqVO reqVO) { - // TODO @芋艿:需确认“父箱详情 -> 装箱清单”是否需要汇总当前箱及其所有子孙箱的明细; - // TODO @芋艿:对齐,当前通过 SQL + ancestors 实现聚合查询,这里现在仅按 packageId 精确查询。 + default PageResult selectPage(MesWmPackageLinePageReqVO reqVO, java.util.Collection packageIds) { return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(MesWmPackageLineDO::getPackageId, reqVO.getPackageId()) + .inIfPresent(MesWmPackageLineDO::getPackageId, packageIds) .orderByDesc(MesWmPackageLineDO::getId)); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java index 541ecc4..97d6a0d 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/packages/MesWmPackageMapper.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO; import cn.iocoder.yudao.module.mes.enums.wm.MesWmPackageStatusEnum; import org.apache.ibatis.annotations.Mapper; +import java.util.Collection; import java.util.List; /** @@ -36,6 +37,11 @@ public interface MesWmPackageMapper extends BaseMapperX { return selectList(MesWmPackageDO::getParentId, parentId); } + default List selectListByParentIds(Collection parentIds) { + return selectList(new LambdaQueryWrapperX() + .in(MesWmPackageDO::getParentId, parentIds)); + } + default List selectChildableList() { return selectList(new LambdaQueryWrapperX() .eq(MesWmPackageDO::getParentId, MesWmPackageDO.PARENT_ID_ROOT) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java index a7b2b34..4be0675 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java @@ -12,6 +12,8 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.List; + import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_PACKAGE_LINE_NOT_EXISTS; @@ -77,7 +79,11 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { @Override public PageResult getPackageLinePage(MesWmPackageLinePageReqVO pageReqVO) { - return packageLineMapper.selectPage(pageReqVO); + if (pageReqVO.getPackageId() == null) { + return PageResult.empty(); + } + List packageIds = packageService.getPackageAndDescendantIds(pageReqVO.getPackageId()); + return packageLineMapper.selectPage(pageReqVO, packageIds); } @Override diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java index fd8c6d9..8633eea 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageService.java @@ -89,4 +89,12 @@ public interface MesWmPackageService { */ List getChildablePackageList(); + /** + * 获取指定装箱单及其所有子孙箱的 ID 列表 + * + * @param packageId 装箱单 ID + * @return 装箱单及其所有子孙箱的 ID 集合 + */ + List getPackageAndDescendantIds(Long packageId); + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java index 5292fa7..a7cf8cf 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** @@ -141,6 +142,22 @@ public class MesWmPackageServiceImpl implements MesWmPackageService { return packageMapper.selectChildableList(); } + @Override + public List getPackageAndDescendantIds(Long packageId) { + List result = CollUtil.newArrayList(packageId); + // 使用广度优先搜索 (BFS) 按层批量查询所有子孙箱 ID + List currentLevelIds = CollUtil.newArrayList(packageId); + for (int i = 0; i < Short.MAX_VALUE && CollUtil.isNotEmpty(currentLevelIds); i++) { + List children = packageMapper.selectListByParentIds(currentLevelIds); + if (CollUtil.isEmpty(children)) { + break; + } + currentLevelIds = convertList(children, MesWmPackageDO::getId); + result.addAll(currentLevelIds); + } + return result; + } + // ========== 校验方法 ========== private MesWmPackageDO validatePackageExists(Long id) {