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 |  160 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 158 insertions(+), 2 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 b138fd7..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
@@ -1,10 +1,19 @@
 package com.ruoyi.shop.service.impl.shop;
 
-import com.ruoyi.shop.domain.pojo.ShopTotal;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.shop.domain.pojo.shop.ShopTotal;
 import com.ruoyi.shop.mapper.shop.ShopTotalMapper;
 import com.ruoyi.shop.service.shop.ShopTotalService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.TimeUnit;
 
 /**
  * <p>
@@ -17,4 +26,151 @@
 @Service
 public class ShopTotalServiceImpl extends ServiceImpl<ShopTotalMapper, ShopTotal> implements ShopTotalService {
 
+    @Autowired
+    private RedissonClient redissonClient;
+
+    @Resource
+    private ShopTotalMapper shopTotalMapper;
+
+
+    /**
+     * @param shopTotalChangeDto
+     * @return void
+     * @description 更新商户统计
+     */
+    @Override
+    public void changeShopTotal(ShopTotalChangeDto shopTotalChangeDto) {
+        //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;
+        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){
+            shopTotal.setTotalActivityCount(shopTotal.getTotalActivityCount()+shopTotalChangeDto.getActivityCount());
+        }
+        //服务变化
+        Integer serviceCount = 0;
+        Boolean haveService = false;
+        if(shopTotalChangeDto.getTypeCycleService()!=null){
+            if(shopTotalChangeDto.getTypeCycleService()==2){
+                shopTotal.setUsedCycleService(shopTotal.getUsedCycleService()+shopTotalChangeDto.getCycleService());
+                shopTotal.setUseableCycleService(shopTotal.getUseableCycleService()-shopTotalChangeDto.getCycleService());
+                shopTotal.setUseableCyclePerson(shopTotal.getUseableCyclePerson()-shopTotalChangeDto.getCyclePerson());
+                serviceCount = serviceCount - shopTotalChangeDto.getCycleService();
+            }else{
+                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;
+        }
+        if(shopTotalChangeDto.getTypeServiceService()!=null){
+            if(shopTotalChangeDto.getTypeServiceService()==2){
+                shopTotal.setUsedServiceService(shopTotal.getUsedServiceService()+shopTotalChangeDto.getServiceService());
+                shopTotal.setUseableServiceService(shopTotal.getUseableServiceService()-shopTotalChangeDto.getServiceService());
+                shopTotal.setUseableServicePerson(shopTotal.getUseableServicePerson()-shopTotalChangeDto.getServicePerson());
+                serviceCount = serviceCount - shopTotalChangeDto.getServiceService();
+            }else{
+                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;
+        }
+        if(shopTotalChangeDto.getTypeExperienceService()!=null){
+            if(shopTotalChangeDto.getTypeExperienceService()==2){
+                shopTotal.setUsedExperienceService(shopTotal.getUsedExperienceService()+shopTotalChangeDto.getExperienceService());
+                shopTotal.setUseableExperienceService(shopTotal.getUseableExperienceService()-shopTotalChangeDto.getExperienceService());
+                shopTotal.setUseableExperiencePerson(shopTotal.getUseableExperiencePerson()-shopTotalChangeDto.getExperiencePerson());
+                serviceCount = serviceCount - shopTotalChangeDto.getExperienceService();
+            }else{
+                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;
+        }
+        if(haveService){
+            if(serviceCount<0){
+                shopTotal.setUsedServiceCount(shopTotal.getUsedServiceCount()+serviceCount);
+                shopTotal.setUseableServiceCount(shopTotal.getUsedServiceCount()+serviceCount);
+            }else{
+                shopTotal.setTotalServiceCount(shopTotal.getTotalServiceCount()+serviceCount);
+                shopTotal.setUseableServiceCount(shopTotal.getUsedServiceCount()+serviceCount);
+            }
+        }
+        this.saveOrUpdate(shopTotal);
+    }
 }

--
Gitblit v1.7.1