需求:前端调用后端接口,传递一个 personnelId和date ; 重点就是 getTime() 方法 ;就是 不管是什么形式的日期时间,都可以 通过 getTime() 方法 转为毫秒 形式,再转化为其他 需要的 日期时间形式
DTO :
/**
* 用于 通过 personnelId和 workDay指定某一天的日期 去查询 某一天的工时日报
*/
public class FindOneWorkHourDTO {
private String personnelId;
private String workDay;}
控制层:重点是@RequestBody 是传入一个DTO
@PostMapping("getProjectWorkHourByPersonnelIdAndDate")
public ProjectWorkHourDTO getProjectWorkHourByPersonnelIdAndDate(@RequestBody FindOneWorkHourDTO findOneWorkHourDTO){return ....}
业务层:(业务层接口这里省略不写)
总的思路范围就是 查询 第一天零点 到 第二天零点
这里写两个SimpleDateFormat的意义是 :先用 sdf : 转换前端传来的8位数字符串,再 用 fm 转为标准的 对应 数据库的字段
前提知识:jdk (date包)中的 parse 方法原型:public Date parse(String source){.....}
jdk (date包)中的 format 方法原型:public final String format (Object obj){.........}
1、sdf.parse(dateString) 将前端 字符串 格式化 ;
2、sdf.parse(dateString).getTime()) 将其转换为毫秒形式,此时整个数据的返回值是Long型,但是
3、fm.format(sdf.parse(dateString).getTime()) 将其 转为 转为 fm 格式的字符串 ,为等会儿 转化为 Date 格式 做准备
4、fm.parse(fm.format(sdf.parse(dateString).getTime())) 将上面的 转为 Date格式,
parse 返回日期型(Date) ;format:返回字符串型 ;getTime :返回 Long型 即转化为毫秒;86400000就是一天24小时的毫秒形式
@Override
public ProjectWorkHourDTO getProjectWorkHourByPersonnelIdAndDate(FindOneWorkHourDTO findOneWorkHourDTO) {
String dateString=findOneWorkHourDTO.getWorkDay();//前端传来的值是 例如:20180512
SimpleDateFormat fm=new SimpleDateFormat("yyyyMMdd HH:mm:ss");
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
try{
Date date1=fm.parse(fm.format(sdf.parse(dateString).getTime()));
Date date2=fm.parse(fm.format(sdf.parse(dateString).getTime()+86400000));
ProjectWorkHourDO projectWorkHourDO=projectWorkHourDao.findOne((root, criteriaQuery, criteriaBuilder) -> {
Path<Boolean> delete=root.get("deleted");
Path<String> personnelIdPath=root.get("personnelId");
Path<Date> datePath=root.get("workDay");
return criteriaBuilder.and(
criteriaBuilder.equal(delete,false),
criteriaBuilder.equal(personnelIdPath,findOneWorkHourDTO.getPersonnelId()),
criteriaBuilder.between(root.get("workDay"),date1,date2)
);
});
ProjectWorkHourDTO projectWorkHourDTO=projectWorkHourMapper.from(projectWorkHourDO);
return projectWorkHourDTO;
}catch (Exception e){
e.printStackTrace();
return null;
}
}