diff --git a/fw-valhalla-common/src/main/java/cn/fw/valhalla/common/utils/ThreadPoolUtil.java b/fw-valhalla-common/src/main/java/cn/fw/valhalla/common/utils/ThreadPoolUtil.java index 2229871..ab7c388 100644 --- a/fw-valhalla-common/src/main/java/cn/fw/valhalla/common/utils/ThreadPoolUtil.java +++ b/fw-valhalla-common/src/main/java/cn/fw/valhalla/common/utils/ThreadPoolUtil.java @@ -22,7 +22,7 @@ public class ThreadPoolUtil { private ThreadPoolUtil() { this.executor = ExecutorBuilder.create() .setCorePoolSize(20) - .setMaxPoolSize(500) + .setMaxPoolSize(200) .setThreadFactory(new ThreadFactoryBuilder().setNameFormat("valhalla-custom-%d").build()) .setAllowCoreThreadTimeOut(true) .setWorkQueue(new LinkedBlockingQueue<>(4096)) diff --git a/fw-valhalla-sdk/src/main/java/cn/fw/valhalla/sdk/api/ValhallaGeneralApiService.java b/fw-valhalla-sdk/src/main/java/cn/fw/valhalla/sdk/api/ValhallaGeneralApiService.java index 24b3b35..6f7e551 100644 --- a/fw-valhalla-sdk/src/main/java/cn/fw/valhalla/sdk/api/ValhallaGeneralApiService.java +++ b/fw-valhalla-sdk/src/main/java/cn/fw/valhalla/sdk/api/ValhallaGeneralApiService.java @@ -1,6 +1,7 @@ package cn.fw.valhalla.sdk.api; import cn.fw.data.base.domain.common.Message; +import cn.fw.valhalla.sdk.param.ClueDeadlineParams; import cn.fw.valhalla.sdk.param.CustomerQueryReq; import cn.fw.valhalla.sdk.param.ReachLogReq; import cn.fw.valhalla.sdk.result.AccidentFollowerResult; @@ -54,12 +55,11 @@ public interface ValhallaGeneralApiService { /** * 查询车辆最短的一个跟进的截止日期(不包含事故车) * - * @param vinList maxLength 1000 - * @param groupId + * @param params * @return */ - @GetMapping("/query/customer/clue/batch/deadline") - Message> queryClueDeadlineBatch(@RequestParam("vinList") List vinList, @RequestParam("groupId") Long groupId); + @PostMapping("/query/customer/clue/batch/deadline") + Message> queryClueDeadlineBatch(@Valid @RequestBody ClueDeadlineParams params); /** * 根据车牌号查询事故车跟进人员 diff --git a/fw-valhalla-sdk/src/main/java/cn/fw/valhalla/sdk/param/ClueDeadlineParams.java b/fw-valhalla-sdk/src/main/java/cn/fw/valhalla/sdk/param/ClueDeadlineParams.java new file mode 100644 index 0000000..4289406 --- /dev/null +++ b/fw-valhalla-sdk/src/main/java/cn/fw/valhalla/sdk/param/ClueDeadlineParams.java @@ -0,0 +1,35 @@ +package cn.fw.valhalla.sdk.param; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.Collections; +import java.util.List; + +/** + * 查询线索截止日期参数 + * + * @author : kurisu + * @version : 2.0 + * @className : ClueDeadlineParams + * @description : 查询线索截止日期参数 + * @date : 2023-04-28 16:40 + */ +@Data +public class ClueDeadlineParams { + @NotNull(message = "集团id不能为空") + private Long groupId; + @NotEmpty(message = "vin不能为空") + @Size(min = 1, max = 1000, message = "最大支持一次性查询1000条数据") + private List vinList; + + public void setVinList(final List vinList) { + this.vinList = vinList; + } + + public void setVin(final String vin) { + this.vinList = Collections.singletonList(vin); + } +} diff --git a/fw-valhalla-server/src/main/java/cn/fw/valhalla/controller/api/ValhallaGeneralApiServiceImpl.java b/fw-valhalla-server/src/main/java/cn/fw/valhalla/controller/api/ValhallaGeneralApiServiceImpl.java index d3cd417..838c301 100644 --- a/fw-valhalla-server/src/main/java/cn/fw/valhalla/controller/api/ValhallaGeneralApiServiceImpl.java +++ b/fw-valhalla-server/src/main/java/cn/fw/valhalla/controller/api/ValhallaGeneralApiServiceImpl.java @@ -5,6 +5,7 @@ import cn.fw.data.base.domain.common.Message; import cn.fw.valhalla.domain.db.follow.ClueTask; import cn.fw.valhalla.domain.dto.CustomerDetailDto; import cn.fw.valhalla.sdk.api.ValhallaGeneralApiService; +import cn.fw.valhalla.sdk.param.ClueDeadlineParams; import cn.fw.valhalla.sdk.param.CustomerQueryReq; import cn.fw.valhalla.sdk.param.ReachLogReq; import cn.fw.valhalla.sdk.result.AccidentFollowerResult; @@ -97,17 +98,14 @@ public class ValhallaGeneralApiServiceImpl implements ValhallaGeneralApiService /** * 查询车辆最短的一个跟进的截止日期(不包含事故车) * - * @param vinList + * @param params * @return */ - @GetMapping("/query/customer/clue/batch/deadline") + @PostMapping("/query/customer/clue/batch/deadline") @Override @ControllerMethod("查询车辆最短的一个跟进的截止日期[批量]") - public Message> queryClueDeadlineBatch(@RequestParam("vinList") final List vinList, @RequestParam("groupId") final Long groupId) { - BV.isNotEmpty(vinList, () -> "车辆vin不能为空"); - int size = vinList.size(); - BV.isTrue(size <= 1000, () -> "已经超过可查询的最大查询数量[1000]"); - return success(clueApiBizService.queryClueDeadlineBatch(vinList, groupId)); + public Message> queryClueDeadlineBatch(@Valid @RequestBody ClueDeadlineParams params) { + return success(clueApiBizService.queryClueDeadlineBatch(params.getVinList(), params.getGroupId())); } diff --git a/fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/follow/ClueApiBizService.java b/fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/follow/ClueApiBizService.java index 85e15f9..3c8d6f8 100644 --- a/fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/follow/ClueApiBizService.java +++ b/fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/follow/ClueApiBizService.java @@ -51,6 +51,40 @@ public class ClueApiBizService { public CustomerClueDeadline queryClueDeadline(final String vin, final Long groupId) { final CustomerClueDeadline customerClueDeadline = new CustomerClueDeadline(); customerClueDeadline.setVin(vin); + fillClueDeadline(customerClueDeadline, groupId); + return customerClueDeadline; + } + + /** + * 批量查询档案最快到期线索的截止时间 + * + * @param vinList + * @param groupId + * @return + */ + public List queryClueDeadlineBatch(final List vinList, final Long groupId) { + HashSet vinSet = new HashSet<>(); + for (String vin : vinList) { + if (StringUtils.isValid(vin)) { + vinSet.add(vin); + } + } + final List list = new ArrayList<>(vinSet.size()); + for (String vin : vinSet) { + CustomerClueDeadline clue = new CustomerClueDeadline(); + clue.setVin(vin); + list.add(clue); + } + CompletableFuture[] futureArr = list.stream() + .map(r -> CompletableFuture.runAsync(() -> fillClueDeadline(r, groupId), ThreadPoolUtil.getInstance().getExecutor())) + .>toArray(CompletableFuture[]::new); + CompletableFuture.allOf(futureArr).join(); + return list; + } + + private void fillClueDeadline(CustomerClueDeadline customerClueDeadline, Long groupId) { + String vin = customerClueDeadline.getVin(); + customerClueDeadline.setVin(vin); SettingVO bySettingType = generalSetting.getBySettingType(SettingTypeEnum.EFFECTIVE_TIME, groupId, generalSetting.COMMON_BRAND_ID); int hours = Optional.ofNullable(bySettingType).map(SettingVO::getDetailValue).orElse(36); Duration duration = Duration.ofHours(hours); @@ -87,32 +121,5 @@ public class ClueApiBizService { if (Objects.nonNull(deadline)) { customerClueDeadline.setDeadline(DateUtil.localDateTime2Date(deadline)); } - return customerClueDeadline; - } - - /** - * 批量查询档案最快到期线索的截止时间 - * - * @param vinList - * @param groupId - * @return - */ - public List queryClueDeadlineBatch(final List vinList, final Long groupId) { - HashSet vinSet = new HashSet<>(); - for (String vin : vinList) { - if (StringUtils.isValid(vin)) { - vinSet.add(vin); - } - } - final List list = new ArrayList<>(); - CompletableFuture[] futureArr = vinSet.stream() - .map(vin -> CompletableFuture.runAsync(() -> list.add(queryClueDeadline(vin, groupId)), ThreadPoolUtil.getInstance().getExecutor())) - .>toArray(CompletableFuture[]::new); - try { - CompletableFuture.allOf(futureArr).join(); - } catch (Exception e) { - log.error("Failed to query clue deadline", e); - } - return list; } } diff --git a/fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/pub/PubFollowBizService.java b/fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/pub/PubFollowBizService.java index 2171f73..5f4ed3d 100644 --- a/fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/pub/PubFollowBizService.java +++ b/fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/pub/PubFollowBizService.java @@ -186,11 +186,7 @@ public class PubFollowBizService { } }, ThreadPoolUtil.getInstance().getExecutor())).>toArray(CompletableFuture[]::new); - try { - CompletableFuture.allOf(futureArr).get(); - } catch (Exception e) { - log.error("数据查询失败", e); - } + CompletableFuture.allOf(futureArr).join(); return simpleList; }