From 8eb571336e445b67b42bfe68784b53a2cc542fb9 Mon Sep 17 00:00:00 2001 From: XinYi Song <2037158277@qq.com> Date: Mon, 14 Feb 2022 11:59:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=BC=96=E5=8F=B7=E5=92=8C=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=AE=B5=E6=9F=A5=E8=AF=A2=E7=81=AB=E6=83=85=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xkrs/controller/FireController.java | 21 ++++++++ .../xkrs/controller/WeatherController.java | 2 +- src/main/java/com/xkrs/dao/FireDao.java | 3 +- .../java/com/xkrs/service/FireService.java | 11 ++++ .../com/xkrs/service/impl/FireServerImpl.java | 21 ++++++++ src/main/java/com/xkrs/util/Query.java | 53 +++++++++++++++++++ 6 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/xkrs/util/Query.java diff --git a/src/main/java/com/xkrs/controller/FireController.java b/src/main/java/com/xkrs/controller/FireController.java index 897e6a3..cf25e72 100644 --- a/src/main/java/com/xkrs/controller/FireController.java +++ b/src/main/java/com/xkrs/controller/FireController.java @@ -1,11 +1,20 @@ package com.xkrs.controller; +import com.xkrs.common.encapsulation.PromptMessageEnum; +import com.xkrs.model.entity.Fire; import com.xkrs.service.FireService; +import com.xkrs.util.Query; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.List; +import java.util.Locale; + +import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject; /** * @Author: XinYi Song @@ -26,4 +35,16 @@ public class FireController { public String getFireInformation(@RequestParam("code") String code){ return fireService.getFireInformation(code); } + + /** + * 根据设备编码和时间段查询火情信息 + * @param code + * @param startTime + * @param endTime + * @return + */ + @GetMapping("/selectFireBetweenTime") + public String selectFireBetweenTime(@RequestParam("code") String code, @RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime){ + return fireService.selectFireBetweenTime(code,startTime,endTime); + } } diff --git a/src/main/java/com/xkrs/controller/WeatherController.java b/src/main/java/com/xkrs/controller/WeatherController.java index 922e98d..fc4fb3a 100644 --- a/src/main/java/com/xkrs/controller/WeatherController.java +++ b/src/main/java/com/xkrs/controller/WeatherController.java @@ -34,7 +34,7 @@ public class WeatherController { public String getWeatherByTime(@RequestParam("weatherTime") String weatherTime){ Weather byWeatherTime = weatherDao.findByWeatherTime(weatherTime); if(byWeatherTime == null){ - return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"暂时还没有该天的天气状况!",locale); + return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"暂时还没有该天的天气状况!",locale); } return outputEncapsulationObject(PromptMessageEnum.SUCCESS,byWeatherTime,locale); } diff --git a/src/main/java/com/xkrs/dao/FireDao.java b/src/main/java/com/xkrs/dao/FireDao.java index 439f5a9..6fb4229 100644 --- a/src/main/java/com/xkrs/dao/FireDao.java +++ b/src/main/java/com/xkrs/dao/FireDao.java @@ -2,6 +2,7 @@ package com.xkrs.dao; import com.xkrs.model.entity.Fire; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Component; @@ -13,7 +14,7 @@ import java.util.List; * @Date: 2022/2/8 17:12 */ @Component -public interface FireDao extends JpaRepository { +public interface FireDao extends JpaRepository, JpaSpecificationExecutor { /** * 根据报警编码查询火情信息 diff --git a/src/main/java/com/xkrs/service/FireService.java b/src/main/java/com/xkrs/service/FireService.java index 968695a..ef653cd 100644 --- a/src/main/java/com/xkrs/service/FireService.java +++ b/src/main/java/com/xkrs/service/FireService.java @@ -1,5 +1,7 @@ package com.xkrs.service; +import org.springframework.web.bind.annotation.RequestParam; + /** * @Author: XinYi Song * @Date: 2022/2/11 8:51 @@ -12,4 +14,13 @@ public interface FireService { * @return */ String getFireInformation(String code); + + /** + * 根据设备编码和时间段查询火情信息 + * @param code + * @param startTime + * @param endTime + * @return + */ + String selectFireBetweenTime(String code, String startTime, String endTime); } diff --git a/src/main/java/com/xkrs/service/impl/FireServerImpl.java b/src/main/java/com/xkrs/service/impl/FireServerImpl.java index 3ed3e7d..531e2b1 100644 --- a/src/main/java/com/xkrs/service/impl/FireServerImpl.java +++ b/src/main/java/com/xkrs/service/impl/FireServerImpl.java @@ -4,6 +4,7 @@ import com.xkrs.common.encapsulation.PromptMessageEnum; import com.xkrs.dao.FireDao; import com.xkrs.model.entity.Fire; import com.xkrs.service.FireService; +import com.xkrs.util.Query; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.Cacheable; import org.springframework.context.i18n.LocaleContextHolder; @@ -26,6 +27,9 @@ public class FireServerImpl implements FireService { @Resource private FireDao fireDao; + @Resource + private Query query; + Locale locale = LocaleContextHolder.getLocale(); @@ -43,4 +47,21 @@ public class FireServerImpl implements FireService { } return outputEncapsulationObject(PromptMessageEnum.SUCCESS,byDeviceCode,locale); } + + /** + * 根据设备编码和时间段查询火情信息 + * @param code + * @param startTime + * @param endTime + * @return + */ + @Cacheable(keyGenerator = "keyGenerator",unless="#result == null") + @Override + public String selectFireBetweenTime(String code, String startTime, String endTime) { + List fires = query.selectFireBetweenTime(code, startTime, endTime); + if(fires == null || fires.size() == 0){ + return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"暂时还没有该设备编号或时间段内的火情!",locale); + } + return outputEncapsulationObject(PromptMessageEnum.SUCCESS,fires,locale); + } } diff --git a/src/main/java/com/xkrs/util/Query.java b/src/main/java/com/xkrs/util/Query.java new file mode 100644 index 0000000..5525414 --- /dev/null +++ b/src/main/java/com/xkrs/util/Query.java @@ -0,0 +1,53 @@ +package com.xkrs.util; + +import com.xkrs.dao.FireDao; +import com.xkrs.dao.WeatherDao; +import com.xkrs.model.entity.Fire; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: XinYi Song + * @Date: 2022/2/14 11:29 + */ +@Component +public class Query { + + @Resource + private FireDao fireDao; + + /** + * 根据设备编号和时间段动态查询报警信息 + * @param startTime + * @param endTime + * @return + */ + public List selectFireBetweenTime(String code, String startTime, String endTime) { + Specification specification = new Specification() { + @Override + public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) { + List list = new ArrayList<>(); + if (code != null && !"".equals(code)) { + list.add(criteriaBuilder.equal(root.get("deviceCode").as(String.class), code)); + } + if(startTime != null && !"".equals(startTime)){ + list.add(criteriaBuilder.greaterThanOrEqualTo(root.get("alarmDate").as(String.class), startTime)); + } + if(endTime != null && !"".equals(endTime)){ + list.add(criteriaBuilder.lessThanOrEqualTo(root.get("alarmDate").as(String.class), endTime)); + } + Predicate[] predicates = new Predicate[list.size()]; + return criteriaBuilder.and(list.toArray(predicates)); + } + }; + return fireDao.findAll(specification); + } +}