This commit is contained in:
huahua
2024-07-24 11:09:01 +08:00
parent 0ffeee04dd
commit 95cee69bc1
4 changed files with 70 additions and 60 deletions

View File

@@ -6,20 +6,45 @@ import org.springframework.context.annotation.Configuration;
import javax.annotation.PreDestroy;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@Configuration
public class ExecutorConfig {
private ExecutorService executorService;
// @Bean
// public ExecutorService executorService() {
// ExecutorService executorService = Executors.newFixedThreadPool(12);
// return executorService;
// }
// @PreDestroy
// public void shutdown() {
// executorService.shutdown(); // 不立即停止所有任务,但不再接受新任务
// }
@Bean
public ExecutorService executorService() {
ExecutorService executorService = Executors.newFixedThreadPool(12);
return executorService;
// 考虑根据实际情况调整线程池大小
int threadPoolSize = Runtime.getRuntime().availableProcessors() * 2;
return Executors.newFixedThreadPool(threadPoolSize);
}
@PreDestroy
public void shutdown() {
executorService.shutdown(); // 不立即停止所有任务,但不再接受新任务
if (executorService != null) {
// 尝试更彻底地关闭线程池
executorService.shutdownNow(); // 阻止新任务提交并尝试停止当前正在执行的任务
try {
// 等待所有任务完成或等待一段时间
if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) {
System.err.println("Pool did not terminate");
}
} catch (InterruptedException ie) {
Thread.currentThread().interrupt(); // 重新设置中断状态
System.err.println("Thread interrupted while waiting for the executor service to terminate.");
}
}
}
}

View File

@@ -69,20 +69,11 @@ public class CarReservationInfoServiceImpl extends ServiceImpl<CarReservationInf
public BusinessAnalysisVo getStatistic(BusinessAnalysisRequest request) {
BusinessAnalysisVo vo = new BusinessAnalysisVo();
//当前
CompletableFuture<BigDecimal> current = CompletableFuture.supplyAsync(() -> {
BigDecimal sumPrice = getSumPrice(request.getDateLimit(), request.getMerId(), null);
return sumPrice;
}, service);
CompletableFuture<BigDecimal> current = calculatePrice(request, null);
//上一年
CompletableFuture<BigDecimal> year = CompletableFuture.supplyAsync(() -> {
BigDecimal sumPrice = getSumPrice(request.getDateLimit(), request.getMerId(), DateConstants.SEARCH_DATE_PRE_YEAR);
return sumPrice;
}, service);
CompletableFuture<BigDecimal> year = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_YEAR);
//上一月
CompletableFuture<BigDecimal> month = CompletableFuture.supplyAsync(() -> {
BigDecimal sumPrice = getSumPrice(request.getDateLimit(), request.getMerId(), DateConstants.SEARCH_DATE_PRE_MONTH);
return sumPrice;
}, service);
CompletableFuture<BigDecimal> month = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_MONTH);
CompletableFuture.allOf(current, year, month).join();
try {
@@ -97,6 +88,10 @@ public class CarReservationInfoServiceImpl extends ServiceImpl<CarReservationInf
return vo;
}
private CompletableFuture<BigDecimal> calculatePrice(BusinessAnalysisRequest request, String dateOffset) {
return CompletableFuture.supplyAsync(() -> getSumPrice(request.getDateLimit(), request.getMerId(), dateOffset), service);
}
private BigDecimal getSumPrice(String dateLimit, Integer merId, String type) {
QueryWrapper<CarReservationInfo> lqw = new QueryWrapper<>();
lqw.select("IFNULL(SUM( CASE WHEN new_accessory_over_price IS NOT NULL AND new_accessory_over_price <> 0 THEN new_accessory_over_price ELSE accessory_over_price END " +

View File

@@ -4,7 +4,10 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.*;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -42,9 +45,9 @@ import com.zbkj.common.request.car.*;
import com.zbkj.common.response.accessory.AccessoryStorageInResponse;
import com.zbkj.common.response.car.*;
import com.zbkj.common.result.CommonResultCode;
import com.zbkj.common.utils.JsonUtils;
import com.zbkj.common.utils.LxkDateUtil;
import com.zbkj.common.utils.LxkUtil;
import com.zbkj.common.utils.JsonUtils;
import com.zbkj.common.utils.RedisUtil;
import com.zbkj.common.vo.BusinessAnalysisVo;
import com.zbkj.common.vo.DateLimitUtilVo;
@@ -62,7 +65,10 @@ import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -3577,22 +3583,11 @@ public class CarReservationOrderServiceImpl extends ServiceImpl<CarReservationOr
BusinessAnalysisVo vo = new BusinessAnalysisVo();
//统计当前数据
CompletableFuture<BigDecimal> current = CompletableFuture.supplyAsync(() -> {
BigDecimal price = getCount(request.getDateLimit(), request.getMerId(), null);
return price;
}, service);
CompletableFuture<BigDecimal> current = calculatePrice(request, null);
//统计上年数据
CompletableFuture<BigDecimal> year = CompletableFuture.supplyAsync(() -> {
BigDecimal price = getCount(request.getDateLimit(), request.getMerId(), DateConstants.SEARCH_DATE_PRE_YEAR);
return price;
}, service);
CompletableFuture<BigDecimal> year = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_YEAR);
//统计上个月的数据
CompletableFuture<BigDecimal> lastMonth = CompletableFuture.supplyAsync(() -> {
BigDecimal price = getCount(request.getDateLimit(), request.getMerId(), DateConstants.SEARCH_DATE_PRE_MONTH);
return price;
}, service);
CompletableFuture<BigDecimal> lastMonth = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_MONTH);
try {
CompletableFuture.allOf(current, year, lastMonth).join();
@@ -3608,6 +3603,10 @@ public class CarReservationOrderServiceImpl extends ServiceImpl<CarReservationOr
return vo;
}
private CompletableFuture<BigDecimal> calculatePrice(BusinessAnalysisRequest request, String dateOffset) {
return CompletableFuture.supplyAsync(() -> getCount(request.getDateLimit(), request.getMerId(), dateOffset), service);
}
public BigDecimal getCount(String dateLimit, Integer merId, String type) {
LambdaQueryWrapper<CarReservationOrder> lqw = new LambdaQueryWrapper<>();
if (StrUtil.isNotBlank(dateLimit)) {

View File

@@ -10,7 +10,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zbkj.common.constants.*;
import com.zbkj.common.constants.BrokerageRecordConstants;
import com.zbkj.common.constants.CarRepairOrderConstants;
import com.zbkj.common.constants.DateConstants;
import com.zbkj.common.constants.OrderConstants;
import com.zbkj.common.exception.LxkException;
import com.zbkj.common.model.admin.SystemAdmin;
import com.zbkj.common.model.car.CarReservationInfo;
@@ -36,7 +39,10 @@ import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -299,21 +305,12 @@ public class ReservationOrderCashDeskServiceImpl extends ServiceImpl<Reservation
BusinessAnalysisVo vo = new BusinessAnalysisVo();
//统计当前数据
CompletableFuture<BigDecimal> current = CompletableFuture.supplyAsync(() -> {
BigDecimal price = getPrice(request.getDateLimit(), request.getMerId(), null);
return price;
}, service);
CompletableFuture<BigDecimal> current = calculatePrice(request, null);
//统计上年数据
CompletableFuture<BigDecimal> year = CompletableFuture.supplyAsync(() -> {
BigDecimal price = getPrice(request.getDateLimit(), request.getMerId(), DateConstants.SEARCH_DATE_PRE_YEAR);
return price;
}, service);
CompletableFuture<BigDecimal> year = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_YEAR);
//统计上个月的数据
CompletableFuture<BigDecimal> lastMonth = CompletableFuture.supplyAsync(() -> {
BigDecimal price = getPrice(request.getDateLimit(), request.getMerId(), DateConstants.SEARCH_DATE_PRE_MONTH);
return price;
}, service);
CompletableFuture<BigDecimal> lastMonth = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_MONTH);
// 使用CompletableFuture来异步计算当前数据、上年数据和上个月的数据
CompletableFuture.allOf(current, year, lastMonth).join();
try {
//同比
@@ -328,26 +325,20 @@ public class ReservationOrderCashDeskServiceImpl extends ServiceImpl<Reservation
return vo;
}
private CompletableFuture<BigDecimal> calculatePrice(BusinessAnalysisRequest request, String dateOffset) {
return CompletableFuture.supplyAsync(() -> getPrice(request.getDateLimit(), request.getMerId(), dateOffset), service);
}
@Override
public BusinessAnalysisVo getCost(BusinessAnalysisRequest request) {
BusinessAnalysisVo vo = new BusinessAnalysisVo();
//统计当前数据
CompletableFuture<BigDecimal> current = CompletableFuture.supplyAsync(() -> {
BigDecimal price = getTurnover(request.getDateLimit(), request.getMerId(), null);
return price;
}, service);
CompletableFuture<BigDecimal> current = calculatePrice(request, null);
//统计上年数据
CompletableFuture<BigDecimal> year = CompletableFuture.supplyAsync(() -> {
BigDecimal price = getTurnover(request.getDateLimit(), request.getMerId(), DateConstants.SEARCH_DATE_PRE_YEAR);
return price;
}, service);
CompletableFuture<BigDecimal> year = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_YEAR);
//统计上个月的数据
CompletableFuture<BigDecimal> lastMonth = CompletableFuture.supplyAsync(() -> {
BigDecimal price = getTurnover(request.getDateLimit(), request.getMerId(), DateConstants.SEARCH_DATE_PRE_MONTH);
return price;
}, service);
CompletableFuture<BigDecimal> lastMonth = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_MONTH);
try {
CompletableFuture.allOf(current, year, lastMonth).join();