carpark与shareInfo为一对多关系,筛选条件为shareInfo内部的startTime ,endTime ,unitprice,shareDay
为了实现carpark属性里面可以存在shareInfo对象(本身carpark有一个shareInfo的list属性,但符合界面显示,又新建了DTO对象,Entity会将特定值赋值给DTO,如下图),又符合过滤条件,并且将前端不需要的值过滤出来,写如下代码:
Dao层
public List<CarparkShareInfo> getAroundCarparkInReservation() {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<CarparkShareInfo> query = cb.createQuery(CarparkShareInfo.class);
Root<CarparkShareInfo> root = query.from(CarparkShareInfo.class);
List<Predicate> predicates = new ArrayList<Predicate>();
if (longitude != null && latitude != null) {
predicates.add(cb.between(root.get("carpark").get("carparkLocation").get("longitude"),
longitude.subtract(longitudeScope).doubleValue(), longitude.add(longitudeScope).doubleValue()));
predicates.add(cb.between(root.get("carpark").get("carparkLocation").get("latitude"),
latitude.subtract(latitudeScope).doubleValue(), latitude.add(latitudeScope).doubleValue()));
}
// 车位类型
if (carparkType != null) {
predicates.add(cb.equal(root.get("carpark").get("carparkType"), carparkType));
}
// 默认查询附近开启共享的车位
if (status == null) {
Byte[] bs = new Byte[] { 1, 2, 3 };
predicates.add(root.get("carpark").get("status").in(Arrays.asList(bs)));
} else {
predicates.add(cb.equal(root.get("carpark").get("status"), status));
}
// 预计开始时间
if (this.startTime != null) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
String startTime = sdf.format(this.startTime);
predicates.add(cb.lessThanOrEqualTo(root.get("startTime"), startTime));
}
// 当前天是否在共享周
if (this.startTime != null) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(this.startTime);
int weekDay = calendar.get(Calendar.DAY_OF_WEEK);
predicates.add(cb.like(root.get("shareDay"), "%" + weekDay + "%"));
}
// 预计结束时间
if (this.endTime != null) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
String endTime = sdf.format(this.endTime);
predicates.add(cb.greaterThanOrEqualTo(root.get("endTime"), endTime));
}
if (this.availablePrice != null) {
predicates.add(cb.lessThanOrEqualTo(root.get("unitprice"), availablePrice.toString()));
}
query.where(predicates.toArray(new Predicate[predicates.size()]));
List<CarparkShareInfo> list = em.createQuery(query).getResultList();
return list;
}

controller层
// 查询
List<CarparkShareInfo> list = carparkFacade.findCarparkInReservation(longitude, latitude, carparkType,
startTime, endTime, availablePrice);
// 过滤
List<CarparkDTO> dataList = new ArrayList<>();
for (CarparkShareInfo carparkShareInfo : list) {
CarparkDTO dto = new CarparkDTO();
CarparkShareInfoDTO sdto = new CarparkShareInfoDTO();
// 使用spring框架提供的BeanUtils赋值,
BeanUtils.copyProperties(carparkShareInfo.getCarpark(), dto);
BeanUtils.copyProperties(carparkShareInfo, sdto);
dto.setCarparkShareInfoDTO(sdto);
dataList.add(dto);
}
return BabiDataResult.success("carparkList", dataList);
网友评论