Browse Source

钢坯装运单-分页列表查询修改总数异常的情况

lingpeng.li 2 tháng trước cách đây
mục cha
commit
a6772a59b7

+ 24 - 23
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/controller/StorageBillController.java

@@ -129,18 +129,14 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 													HttpServletRequest req) {
 		QueryWrapper<StorageBill> queryWrapper = QueryGenerator.initQueryWrapper(storageBill, req.getParameterMap());
 
-		// 先不加 amountTotal 过滤条件,查询所有 StorageBill
-		Page<StorageBill> page = new Page<>(pageNo, pageSize);
-		IPage<StorageBill> pageList = storageBillService.page(page, queryWrapper);
-
-		// 获取当前分页的记录列表
-		List<StorageBill> records = pageList.getRecords();
-		if (records.isEmpty()) {
-			return Result.OK(pageList);
+		// 先查询所有 StorageBill 数据(不分页)
+		List<StorageBill> allRecords = storageBillService.list(queryWrapper);
+		if (allRecords.isEmpty()) {
+			return Result.OK(new Page<StorageBill>(pageNo, pageSize));
 		}
 
 		// 批量查询所有 storageBillId 相关的 BilletAutoTmp 记录
-		List<String> storageBillIds = records.stream()
+		List<String> storageBillIds = allRecords.stream()
 				.map(StorageBill::getId)
 				.collect(Collectors.toList());
 
@@ -153,25 +149,30 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 		Map<String, Long> billetCountMap = billetAutoTmpList.stream()
 				.collect(Collectors.groupingBy(BilletAutoTmp::getStorageBillId, Collectors.counting()));
 
-		// 遍历 StorageBill 记录,累加 amountTotal
-		records.forEach(bill -> {
-			Long count = billetCountMap.getOrDefault(bill.getId(), 0L);
-			bill.setAmountTotal(bill.getAmountTotal() + count.intValue());
-		});
-
-		// 最终过滤掉 amountTotal 为 0 的数据
-		List<StorageBill> filteredRecords = records.stream()
-				.filter(bill -> bill.getAmountTotal() > 0) // 这里进行最终过滤
+		// 遍历所有 StorageBill 记录,累加 amountTotal,并过滤 amountTotal > 0
+		List<StorageBill> filteredRecords = allRecords.stream()
+				.peek(bill -> bill.setAmountTotal(bill.getAmountTotal() + billetCountMap.getOrDefault(bill.getId(), 0L).intValue()))
+				.filter(bill -> bill.getAmountTotal() > 0) // 最终过滤掉 amountTotal 为 0 的数据
 				.collect(Collectors.toList());
 
-		// 重新封装分页数据
-		pageList.setRecords(filteredRecords);
-		pageList.setTotal(filteredRecords.size()); // 更新总条数
+		// 更新 total
+		long total = filteredRecords.size(); // 最终过滤后的总记录数
 
-		return Result.OK(pageList);
-	}
+		// 分页处理
+		int fromIndex = (pageNo - 1) * pageSize;
+		int toIndex = Math.min(fromIndex + pageSize, filteredRecords.size());
+
+		// 如果 fromIndex 超过 total,返回空集合
+		List<StorageBill> pageRecords = (fromIndex >= filteredRecords.size()) ?
+				Collections.emptyList() : filteredRecords.subList(fromIndex, toIndex);
 
+		// 封装分页数据
+		Page<StorageBill> pageList = new Page<>(pageNo, pageSize);
+		pageList.setRecords(pageRecords);
+		pageList.setTotal(total); // 更新为最终正确的 total
 
+		return Result.OK(pageList);
+	}
 
 
 	@ApiOperation(value="钢坯热送单-分页列表查询", notes="钢坯热送单-分页列表查询")