package com.ruoyi.shop.service.impl.shop;
|
|
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.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>
|
* 商户统计 服务实现类
|
* </p>
|
*
|
* @author jqs
|
* @since 2023-06-25
|
*/
|
@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()==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);
|
}
|
}
|