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 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 83 insertions(+), 0 deletions(-)

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("余额修改失败");
+                }
+            }
+        }
+    }
 }

--
Gitblit v1.9.1