查詢數據庫最近一週每天的數據的方法

這裏以 查詢 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次))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章