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 + + + +