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