From e28d273dd84bd35bbff3b52839f69ac0ad468341 Mon Sep 17 00:00:00 2001 From: wangguorui <2069821375@qq.com> Date: Sun, 15 Mar 2026 14:00:09 +0800 Subject: [PATCH] =?UTF-8?q?20260315=20=E9=92=B1=E5=8C=85=E4=BD=99=E9=A2=9D?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2OK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/mapper/cash/CashCollectionMapper.java | 11 ++-- .../cash/CashCollectionServiceImpl.java | 62 +++++++++++++++++++--- .../resources/cashMapper/CashCollectionMapper.xml | 28 ++++++++-- 3 files changed, 87 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java index e258c56..7756c78 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java +++ b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java @@ -118,8 +118,11 @@ public interface CashCollectionMapper { @Param("jwcode") Integer jwcode, @Param("walletId") Integer walletId); - // 根据精网号和地区查询用户的所有钱包 ID 和金币数量(包含用户名和地区) - // 如果 jwcode 为 null,则查询所有用户;如果 market 不为 null,则按地区筛选 - List selectUserWallets(@Param("jwcode") Integer jwcode, - @Param("market") String market); + // 查询符合条件的精网号列表(用于分页,每个精网号算一条记录) + List selectDistinctJwcodes(@Param("jwcode") Integer jwcode, + @Param("market") String market); + + // 根据精网号列表查询用户的所有钱包信息 + List selectUserWalletsByJwcodes(@Param("jwcodeList") List jwcodeList, + @Param("market") String market); } diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java index 5876017..b7f90d5 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java @@ -29,10 +29,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.ZoneOffset; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; /** @@ -611,8 +608,61 @@ public class CashCollectionServiceImpl implements CashCollectionService { // 根据精网号和地区查询用户的所有钱包 ID 和金币数量(包含用户名和地区)(分页) @Override public PageInfo selectUserWallets(Integer jwcode, String market, Integer pageNum, Integer pageSize) { + // 第一步:先查询符合条件的精网号列表(分页) PageHelper.startPage(pageNum, pageSize); - List wallets = cashCollectionMapper.selectUserWallets(jwcode, market); - return new PageInfo<>(wallets); + List jwcodeList = cashCollectionMapper.selectDistinctJwcodes(jwcode, market); + PageInfo jwcodePageInfo = new PageInfo<>(jwcodeList); + + // 如果没有符合条件的记录,直接返回空结果 + if (jwcodeList == null || jwcodeList.isEmpty()) { + PageInfo emptyResult = new PageInfo<>(); + emptyResult.setList(new ArrayList<>()); + emptyResult.setTotal(0); + emptyResult.setPages(0); + emptyResult.setPageNum(pageNum); + emptyResult.setPageSize(pageSize); + return emptyResult; + } + + // 第二步:根据精网号列表查询用户的钱包信息(不分页,返回这些精网号的所有钱包) + List allWallets = cashCollectionMapper.selectUserWalletsByJwcodes(jwcodeList, market); + + // 第三步:将钱包信息按精网号分组组装 + Map userWalletMap = new LinkedHashMap<>(); + for (UserWalletVO wallet : allWallets) { + Integer key = wallet.getJwcode(); + if (!userWalletMap.containsKey(key)) { + UserWalletVO userWallet = new UserWalletVO(); + userWallet.setJwcode(wallet.getJwcode()); + userWallet.setUserName(wallet.getUserName()); + userWallet.setMarket(wallet.getMarket()); + userWallet.setMarketName(wallet.getMarketName()); + userWallet.setWalletList(new ArrayList<>()); + userWalletMap.put(key, userWallet); + } + + // 添加钱包明细 + if (wallet.getWalletList() != null) { + userWalletMap.get(key).getWalletList().addAll(wallet.getWalletList()); + } + } + + // 第四步:按照精网号列表的顺序构建最终结果 + List result = new ArrayList<>(); + for (Integer jwc : jwcodeList) { + UserWalletVO userWallet = userWalletMap.get(jwc); + if (userWallet != null) { + result.add(userWallet); + } + } + + // 第五步:构建并返回 PageInfo + PageInfo resultPageInfo = new PageInfo<>(result); + resultPageInfo.setTotal(jwcodePageInfo.getTotal()); + resultPageInfo.setPages(jwcodePageInfo.getPages()); + resultPageInfo.setPageNum(pageNum); + resultPageInfo.setPageSize(pageSize); + + return resultPageInfo; } } diff --git a/src/main/resources/cashMapper/CashCollectionMapper.xml b/src/main/resources/cashMapper/CashCollectionMapper.xml index b40c759..b807e11 100644 --- a/src/main/resources/cashMapper/CashCollectionMapper.xml +++ b/src/main/resources/cashMapper/CashCollectionMapper.xml @@ -464,7 +464,26 @@ - + SELECT DISTINCT u.jwcode + FROM user u + LEFT JOIN market m ON u.market = m.id + LEFT JOIN user_region_wallet wr ON u.jwcode = wr.jwcode + + + AND u.jwcode = #{jwcode} + + + AND u.market = #{market} + + AND wr.wallet_id IS NOT NULL + + ORDER BY u.jwcode + + + +