Browse Source

20260305充值逻辑

huangqizheng/feature-20260309142559-钱包退款
wangguorui 1 month ago
parent
commit
fe0a572729
  1. 12
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  2. 47
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  3. 33
      src/main/resources/cashMapper/CashCollectionMapper.xml

12
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.CashRecord;
import com.example.demo.domain.entity.GOrder; import com.example.demo.domain.entity.GOrder;
import com.example.demo.domain.entity.RechargeActivity; 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.CashCollection;
import com.example.demo.domain.vo.cash.PerformanceVO; import com.example.demo.domain.vo.cash.PerformanceVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -98,4 +99,15 @@ public interface CashCollectionMapper {
@Param("type") Integer type, @Param("type") Integer type,
@Param("flag") Integer flag); @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);
} }

47
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) { if (cashCollection.getPermanentGold() == 0 && cashCollection.getFreeGold() == 0) {
throw new IllegalArgumentException("金币数量不能为空"); throw new IllegalArgumentException("金币数量不能为空");
} }
if (cashCollection.getWalletId() == null || cashCollection.getWalletId() < 0 || cashCollection.getWalletId() > 10) {
throw new IllegalArgumentException("钱包ID不能为空");
}
} }
if (!cashCollection.getGoodsName().equals("金币充值")) { if (!cashCollection.getGoodsName().equals("金币充值")) {
if (cashCollection.getGoodNum() == 0) { if (cashCollection.getGoodNum() == 0) {
@ -119,6 +122,9 @@ public class CashCollectionServiceImpl implements CashCollectionService {
cashRecord.setNumUnit(cashCollection.getNumUnit()); //数量单位 cashRecord.setNumUnit(cashCollection.getNumUnit()); //数量单位
cashRecord.setPermanentGold(cashCollection.getPermanentGold()); //永久金币 cashRecord.setPermanentGold(cashCollection.getPermanentGold()); //永久金币
cashRecord.setFreeGold(cashCollection.getFreeGold()); //免费金币 cashRecord.setFreeGold(cashCollection.getFreeGold()); //免费金币
cashRecord.setWalletId(cashCollection.getWalletId()); // 钱包 ID
// 打印钱包 ID
log.info("钱包ID:{}", cashRecord.getWalletId());
cashRecord.setPaymentCurrency(cashCollection.getPaymentCurrency()); //付款币种 cashRecord.setPaymentCurrency(cashCollection.getPaymentCurrency()); //付款币种
cashRecord.setPaymentAmount(cashCollection.getPaymentAmount()); //付款金额 cashRecord.setPaymentAmount(cashCollection.getPaymentAmount()); //付款金额
cashRecord.setReceivedMarket(cashCollection.getReceivedMarket()); //到账地区 cashRecord.setReceivedMarket(cashCollection.getReceivedMarket()); //到账地区
@ -127,7 +133,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
cashRecord.setVoucher(cashCollection.getVoucher()); //转账凭证 cashRecord.setVoucher(cashCollection.getVoucher()); //转账凭证
cashRecord.setRemark(cashCollection.getRemark()); //备注 cashRecord.setRemark(cashCollection.getRemark()); //备注
cashRecord.setStatus(0); //订单状态付款线下财务待审核 cashRecord.setStatus(0); //订单状态付款线下财务待审核
cashRecord.setSubmitterId(cashCollection.getSubmitterId()); //提交人ID
cashRecord.setSubmitterId(cashCollection.getSubmitterId()); //提交人 ID
cashRecord.setSubmitterMarket(cashCollection.getSubmitterMarket()); cashRecord.setSubmitterMarket(cashCollection.getSubmitterMarket());
cashRecord.setOrderType(1); //订单类型1-收款 cashRecord.setOrderType(1); //订单类型1-收款
cashRecord.setMarket(cashCollection.getMarket()); cashRecord.setMarket(cashCollection.getMarket());
@ -371,6 +377,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
//补全手续费等内容 //补全手续费等内容
@Override @Override
@Transactional(rollbackFor = Exception.class)
public String complete(CashRecord cashRecord) { public String complete(CashRecord cashRecord) {
@ -381,11 +388,47 @@ public class CashCollectionServiceImpl implements CashCollectionService {
int rows = cashCollectionMapper.complete(cashRecord); int rows = cashCollectionMapper.complete(cashRecord);
String goodsName = cashCollectionMapper.selectGoodsNameByCode(cashRecord.getOrderCode()); 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_")); cashRecord.setOrderCode(cashRecord.getOrderCode().replace("XJ_", "XJCZ_"));
//修改金币订单 //修改金币订单
cashCollectionMapper.updateGoldOrder(cashRecord); 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 ? "编辑成功" : "编辑失败"; return rows > 0 ? "编辑成功" : "编辑失败";
} }

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

@ -10,11 +10,11 @@
order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold, order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold,
payment_currency,payment_amount,received_market, payment_currency,payment_amount,received_market,
pay_type,pay_time,status,submitter_id,submitter_market,payload,audit_time, pay_type,pay_time,status,submitter_id,submitter_market,payload,audit_time,
voucher,remark)
voucher,remark,wallet_id)
values(#{orderType},#{jwcode},#{name},#{market},#{activity}, values(#{orderType},#{jwcode},#{name},#{market},#{activity},
#{orderCode},#{bankCode},#{goodsName},#{goodNum},#{numUnit},#{permanentGold},#{freeGold},#{paymentCurrency}, #{orderCode},#{bankCode},#{goodsName},#{goodNum},#{numUnit},#{permanentGold},#{freeGold},#{paymentCurrency},
#{paymentAmount},#{receivedMarket},#{payType},#{payTime}, #{paymentAmount},#{receivedMarket},#{payType},#{payTime},
#{status},#{submitterId},#{submitterMarket},#{payload},#{auditTime},#{voucher},#{remark})
#{status},#{submitterId},#{submitterMarket},#{payload},#{auditTime},#{voucher},#{remark},#{walletId})
</insert> </insert>
<!-- <insert id="syncToCashRecord"> <!-- <insert id="syncToCashRecord">
insert into cash_record(order_type,jwcode,name,market,activity, insert into cash_record(order_type,jwcode,name,market,activity,
@ -119,9 +119,9 @@
<select id="getMarketByJwcode" resultType="java.lang.String"> <select id="getMarketByJwcode" resultType="java.lang.String">
select market from user where jwcode=#{jwcode} select market from user where jwcode=#{jwcode}
</select> </select>
<!--根据订单号获取订单id与状态-->
<!--根据订单号获取订单id、状态、钱包id、永久金币数量和精网号-->
<select id="selectByOrderCode" resultType="com.example.demo.domain.entity.CashRecord"> <select id="selectByOrderCode" resultType="com.example.demo.domain.entity.CashRecord">
select id ,status
select id ,status, wallet_id, permanent_gold, jwcode
from cash_record_collection from cash_record_collection
where order_code=#{orderCode} where order_code=#{orderCode}
</select> </select>
@ -389,6 +389,31 @@
<select id="selectGoodsNameByCode" resultType="java.lang.String"> <select id="selectGoodsNameByCode" resultType="java.lang.String">
select goods_name from cash_record_collection where order_code=#{orderCode} select goods_name from cash_record_collection where order_code=#{orderCode}
</select> </select>
<!-- 根据 jwcode 和 walletId 查询用户钱包 -->
<select id="selectUserWallet" resultType="com.example.demo.domain.entity.UserRegionWallet">
SELECT id, jwcode, wallet_id, current_permanent_gold, create_time, update_time
FROM user_region_wallet
WHERE jwcode = #{jwcode} AND wallet_id = #{walletId}
</select>
<!-- 增加用户钱包永久金币 -->
<update id="addUserWalletPermanentGold">
UPDATE user_region_wallet
SET current_permanent_gold = current_permanent_gold + #{amount},
update_time = NOW()
WHERE jwcode = #{jwcode} AND wallet_id = #{walletId}
</update>
<!-- 如果钱包记录不存在则插入 -->
<insert id="insertUserWallet" parameterType="com.example.demo.domain.entity.UserRegionWallet">
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()
</insert>
<!--根据OrderCode订单号更新收款订单--> <!--根据OrderCode订单号更新收款订单-->
<update id="updateByGoldCoinOrderCodeByPayment"> <update id="updateByGoldCoinOrderCodeByPayment">
update cash_record_collection update cash_record_collection

Loading…
Cancel
Save