diff --git a/src/main/java/com/xkrs/straw/utils/FirePointQueryManager.java b/src/main/java/com/xkrs/straw/utils/FirePointQueryManager.java index 725ea8c..d1fcd2e 100644 --- a/src/main/java/com/xkrs/straw/utils/FirePointQueryManager.java +++ b/src/main/java/com/xkrs/straw/utils/FirePointQueryManager.java @@ -108,56 +108,99 @@ public class FirePointQueryManager { } final String finalMNoRedundantUserCode = mNoRedundantUserCode; - //查询未审核的普通火点 - Specification specificationOrdinary = (root, criteriaQuery, criteriaBuilder) -> { - List predicateList = new ArrayList<>(); - //添加区划编码的过滤 - predicateList.add(criteriaBuilder.like(root.get("townCode").as(String.class), finalMNoRedundantUserCode + "%")); - for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItem : mVipTimeRangeItemList) { - String userStartTime = vipTimeRangeItem.getStartTime(); - String userEndTime = vipTimeRangeItem.getEndTime(); - //早于(不包含)VIP开始时间 - Predicate beforeStartTimePredicate = criteriaBuilder.lessThan(root.get("satelliteTime").as(String.class), userStartTime); - //晚于(不包含)VIP结束时间 - Predicate afterEndTimePredicate = criteriaBuilder.greaterThan(root.get("satelliteTime").as(String.class), userEndTime); - predicateList.add(criteriaBuilder.or(beforeStartTimePredicate, afterEndTimePredicate)); + + final String commonSql = "SELECT t.id AS id, t.fire_code AS fireCode, t.county_code AS countyCode, t.county_name AS countyName, t.satellite_time AS satelliteTime, t.longitude AS longitude, t.latitude AS latitude, t.satellite_type AS satelliteType, t.land_type AS landType, t.confidence AS confidence, t.fire_image AS fireImage, t.satellite_image AS satelliteImage, t.town_code AS townCode, t.town_name AS townName, t.add_time AS addTime, t.fire_point_address AS firePointAddress, t.remark AS remark"; + + StringBuilder ordinaryBuilder = new StringBuilder(commonSql); + ordinaryBuilder.append(" FROM fire_point_ordinary AS t"); + ordinaryBuilder.append(" WHERE (t.town_code LIKE '" + finalMNoRedundantUserCode + "%')"); + ordinaryBuilder.append(" AND ("); + for (int i = 0; i < mVipTimeRangeItemList.size(); i++) { + VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItem = mVipTimeRangeItemList.get(i); + String userStartTime = vipTimeRangeItem.getStartTime(); + String userEndTime = vipTimeRangeItem.getEndTime(); + //早于(不包含)VIP开始时间,或者晚于(不包含)VIP结束时间 + if (i > 0) { + ordinaryBuilder.append(" AND "); } - return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()])); - }; - //未审核的普通火点列表 - List firePointOrdinaryList = firePointOrdinaryDao.findAll(specificationOrdinary, Sort.by(Sort.Direction.DESC, "satelliteTime")); + ordinaryBuilder.append("(t.satellite_time<'" + userStartTime + "' OR t.satellite_time>'" + userEndTime + "')"); + } + ordinaryBuilder.append(")"); + ordinaryBuilder.append(" ORDER BY t.satellite_time DESC"); + String ordinarySql = ordinaryBuilder.toString(); + System.out.println("ordinarySql = " + ordinarySql); - - //查询审核通过的精准火点 - Specification specificationPrecise = (root, criteriaQuery, criteriaBuilder) -> { - List predicateList = new ArrayList<>(); - //添加区划编码的过滤 - predicateList.add(criteriaBuilder.like(root.get("townCode").as(String.class), finalMNoRedundantUserCode + "%")); - for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItem : mVipTimeRangeItemList) { - String userStartTime = vipTimeRangeItem.getStartTime(); - String userEndTime = vipTimeRangeItem.getEndTime(); - //晚于(包含)VIP开始时间 - Predicate beforeStartTimePredicate = criteriaBuilder.greaterThanOrEqualTo(root.get("satelliteTime").as(String.class), userStartTime); - //早于(包含)VIP结束时间 - Predicate afterEndTimePredicate = criteriaBuilder.lessThanOrEqualTo(root.get("satelliteTime").as(String.class), userEndTime); - predicateList.add(criteriaBuilder.and(beforeStartTimePredicate, afterEndTimePredicate)); + StringBuilder preciseBuilder = new StringBuilder(commonSql); + preciseBuilder.append(" FROM fire_point_precise AS t"); + preciseBuilder.append(" WHERE (t.town_code LIKE '" + finalMNoRedundantUserCode + "%')"); + preciseBuilder.append(" AND ("); + for (int i = 0; i < mVipTimeRangeItemList.size(); i++) { + VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItem = mVipTimeRangeItemList.get(i); + String userStartTime = vipTimeRangeItem.getStartTime(); + String userEndTime = vipTimeRangeItem.getEndTime(); + //晚于(包含)VIP开始时间,并且早于(包含)VIP结束时间 + if (i > 0) { + preciseBuilder.append(" OR "); } - return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()])); - }; - //审核通过的精准火点列表 - List firePointPreciseList = firePointPreciseDao.findAll(specificationPrecise, Sort.by(Sort.Direction.DESC, "satelliteTime")); + preciseBuilder.append("(t.satellite_time>='" + userStartTime + "' AND t.satellite_time<='" + userEndTime + "')"); + } + preciseBuilder.append(")"); + preciseBuilder.append(" ORDER BY t.satellite_time DESC"); + String preciseSql = preciseBuilder.toString(); + System.out.println("preciseSql = " + preciseSql); - //将两种数据来源的火点合并到一起 - List resultList = new ArrayList<>(); - for (FirePointOrdinaryEntity firePointOrdinaryEntity : firePointOrdinaryList) { - resultList.add(FirePointConvertUtils.convert(firePointOrdinaryEntity)); - } - for (FirePointPreciseEntity firePointPreciseEntity : firePointPreciseList) { - resultList.add(FirePointConvertUtils.convert(firePointPreciseEntity)); - } - //对合并后的结果进行排序 - List sortedResultList = resultList.stream().sorted(Comparator.comparing(AllFirePointVo::getSatelliteTime)).collect(Collectors.toList()); - return new FirePointQueryResultBean(true, "", sortedResultList); + return new FirePointQueryResultBean(true, "", null); + +// //查询未审核的普通火点 +// Specification specificationOrdinary = (root, criteriaQuery, criteriaBuilder) -> { +// List predicateList = new ArrayList<>(); +// //添加区划编码的过滤 +// predicateList.add(criteriaBuilder.like(root.get("townCode").as(String.class), finalMNoRedundantUserCode + "%")); +// for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItem : mVipTimeRangeItemList) { +// String userStartTime = vipTimeRangeItem.getStartTime(); +// String userEndTime = vipTimeRangeItem.getEndTime(); +// //早于(不包含)VIP开始时间 +// Predicate beforeStartTimePredicate = criteriaBuilder.lessThan(root.get("satelliteTime").as(String.class), userStartTime); +// //晚于(不包含)VIP结束时间 +// Predicate afterEndTimePredicate = criteriaBuilder.greaterThan(root.get("satelliteTime").as(String.class), userEndTime); +// predicateList.add(criteriaBuilder.or(beforeStartTimePredicate, afterEndTimePredicate)); +// } +// return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()])); +// }; +// //未审核的普通火点列表 +// List firePointOrdinaryList = firePointOrdinaryDao.findAll(specificationOrdinary, Sort.by(Sort.Direction.DESC, "satelliteTime")); +// +// +// //查询审核通过的精准火点 +// Specification specificationPrecise = (root, criteriaQuery, criteriaBuilder) -> { +// List predicateList = new ArrayList<>(); +// //添加区划编码的过滤 +// predicateList.add(criteriaBuilder.like(root.get("townCode").as(String.class), finalMNoRedundantUserCode + "%")); +// for (VipTimeRangeBean.VipTimeRangeItemBean vipTimeRangeItem : mVipTimeRangeItemList) { +// String userStartTime = vipTimeRangeItem.getStartTime(); +// String userEndTime = vipTimeRangeItem.getEndTime(); +// //晚于(包含)VIP开始时间 +// Predicate beforeStartTimePredicate = criteriaBuilder.greaterThanOrEqualTo(root.get("satelliteTime").as(String.class), userStartTime); +// //早于(包含)VIP结束时间 +// Predicate afterEndTimePredicate = criteriaBuilder.lessThanOrEqualTo(root.get("satelliteTime").as(String.class), userEndTime); +// predicateList.add(criteriaBuilder.and(beforeStartTimePredicate, afterEndTimePredicate)); +// } +// return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()])); +// }; +// //审核通过的精准火点列表 +// List firePointPreciseList = firePointPreciseDao.findAll(specificationPrecise, Sort.by(Sort.Direction.DESC, "satelliteTime")); +// +// //将两种数据来源的火点合并到一起 +// List resultList = new ArrayList<>(); +// for (FirePointOrdinaryEntity firePointOrdinaryEntity : firePointOrdinaryList) { +// resultList.add(FirePointConvertUtils.convert(firePointOrdinaryEntity)); +// } +// for (FirePointPreciseEntity firePointPreciseEntity : firePointPreciseList) { +// resultList.add(FirePointConvertUtils.convert(firePointPreciseEntity)); +// } +// //对合并后的结果进行排序 +// List sortedResultList = resultList.stream().sorted(Comparator.comparing(AllFirePointVo::getSatelliteTime)).collect(Collectors.toList()); +// return new FirePointQueryResultBean(true, "", sortedResultList); } }