這裏以 查詢 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;
此致敬禮!!!!!