这里以 查询 keep app 用户 最近一周 每天训练时间的 例子为例
训练时间单位为:min 如图
实体类
CourseMemberDO{
private int minutes;//训练的时间
private Date createDate;//训练的日期}
时间工具类:
DateUtils1---------------------针对第一种方法
public class DateUtils {
* 获取当前周每天的开始时间 * * @param * @return */ public static List<String> appendBeginDate() { List<String> beginDateStrs = new ArrayList<>(); for (String str : getWeekdays()) { String str1 = str + " " + "00:00:00"; beginDateStrs.add(str1); } return beginDateStrs; } /** * 获取当前周每天的结束时间 * * @return */ public static List<String> appendEndDate() { List<java.lang.String> endDateStrs = new ArrayList<>(); for (java.lang.String str : getWeekdays()) { java.lang.String str1 = str + " " + "24:00:00"; endDateStrs.add(str1); } return endDateStrs; }
Dateutils2---------针对第二种方法
public class DateUtils {
// 获得本周一与当前日期相差的天数 public static int getMondayPlus() { Calendar cd = Calendar.getInstance(); int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK); if (dayOfWeek == 1) { return -6; } else { return 2 - dayOfWeek; } }
查询数据库层 你懂得 自己写很基本的;、// 获得当前周 周一 的日期
public static Date star() { int mondayPlus = getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus); Date monday = currentDate.getTime(); return monday; } // 获得当前周 周日 的日期 public static Date end() { int mondayPlus = getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 6); Date monday = currentDate.getTime(); return monday; }
实现 的 第一种方法 (每周的每天的0-24时查询数据库获取每天的训练总时间(查7次))
获取每周每天的起始时间 List<Integer> minuteList = new ArrayList<>(); List<String> beginDateStrs = DateUtils.appendBeginDate(); List<String> endDateStrs = DateUtils.appendEndDate(); 遍历获取每天对应的学习情况 for (int i = 0; i < 7; i++) { int minutes = 0; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Query query = new Query(); Criteria criteria = new Criteria(); criteria.and("memberId").is(memberInfoDO.getMemberId()); try { Date beginDate=simpleDateFormat.parse(beginDateStrs.get(i)); Date endDate=simpleDateFormat.parse(endDateStrs.get(i)); criteria.and("createDate").gte(beginDate).lte(endDate); } catch (Exception e) { e.printStackTrace(); } query.addCriteria(criteria); List<CourseMemberDO> list = mongoTemplate.find(query, CourseMemberDO.class); for (CourseMemberDO courseMemberDO : list) { minutes += courseMemberDO.getMinutes(); } minuteList.add(minutes); }
实现 的 第二种方法 (直接查出7天的数据再根据每天 整合出每天的训练总时间(查询一次数据库))
Query query=new Query(); Criteria criteria=new Criteria(); criteria.and("memberId").is(memberInfoDO.getMemberId()); criteria.and("createDate").gte(DateUtils.star()).lte(DateUtils.end()); query.addCriteria(criteria); Calendar cal = Calendar.getInstance(); List<CourseMemberDO> list =mongoTemplate.find(query, CourseMemberDO.class); Integer[] minuteList={0,0,0,0,0,0,0}; for(CourseMemberDO courseMemberDO : list){ cal.setTime(courseMemberDO.getCreateDate()); int w=cal.get(Calendar.DAY_OF_WEEK); switch (w){ case 1: minuteList[6]+=courseMemberDO.getMinutes(); break; case 2: minuteList[0]+=courseMemberDO.getMinutes(); break; case 3: minuteList[1]+=courseMemberDO.getMinutes(); break; case 4: minuteList[2]+=courseMemberDO.getMinutes(); break; case 5: minuteList[3]+=courseMemberDO.getMinutes(); break; case 6: minuteList[4]+=courseMemberDO.getMinutes(); break; case 7: minuteList[5]+=courseMemberDO.getMinutes(); break; } } apiMsgVO.setMessage(ApiMsgVO.REQUEST_SUCCESS_MESSAGE); apiMsgVO.setData(minuteList); return apiMsgVO;
此致敬礼!!!!!
实现 的 第一种方法 (每周的每天的0-24时查询数据库获取每天的训练总时间(查7次))
实现 的 第一种方法 (每周的每天的0-24时查询数据库获取每天的训练总时间(查7次))