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