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); + } +}