From cfd0118ef446a66f91999afc7b1e46ca607adf50 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期四, 13 七月 2023 20:32:35 +0800
Subject: [PATCH] 定时任务 统计

---
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java |   99 +++++++++++++++++++++++++++++--------------------
 1 files changed, 59 insertions(+), 40 deletions(-)

diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java
index 73ece42..eecc004 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java
@@ -5,15 +5,15 @@
 import com.ruoyi.shop.mapper.shop.ShopTotalMapper;
 import com.ruoyi.shop.service.shop.ShopTotalService;
 import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
+import java.util.concurrent.TimeUnit;
 
 /**
  * <p>
@@ -26,8 +26,9 @@
 @Service
 public class ShopTotalServiceImpl extends ServiceImpl<ShopTotalMapper, ShopTotal> implements ShopTotalService {
 
-    private Lock lock = new ReentrantLock();
-    private ExecutorService executor = Executors.newSingleThreadExecutor();
+    @Autowired
+    private RedissonClient redissonClient;
+
     @Resource
     private ShopTotalMapper shopTotalMapper;
 
@@ -39,14 +40,14 @@
      */
     @Override
     public void changeShopTotal(ShopTotalChangeDto shopTotalChangeDto) {
-        executor.execute(() -> {
-            lock.lock();
-            try {
-                handleShopTotal(shopTotalChangeDto);
-            } finally {
-                lock.unlock();
-            }
-        });
+        //redis库存控制极简版
+        RLock redissonLock = redissonClient.getLock("shop_total_"+shopTotalChangeDto.getShopId());
+        try{
+            redissonLock.lock(30, TimeUnit.SECONDS);
+            handleShopTotal(shopTotalChangeDto);
+        }finally{
+            redissonLock.unlock();
+        }
     }
 
     @Override
@@ -59,34 +60,52 @@
         ShopTotal shopTotal = this.getById(shopTotalChangeDto.getShopId());
         //订单变化
         BigDecimal payMoney = BigDecimal.ZERO;
-        Boolean haveOrder = false;
-        if(shopTotalChangeDto.getCycleMoney()!=null){
-            shopTotal.setTotalCycleMoney(shopTotal.getTotalCycleMoney().add(shopTotalChangeDto.getCycleMoney()));
-            payMoney = payMoney.add(shopTotalChangeDto.getCycleMoney());
-            shopTotal.setTotalCycleOrder(shopTotal.getTotalCycleOrder()+1);
-            haveOrder = true;
-        }
-        if(shopTotalChangeDto.getExperienceMoney()!=null){
-            shopTotal.setTotalExperienceMoney(shopTotal.getTotalExperienceMoney().add(shopTotalChangeDto.getExperienceMoney()));
-            payMoney = payMoney.add(shopTotalChangeDto.getExperienceMoney());
-            shopTotal.setTotalExperienceOrder(shopTotal.getTotalExperienceOrder()+1);
-            haveOrder = true;
-        }
-        if(shopTotalChangeDto.getServiceMoney()!=null){
-            shopTotal.setTotalServiceMoney(shopTotal.getTotalServiceMoney().add(shopTotalChangeDto.getServiceMoney()));
-            payMoney = payMoney.add(shopTotalChangeDto.getServiceMoney());
-            shopTotal.setTotalServiceOrder(shopTotal.getTotalServiceOrder()+1);
-            haveOrder = true;
-        }
-        if(shopTotalChangeDto.getGoodsMoney()!=null){
-            shopTotal.setTotalGoodsMoney(shopTotal.getTotalGoodsMoney().add(shopTotalChangeDto.getGoodsMoney()));
-            payMoney = payMoney.add(shopTotalChangeDto.getGoodsMoney());
-            shopTotal.setTotalGoodsOrder(shopTotal.getTotalGoodsOrder()+1);
-            haveOrder = true;
-        }
-        if(haveOrder){
+        if(shopTotalChangeDto.getOrderType()==1){
+            if(shopTotalChangeDto.getCycleMoney()!=null){
+                shopTotal.setTotalCycleMoney(shopTotal.getTotalCycleMoney().add(shopTotalChangeDto.getCycleMoney()));
+                payMoney = payMoney.add(shopTotalChangeDto.getCycleMoney());
+                shopTotal.setTotalCycleOrder(shopTotal.getTotalCycleOrder()+1);
+            }
+            if(shopTotalChangeDto.getExperienceMoney()!=null){
+                shopTotal.setTotalExperienceMoney(shopTotal.getTotalExperienceMoney().add(shopTotalChangeDto.getExperienceMoney()));
+                payMoney = payMoney.add(shopTotalChangeDto.getExperienceMoney());
+                shopTotal.setTotalExperienceOrder(shopTotal.getTotalExperienceOrder()+1);
+            }
+            if(shopTotalChangeDto.getServiceMoney()!=null){
+                shopTotal.setTotalServiceMoney(shopTotal.getTotalServiceMoney().add(shopTotalChangeDto.getServiceMoney()));
+                payMoney = payMoney.add(shopTotalChangeDto.getServiceMoney());
+                shopTotal.setTotalServiceOrder(shopTotal.getTotalServiceOrder()+1);
+            }
+            if(shopTotalChangeDto.getGoodsMoney()!=null){
+                shopTotal.setTotalGoodsMoney(shopTotal.getTotalGoodsMoney().add(shopTotalChangeDto.getGoodsMoney()));
+                payMoney = payMoney.add(shopTotalChangeDto.getGoodsMoney());
+                shopTotal.setTotalGoodsOrder(shopTotal.getTotalGoodsOrder()+1);
+            }
             shopTotal.setTotalOrderMoney(shopTotal.getTotalOrderMoney().add(payMoney));
             shopTotal.setTotalOrder(shopTotal.getTotalOrder()+1);
+        }else{
+            if(shopTotalChangeDto.getCycleMoney()!=null){
+                shopTotal.setTotalCycleMoney(shopTotal.getTotalCycleMoney().subtract(shopTotalChangeDto.getCycleMoney()));
+                payMoney = payMoney.add(shopTotalChangeDto.getCycleMoney());
+                shopTotal.setTotalCycleOrder(shopTotal.getTotalCycleOrder()-1);
+            }
+            if(shopTotalChangeDto.getExperienceMoney()!=null){
+                shopTotal.setTotalExperienceMoney(shopTotal.getTotalExperienceMoney().subtract(shopTotalChangeDto.getExperienceMoney()));
+                payMoney = payMoney.add(shopTotalChangeDto.getExperienceMoney());
+                shopTotal.setTotalExperienceOrder(shopTotal.getTotalExperienceOrder()-1);
+            }
+            if(shopTotalChangeDto.getServiceMoney()!=null){
+                shopTotal.setTotalServiceMoney(shopTotal.getTotalServiceMoney().subtract(shopTotalChangeDto.getServiceMoney()));
+                payMoney = payMoney.add(shopTotalChangeDto.getServiceMoney());
+                shopTotal.setTotalServiceOrder(shopTotal.getTotalServiceOrder()-1);
+            }
+            if(shopTotalChangeDto.getGoodsMoney()!=null){
+                shopTotal.setTotalGoodsMoney(shopTotal.getTotalGoodsMoney().subtract(shopTotalChangeDto.getGoodsMoney()));
+                payMoney = payMoney.add(shopTotalChangeDto.getGoodsMoney());
+                shopTotal.setTotalGoodsOrder(shopTotal.getTotalGoodsOrder()-1);
+            }
+            shopTotal.setTotalOrderMoney(shopTotal.getTotalOrderMoney().subtract(payMoney));
+            shopTotal.setTotalOrder(shopTotal.getTotalOrder()-1);
         }
         //活动变化
         if(shopTotalChangeDto.getActivityCount()!=null){

--
Gitblit v1.7.1