@GetMapping("getOauthTrackCount")
public BaseResponse<TrackData> getOauthTrackCount( @RequestParam(value = "year") Integer year,
@RequestParam(value = "month") Integer month) throws InterruptedException, ExecutionException {
Future<Map<String,Long>> loginFuture = handle.asyncOauthTrack(TrackLogType.LOGIN,year,month);
Future<Map<String,Long>> registrationFuture = handle.asyncOauthTrack(TrackLogType.REGISTRATION,year,month);
Future<Map<String,Long>> restPasswordFuture = handle.asyncOauthTrack(TrackLogType.REST_PASSWORD,year,month);
Future<Map<String,Long>> joinLoyaltyFuture = handle.asyncOauthTrack(TrackLogType.JOIN_LOYALTY,year,month);
while (!loginFuture.isDone() || !registrationFuture.isDone() || ! restPasswordFuture.isDone() || !joinLoyaltyFuture.isDone()){
Thread.sleep(50);
}
TrackData trackData = new TrackData();
trackData.setTrackLoginData(loginFuture.get());
trackData.setTrackRegistrationData(registrationFuture.get());
trackData.setTrackRestPasswordData(restPasswordFuture.get());
trackData.setTrackJoinLoyalty(joinLoyaltyFuture.get());
BaseResponse<TrackData> baseResponse = new BaseResponse<>();
baseResponse.setValue(trackData);
return baseResponse;
}
@Async
@Override
public Future<Map<String,Long>> asyncOauthTrack(Integer type, Integer year, Integer month) {
Map<String, Long> monthEveryDays = DateUtils.getMonthEveryDays(year, month);
List<Map<String,Object>> trackDataList = repository.getOauthTrackMap(type,year,month);
for (Map<String,Object> map : trackDataList) {
monthEveryDays.put(map.get("trackDate").toString(),Long.valueOf(map.get("trackCount").toString()));
}
return new AsyncResult<>(monthEveryDays);
}