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.springframework.stereotype.Service;
|
|
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;
|
|
/**
|
* <p>
|
* 商户统计 服务实现类
|
* </p>
|
*
|
* @author jqs
|
* @since 2023-06-25
|
*/
|
@Service
|
public class ShopTotalServiceImpl extends ServiceImpl<ShopTotalMapper, ShopTotal> implements ShopTotalService {
|
|
private Lock lock = new ReentrantLock();
|
private ExecutorService executor = Executors.newSingleThreadExecutor();
|
|
/**
|
* @param shopTotalChangeDto
|
* @return void
|
* @description 更新商户统计
|
*/
|
@Override
|
public void changeShopTotal(ShopTotalChangeDto shopTotalChangeDto) {
|
executor.execute(() -> {
|
lock.lock();
|
try {
|
handleShopTotal(shopTotalChangeDto);
|
} finally {
|
lock.unlock();
|
}
|
});
|
}
|
|
//更新商户统计实现
|
private void handleShopTotal(ShopTotalChangeDto shopTotalChangeDto){
|
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.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());
|
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());
|
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());
|
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);
|
}
|
}
|