Browse Source

Merge remote-tracking branch 'refs/remotes/origin/milestone-20260401-现金管理四期' into lijianlin/feature-20260401-现金管理四期

lijianlin/feature-20260401-现金管理四期
lijianlin 6 days ago
parent
commit
c2747cd22a
  1. 4
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  2. 6
      src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java
  3. 46
      src/main/java/com/example/demo/controller/cash/CashCollectionController.java
  4. 3
      src/main/java/com/example/demo/domain/entity/UserWalletRecord.java
  5. 1
      src/main/java/com/example/demo/domain/vo/cash/UserWalletRecordVO.java
  6. 7
      src/main/java/com/example/demo/domain/vo/cash/UserWalletVO.java
  7. 10
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  8. 2
      src/main/java/com/example/demo/service/cash/CashCollectionService.java
  9. 1
      src/main/java/com/example/demo/serviceImpl/cash/CashAuditServiceImpl.java
  10. 7
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  11. 39
      src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
  12. 1
      src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java
  13. 4
      src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java
  14. 36
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
  15. 26
      src/main/java/com/example/demo/serviceImpl/coin/GoldDetailServiceImpl.java
  16. 27
      src/main/resources/cashMapper/CashCollectionMapper.xml
  17. 2
      src/main/resources/mapper/ConsumeMapper.xml
  18. 5
      src/main/resources/mapper/WalletMapper.xml

4
src/main/java/com/example/demo/Export/ExportServiceImpl.java

@ -145,7 +145,7 @@ public class ExportServiceImpl implements ExportService {
} else if (dto instanceof FundDTO fundDTO){ } else if (dto instanceof FundDTO fundDTO){
fundDTO.setAccount(Integer.valueOf(account)); fundDTO.setAccount(Integer.valueOf(account));
fundDTO.setUrl(""); fundDTO.setUrl("");
fundDTO.setFileName(generateFileName("资金明细", adminName, lang));
fundDTO.setFileName(generateFileName("资金流水明细", adminName, lang));
fundDTO.setDataNum(0); fundDTO.setDataNum(0);
} else if(dto instanceof UserWalletRecordDTO userWalletRecordDTO){ } else if(dto instanceof UserWalletRecordDTO userWalletRecordDTO){
userWalletRecordDTO.setAccount(Integer.valueOf(account)); userWalletRecordDTO.setAccount(Integer.valueOf(account));
@ -434,7 +434,7 @@ public class ExportServiceImpl implements ExportService {
@Override @Override
public Result addExportPerformance(PerformanceDTO dto) { public Result addExportPerformance(PerformanceDTO dto) {
return addExport(dto, "业绩明细", "performance:queue:export_queue", "performanceDTO", dto.getLang());
return addExport(dto, "业绩归属明细", "performance:queue:export_queue", "performanceDTO", dto.getLang());
} }
@Override @Override

6
src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java

@ -313,7 +313,10 @@ public class MysqlServiceImpl implements MysqlService {
data.operation_platform = rs.getString("operation_platform"); data.operation_platform = rs.getString("operation_platform");
data.goods_name = rs.getString("goods_name"); data.goods_name = rs.getString("goods_name");
data.uid = rs.getString("id"); data.uid = rs.getString("id");
data.linkId = rs.getString("uid");
// 👇👇👇 新增去掉 linkId 首尾空格 👇👇👇
String rawLinkId = rs.getString("uid");
data.linkId = (rawLinkId != null) ? rawLinkId.trim() : null;
// 👆👆👆 新增结束 👆👆👆
// 预生成订单号避免在循环中重复生成 // 预生成订单号避免在循环中重复生成
String timestampPart = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); String timestampPart = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
@ -920,6 +923,7 @@ public class MysqlServiceImpl implements MysqlService {
case 7 -> 4; // 其他 西南钱包 case 7 -> 4; // 其他 西南钱包
case 10 -> 8; case 10 -> 8;
case 15 -> 3; case 15 -> 3;
case 16 -> 6;
default -> 1; default -> 1;
}; };
} }

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

@ -369,12 +369,13 @@ public class CashCollectionController {
String market = null; String market = null;
Integer pageNum = null; Integer pageNum = null;
Integer pageSize = null; Integer pageSize = null;
String sortField = null;
String sortOrder = null;
Integer sortWalletId = null;
if (params.containsKey("jwcode")) { if (params.containsKey("jwcode")) {
Object jwcodeObj = params.get("jwcode"); Object jwcodeObj = params.get("jwcode");
if (jwcodeObj != null) {
String jwcodeStr = jwcodeObj.toString();
if (!jwcodeStr.isEmpty()) {
if (jwcodeObj != null && !jwcodeObj.toString().isEmpty()) {
try { try {
jwcode = ((Number) jwcodeObj).intValue(); jwcode = ((Number) jwcodeObj).intValue();
} catch (Exception e) { } catch (Exception e) {
@ -382,7 +383,6 @@ public class CashCollectionController {
} }
} }
} }
}
if (params.containsKey("market")) { if (params.containsKey("market")) {
Object marketObj = params.get("market"); Object marketObj = params.get("market");
@ -413,6 +413,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) { if (pageNum == null) {
pageNum = 1; pageNum = 1;
} }
@ -420,7 +445,7 @@ public class CashCollectionController {
pageSize = 10; 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) { if (result != null && result.getList() != null) {
@ -690,6 +715,13 @@ public class CashCollectionController {
cashRecord.getPaymentCurrencyOrig(), languageCode); cashRecord.getPaymentCurrencyOrig(), languageCode);
cashRecord.setPaymentCurrencyOrig(chinesePaymentCurrencyOrig); cashRecord.setPaymentCurrencyOrig(chinesePaymentCurrencyOrig);
} }
// 转换数量单位
if (cashRecord.getNumUnit() != null && !cashRecord.getNumUnit().isEmpty()) {
String chineseNumUnit = translationService.findChineseSimplifiedByTranslation(
cashRecord.getNumUnit(), languageCode);
cashRecord.setNumUnit(chineseNumUnit);
}
} }
} }
@ -822,6 +854,10 @@ public class CashCollectionController {
String statusText = vo.getStatus() == 0 ? "正常" : "已退款"; String statusText = vo.getStatus() == 0 ? "正常" : "已退款";
vo.setStatusText(languageTranslationUtil.translate(statusText, lang)); vo.setStatusText(languageTranslationUtil.translate(statusText, lang));
} }
// 翻译交易币种
if (vo.getTransactionCurrency() != null) {
vo.setTransactionCurrency(languageTranslationUtil.translate(vo.getTransactionCurrency(), lang));
}
} }
} }
} }

3
src/main/java/com/example/demo/domain/entity/UserWalletRecord.java

@ -14,7 +14,8 @@ public class UserWalletRecord {
private Integer id; // 主键 ID private Integer id; // 主键 ID
private Integer jwcode; // 精网号 private Integer jwcode; // 精网号
private Integer walletId; // 钱包 ID private Integer walletId; // 钱包 ID
private Integer type; // 交易类型0=充值1=消耗2=退款
private Integer type; // 交易类型0=充值1=消耗2=退款3=软件购买
private String transactionCurrency; // 交易币种
private Integer amount; // 交易金额 private Integer amount; // 交易金额
private String orderCode; // 交易单号 private String orderCode; // 交易单号
private String description; // 交易说明 private String description; // 交易说明

1
src/main/java/com/example/demo/domain/vo/cash/UserWalletRecordVO.java

@ -26,6 +26,7 @@ public class UserWalletRecordVO {
@ExcelIgnore @ExcelIgnore
private Integer type; // 交易类型0=充值1=消耗2=退款 private Integer type; // 交易类型0=充值1=消耗2=退款
private String typeText; // 交易类型文本多语言 private String typeText; // 交易类型文本多语言
private String transactionCurrency; // 交易币种
private Integer amount; // 交易金额 private Integer amount; // 交易金额
private String orderCode; // 交易单号 private String orderCode; // 交易单号
private String description; // 交易说明 private String description; // 交易说明

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

@ -26,4 +26,11 @@ public class UserWalletVO {
private BigDecimal currentPermanentGold; // 当前永久金币数量 private BigDecimal currentPermanentGold; // 当前永久金币数量
private List<WalletItem> walletList; // 钱包列表仅用于查询结果 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

@ -117,11 +117,17 @@ public interface CashCollectionMapper {
// 查询符合条件的精网号列表用于分页每个精网号算一条记录 // 查询符合条件的精网号列表用于分页每个精网号算一条记录
List<Integer> selectDistinctJwcodes(@Param("jwcode") Integer jwcode, 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, 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);
// 添加流水--其他收入 // 添加流水--其他收入
void addExFund(@Param("addFundsDTO") CashCollection addFundsDTO); void addExFund(@Param("addFundsDTO") CashCollection addFundsDTO);
// 添加流水--iPay88手续费 // 添加流水--iPay88手续费

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

@ -53,7 +53,7 @@ public interface CashCollectionService {
Integer pageNum, Integer pageSize, Integer jwcode, Integer walletId); Integer pageNum, Integer pageSize, Integer jwcode, Integer walletId);
// 根据精网号和地区查询用户的所有钱包 ID 和金币数量包含用户名和地区分页 // 根据精网号和地区查询用户的所有钱包 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);
// 添加流水--其他收入 // 添加流水--其他收入
String addExFund(CashCollection addFundsDTO); String addExFund(CashCollection addFundsDTO);
//添加iPay88手续费 //添加iPay88手续费

1
src/main/java/com/example/demo/serviceImpl/cash/CashAuditServiceImpl.java

@ -143,6 +143,7 @@ public class CashAuditServiceImpl implements CashAuditService {
walletRecord.setJwcode(order.getJwcode()); walletRecord.setJwcode(order.getJwcode());
walletRecord.setWalletId(walletId); walletRecord.setWalletId(walletId);
walletRecord.setType(0); // 0=充值 walletRecord.setType(0); // 0=充值
walletRecord.setTransactionCurrency("金币");
walletRecord.setAmount(order.getPermanentGold()); walletRecord.setAmount(order.getPermanentGold());
walletRecord.setOrderCode(orderCode); walletRecord.setOrderCode(orderCode);
walletRecord.setDescription(order.getPayType()); walletRecord.setDescription(order.getPayType());

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

@ -627,10 +627,10 @@ public class CashCollectionServiceImpl implements CashCollectionService {
// 根据精网号和地区查询用户的所有钱包 ID 和金币数量包含用户名和地区分页 // 根据精网号和地区查询用户的所有钱包 ID 和金币数量包含用户名和地区分页
@Override @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); 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); PageInfo<Integer> jwcodePageInfo = new PageInfo<>(jwcodeList);
// 如果没有符合条件的记录直接返回空结果 // 如果没有符合条件的记录直接返回空结果
@ -645,7 +645,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<>(); Map<Integer, UserWalletVO> userWalletMap = new LinkedHashMap<>();
@ -685,6 +685,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
return resultPageInfo; return resultPageInfo;
} }
//新增流水--其他收入 //新增流水--其他收入
@Override @Override
public String addExFund(CashCollection addFundsDTO) { public String addExFund(CashCollection addFundsDTO) {

39
src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java

@ -199,36 +199,7 @@ public class CashRefundServiceImpl implements RefundService {
throw new Exception("请选择所属地区"); throw new Exception("请选择所属地区");
} }
if(cashRecordRefund.getWalletId() != null) { if(cashRecordRefund.getWalletId() != null) {
String payType = cashRecordRefund.getPayType();
Integer wallet = null;
if (payType == null || payType.trim().isEmpty()) {
throw new SystemException("未穿输支付方式");
}
if (payType.equals("Stripe") || payType.equals("PaymentAsia")) {
wallet = 2;
}
if (payType.equals("FirstData") || payType.equals("Grabpay") || payType.equals("Nets") || payType.equals("PayPal") || payType.equals("IOS")) {
wallet = 5;
}
if (payType.equals("Stripe2")) {
wallet = 3;
}
if (payType.equals("Ipay88")) {
wallet = 4;
}
if (payType.equals("E-Transfer")) {
wallet = 6;
}
if (payType.equals("paysolution")) {
wallet = 8;
}
String payType1 = languageTranslationUtil.translate("银行转账", lang);
String payType2 = languageTranslationUtil.translate("现金", lang);
String payType3 = languageTranslationUtil.translate("支票", lang);
String payType4 = languageTranslationUtil.translate("刷卡", lang);
if (payType.equals(payType1) || payType.equals(payType2) || payType.equals(payType3) || payType.equals(payType4)) {
wallet = cashRecordRefund.getWalletId();
}
Integer wallet = cashRecordRefund.getWalletId();
UserRegionWallet userRegionWallet = walletMapper.selectWallet(cashRecordRefund.getJwcode(), wallet); UserRegionWallet userRegionWallet = walletMapper.selectWallet(cashRecordRefund.getJwcode(), wallet);
User user = userMapper.selectUserByJwcode(cashRecordRefund.getJwcode()); User user = userMapper.selectUserByJwcode(cashRecordRefund.getJwcode());
if (user.getCurrentFreeJune().add(user.getCurrentFreeDecember()).compareTo(BigDecimal.valueOf(cashRecordRefund.getPartRefundFree())) < 0) { if (user.getCurrentFreeJune().add(user.getCurrentFreeDecember()).compareTo(BigDecimal.valueOf(cashRecordRefund.getPartRefundFree())) < 0) {
@ -505,6 +476,13 @@ public class CashRefundServiceImpl implements RefundService {
user.setCurrentPermanentGold(BigDecimal.valueOf(-userGoldRecord.getPermanentGold())); //当前永久金币 user.setCurrentPermanentGold(BigDecimal.valueOf(-userGoldRecord.getPermanentGold())); //当前永久金币
user.setCurrentFreeJune(BigDecimal.valueOf(-userGoldRecord.getFreeJune())); //当前六月免费金币 user.setCurrentFreeJune(BigDecimal.valueOf(-userGoldRecord.getFreeJune())); //当前六月免费金币
user.setCurrentFreeDecember(BigDecimal.valueOf(-userGoldRecord.getFreeDecember())); //当前十二月免费金币 user.setCurrentFreeDecember(BigDecimal.valueOf(-userGoldRecord.getFreeDecember())); //当前十二月免费金币
User usergold = userMapper.selectUserByJwcode(userGoldRecord.getJwcode());
if(usergold.getCurrentFreeJune().add(user.getCurrentFreeJune()).compareTo(BigDecimal.ZERO)<0){
throw new RuntimeException("当前六月免费金币不足");
}
if (usergold.getCurrentFreeDecember().add(user.getCurrentFreeDecember()).compareTo(BigDecimal.ZERO)<0){
throw new RuntimeException("当前十二月免费金币不足");
}
auditMapper.updateUserGold(user); auditMapper.updateUserGold(user);
// 钱包更新 - 按原始充值流水 wallet_id 优先级顺序原路退回1-10越小优先级越高 // 钱包更新 - 按原始充值流水 wallet_id 优先级顺序原路退回1-10越小优先级越高
@ -558,6 +536,7 @@ public class CashRefundServiceImpl implements RefundService {
// 5. 插入退款流水amount 存负数表示扣减 // 5. 插入退款流水amount 存负数表示扣减
UserWalletRecord refundRecord = new UserWalletRecord(); UserWalletRecord refundRecord = new UserWalletRecord();
refundRecord.setType(2); // 充值退款类型 refundRecord.setType(2); // 充值退款类型
refundRecord.setTransactionCurrency("金币"); // 交易币种
refundRecord.setJwcode(userGoldRecord.getJwcode()); refundRecord.setJwcode(userGoldRecord.getJwcode());
refundRecord.setWalletId(walletId); refundRecord.setWalletId(walletId);
refundRecord.setAmount(refundAmount.negate().intValue()); // 🔥 负数扣款 refundRecord.setAmount(refundAmount.negate().intValue()); // 🔥 负数扣款

1
src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java

@ -252,6 +252,7 @@ public class AuditServiceImpl implements AuditService {
refundRecord.setJwcode(order.getJwcode()); refundRecord.setJwcode(order.getJwcode());
refundRecord.setWalletId(walletId); refundRecord.setWalletId(walletId);
refundRecord.setType(2); // 退款类型 refundRecord.setType(2); // 退款类型
refundRecord.setTransactionCurrency("金币"); // 交易币种
refundRecord.setAmount(refundAmount.intValue()); // 🔥 退款存正数 refundRecord.setAmount(refundAmount.intValue()); // 🔥 退款存正数
refundRecord.setOrderCode(order.getOrderCode()); refundRecord.setOrderCode(order.getOrderCode());
if(refundModel==0){ if(refundModel==0){

4
src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java

@ -238,12 +238,14 @@ public class ConsumeServiceImpl implements ConsumeService {
UserWalletRecord userWalletRecord = new UserWalletRecord(); UserWalletRecord userWalletRecord = new UserWalletRecord();
userWalletRecord.setJwcode(consumeUser.getJwcode()); userWalletRecord.setJwcode(consumeUser.getJwcode());
userWalletRecord.setWalletId(wallet.getWalletId()); userWalletRecord.setWalletId(wallet.getWalletId());
userWalletRecord.setType(1); // 1=消耗
userWalletRecord.setTransactionCurrency("金币"); // 交易币种
userWalletRecord.setAmount(-deductAmount.intValue()); userWalletRecord.setAmount(-deductAmount.intValue());
userWalletRecord.setOrderCode(userGoldRecord.getOrderCode()); userWalletRecord.setOrderCode(userGoldRecord.getOrderCode());
userWalletRecord.setDescription("购买" + consumeUser.getGoodsName()); userWalletRecord.setDescription("购买" + consumeUser.getGoodsName());
// 设置需要扣除的永久金币金额 // 设置需要扣除的永久金币金额
updateWallet.setPermanentGold(deductAmount); updateWallet.setPermanentGold(deductAmount);
// 调用Mapper方法更新钱包余额
// 调用 Mapper 方法更新钱包余额
consumeMapper.updateRegionWallet(updateWallet); consumeMapper.updateRegionWallet(updateWallet);
consumeMapper.addRegionWalletRecord(userWalletRecord); consumeMapper.addRegionWalletRecord(userWalletRecord);
} }

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

@ -544,6 +544,9 @@ public class ExportExcelServiceImpl implements ExportExcelService {
String market = null; String market = null;
Integer pageNum = userWalletDTONode.path("page").asInt(1); Integer pageNum = userWalletDTONode.path("page").asInt(1);
Integer pageSize = userWalletDTONode.path("pageSize").asInt(20); Integer pageSize = userWalletDTONode.path("pageSize").asInt(20);
String sortField = null;
String sortOrder = null;
Integer sortWalletId = null;
JsonNode jwcodeNode = userWalletDTONode.path("jwcode"); JsonNode jwcodeNode = userWalletDTONode.path("jwcode");
if (!jwcodeNode.isMissingNode() && !jwcodeNode.isNull()) { 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"; String lang = "zh_CN";
JsonNode langNode = rootNode.path("lang"); 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<>(); 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(); 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 @Override
public Result updateConsumeNum() { public Result updateConsumeNum() {

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

@ -418,8 +418,8 @@
<!-- 插入用户钱包明细记录 --> <!-- 插入用户钱包明细记录 -->
<insert id="insertUserWalletRecord" parameterType="com.example.demo.domain.entity.UserWalletRecord"> <insert id="insertUserWalletRecord" parameterType="com.example.demo.domain.entity.UserWalletRecord">
INSERT INTO user_wallet_record (jwcode, wallet_id, type, amount, order_code, description, status, create_time)
VALUES (#{jwcode}, #{walletId}, #{type}, #{amount}, #{orderCode}, #{description}, #{status}, NOW())
INSERT INTO user_wallet_record (jwcode, wallet_id, type, transaction_currency, amount, order_code, description, status, create_time)
VALUES (#{jwcode}, #{walletId}, #{type}, #{transactionCurrency}, #{amount}, #{orderCode}, #{description}, #{status}, NOW())
</insert> </insert>
<!--新增流水——其他收入--> <!--新增流水——其他收入-->
<insert id="addExFund" > <insert id="addExFund" >
@ -457,6 +457,7 @@
uwr.wallet_id, uwr.wallet_id,
w.wallet_name as walletName, w.wallet_name as walletName,
uwr.type, uwr.type,
uwr.transaction_currency,
uwr.amount/100 as amount, uwr.amount/100 as amount,
uwr.order_code as orderCode, uwr.order_code as orderCode,
uwr.description, uwr.description,
@ -505,7 +506,18 @@
</if> </if>
AND wr.wallet_id IS NOT NULL AND wr.wallet_id IS NOT NULL
</where> </where>
<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 ORDER BY u.jwcode
</otherwise>
</choose>
</select> </select>
<!-- 根据精网号列表查询用户的所有钱包信息 --> <!-- 根据精网号列表查询用户的所有钱包信息 -->
@ -532,7 +544,18 @@
</if> </if>
AND wr.wallet_id IS NOT NULL AND wr.wallet_id IS NOT NULL
</where> </where>
<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 ORDER BY u.jwcode, wr.wallet_id
</otherwise>
</choose>
</select> </select>
<!--根据OrderCode订单号更新收款订单--> <!--根据OrderCode订单号更新收款订单-->

2
src/main/resources/mapper/ConsumeMapper.xml

@ -383,6 +383,7 @@
jwcode, jwcode,
wallet_id, wallet_id,
type, type,
transaction_currency,
amount, amount,
order_code, order_code,
description, description,
@ -394,6 +395,7 @@
#{jwcode}, #{jwcode},
#{walletId}, #{walletId},
1, 1,
#{transactionCurrency},
#{amount}, #{amount},
#{orderCode}, #{orderCode},
#{description}, #{description},

5
src/main/resources/mapper/WalletMapper.xml

@ -2,8 +2,8 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.coin.WalletMapper"> <mapper namespace="com.example.demo.mapper.coin.WalletMapper">
<insert id="addUserWalletRecord"> <insert id="addUserWalletRecord">
insert into user_wallet_record(jwcode, wallet_id, type, amount, order_code, description, status)
values(#{jwcode}, #{walletId}, #{type}, #{amount}, #{orderCode}, #{description}, 1)
insert into user_wallet_record(jwcode, wallet_id, type, transaction_currency, amount, order_code, description, status)
values(#{jwcode}, #{walletId}, #{type}, #{transactionCurrency}, #{amount}, #{orderCode}, #{description}, 1)
</insert> </insert>
<insert id="insert"> <insert id="insert">
insert into user_region_wallet(jwcode, wallet_id, current_permanent_gold) insert into user_region_wallet(jwcode, wallet_id, current_permanent_gold)
@ -45,6 +45,7 @@
select jwcode, select jwcode,
wallet_id, wallet_id,
type, type,
transaction_currency,
amount, amount,
order_code, order_code,
description, description,

Loading…
Cancel
Save