Java 获得某个区间的时间,去统计数据并封装到对象,返回list集合并对集合分页,通过修改PageHelper分页属性值

mac2024-05-10  34

直接上代码,有空整理,时间仓促望理解。

@PostMapping("/partner/business/data/list") public ResponseDTO<PageDTO<PartnerBusinessDataBO>> getPartnerBusinessDataList( @RequestBody PageRequestDTO<PartnerBusinessDataQuery> request) throws Exception { PartnerBusinessDataQuery param = request.getParam(); if(param == null) { return RestResponseUtil.response(HttpStatus.BAD_REQUEST, this.messageService.getMessage("request.parameter.invalid"), new PageDTO<>()); } Long id = param.getPartnerId(); if(id == null || id < 0){ return RestResponseUtil.response(HttpStatus.BAD_REQUEST, this.messageService.getMessage("request.parameter.invalid"), new PageDTO<>()); } Date firstDate = null; Date secondDate = null; SimpleDateFormat format = new SimpleDateFormat(DateUtils.FORMAT_1); if(param.getStartDate() == null || param.getEndDate() == null) { firstDate = format.parse(PartnerBusinessDataEnum.START_DATE.getValue()); secondDate = format.parse(format.format(new Date())); }else { firstDate = DateUtils.toDate(param.getStartDate()); secondDate = DateUtils.toDate(param.getEndDate()); } PartnerBusinessDataUtil partnerBusinessDataUtil = new PartnerBusinessDataUtil(); int total = partnerBusinessDataUtil.longOfTwoDate(firstDate,secondDate) + 1; secondDate = partnerBusinessDataUtil.getSecondDate(secondDate, request.getPageNum(), request.getPageSize()); firstDate = partnerBusinessDataUtil.getFirstDate(firstDate, secondDate,request.getPageSize()); param.setStartDate(firstDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()); param.setEndDate(secondDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()); param.setPageSize(request.getPageSize()); List<PartnerBusinessDataBO> list = this.partnerScheduleTrackService.getPartnerBusinessDataList(param); return RestResponseUtil.ok(this.messageService.getMessage("request.success"), new PageDTO<>(new PageCountMethod().getCountNewPageInfo(total,list,request))); }

 

 

List<PartnerBusinessDataBO> getPartnerBusinessDataList(PartnerBusinessDataQuery partnerBusinessDataQuery);

 

 

@Override public List<PartnerBusinessDataBO> getPartnerBusinessDataList(PartnerBusinessDataQuery partnerBusinessDataQuery) { List<PartnerBusinessDataBO> partnerBusinessDataBOS = new ArrayList<>(partnerBusinessDataQuery.getPageSize()); LocalDate startDate = partnerBusinessDataQuery.getStartDate(); LocalDate endDate = partnerBusinessDataQuery.getEndDate(); Calendar calendar = Calendar.getInstance(); calendar.setTime(DateUtils.toDate(endDate)); while (calendar.getTime().compareTo(DateUtils.toDate(startDate)) != -1){ PartnerBusinessDataBO partnerBusinessDataBO = new PartnerBusinessDataBO(); Date time = calendar.getTime(); LocalDate localDate = time.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); partnerBusinessDataQuery.setRegTime(localDate); Integer registeredUserCount = this.partnerScheduleTrackMapper.findRegUserCount(partnerBusinessDataQuery); if(registeredUserCount == null){ registeredUserCount = 0; } partnerBusinessDataBO.setCurrentDate(localDate); partnerBusinessDataBO.setPartnerNo("NO45545"); partnerBusinessDataBO.setPartnerName("zhangsan"); partnerBusinessDataBO.setRegisteredUserCount(registeredUserCount); partnerBusinessDataBO.setApplyUserCount(1); partnerBusinessDataBO.setLoanUserCount(2); partnerBusinessDataBO.setExpireUserCount(3); partnerBusinessDataBO.setPaymentUserCount(4); partnerBusinessDataBOS.add(partnerBusinessDataBO); calendar.add(Calendar.DATE, -1); } return partnerBusinessDataBOS; }

 

 

 

package com.rocky.fintech.boss.entity.schedule; import com.fasterxml.jackson.annotation.JsonFormat; import com.rocky.fintech.boss.util.DateUtils; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.time.LocalDate; @Getter @Setter public class PartnerBusinessDataQuery implements Serializable { /** * 用户ID */ private Long userId; /** * */ private Long partnerId; /** * 用户注册时间 */ @JsonFormat(pattern = DateUtils.FORMAT_1) private LocalDate regTime; /** * 每页几条 */ private int pageSize; /** * 自然日 开始 */ @JsonFormat(pattern = DateUtils.FORMAT_1) private LocalDate startDate; /** * 自然日 结束 */ @JsonFormat(pattern = DateUtils.FORMAT_1) private LocalDate endDate; /** * 商户名称 */ private String partnerName; /** * 用户类别 最小 */ private Integer repeatsLoanCountMin; /** * 用户类别 最大 */ private Integer repeatsLoanCountMax; }

 

 

package com.rocky.fintech.boss.entity.schedule; import com.fasterxml.jackson.annotation.JsonFormat; import com.rocky.fintech.boss.util.DateUtils; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.time.LocalDate; @Getter @Setter public class PartnerBusinessDataBO implements Serializable { /** * 商户ID */ private Long partnerId; /** * 用户ID */ private Long userId; /** * 自然日 当前日期 */ @JsonFormat(pattern = DateUtils.FORMAT_1) private LocalDate currentDate; /** * 商户编号 */ private String partnerNo; /** * 商户名称 */ private String partnerName; /** * 注册用户 */ private Integer registeredUserCount; /** * 申请用户 */ private Integer applyUserCount; /** * */ private Integer loanUserCount; /** * */ private Integer expireUserCount; /** * */ private Integer paymentUserCount; }

 

 

package com.rocky.fintech.boss.entity.schedule; import com.github.pagehelper.PageInfo; import com.rocky.fintech.entity.PageRequestDTO; import java.util.List; /** * Created with IntelliJ IDEA. * * @Auther: zhangyi * @Date: 2019/10/31/11:09 * @Description: */ public class PageCountMethod { public PageInfo getCountNewPageInfo(int total, List list, PageRequestDTO request) { PageInfo realPageInfo = new PageInfo<>(list); int start = 0; int end = 0; int totalPages = 0; int totalRecord = list.size(); int pageSize = request.getPageSize(); int size = request.getPageSize(); int number = request.getPageNum(); //设置总数 realPageInfo.setTotal(total); //设置每页的显示条数 realPageInfo.setPageSize(size); //设置要显示的是第几页的数据 realPageInfo.setPageNum(number); //当前数 realPageInfo.setSize(totalRecord); //计算获取对应的要显示的数据 if (totalRecord % pageSize == 0) { totalPages = totalRecord / pageSize; } else { totalPages = totalRecord / pageSize + 1; } realPageInfo.setPages(totalPages); //初始边界值计算 if (number == 1) { start = 0; realPageInfo.setHasPreviousPage(false); realPageInfo.setPrePage(0); realPageInfo.setIsFirstPage(true); } else { start = realPageInfo.getPageSize() * (realPageInfo.getPageNum() - 1); realPageInfo.setHasPreviousPage(true); realPageInfo.setPrePage(number - 1); realPageInfo.setIsFirstPage(false); } realPageInfo.setStartRow((number - 1) * pageSize); //结束边界值计算 if ((start + realPageInfo.getPageSize() > realPageInfo.getTotal())) { end = totalRecord; realPageInfo.setHasNextPage(false); realPageInfo.setIsLastPage(true); realPageInfo.setEndRow(totalRecord); } else { end = start + realPageInfo.getPageSize(); realPageInfo.setHasNextPage(true); realPageInfo.setNextPage(number + 1); realPageInfo.setIsLastPage(false); realPageInfo.setEndRow((number) * pageSize); } if (start < end && end <= totalRecord) { realPageInfo.setList(list.subList(start, end)); } if (realPageInfo.getSize() == 0) { realPageInfo.setStartRow(0); realPageInfo.setEndRow(0); } else { realPageInfo.setStartRow(realPageInfo.getStartRow() + 1); realPageInfo.setEndRow(realPageInfo.getStartRow() - 1 + realPageInfo.getSize()); } realPageInfo.setPages(totalPages); realPageInfo.setNavigateLastPage(totalPages > number ? number + 1 : totalPages); return realPageInfo; } }

 

package com.rocky.fintech.boss.enums; import lombok.Getter; /** * Created with IntelliJ IDEA. * * @Auther: zhangyi * @Date: 2019/10/31/11:31 * @Description: */ @Getter public enum PartnerBusinessDataEnum { START_DATE("2019-10-01", "firstDate"); private final String value; private final String name; PartnerBusinessDataEnum(String value, String name) { this.value = value; this.name = name; } }

 

 

package com.rocky.fintech.util; import java.util.Calendar; import java.util.Date; /** * Created with IntelliJ IDEA. * * @Auther: zhangyi * @Date: 2019/10/30/16:43 * @Description: */ public class PartnerBusinessDataUtil { public int longOfTwoDate(Date first, Date second) throws Exception { Calendar calendar = Calendar.getInstance(); calendar.setTime(first); int cnt = 0; while (calendar.getTime().compareTo(second) != 0) { calendar.add(Calendar.DATE, 1); cnt++; } return cnt; } public Date getSecondDate(Date second, Integer pageNum, Integer pageSize) throws Exception { Calendar calendar = Calendar.getInstance(); calendar.setTime(second); if(pageNum== null || pageNum == 0) { pageNum = 1; return calendar.getTime(); } calendar.add(Calendar.DATE, -(pageNum-1)*pageSize); return calendar.getTime(); } public Date getFirstDate(Date first, Date second, Integer pageSize) throws Exception { Calendar calendar = Calendar.getInstance(); calendar.setTime(second); calendar.add(Calendar.DATE, -(pageSize-1)); if(calendar.getTime().compareTo(first) < 0) { calendar.setTime(first); return calendar.getTime(); }else { return calendar.getTime(); } } }

 

 

 

 

另外贴出之前用过的部分代码,可以作为参考,如下:

@RequestMapping("/list") public String getOverdueRecursiveList(String beginTime, String endTime, Integer page, Integer size, Model model,String channelId,String device) throws Exception { model.addAttribute("beginTime", beginTime); model.addAttribute("endTime", endTime); List<String> dates =null; if (StringUtils.isBlank(beginTime) || StringUtils.isBlank(endTime)) { LocalDate date = LocalDate.now().plusDays(-1); beginTime = date.plusDays(-29).toString(); endTime = date.toString(); dates = DateTimeUtil.getBetweenDate(beginTime, endTime); } if((beginTime!=null && beginTime!="") && (endTime!=null && endTime!="")) { dates = DateTimeUtil.getBetweenDate(beginTime, endTime); } if(dates.size()==0) { if((beginTime!=null && beginTime!="") && (endTime!=null && endTime!="")) { dates.add(beginTime); } } if(size==null || size<15) { size=15; } if(page==null || page<1) { page=1; } Collections.reverse(dates); // 倒序排列 List<String> thisDates = new ListPaging().page(dates,size,page); List<Map<String, Object>> totalDataList = new ArrayList<Map<String,Object>>(); for (int i = 0; i < thisDates.size(); i++) { String beginTimen = thisDates.get(i) + Constant.beginTimeOfDay; String endTimen = thisDates.get(i) + Constant.endTimeOfDay; // List<OrderLoan> olList = orderLoanService.queryOverdueRecursiveByDate("3","0",channelId,device,beginTimen, endTimen); // int shouldCount = olList.size(); // BigDecimal newBig = new BigDecimal(0); BigDecimal oneOdds = newBig; BigDecimal twoOdds = newBig; BigDecimal threeOdds = newBig; BigDecimal fourOdds = newBig; BigDecimal fiveOdds = newBig; BigDecimal sixOdds = newBig; BigDecimal sevenOdds = newBig; BigDecimal eightOdds = newBig; BigDecimal nineOdds = newBig; BigDecimal tenOdds = newBig; BigDecimal elevenOdds = newBig; BigDecimal twelveOdds = newBig; BigDecimal thirteenOdds = newBig; BigDecimal fourteenOdds = newBig; BigDecimal fifteenOdds = newBig; if(shouldCount>0) { // int oneDayCount = 0; int twoDaysCount = 0; int threeDaysCount = 0; int fourDaysCount = 0; int fiveDaysCount = 0; int sixDaysCount = 0; int sevenDaysCount = 0; int eightDaysCount = 0; int nineDaysCount = 0; int tenDaysCount = 0; int elevenDaysCount = 0; int twelveDaysCount = 0; int thirteenDaysCount = 0; int fourteenDaysCount = 0; int fifteenDaysCount = 0; for (int j = 0; j < olList.size(); j++) { int overdue = olList.get(j).getOverdue(); switch (overdue) { // case 1: oneDayCount++; break; case 2: twoDaysCount++; break; case 3: threeDaysCount++; break; case 4: fourDaysCount++; break; case 5: fiveDaysCount++; break; case 6: sixDaysCount++; break; case 7: sevenDaysCount++; break; case 8: eightDaysCount++; break; case 9: nineDaysCount++; break; case 10: tenDaysCount++; break; case 11: elevenDaysCount++; break; case 12: twelveDaysCount++; break; case 13: thirteenDaysCount++; break; case 14: fourteenDaysCount++; break; case 15: fifteenDaysCount++; break; default: break; } } // oneOdds = new BigDecimal(oneDayCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); // twoOdds = new BigDecimal(twoDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); threeOdds = new BigDecimal(threeDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); fourOdds = new BigDecimal(fourDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); fiveOdds = new BigDecimal(fiveDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); sixOdds = new BigDecimal(sixDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); sevenOdds = new BigDecimal(sevenDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); eightOdds = new BigDecimal(eightDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); nineOdds = new BigDecimal(nineDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); tenOdds = new BigDecimal(tenDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); elevenOdds = new BigDecimal(elevenDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); twelveOdds = new BigDecimal(twelveDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); thirteenOdds = new BigDecimal(thirteenDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); fourteenOdds = new BigDecimal(fourteenDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); fifteenOdds = new BigDecimal(fifteenDaysCount).divide(new BigDecimal(shouldCount),4, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(100)); } Map<String, Object> totalDataMap = new HashMap<String, Object>(); OrderAmountUtil oal = new OrderAmountUtil(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); int days = oal.daysBetween(sdf.parse(thisDates.get(i)), sdf.parse(sdf.format(new Date()))); if(days<0) { days = 0; } OrderApplyDTO loanCountDTO = new OrderApplyDTO(); loanCountDTO.setBeginTime(beginTimen); loanCountDTO.setEndTime(endTimen); loanCountDTO.setChannelId(channelId); loanCountDTO.setDevice(device); loanCountDTO.setIsTime("dueTime"); loanCountDTO.setLoanStatus("shouldRepay"); OrderApplyDTO overdueCountDTO = new OrderApplyDTO(); overdueCountDTO.setBeginTime(beginTimen); overdueCountDTO.setEndTime(endTimen); overdueCountDTO.setChannelId(channelId); overdueCountDTO.setDevice(device); overdueCountDTO.setIsTime("dueTime"); overdueCountDTO.setApplyStatus("3"); totalDataMap.put("lendDate", thisDates.get(i));//日期 totalDataMap.put("loanCount", this.orderLoanService.queryLoanAllParameter(loanCountDTO)); totalDataMap.put("overdueCount", this.orderLoanService.queryLoanAllParameter(overdueCountDTO)); totalDataMap.put("oneOdds", oneOdds); totalDataMap.put("twoOdds", twoOdds); totalDataMap.put("threeOdds", threeOdds); totalDataMap.put("fourOdds", fourOdds); totalDataMap.put("fiveOdds", fiveOdds); totalDataMap.put("sixOdds", sixOdds); totalDataMap.put("sevenOdds", sevenOdds); totalDataMap.put("eightOdds", eightOdds); totalDataMap.put("nineOdds", nineOdds); totalDataMap.put("tenOdds", tenOdds); totalDataMap.put("elevenOdds", elevenOdds); totalDataMap.put("twelveOdds", twelveOdds); totalDataMap.put("thirteenOdds", thirteenOdds); totalDataMap.put("fourteenOdds", fourteenOdds); totalDataMap.put("fifteenOdds", fifteenOdds); totalDataMap.put("days", days); totalDataList.add(totalDataMap); } model.addAttribute("totalDataList", totalDataList); model.addAttribute("size", this.getPageSize(size)); model.addAttribute("page", this.getPage(page)); model.addAttribute("pages", this.getTotalPage(dates.size(), size)); model.addAttribute("channels", this.operationService.getChannelList(1)); model.addAttribute("device", device); model.addAttribute("channelId", channelId); return "statistics/overdueRecursive/list"; }

 

 

package com.canary.finance.util; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Stream; public class DateTimeUtil { /** * 获取两个日期间隔的所有日期 * @param start 格式必须为'2018-01-25' * @param end 格式必须为'2018-01-25' * @return */ public static List<String> getBetweenDate(String start, String end){ List<String> list = new ArrayList<>(); LocalDate startDate = LocalDate.parse(start); LocalDate endDate = LocalDate.parse(end); long distance = ChronoUnit.DAYS.between(startDate, endDate); if (distance < 1) { return list; } Stream.iterate(startDate, d -> { return d.plusDays(1); }).limit(distance + 1).forEach(f -> { list.add(f.toString()); }); return list; } /** * 返回一天中每个小时段的开始时间和结束时间 如: (凌晨2点数据)格式: * 开始2019-03-21 01:00:00 2019-03-21 01:59:59 * @param dateTime * @return */ public static List<Map<String, Object>> getBetweenDateTime(LocalDate dateTime) { List<Map<String, Object>> totalDataList = new ArrayList<>(); DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String dateTimeStr = format.format(dateTime); int timeCount = 24; for (int i = 0; i < timeCount; i++) { Map<String, Object> totalDataMap = new HashMap<String, Object>(); if(i<10) { totalDataMap.put("beginTime", dateTimeStr+" 0"+i+":00:00"); totalDataMap.put("endTime", dateTimeStr+" 0"+i+":59:59"); totalDataList.add(totalDataMap); }else { totalDataMap.put("beginTime", dateTimeStr+" "+i+":00:00"); totalDataMap.put("endTime", dateTimeStr+" "+i+":59:59"); totalDataList.add(totalDataMap); } } return totalDataList; } /** *(仅做展示使用) 获取一天24个时间 格式:1:00-24:00 * @return */ public static String[] getTime() { String[] arrayTime = new String[24]; for (int i = 0; i <arrayTime.length; i++) { arrayTime[i]=(i+1)+":00"; } return arrayTime; } public static void main(String[] args) { List<String> list = DateTimeUtil.getBetweenDate("2019-01-14", "2019-03-15"); for(String str:list) { System.out.println(str); } } }

 

 

protected int longOfTwoDate(Date first, Date second) throws Exception { Calendar calendar = Calendar.getInstance(); calendar.setTime(first); int cnt = 0; while (calendar.getTime().compareTo(second) != 0) { calendar.add(Calendar.DATE, 1); cnt++; } return cnt; } protected Date getSecondDate(Date second, Integer page) throws Exception { Calendar calendar = Calendar.getInstance(); calendar.setTime(second); if(page== null || page == 0) { page = 1; return calendar.getTime(); } calendar.add(Calendar.DATE, -(page-1)*15); return calendar.getTime(); } protected Date getFirstDate(Date first, Date second) throws Exception { Calendar calendar = Calendar.getInstance(); calendar.setTime(second); calendar.add(Calendar.DATE, -14); if(calendar.getTime().compareTo(first) < 0) { calendar.setTime(first); return calendar.getTime(); }else { return calendar.getTime(); } }

 

 

protected int getOffset(Integer page, Integer size) { if(page == null || page == 0 ) { page = 1; } if(size == null || size == 0) { size = 15; } return (page-1)*size; } protected int getPageSize(Integer size) { if(size == null || size == 0) { size = 15; } return size; } protected int getPage(Integer page) { if(page == null || page == 0) { page = 1; } return page; } protected int getTotalPage(int total, Integer size) { if(size == null || size == 0) { size = 15; } return (int)Math.ceil((double)total / (double)size); }

 

仅做参考和对比,没有整理,用者谨慎。

 

最新回复(0)