查询数据库最近一周每天的数据的方法

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