From c5d38d650d2ac4101b1293a4f17346e7d5420076 Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期五, 04 七月 2025 20:39:58 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/2.0' into 2.0

---
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java |  119 ++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 77 insertions(+), 42 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 b2c2fa5..df82334 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,13 +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.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * <p>
@@ -24,8 +26,12 @@
 @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;
+
 
     /**
      * @param shopTotalChangeDto
@@ -34,49 +40,75 @@
      */
     @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
+    public ShopTotal shopsTotalByIds(List<Long> shopIds) {
+        return shopTotalMapper.shopsTotalByIds(shopIds);
     }
 
     //更新商户统计实现
     private void handleShopTotal(ShopTotalChangeDto shopTotalChangeDto){
+        log.debug("商户统计变动"+shopTotalChangeDto.toString());
         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){
-            shopTotal.setTotalOrderMoney(shopTotal.getTotalOrderMoney().add(payMoney));
-            shopTotal.setTotalOrder(shopTotal.getTotalOrder()+1);
+        if(shopTotalChangeDto.getOrderType()!=null){
+            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){
@@ -95,6 +127,7 @@
                 shopTotal.setTotalCycleService(shopTotal.getTotalCycleService()+shopTotalChangeDto.getCycleService());
                 shopTotal.setUseableCycleService(shopTotal.getUseableCycleService()+shopTotalChangeDto.getCycleService());
                 shopTotal.setTotalCyclePerson(shopTotal.getTotalCyclePerson()+shopTotalChangeDto.getCyclePerson());
+                shopTotal.setUseableCyclePerson(shopTotal.getUseableCyclePerson()+shopTotalChangeDto.getCyclePerson());
                 serviceCount = serviceCount + shopTotalChangeDto.getCycleService();
             }
             haveService = true;
@@ -109,6 +142,7 @@
                 shopTotal.setTotalServiceService(shopTotal.getTotalServiceService()+shopTotalChangeDto.getServiceService());
                 shopTotal.setUseableServiceService(shopTotal.getUseableServiceService()+shopTotalChangeDto.getServiceService());
                 shopTotal.setTotalServicePerson(shopTotal.getTotalServicePerson()+shopTotalChangeDto.getServicePerson());
+                shopTotal.setUseableServicePerson(shopTotal.getUseableServicePerson()+shopTotalChangeDto.getServicePerson());
                 serviceCount = serviceCount + shopTotalChangeDto.getServiceService();
             }
             haveService = true;
@@ -123,6 +157,7 @@
                 shopTotal.setTotalExperienceService(shopTotal.getTotalExperienceService()+shopTotalChangeDto.getExperienceService());
                 shopTotal.setUseableExperienceService(shopTotal.getUseableExperienceService()+shopTotalChangeDto.getExperienceService());
                 shopTotal.setTotalExperiencePerson(shopTotal.getTotalExperiencePerson()+shopTotalChangeDto.getExperiencePerson());
+                shopTotal.setUseableExperiencePerson(shopTotal.getUseableExperiencePerson()+shopTotalChangeDto.getExperiencePerson());
                 serviceCount = serviceCount + shopTotalChangeDto.getExperienceService();
             }
             haveService = true;

--
Gitblit v1.7.1