本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1.只查询N天之内的数据,传入参数startTime、endTime,如果不传入endTime默认为当前时间
2.实现方式
public static boolean lessThanNDays(Date end, Date begin, long diffDay) {
boolean flag = false;
long diff = end.getTime() - begin.getTime();//这样得到的差值是微秒级别
Calendar currentTimes = dataToCalendar(end);//当前系统时间转Calendar类型
Calendar firstTimes = dataToCalendar(begin);//查询的数据时间转Calendar类型
int year = currentTimes.get(Calendar.YEAR) - firstTimes.get(Calendar.YEAR);//获取年
if (year > 0) {
return flag;
}
int month = currentTimes.get(Calendar.MONTH) - firstTimes.get(Calendar.MONTH);
if (month > 0) {
return flag;
}
long days = diff / (1000 * 60 * 60 * 24);
if (days == diffDay) {
long hours = (diff - days * (1000 * 60 * 60 * 24)) / (1000 * 60 * 60); //获取时
if (hours > 0) {
return flag;
}
long minutes = (diff - days * (1000 * 60 * 60 * 24) - hours * (1000 * 60 * 60)) / (1000 * 60); //获取分钟
if (minutes > 0) {
return flag;
}
long s = (diff / 1000 - days * 24 * 60 * 60 - hours * 60 * 60 - minutes * 60);//获取秒
if (s > 0) {
return flag;
}
} else if (days < diffDay) {
return !flag;
}
return flag;
}
public static Calendar dataToCalendar(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
3.通过mock调用
@Test
public void fees() throws Exception {
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/user_fee/contractUIdDetail/list")
.param("beginTime", "2022-07-09 18:43:00")
.param("endTime", "2022-07-11 18:42:00")
.param("contractUIds", "")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
)
.andExpect(MockMvcResultMatchers.status().isOk()).andReturn();
int status = mvcResult.getResponse().getStatus();
System.out.println(status);
MockHttpServletResponse response = mvcResult.getResponse();
// 这里需要进行编码格式为utf-8,否则可能会出现乱码
String result = response.getContentAsString(Charset.forName("utf-8"));
System.out.println(result);
}
4. 主要实现逻辑
@GetMapping("/user_fee/contractUIdDetail/list")
Result<List<UserExchangeFee>> getUserFee(@RequestParam("beginTime") String beginTime,@RequestParam(value = "endTime",required = false) String endTime, @RequestParam(value = "contractUIds") List<Long> contractUIds) {
// 数据不能大于100
int size = contractUIds.size();
if (size>100) {
return Result.getFailedResult(InternalApiConstants.TRANS_PROCESSING_CODE, "contractUIds's size must less than or equal 100");
}
if (StringUtils.isBlank(beginTime)) {
return Result.getFailedResult(InternalApiConstants.TRANS_PROCESSING_CODE, "beginTime can not be null");
}
Date end = null;
String pattern = "yyyy-MM-dd HH:mm:ss";
if (StringUtils.isBlank(endTime)) {
end = new Date();
}else {
end = DateUtils.parseDate(endTime,pattern);
}
Date begin = DateUtils.parseDate(beginTime,pattern);
// 判断end与start的相差天数 不能超过两天
boolean days = lessThanNDays(begin, end,2L);
if (!days) {
return Result.getFailedResult(InternalApiConstants.TRANS_PROCESSING_CODE, "The time difference cannot exceed 2 days");
}
return Result.getSuccessResult(transList(contractStatisticClient.getUserFeeList(begin, end, contractUIds)));
}