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