From fe0a572729b9425692ae55c4a6722db7cd4eb9d4 Mon Sep 17 00:00:00 2001 From: wangguorui <2069821375@qq.com> Date: Thu, 5 Mar 2026 15:23:10 +0800 Subject: [PATCH] =?UTF-8?q?20260305=E5=85=85=E5=80=BC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/mapper/cash/CashCollectionMapper.java | 12 ++++++ .../cash/CashCollectionServiceImpl.java | 49 ++++++++++++++++++++-- .../resources/cashMapper/CashCollectionMapper.xml | 39 +++++++++++++---- 3 files changed, 90 insertions(+), 10 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 ab23a9e..734fe37 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java +++ b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java @@ -5,6 +5,7 @@ import com.example.demo.domain.DTO.*; import com.example.demo.domain.entity.CashRecord; import com.example.demo.domain.entity.GOrder; import com.example.demo.domain.entity.RechargeActivity; +import com.example.demo.domain.entity.UserRegionWallet; import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.cash.PerformanceVO; import org.apache.ibatis.annotations.Mapper; @@ -98,4 +99,15 @@ public interface CashCollectionMapper { @Param("type") Integer type, @Param("flag") Integer flag); + // 根据 jwcode 和 walletId 查询用户钱包 + UserRegionWallet selectUserWallet(@Param("jwcode") Integer jwcode, + @Param("walletId") Integer walletId); + + // 增加用户钱包永久金币 + int addUserWalletPermanentGold(@Param("jwcode") Integer jwcode, + @Param("walletId") Integer walletId, + @Param("amount") Integer amount); + + // 插入或更新用户钱包记录 + void insertUserWallet(UserRegionWallet userRegionWallet); } 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 364ca94..adca688 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java @@ -82,6 +82,9 @@ public class CashCollectionServiceImpl implements CashCollectionService { if (cashCollection.getPermanentGold() == 0 && cashCollection.getFreeGold() == 0) { throw new IllegalArgumentException("金币数量不能为空"); } + if (cashCollection.getWalletId() == null || cashCollection.getWalletId() < 0 || cashCollection.getWalletId() > 10) { + throw new IllegalArgumentException("钱包ID不能为空"); + } } if (!cashCollection.getGoodsName().equals("金币充值")) { if (cashCollection.getGoodNum() == 0) { @@ -119,6 +122,9 @@ public class CashCollectionServiceImpl implements CashCollectionService { cashRecord.setNumUnit(cashCollection.getNumUnit()); //数量单位 cashRecord.setPermanentGold(cashCollection.getPermanentGold()); //永久金币 cashRecord.setFreeGold(cashCollection.getFreeGold()); //免费金币 + cashRecord.setWalletId(cashCollection.getWalletId()); // 钱包 ID + // 打印钱包 ID + log.info("钱包ID:{}", cashRecord.getWalletId()); cashRecord.setPaymentCurrency(cashCollection.getPaymentCurrency()); //付款币种 cashRecord.setPaymentAmount(cashCollection.getPaymentAmount()); //付款金额 cashRecord.setReceivedMarket(cashCollection.getReceivedMarket()); //到账地区 @@ -127,7 +133,7 @@ public class CashCollectionServiceImpl implements CashCollectionService { cashRecord.setVoucher(cashCollection.getVoucher()); //转账凭证 cashRecord.setRemark(cashCollection.getRemark()); //备注 cashRecord.setStatus(0); //订单状态:付款线下财务待审核 - cashRecord.setSubmitterId(cashCollection.getSubmitterId()); //提交人ID + cashRecord.setSubmitterId(cashCollection.getSubmitterId()); //提交人 ID cashRecord.setSubmitterMarket(cashCollection.getSubmitterMarket()); cashRecord.setOrderType(1); //订单类型:1-收款 cashRecord.setMarket(cashCollection.getMarket()); @@ -371,21 +377,58 @@ public class CashCollectionServiceImpl implements CashCollectionService { //补全手续费等内容 @Override + @Transactional(rollbackFor = Exception.class) public String complete(CashRecord cashRecord) { if (!Objects.equals(cashRecord.getPaymentCurrency(), cashRecord.getReceivedCurrency()) - && ("Stripe".equals(cashRecord.getPayType()) || "Paypal".equals(cashRecord.getPayType()))) { + && ("Stripe".equals(cashRecord.getPayType()) || "Paypal".equals(cashRecord.getPayType()))) { return "支付币种与收款币种不一致"; } int rows = cashCollectionMapper.complete(cashRecord); String goodsName = cashCollectionMapper.selectGoodsNameByCode(cashRecord.getOrderCode()); - if (goodsName .equals("金币充值")) { + if (goodsName != null && goodsName.equals("金币充值")) { + + // 先从数据库中获取订单的 walletId , permanentGold 和 jwcode + CashRecord dbRecord = cashCollectionMapper.selectByOrderCode(cashRecord.getOrderCode()); + Integer walletId = dbRecord != null ? dbRecord.getWalletId() : null; + Integer permanentGold = dbRecord != null ? dbRecord.getPermanentGold() : null; + Integer jwcode = dbRecord != null ? dbRecord.getJwcode() : null; cashRecord.setOrderCode(cashRecord.getOrderCode().replace("XJ_", "XJCZ_")); //修改金币订单 cashCollectionMapper.updateGoldOrder(cashRecord); + + // 充值成功,增加用户钱包金币 + if (walletId != null && permanentGold > 0) { + try { + // 尝试更新用户钱包余额 + int updateRows = cashCollectionMapper.addUserWalletPermanentGold( + jwcode, + walletId, + permanentGold + ); + + // 如果没有更新任何行,说明记录不存在,需要插入新记录 + if (updateRows == 0) { + UserRegionWallet wallet = new UserRegionWallet(); + wallet.setJwcode(jwcode); + wallet.setWalletId(walletId); + wallet.setCurrentPermanentGold(new BigDecimal(permanentGold)); + cashCollectionMapper.insertUserWallet(wallet); + log.info("创建新的钱包记录:jwcode={}, walletId={}, permanentGold={}", + jwcode, walletId, permanentGold); + } else { + log.info("充值成功:jwcode={}, walletId={}, 增加金币={}", + jwcode, walletId, permanentGold); + } + } catch (Exception e) { + log.error("充值钱包失败:jwcode={}, walletId={}, error={}", + jwcode, walletId, e.getMessage(), e); + throw new RuntimeException("充值钱包失败:" + e.getMessage(), e); + } + } } return rows > 0 ? "编辑成功" : "编辑失败"; } diff --git a/src/main/resources/cashMapper/CashCollectionMapper.xml b/src/main/resources/cashMapper/CashCollectionMapper.xml index 5609f50..46fe61f 100644 --- a/src/main/resources/cashMapper/CashCollectionMapper.xml +++ b/src/main/resources/cashMapper/CashCollectionMapper.xml @@ -7,14 +7,14 @@ useGeneratedKeys="true" keyProperty="id"> insert into cash_record_collection(order_type,jwcode,name,market,activity, - order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold, - payment_currency,payment_amount,received_market, - pay_type,pay_time,status,submitter_id,submitter_market,payload,audit_time, - voucher,remark) + order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold, + payment_currency,payment_amount,received_market, + pay_type,pay_time,status,submitter_id,submitter_market,payload,audit_time, + voucher,remark,wallet_id) values(#{orderType},#{jwcode},#{name},#{market},#{activity}, #{orderCode},#{bankCode},#{goodsName},#{goodNum},#{numUnit},#{permanentGold},#{freeGold},#{paymentCurrency}, #{paymentAmount},#{receivedMarket},#{payType},#{payTime}, - #{status},#{submitterId},#{submitterMarket},#{payload},#{auditTime},#{voucher},#{remark}) + #{status},#{submitterId},#{submitterMarket},#{payload},#{auditTime},#{voucher},#{remark},#{walletId}) + @@ -389,6 +389,31 @@ + + + + + + + UPDATE user_region_wallet + SET current_permanent_gold = current_permanent_gold + #{amount}, + update_time = NOW() + WHERE jwcode = #{jwcode} AND wallet_id = #{walletId} + + + + + INSERT INTO user_region_wallet (jwcode, wallet_id, current_permanent_gold, create_time, update_time) + VALUES (#{jwcode}, #{walletId}, #{currentPermanentGold}, NOW(), NOW()) + ON DUPLICATE KEY UPDATE + current_permanent_gold = current_permanent_gold + VALUES(current_permanent_gold), + update_time = NOW() + + update cash_record_collection