Commit 666de3c5946595613d6cfe38e1c7ddad44ec8a48

Authored by 张志伟
1 parent da5641c7

feature(*): 优化查询线索到期时间的api接口

- 优化查询线索到期时间的api接口
fw-valhalla-common/src/main/java/cn/fw/valhalla/common/utils/ThreadPoolUtil.java
@@ -22,7 +22,7 @@ public class ThreadPoolUtil { @@ -22,7 +22,7 @@ public class ThreadPoolUtil {
22 private ThreadPoolUtil() { 22 private ThreadPoolUtil() {
23 this.executor = ExecutorBuilder.create() 23 this.executor = ExecutorBuilder.create()
24 .setCorePoolSize(20) 24 .setCorePoolSize(20)
25 - .setMaxPoolSize(500) 25 + .setMaxPoolSize(200)
26 .setThreadFactory(new ThreadFactoryBuilder().setNameFormat("valhalla-custom-%d").build()) 26 .setThreadFactory(new ThreadFactoryBuilder().setNameFormat("valhalla-custom-%d").build())
27 .setAllowCoreThreadTimeOut(true) 27 .setAllowCoreThreadTimeOut(true)
28 .setWorkQueue(new LinkedBlockingQueue<>(4096)) 28 .setWorkQueue(new LinkedBlockingQueue<>(4096))
fw-valhalla-sdk/src/main/java/cn/fw/valhalla/sdk/api/ValhallaGeneralApiService.java
1 package cn.fw.valhalla.sdk.api; 1 package cn.fw.valhalla.sdk.api;
2 2
3 import cn.fw.data.base.domain.common.Message; 3 import cn.fw.data.base.domain.common.Message;
  4 +import cn.fw.valhalla.sdk.param.ClueDeadlineParams;
4 import cn.fw.valhalla.sdk.param.CustomerQueryReq; 5 import cn.fw.valhalla.sdk.param.CustomerQueryReq;
5 import cn.fw.valhalla.sdk.param.ReachLogReq; 6 import cn.fw.valhalla.sdk.param.ReachLogReq;
6 import cn.fw.valhalla.sdk.result.AccidentFollowerResult; 7 import cn.fw.valhalla.sdk.result.AccidentFollowerResult;
@@ -54,12 +55,11 @@ public interface ValhallaGeneralApiService { @@ -54,12 +55,11 @@ public interface ValhallaGeneralApiService {
54 /** 55 /**
55 * 查询车辆最短的一个跟进的截止日期(不包含事故车) 56 * 查询车辆最短的一个跟进的截止日期(不包含事故车)
56 * 57 *
57 - * @param vinList maxLength 1000  
58 - * @param groupId 58 + * @param params
59 * @return 59 * @return
60 */ 60 */
61 - @GetMapping("/query/customer/clue/batch/deadline")  
62 - Message<List<CustomerClueDeadline>> queryClueDeadlineBatch(@RequestParam("vinList") List<String> vinList, @RequestParam("groupId") Long groupId); 61 + @PostMapping("/query/customer/clue/batch/deadline")
  62 + Message<List<CustomerClueDeadline>> queryClueDeadlineBatch(@Valid @RequestBody ClueDeadlineParams params);
63 63
64 /** 64 /**
65 * 根据车牌号查询事故车跟进人员 65 * 根据车牌号查询事故车跟进人员
fw-valhalla-sdk/src/main/java/cn/fw/valhalla/sdk/param/ClueDeadlineParams.java 0 → 100644
  1 +package cn.fw.valhalla.sdk.param;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import javax.validation.constraints.NotEmpty;
  6 +import javax.validation.constraints.NotNull;
  7 +import javax.validation.constraints.Size;
  8 +import java.util.Collections;
  9 +import java.util.List;
  10 +
  11 +/**
  12 + * 查询线索截止日期参数
  13 + *
  14 + * @author : kurisu
  15 + * @version : 2.0
  16 + * @className : ClueDeadlineParams
  17 + * @description : 查询线索截止日期参数
  18 + * @date : 2023-04-28 16:40
  19 + */
  20 +@Data
  21 +public class ClueDeadlineParams {
  22 + @NotNull(message = "集团id不能为空")
  23 + private Long groupId;
  24 + @NotEmpty(message = "vin不能为空")
  25 + @Size(min = 1, max = 1000, message = "最大支持一次性查询1000条数据")
  26 + private List<String> vinList;
  27 +
  28 + public void setVinList(final List<String> vinList) {
  29 + this.vinList = vinList;
  30 + }
  31 +
  32 + public void setVin(final String vin) {
  33 + this.vinList = Collections.singletonList(vin);
  34 + }
  35 +}
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; @@ -5,6 +5,7 @@ import cn.fw.data.base.domain.common.Message;
5 import cn.fw.valhalla.domain.db.follow.ClueTask; 5 import cn.fw.valhalla.domain.db.follow.ClueTask;
6 import cn.fw.valhalla.domain.dto.CustomerDetailDto; 6 import cn.fw.valhalla.domain.dto.CustomerDetailDto;
7 import cn.fw.valhalla.sdk.api.ValhallaGeneralApiService; 7 import cn.fw.valhalla.sdk.api.ValhallaGeneralApiService;
  8 +import cn.fw.valhalla.sdk.param.ClueDeadlineParams;
8 import cn.fw.valhalla.sdk.param.CustomerQueryReq; 9 import cn.fw.valhalla.sdk.param.CustomerQueryReq;
9 import cn.fw.valhalla.sdk.param.ReachLogReq; 10 import cn.fw.valhalla.sdk.param.ReachLogReq;
10 import cn.fw.valhalla.sdk.result.AccidentFollowerResult; 11 import cn.fw.valhalla.sdk.result.AccidentFollowerResult;
@@ -97,17 +98,14 @@ public class ValhallaGeneralApiServiceImpl implements ValhallaGeneralApiService @@ -97,17 +98,14 @@ public class ValhallaGeneralApiServiceImpl implements ValhallaGeneralApiService
97 /** 98 /**
98 * 查询车辆最短的一个跟进的截止日期(不包含事故车) 99 * 查询车辆最短的一个跟进的截止日期(不包含事故车)
99 * 100 *
100 - * @param vinList 101 + * @param params
101 * @return 102 * @return
102 */ 103 */
103 - @GetMapping("/query/customer/clue/batch/deadline") 104 + @PostMapping("/query/customer/clue/batch/deadline")
104 @Override 105 @Override
105 @ControllerMethod("查询车辆最短的一个跟进的截止日期[批量]") 106 @ControllerMethod("查询车辆最短的一个跟进的截止日期[批量]")
106 - public Message<List<CustomerClueDeadline>> queryClueDeadlineBatch(@RequestParam("vinList") final List<String> vinList, @RequestParam("groupId") final Long groupId) {  
107 - BV.isNotEmpty(vinList, () -> "车辆vin不能为空");  
108 - int size = vinList.size();  
109 - BV.isTrue(size <= 1000, () -> "已经超过可查询的最大查询数量[1000]");  
110 - return success(clueApiBizService.queryClueDeadlineBatch(vinList, groupId)); 107 + public Message<List<CustomerClueDeadline>> queryClueDeadlineBatch(@Valid @RequestBody ClueDeadlineParams params) {
  108 + return success(clueApiBizService.queryClueDeadlineBatch(params.getVinList(), params.getGroupId()));
111 } 109 }
112 110
113 111
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/follow/ClueApiBizService.java
@@ -51,6 +51,40 @@ public class ClueApiBizService { @@ -51,6 +51,40 @@ public class ClueApiBizService {
51 public CustomerClueDeadline queryClueDeadline(final String vin, final Long groupId) { 51 public CustomerClueDeadline queryClueDeadline(final String vin, final Long groupId) {
52 final CustomerClueDeadline customerClueDeadline = new CustomerClueDeadline(); 52 final CustomerClueDeadline customerClueDeadline = new CustomerClueDeadline();
53 customerClueDeadline.setVin(vin); 53 customerClueDeadline.setVin(vin);
  54 + fillClueDeadline(customerClueDeadline, groupId);
  55 + return customerClueDeadline;
  56 + }
  57 +
  58 + /**
  59 + * 批量查询档案最快到期线索的截止时间
  60 + *
  61 + * @param vinList
  62 + * @param groupId
  63 + * @return
  64 + */
  65 + public List<CustomerClueDeadline> queryClueDeadlineBatch(final List<String> vinList, final Long groupId) {
  66 + HashSet<String> vinSet = new HashSet<>();
  67 + for (String vin : vinList) {
  68 + if (StringUtils.isValid(vin)) {
  69 + vinSet.add(vin);
  70 + }
  71 + }
  72 + final List<CustomerClueDeadline> list = new ArrayList<>(vinSet.size());
  73 + for (String vin : vinSet) {
  74 + CustomerClueDeadline clue = new CustomerClueDeadline();
  75 + clue.setVin(vin);
  76 + list.add(clue);
  77 + }
  78 + CompletableFuture<Void>[] futureArr = list.stream()
  79 + .map(r -> CompletableFuture.runAsync(() -> fillClueDeadline(r, groupId), ThreadPoolUtil.getInstance().getExecutor()))
  80 + .<CompletableFuture<Void>>toArray(CompletableFuture[]::new);
  81 + CompletableFuture.allOf(futureArr).join();
  82 + return list;
  83 + }
  84 +
  85 + private void fillClueDeadline(CustomerClueDeadline customerClueDeadline, Long groupId) {
  86 + String vin = customerClueDeadline.getVin();
  87 + customerClueDeadline.setVin(vin);
54 SettingVO bySettingType = generalSetting.getBySettingType(SettingTypeEnum.EFFECTIVE_TIME, groupId, generalSetting.COMMON_BRAND_ID); 88 SettingVO bySettingType = generalSetting.getBySettingType(SettingTypeEnum.EFFECTIVE_TIME, groupId, generalSetting.COMMON_BRAND_ID);
55 int hours = Optional.ofNullable(bySettingType).map(SettingVO::getDetailValue).orElse(36); 89 int hours = Optional.ofNullable(bySettingType).map(SettingVO::getDetailValue).orElse(36);
56 Duration duration = Duration.ofHours(hours); 90 Duration duration = Duration.ofHours(hours);
@@ -87,32 +121,5 @@ public class ClueApiBizService { @@ -87,32 +121,5 @@ public class ClueApiBizService {
87 if (Objects.nonNull(deadline)) { 121 if (Objects.nonNull(deadline)) {
88 customerClueDeadline.setDeadline(DateUtil.localDateTime2Date(deadline)); 122 customerClueDeadline.setDeadline(DateUtil.localDateTime2Date(deadline));
89 } 123 }
90 - return customerClueDeadline;  
91 - }  
92 -  
93 - /**  
94 - * 批量查询档案最快到期线索的截止时间  
95 - *  
96 - * @param vinList  
97 - * @param groupId  
98 - * @return  
99 - */  
100 - public List<CustomerClueDeadline> queryClueDeadlineBatch(final List<String> vinList, final Long groupId) {  
101 - HashSet<String> vinSet = new HashSet<>();  
102 - for (String vin : vinList) {  
103 - if (StringUtils.isValid(vin)) {  
104 - vinSet.add(vin);  
105 - }  
106 - }  
107 - final List<CustomerClueDeadline> list = new ArrayList<>();  
108 - CompletableFuture<Void>[] futureArr = vinSet.stream()  
109 - .map(vin -> CompletableFuture.runAsync(() -> list.add(queryClueDeadline(vin, groupId)), ThreadPoolUtil.getInstance().getExecutor()))  
110 - .<CompletableFuture<Void>>toArray(CompletableFuture[]::new);  
111 - try {  
112 - CompletableFuture.allOf(futureArr).join();  
113 - } catch (Exception e) {  
114 - log.error("Failed to query clue deadline", e);  
115 - }  
116 - return list;  
117 } 124 }
118 } 125 }
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/bus/pub/PubFollowBizService.java
@@ -186,11 +186,7 @@ public class PubFollowBizService { @@ -186,11 +186,7 @@ public class PubFollowBizService {
186 } 186 }
187 }, ThreadPoolUtil.getInstance().getExecutor())).<CompletableFuture<Void>>toArray(CompletableFuture[]::new); 187 }, ThreadPoolUtil.getInstance().getExecutor())).<CompletableFuture<Void>>toArray(CompletableFuture[]::new);
188 188
189 - try {  
190 - CompletableFuture.allOf(futureArr).get();  
191 - } catch (Exception e) {  
192 - log.error("数据查询失败", e);  
193 - } 189 + CompletableFuture.allOf(futureArr).join();
194 return simpleList; 190 return simpleList;
195 } 191 }
196 192