From 569ccbaa7bd63768ed5efada1f0c9967264782d4 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期三, 30 八月 2023 18:36:14 +0800
Subject: [PATCH] bug
---
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java | 109 +++++++++++++++++++++++++++++++++---------------------
1 files changed, 67 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 73ece42..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,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
@@ -56,37 +57,58 @@
//更新商户统计实现
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){
@@ -105,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;
@@ -119,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;
@@ -133,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