Browse Source

20260315 钱包余额查询OK

milestone-20260224-现金钱包
wangguorui 4 weeks ago
parent
commit
e28d273dd8
  1. 11
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  2. 62
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  3. 28
      src/main/resources/cashMapper/CashCollectionMapper.xml

11
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<UserWalletVO> selectUserWallets(@Param("jwcode") Integer jwcode,
@Param("market") String market);
// 查询符合条件的精网号列表用于分页每个精网号算一条记录
List<Integer> selectDistinctJwcodes(@Param("jwcode") Integer jwcode,
@Param("market") String market);
// 根据精网号列表查询用户的所有钱包信息
List<UserWalletVO> selectUserWalletsByJwcodes(@Param("jwcodeList") List<Integer> jwcodeList,
@Param("market") String market);
}

62
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<UserWalletVO> selectUserWallets(Integer jwcode, String market, Integer pageNum, Integer pageSize) {
// 第一步先查询符合条件的精网号列表分页
PageHelper.startPage(pageNum, pageSize);
List<UserWalletVO> wallets = cashCollectionMapper.selectUserWallets(jwcode, market);
return new PageInfo<>(wallets);
List<Integer> jwcodeList = cashCollectionMapper.selectDistinctJwcodes(jwcode, market);
PageInfo<Integer> jwcodePageInfo = new PageInfo<>(jwcodeList);
// 如果没有符合条件的记录直接返回空结果
if (jwcodeList == null || jwcodeList.isEmpty()) {
PageInfo<UserWalletVO> emptyResult = new PageInfo<>();
emptyResult.setList(new ArrayList<>());
emptyResult.setTotal(0);
emptyResult.setPages(0);
emptyResult.setPageNum(pageNum);
emptyResult.setPageSize(pageSize);
return emptyResult;
}
// 第二步根据精网号列表查询用户的钱包信息不分页返回这些精网号的所有钱包
List<UserWalletVO> allWallets = cashCollectionMapper.selectUserWalletsByJwcodes(jwcodeList, market);
// 第三步将钱包信息按精网号分组组装
Map<Integer, UserWalletVO> 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<UserWalletVO> result = new ArrayList<>();
for (Integer jwc : jwcodeList) {
UserWalletVO userWallet = userWalletMap.get(jwc);
if (userWallet != null) {
result.add(userWallet);
}
}
// 第五步构建并返回 PageInfo
PageInfo<UserWalletVO> resultPageInfo = new PageInfo<>(result);
resultPageInfo.setTotal(jwcodePageInfo.getTotal());
resultPageInfo.setPages(jwcodePageInfo.getPages());
resultPageInfo.setPageNum(pageNum);
resultPageInfo.setPageSize(pageSize);
return resultPageInfo;
}
}

28
src/main/resources/cashMapper/CashCollectionMapper.xml

@ -464,7 +464,26 @@
</collection>
</resultMap>
<select id="selectUserWallets" resultMap="UserWalletVOResultMap">
<!-- 查询符合条件的精网号列表(用于分页,每个精网号算一条记录) -->
<select id="selectDistinctJwcodes" resultType="java.lang.Integer">
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
<where>
<if test="jwcode != null">
AND u.jwcode = #{jwcode}
</if>
<if test="market != null and market != ''">
AND u.market = #{market}
</if>
AND wr.wallet_id IS NOT NULL
</where>
ORDER BY u.jwcode
</select>
<!-- 根据精网号列表查询用户的所有钱包信息 -->
<select id="selectUserWalletsByJwcodes" resultMap="UserWalletVOResultMap">
SELECT
u.jwcode,
u.name as userName,
@ -478,9 +497,10 @@
LEFT JOIN user_region_wallet wr ON u.jwcode = wr.jwcode
LEFT JOIN wallet w ON wr.wallet_id = w.id
<where>
<if test="jwcode != null">
AND u.jwcode = #{jwcode}
</if>
u.jwcode IN
<foreach collection="jwcodeList" item="jwcode" open="(" separator="," close=")">
#{jwcode}
</foreach>
<if test="market != null and market != ''">
AND u.market = #{market}
</if>

Loading…
Cancel
Save