Browse Source

20260327 钱包余额排序

lijianlin/feature-20260225-金币钱包体系
wangguorui 2 weeks ago
parent
commit
e70cf983e2
  1. 43
      src/main/java/com/example/demo/controller/cash/CashCollectionController.java
  2. 7
      src/main/java/com/example/demo/domain/vo/cash/UserWalletVO.java
  3. 10
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  4. 2
      src/main/java/com/example/demo/service/cash/CashCollectionService.java
  5. 7
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  6. 36
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
  7. 26
      src/main/java/com/example/demo/serviceImpl/coin/GoldDetailServiceImpl.java
  8. 26
      src/main/resources/cashMapper/CashCollectionMapper.xml

43
src/main/java/com/example/demo/controller/cash/CashCollectionController.java

@ -368,17 +368,17 @@ public class CashCollectionController {
String market = null;
Integer pageNum = null;
Integer pageSize = null;
String sortField = null;
String sortOrder = null;
Integer sortWalletId = null;
if (params.containsKey("jwcode")) {
Object jwcodeObj = params.get("jwcode");
if (jwcodeObj != null) {
String jwcodeStr = jwcodeObj.toString();
if (!jwcodeStr.isEmpty()) {
try {
jwcode = ((Number) jwcodeObj).intValue();
} catch (Exception e) {
// 如果转换失败保持为 null
}
if (jwcodeObj != null && !jwcodeObj.toString().isEmpty()) {
try {
jwcode = ((Number) jwcodeObj).intValue();
} catch (Exception e) {
// 如果转换失败保持为 null
}
}
}
@ -412,6 +412,31 @@ public class CashCollectionController {
}
}
if (params.containsKey("sortField")) {
Object sortFieldObj = params.get("sortField");
if (sortFieldObj != null && !sortFieldObj.toString().isEmpty()) {
sortField = sortFieldObj.toString();
}
}
if (params.containsKey("sortOrder")) {
Object sortOrderObj = params.get("sortOrder");
if (sortOrderObj != null && !sortOrderObj.toString().isEmpty()) {
sortOrder = sortOrderObj.toString();
}
}
if (params.containsKey("sortWalletId")) {
Object sortWalletIdObj = params.get("sortWalletId");
if (sortWalletIdObj != null) {
try {
sortWalletId = ((Number) sortWalletIdObj).intValue();
} catch (Exception e) {
// 如果转换失败保持为 null
}
}
}
if (pageNum == null) {
pageNum = 1;
}
@ -419,7 +444,7 @@ public class CashCollectionController {
pageSize = 10;
}
PageInfo<UserWalletVO> result = cashCollectionService.selectUserWallets(jwcode, market, pageNum, pageSize);
PageInfo<UserWalletVO> result = cashCollectionService.selectUserWallets(jwcode, market, pageNum, pageSize, sortField, sortOrder, sortWalletId);
// 对返回结果进行多语言转换
if (result != null && result.getList() != null) {

7
src/main/java/com/example/demo/domain/vo/cash/UserWalletVO.java

@ -26,4 +26,11 @@ public class UserWalletVO {
private BigDecimal currentPermanentGold; // 当前永久金币数量
private List<WalletItem> walletList; // 钱包列表仅用于查询结果
@ExcelIgnore
private String sortField; // 排序字段
@ExcelIgnore
private String sortOrder; // 排序顺序
@ExcelIgnore
private Integer sortWalletId; // 用于排序的钱包 ID指定按哪个钱包排序
}

10
src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java

@ -120,9 +120,15 @@ public interface CashCollectionMapper {
// 查询符合条件的精网号列表用于分页每个精网号算一条记录
List<Integer> selectDistinctJwcodes(@Param("jwcode") Integer jwcode,
@Param("market") String market);
@Param("market") String market,
@Param("sortField") String sortField,
@Param("sortOrder") String sortOrder,
@Param("sortWalletId") Integer sortWalletId);
// 根据精网号列表查询用户的所有钱包信息
List<UserWalletVO> selectUserWalletsByJwcodes(@Param("jwcodeList") List<Integer> jwcodeList,
@Param("market") String market);
@Param("market") String market,
@Param("sortField") String sortField,
@Param("sortOrder") String sortOrder,
@Param("sortWalletId") Integer sortWalletId);
}

2
src/main/java/com/example/demo/service/cash/CashCollectionService.java

@ -55,5 +55,5 @@ public interface CashCollectionService {
Integer pageNum, Integer pageSize, Integer jwcode, Integer walletId);
// 根据精网号和地区查询用户的所有钱包 ID 和金币数量包含用户名和地区分页
PageInfo<UserWalletVO> selectUserWallets(Integer jwcode, String market, Integer pageNum, Integer pageSize);
PageInfo<UserWalletVO> selectUserWallets(Integer jwcode, String market, Integer pageNum, Integer pageSize, String sortField, String sortOrder, Integer sortWalletId);
}

7
src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java

@ -614,10 +614,10 @@ public class CashCollectionServiceImpl implements CashCollectionService {
// 根据精网号和地区查询用户的所有钱包 ID 和金币数量包含用户名和地区分页
@Override
public PageInfo<UserWalletVO> selectUserWallets(Integer jwcode, String market, Integer pageNum, Integer pageSize) {
public PageInfo<UserWalletVO> selectUserWallets(Integer jwcode, String market, Integer pageNum, Integer pageSize, String sortField, String sortOrder, Integer sortWalletId) {
// 第一步先查询符合条件的精网号列表分页
PageHelper.startPage(pageNum, pageSize);
List<Integer> jwcodeList = cashCollectionMapper.selectDistinctJwcodes(jwcode, market);
List<Integer> jwcodeList = cashCollectionMapper.selectDistinctJwcodes(jwcode, market, sortField, sortOrder, sortWalletId);
PageInfo<Integer> jwcodePageInfo = new PageInfo<>(jwcodeList);
// 如果没有符合条件的记录直接返回空结果
@ -632,7 +632,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
}
// 第二步根据精网号列表查询用户的钱包信息不分页返回这些精网号的所有钱包
List<UserWalletVO> allWallets = cashCollectionMapper.selectUserWalletsByJwcodes(jwcodeList, market);
List<UserWalletVO> allWallets = cashCollectionMapper.selectUserWalletsByJwcodes(jwcodeList, market, sortField, sortOrder, sortWalletId);
// 第三步将钱包信息按精网号分组组装
Map<Integer, UserWalletVO> userWalletMap = new LinkedHashMap<>();
@ -672,6 +672,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
return resultPageInfo;
}
/**
* 校验钱包 ID 和到账地区的对应关系
* @param walletId 钱包 ID

36
src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

@ -544,6 +544,9 @@ public class ExportExcelServiceImpl implements ExportExcelService {
String market = null;
Integer pageNum = userWalletDTONode.path("page").asInt(1);
Integer pageSize = userWalletDTONode.path("pageSize").asInt(20);
String sortField = null;
String sortOrder = null;
Integer sortWalletId = null;
JsonNode jwcodeNode = userWalletDTONode.path("jwcode");
if (!jwcodeNode.isMissingNode() && !jwcodeNode.isNull()) {
@ -566,6 +569,37 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
}
// 获取排序字段
JsonNode sortFieldNode = userWalletDTONode.path("sortField");
if (!sortFieldNode.isMissingNode() && !sortFieldNode.isNull()) {
String sortFieldStr = sortFieldNode.asText();
if (!sortFieldStr.isEmpty()) {
sortField = sortFieldStr.trim();
}
}
// 获取排序顺序
JsonNode sortOrderNode = userWalletDTONode.path("sortOrder");
if (!sortOrderNode.isMissingNode() && !sortOrderNode.isNull()) {
String sortOrderStr = sortOrderNode.asText();
if (!sortOrderStr.isEmpty()) {
sortOrder = sortOrderStr.trim();
}
}
// 获取用于排序的钱包 ID
JsonNode sortWalletIdNode = userWalletDTONode.path("sortWalletId");
if (!sortWalletIdNode.isMissingNode() && !sortWalletIdNode.isNull()) {
String sortWalletIdStr = sortWalletIdNode.asText();
if (!sortWalletIdStr.isEmpty()) {
try {
sortWalletId = Integer.parseInt(sortWalletIdStr.trim());
} catch (NumberFormatException e) {
log.warn("排序钱包 ID 格式错误:{}", sortWalletIdStr);
}
}
}
// 从请求数据中获取语言设置
String lang = "zh_CN";
JsonNode langNode = rootNode.path("lang");
@ -574,7 +608,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
// 调用查询接口
PageInfo<UserWalletVO> result = cashCollectionService.selectUserWallets(jwcode, market, pageNum, pageSize);
PageInfo<UserWalletVO> result = cashCollectionService.selectUserWallets(jwcode, market, pageNum, pageSize, sortField, sortOrder, sortWalletId);
// 翻译处理
List<UserWalletVO> flatList = new ArrayList<>();

26
src/main/java/com/example/demo/serviceImpl/coin/GoldDetailServiceImpl.java

@ -212,32 +212,6 @@ public class GoldDetailServiceImpl implements GoldDetailService {
return Result.success();
}
/**
* 将类型数字转换为中文描述
*/
private String convertTypeToString(Integer type) {
if (type == null) return "";
switch (type) {
case 0: return "充值";
case 1: return "消耗";
case 2: return "退款";
default: return "其他";
}
}
/**
* 填充金币明细数据的类型描述
*/
private void fillTypeDescriptions(List<GoldDetail> goldDetails) {
if (goldDetails != null && !goldDetails.isEmpty()) {
for (GoldDetail detail : goldDetails) {
if (detail.getType() != null) {
detail.setTypeDesc(convertTypeToString(detail.getType()));
}
}
}
}
//更新用户消费次数
@Override
public Result updateConsumeNum() {

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

@ -481,7 +481,18 @@
</if>
AND wr.wallet_id IS NOT NULL
</where>
ORDER BY u.jwcode
<choose>
<when test="sortField != null and sortField != '' and sortOrder != null and sortOrder != '' and sortWalletId != null">
ORDER BY (
SELECT COALESCE(wr2.current_permanent_gold, 0)
FROM user_region_wallet wr2
WHERE wr2.jwcode = u.jwcode AND wr2.wallet_id = #{sortWalletId}
) ${sortOrder}, u.jwcode
</when>
<otherwise>
ORDER BY u.jwcode
</otherwise>
</choose>
</select>
<!-- 根据精网号列表查询用户的所有钱包信息 -->
@ -508,7 +519,18 @@
</if>
AND wr.wallet_id IS NOT NULL
</where>
ORDER BY u.jwcode, wr.wallet_id
<choose>
<when test="sortField != null and sortField != '' and sortOrder != null and sortOrder != '' and sortWalletId != null">
ORDER BY (
SELECT COALESCE(wr2.current_permanent_gold, 0)
FROM user_region_wallet wr2
WHERE wr2.jwcode = u.jwcode AND wr2.wallet_id = #{sortWalletId}
) ${sortOrder}, u.jwcode, wr.wallet_id
</when>
<otherwise>
ORDER BY u.jwcode, wr.wallet_id
</otherwise>
</choose>
</select>
<!--根据OrderCode订单号更新收款订单-->

Loading…
Cancel
Save