Browse Source

feat(automatedWarehouse): 实现托盘合并查询接口分页功能

- 在PalletMergeQueryData实体类中新增maxPositionCount字段,支持前端传入最大已用数量筛选条件
- 更新controller层searchPalletMergeList方法,返回分页数据格式,接收page和limit参数
- 新增mapper接口searchPalletMergeListPage方法,使用MyBatis-Plus分页插件实现数据库分页查询
- 完善service层实现,支持前端传入maxPositionCount或后端自动计算最大已用位置数
- 添加分页参数校验,默认页码为1,每页限制20条记录
- 更新XML映射文件,实现分页查询SQL逻辑,支持maxPositionCount条件筛选
master
常熟吴彦祖 8 months ago
parent
commit
10db60689e
  1. 11
      src/main/java/com/gaotao/modules/automatedWarehouse/controller/PalletMergeQueryController.java
  2. 10
      src/main/java/com/gaotao/modules/automatedWarehouse/entity/PalletMergeQueryData.java
  3. 14
      src/main/java/com/gaotao/modules/automatedWarehouse/mapper/PalletMergeQueryMapper.java
  4. 11
      src/main/java/com/gaotao/modules/automatedWarehouse/service/PalletMergeQueryService.java
  5. 57
      src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/PalletMergeQueryServiceImpl.java
  6. 34
      src/main/resources/mapper/automatedWarehouse/PalletMergeQueryMapper.xml

11
src/main/java/com/gaotao/modules/automatedWarehouse/controller/PalletMergeQueryController.java

@ -1,5 +1,6 @@
package com.gaotao.modules.automatedWarehouse.controller;
import com.gaotao.common.utils.PageUtils;
import com.gaotao.common.utils.R;
import com.gaotao.modules.automatedWarehouse.entity.PalletMergeQueryData;
import com.gaotao.modules.automatedWarehouse.entity.PalletTypeOption;
@ -39,17 +40,17 @@ public class PalletMergeQueryController {
}
/**
* @Description 查询需要合托的托盘列表 - rqrq
* @Description 查询需要合托的托盘列表分页- rqrq
* @Title searchPalletMergeList
* @param data 查询条件包含site和palletType
* @param data 查询条件包含sitepalletTypemaxPositionCount可选pagelimit
* @return R
* @author rqrq
* @date 2026/01/06
* @date 2026/01/15
*/
@PostMapping(value = "/searchPalletMergeList")
public R searchPalletMergeList(@RequestBody PalletMergeQueryData data) throws Exception {
List<PalletMergeQueryData> rows = palletMergeQueryService.searchPalletMergeList(data);
return R.ok().put("rows", rows);
PageUtils page = palletMergeQueryService.searchPalletMergeList(data);
return R.ok().put("page", page);
}
/**

10
src/main/java/com/gaotao/modules/automatedWarehouse/entity/PalletMergeQueryData.java

@ -68,6 +68,16 @@ public class PalletMergeQueryData {
*/
private String typeDesc;
// ==================== 查询参数可选====================
/**
* 最大已用数量可选查询条件- rqrq
* <p>如果前端传入此值则使用前端传入的值作为筛选上限</p>
* <p>如果前端未传入则由后端自动计算该类型的最大已用位置数</p>
* <p>SQL示例HAVING usedPositionCount &lt; #{maxPositionCount}</p>
*/
private Integer maxPositionCount;
// ==================== 分页参数 ====================
/**

14
src/main/java/com/gaotao/modules/automatedWarehouse/mapper/PalletMergeQueryMapper.java

@ -1,5 +1,7 @@
package com.gaotao.modules.automatedWarehouse.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gaotao.modules.automatedWarehouse.entity.PalletDetail;
import com.gaotao.modules.automatedWarehouse.entity.PalletMergeQueryData;
import com.gaotao.modules.automatedWarehouse.entity.PalletTypeOption;
@ -49,6 +51,18 @@ public interface PalletMergeQueryMapper {
@Param("palletType") String palletType,
@Param("maxPositionCount") Integer maxPositionCount);
/**
* @Description 查询需要合托的托盘列表分页版本- rqrq
* @param page 分页对象
* @param data 查询条件包含sitepalletTypemaxPositionCount
* @return IPage<PalletMergeQueryData>
* @author rqrq
* @date 2026/01/15
*/
IPage<PalletMergeQueryData> searchPalletMergeListPage(
Page<PalletMergeQueryData> page,
@Param("query") PalletMergeQueryData data);
/**
* @Description 查询栈板上的所有物料明细用于合托推送WCS- rqrq
* @param site 工厂编码

11
src/main/java/com/gaotao/modules/automatedWarehouse/service/PalletMergeQueryService.java

@ -1,5 +1,6 @@
package com.gaotao.modules.automatedWarehouse.service;
import com.gaotao.common.utils.PageUtils;
import com.gaotao.modules.automatedWarehouse.entity.PalletMergeQueryData;
import com.gaotao.modules.automatedWarehouse.entity.PalletTypeOption;
@ -23,14 +24,14 @@ public interface PalletMergeQueryService {
List<PalletTypeOption> getPalletTypeOptions(String site);
/**
* @Description 查询需要合托的托盘列表 - rqrq
* @Description 查询需要合托的托盘列表分页- rqrq
* @Title searchPalletMergeList
* @param data 查询条件包含site和palletType
* @return List<PalletMergeQueryData>
* @param data 查询条件包含sitepalletTypemaxPositionCount可选pagelimit
* @return PageUtils 分页结果
* @author rqrq
* @date 2026/01/06
* @date 2026/01/15
*/
List<PalletMergeQueryData> searchPalletMergeList(PalletMergeQueryData data);
PageUtils searchPalletMergeList(PalletMergeQueryData data);
/**
* @Description 提交合托请求 - 校验栈板状态并推送WCS合托任务 - rqrq

57
src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/PalletMergeQueryServiceImpl.java

@ -1,5 +1,8 @@
package com.gaotao.modules.automatedWarehouse.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gaotao.common.utils.PageUtils;
import com.gaotao.modules.api.entity.NotifyDataToWcs;
import com.gaotao.modules.api.entity.NotifyDataToWcsPalletList;
import com.gaotao.modules.api.entity.NotifyDataToWcsPalletSubDetail;
@ -73,25 +76,26 @@ public class PalletMergeQueryServiceImpl implements PalletMergeQueryService {
}
/**
* @Description 查询需要合托的托盘列表 - rqrq
* @Description 查询需要合托的托盘列表分页- rqrq
*
* <p><b>查询逻辑</b></p>
* <ol>
* <li>先计算该pallet_type在立库中装得最多的栈板的position+layer count</li>
* <li>如果前端传入maxPositionCount则使用否则计算该类型最大已用位置数</li>
* <li>查询立库中该类型的栈板count>0 count<最大count</li>
* <li>只查询calling_flag='N'的栈板</li>
* <li>按count从小到大排序</li>
* <li>返回分页结果</li>
* </ol>
*
* @Title searchPalletMergeList
* @param data 查询条件包含site和palletType
* @return List<PalletMergeQueryData>
* @param data 查询条件包含sitepalletTypemaxPositionCount可选pagelimit
* @return PageUtils 分页结果
* @author rqrq
* @date 2026/01/06
* @date 2026/01/15
*/
@Override
public List<PalletMergeQueryData> searchPalletMergeList(PalletMergeQueryData data) {
System.out.println("开始查询需要合托的托盘列表 - rqrq,site=" + data.getSite() + ", palletType=" + data.getPalletType());
public PageUtils searchPalletMergeList(PalletMergeQueryData data) {
System.out.println("开始查询需要合托的托盘列表(分页)- rqrq,site=" + data.getSite() + ", palletType=" + data.getPalletType() + ", 前端传入maxPositionCount=" + data.getMaxPositionCount());
// 参数校验 - rqrq
if (!StringUtils.hasText(data.getSite())) {
@ -101,22 +105,39 @@ public class PalletMergeQueryServiceImpl implements PalletMergeQueryService {
throw new RuntimeException("托盘类型不能为空");
}
// Step 1: 计算该类型在立库中装得最多的栈板的position+layer count - rqrq
Integer maxPositionCount = palletMergeQueryMapper.getMaxPositionCount(data.getSite(), data.getPalletType());
System.out.println("该类型最大已用位置数: " + maxPositionCount + " - rqrq");
// 设置默认分页参数 - rqrq
if (data.getPage() == null || data.getPage() <= 0) {
data.setPage(1);
}
if (data.getLimit() == null || data.getLimit() <= 0) {
data.setLimit(20);
}
// 如果前端传入maxPositionCount则使用否则计算该类型最大已用位置数 - rqrq
Integer maxPositionCount = data.getMaxPositionCount();
if (maxPositionCount == null || maxPositionCount <= 0) {
maxPositionCount = palletMergeQueryMapper.getMaxPositionCount(data.getSite(), data.getPalletType())-1;
System.out.println("后端计算最大已用位置数: " + maxPositionCount + " - rqrq");
} else {
System.out.println("使用前端传入的最大已用位置数: " + maxPositionCount + " - rqrq");
}
// 如果没有任何栈板或最大count为0返回空列表 - rqrq
// 如果没有任何栈板或最大count为0返回空分页结果 - rqrq
if (maxPositionCount == null || maxPositionCount <= 0) {
System.out.println("没有找到该类型的栈板,返回空列表 - rqrq");
return new ArrayList<>();
System.out.println("没有找到该类型的栈板,返回空分页结果 - rqrq");
return new PageUtils(new ArrayList<>(), 0, data.getLimit(), data.getPage());
}
// Step 2: 查询count>0 count<最大count的栈板按count从小到大排序 - rqrq
List<PalletMergeQueryData> list = palletMergeQueryMapper.searchPalletMergeList(
data.getSite(), data.getPalletType(), maxPositionCount);
// 设置maxPositionCount到data用于查询 - rqrq
data.setMaxPositionCount(maxPositionCount);
System.out.println("查询需要合托的托盘列表完成,共" + list.size() + "条记录 - rqrq");
return list;
// 使用MyBatis-Plus分页方式查询 - rqrq
IPage<PalletMergeQueryData> resultList = palletMergeQueryMapper.searchPalletMergeListPage(
new Page<>(data.getPage(), data.getLimit()), data);
PageUtils pageResult = new PageUtils(resultList);
System.out.println("查询需要合托的托盘列表完成,共" + resultList.getTotal() + "条记录 - rqrq");
return pageResult;
}
/**

34
src/main/resources/mapper/automatedWarehouse/PalletMergeQueryMapper.xml

@ -70,6 +70,40 @@
ORDER BY t.usedPositionCount ASC
</select>
<!-- rqrq - 查询需要合托的托盘列表(分页版本) -->
<!-- 支持前端传入maxPositionCount作为筛选条件 -->
<select id="searchPalletMergeListPage" parameterType="PalletMergeQueryData" resultType="PalletMergeQueryData">
SELECT
t.site,
t.palletId,
t.palletType,
t.locationCode,
t.callingFlag,
t.usedPositionCount,
pt.type_desc AS typeDesc
FROM (
SELECT
p.site AS site,
p.pallet_id AS palletId,
p.pallet_type AS palletType,
p.location_code AS locationCode,
p.calling_flag AS callingFlag,
COUNT(DISTINCT CONCAT(ISNULL(pd.position, ''), '_', ISNULL(CAST(pd.layer AS VARCHAR), ''))) AS usedPositionCount
FROM pallet p
INNER JOIN pallet_detail pd ON p.site = pd.site AND p.pallet_id = pd.pallet_id
WHERE p.site = #{query.site}
AND p.pallet_type = #{query.palletType}
AND p.wcs_location IS NOT NULL
AND p.calling_flag = 'N'
AND p.is_deleted = '0'
GROUP BY p.site, p.pallet_id, p.pallet_type, p.location_code, p.calling_flag
HAVING COUNT(DISTINCT CONCAT(ISNULL(pd.position, ''), '_', ISNULL(CAST(pd.layer AS VARCHAR), ''))) > 0
AND COUNT(DISTINCT CONCAT(ISNULL(pd.position, ''), '_', ISNULL(CAST(pd.layer AS VARCHAR), ''))) &lt;= #{query.maxPositionCount}
) t
LEFT JOIN pallet_type pt ON t.site = pt.site AND t.palletType = pt.pallet_type
ORDER BY t.usedPositionCount ASC
</select>
<!-- rqrq - 查询栈板上的所有物料明细(用于合托推送WCS) -->
<select id="getPalletAllDetails" resultType="com.gaotao.modules.automatedWarehouse.entity.PalletDetail">
SELECT

Loading…
Cancel
Save