Browse Source

20260305钱包消费

huangqizheng/feature-20260309142559-钱包退款
sunjiabei 1 month ago
parent
commit
c7ca35fc8d
  1. 24
      src/main/java/com/example/demo/domain/DTO/WalletDTO.java
  2. 2
      src/main/java/com/example/demo/mapper/coin/ConsumeMapper.java
  3. 48
      src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java
  4. 11
      src/main/resources/mapper/ConsumeMapper.xml

24
src/main/java/com/example/demo/domain/DTO/WalletDTO.java

@ -0,0 +1,24 @@
package com.example.demo.domain.DTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @program: gold-java
* @ClassName WalletDTO
* @description:
* @author: Double
* @create: 202603-05 11:47
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WalletDTO {
private Integer id; //钱包id
private BigDecimal permanentGold;
}

2
src/main/java/com/example/demo/mapper/coin/ConsumeMapper.java

@ -1,6 +1,7 @@
package com.example.demo.mapper.coin;
import com.example.demo.domain.DTO.RegionWalletDTO;
import com.example.demo.domain.DTO.WalletDTO;
import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.domain.entity.Wallet;
import com.example.demo.domain.vo.coin.ConsumeUser;
@ -51,4 +52,5 @@ public interface ConsumeMapper {
List<RegionWalletDTO> selectRegionWalletByJwcode(Integer jwcode);
List<Wallet> selectWallet();
void createRegionWallet(Integer jwcode);
void updateRegionWallet(WalletDTO wallet);
}

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

@ -3,6 +3,7 @@ package com.example.demo.serviceImpl.coin;
import com.example.demo.Util.GoldTistV2;
import com.example.demo.Util.SimpleIdGenerator;
import com.example.demo.domain.DTO.RegionWalletDTO;
import com.example.demo.domain.DTO.WalletDTO;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.domain.vo.coin.*;
@ -227,6 +228,53 @@ public class ConsumeServiceImpl implements ConsumeService {
else if (consumeUser.getPermanentGold().compareTo(BigDecimal.ZERO)==0&&consumeUser.getFreeGold().compareTo(BigDecimal.ZERO)==0&&consumeUser.getTaskGold().compareTo(BigDecimal.ZERO)==0){
GoldTistV2.addCoinRecordNew(String.valueOf(consumeUser.getJwcode()), consumeUser.getRemark(),consumeUser.getAdminName(),consumeUser.getGoodsName());}
if(consumeUser.getPermanentGold().compareTo(BigDecimal.ZERO)!=0) {
// 需要扣除的永久金币总量
BigDecimal remainingPermanentGold = consumeUser.getPermanentGold();
// 遍历钱包列表依次扣款
for(RegionWalletDTO wallet : regionWallets) {
// 如果剩余需要扣除的金额为0结束循环
if(remainingPermanentGold.compareTo(BigDecimal.ZERO) <= 0) {
break;
}
// 获取当前钱包的永久金币余额
BigDecimal walletBalance = wallet.getCurrentPermanentGold() != null ? wallet.getCurrentPermanentGold() : BigDecimal.ZERO;
// 计算当前钱包可以扣除的金额不超过钱包余额和剩余需要扣除的金额
BigDecimal deductAmount = BigDecimal.ZERO;
if(walletBalance.compareTo(remainingPermanentGold) >= 0) {
// 钱包余额足够扣除剩余全部金额
deductAmount = remainingPermanentGold;
remainingPermanentGold = BigDecimal.ZERO;
} else {
// 钱包余额不足扣除全部余额
deductAmount = walletBalance;
remainingPermanentGold = remainingPermanentGold.subtract(deductAmount);
}
// 如果需要扣除金额大于0执行扣款操作
if(deductAmount.compareTo(BigDecimal.ZERO) > 0) {
WalletDTO updateWallet = new WalletDTO();
updateWallet.setId(wallet.getId());
// 设置需要扣除的永久金币金额
updateWallet.setPermanentGold(deductAmount);
// 调用Mapper方法更新钱包余额
consumeMapper.updateRegionWallet(updateWallet);
}
}
// 检查是否所有需要扣除的金额都已扣除
if(remainingPermanentGold.compareTo(BigDecimal.ZERO) > 0) {
// 如果还有剩余金额未扣除说明所有钱包余额不足
String errorMsg = "所有钱包永久金币余额不足,剩余需要扣除:" + remainingPermanentGold;
log.error(errorMsg);
throw new SystemException(errorMsg);
}
}
consumeMapper.add(userGoldRecord);
consumeMapper.updateUserGold(userGoldRecord);
User user = new User();

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

@ -365,4 +365,15 @@
FROM user u
WHERE u.jwcode = #{jwcode}
</insert>
<!-- 更新钱包金币余额 -->
<update id="updateRegionWallet" parameterType="com.example.demo.domain.DTO.WalletDTO">
UPDATE user_region_wallet
<set>
<if test="currentPermanentGold != null and currentPermanentGold.compareTo(BigDecimal.ZERO) != 0">
current_permanent_gold = current_permanent_gold - #{currentPermanentGold},
</if>
</set>
WHERE id = #{id}
</update>
</mapper>
Loading…
Cancel
Save