From 5d85e1f21e2bf8fd1db778d986ca359d9d604670 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 28 Apr 2022 15:47:00 +0800
Subject: [PATCH] add common wallet update
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java | 83 +++++++++++++++++++++++++++++++++++++++++
src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java | 4 ++
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java | 2 +
src/main/resources/mapper/modules/MallMemberWalletMapper.xml | 18 +++++++++
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 4 +
5 files changed, 110 insertions(+), 1 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java
index 50b5cd5..3473eab 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java
@@ -12,5 +12,7 @@
int updateCommissionWithVersion(@Param("record") MallMemberWallet wallet);
+ int updateAmountWithVersion(@Param("record") MallMemberWallet wallet);
+
void updateBalanceWithId(@Param("record")MallMemberWallet mallMemberWallet);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java
index cb187ba..b4d3388 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java
@@ -14,4 +14,8 @@
void addCommission(BigDecimal amount, Long member);
void reduceCommission(BigDecimal amount, Long member);
+
+ void add(BigDecimal amount, Long memberId, String field);
+
+ void reduce(BigDecimal amount, Long memberId, String field);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java
index dff3490..28febbf 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java
@@ -9,6 +9,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import java.lang.reflect.Field;
import java.math.BigDecimal;
/**
@@ -88,6 +89,15 @@
}
}
+ public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
+ Field commission = MallMemberWallet.class.getDeclaredField("commission");
+ MallMemberWallet wallet = new MallMemberWallet();
+ commission.setAccessible(true);
+ commission.set(wallet, BigDecimal.valueOf(12.34d));
+
+ System.out.println(1);
+ }
+
@Override
public void reduceCommission(BigDecimal amount, Long memberId) {
int i = 0;
@@ -112,4 +122,77 @@
}
}
}
+
+ @Override
+ public void add(BigDecimal amount, Long memberId, String field) {
+ int i = 0;
+ boolean flag = true;
+
+ while (flag) {
+ i++;
+ MallMemberWallet wallet = this.baseMapper.selectWalletByMemberId(memberId);
+ wallet.setCommission(wallet.getCommission().add(amount));
+
+ MallMemberWallet update = new MallMemberWallet();
+ update.setId(wallet.getId());
+ update.setRevision(wallet.getRevision());
+
+ Field declaredField = null;
+ try {
+ declaredField = MallMemberWallet.class.getDeclaredField(field);
+ declaredField.setAccessible(true);
+ declaredField.set(update, amount);
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ e.printStackTrace();
+ throw new FebsException("金额新增失败");
+ }
+
+ int result = this.baseMapper.updateAmountWithVersion(wallet);
+ if (result > 0) {
+ flag = false;
+ } else {
+ if (i > 2) {
+ throw new FebsException("金额新增失败");
+ }
+ }
+ }
+ }
+
+ @Override
+ public void reduce(BigDecimal amount, Long memberId, String field) {
+ int i = 0;
+ boolean flag = true;
+
+ while (flag) {
+ i++;
+ MallMemberWallet wallet = this.baseMapper.selectWalletByMemberId(memberId);
+
+ MallMemberWallet update = new MallMemberWallet();
+ update.setId(wallet.getId());
+ update.setRevision(wallet.getRevision());
+
+ try {
+ Field declaredField = MallMemberWallet.class.getDeclaredField(field);
+ declaredField.setAccessible(true);
+ BigDecimal balance = (BigDecimal) declaredField.get(wallet);
+
+ if (amount.compareTo(balance) > 0) {
+ throw new FebsException("余额不足");
+ }
+ declaredField.set(update, wallet.getCommission().subtract(amount));
+
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ e.printStackTrace();
+ }
+
+ int result = this.baseMapper.updateAmountWithVersion(wallet);
+ if (result > 0) {
+ flag = false;
+ } else {
+ if (i > 2) {
+ throw new FebsException("余额修改失败");
+ }
+ }
+ }
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 1733f9e..8cabb42 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -209,6 +209,8 @@
MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId());
BigDecimal score = sku.getOriginalPrice().multiply(mallGoods.getStaticMultiple());
+
+ memberWalletService.add(score, member.getId(), "score");
memberService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), null, null, null, null, FlowTypeEnum.SCORE.getValue());
}
}
@@ -246,7 +248,7 @@
throw new FebsException("支付密码错误");
}
- memberWalletService.reduceBalance(orderInfo.getAmount(), mallMember.getId());
+ memberWalletService.reduce(orderInfo.getAmount(), mallMember.getId(), "balance");
return orderInfo.getOrderNo();
}
diff --git a/src/main/resources/mapper/modules/MallMemberWalletMapper.xml b/src/main/resources/mapper/modules/MallMemberWalletMapper.xml
index 7e60066..73bbd88 100644
--- a/src/main/resources/mapper/modules/MallMemberWalletMapper.xml
+++ b/src/main/resources/mapper/modules/MallMemberWalletMapper.xml
@@ -26,4 +26,22 @@
balance = #{record.balance}
where id=#{record.id}
</update>
+
+ <update id="updateAmountWithVersion">
+ update mall_member_wallet
+ set revision = revision + 1
+ <if test="record.balance != null">
+ , balance = #{record.balance}
+ </if>
+ <if test="record.score != null">
+ , score = #{record.score}
+ </if>
+ <if test="record.prizeScore != null">
+ , prize_score = #{record.prizeScoree}
+ </if>
+ <if test="record.commission != null">
+ , commission = #{record.commission}
+ </if>
+ where id=#{record.id} and revision=#{record.revision}
+ </update>
</mapper>
\ No newline at end of file
--
Gitblit v1.9.1