WindTowerStatusDataService.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package com.jiayue.ipfcst.console.service;
  2. import com.jiayue.ipfcst.common.data.entity.WindTowerStatusData;
  3. import com.jiayue.ipfcst.common.data.repository.WindTowerStatusDataRepository;
  4. import com.jiayue.ipfcst.common.data.service.BaseService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.data.domain.Page;
  7. import org.springframework.data.domain.PageRequest;
  8. import org.springframework.data.domain.Pageable;
  9. import org.springframework.data.domain.Sort;
  10. import org.springframework.data.jpa.domain.Specification;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.transaction.annotation.Propagation;
  13. import org.springframework.transaction.annotation.Transactional;
  14. import javax.persistence.criteria.Predicate;
  15. import java.lang.reflect.Field;
  16. import java.util.*;
  17. /**
  18. * 测风塔数据业务层
  19. *
  20. * @author yh
  21. * @version 1.0
  22. * @since 2019/8/5 16:02
  23. */
  24. @Service
  25. public class WindTowerStatusDataService extends BaseService {
  26. private final WindTowerStatusDataRepository windTowerStatusDataRepository;
  27. @Autowired
  28. public WindTowerStatusDataService(WindTowerStatusDataRepository windTowerStatusDataRepository) {
  29. this.windTowerStatusDataRepository = windTowerStatusDataRepository;
  30. }
  31. /**
  32. * 分页查询 环境监测仪数据 tl
  33. *
  34. * @param startTime 开始时间
  35. * @param endTime 结束时间
  36. * @param no 设备编号
  37. * @return
  38. */
  39. @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
  40. public Map<String, Object> findByTimeBetweenAndNoAndTimeStep(String stationCode, Date startTime, Date endTime,
  41. Integer page, Integer size, String no) {
  42. Map<String, Object> map = new HashMap<>();
  43. Sort sort = Sort.by(Sort.Direction.DESC, "time");
  44. Specification<WindTowerStatusData> specification = this.specificationFindByTime(stationCode, startTime, endTime, no);
  45. Pageable pageable = PageRequest.of(page - 1, size, sort); //页码:前端从1开始,jpa从0开始,做个转换
  46. Page windTowerStatusDatas = windTowerStatusDataRepository.findAll(specification, pageable);
  47. List<WindTowerStatusData> datas;
  48. datas = windTowerStatusDatas.getContent();
  49. map.put("content", datas);// 结果集
  50. map.put("count", windTowerStatusDatas.getTotalElements());// 总记录数
  51. return map;
  52. }
  53. /**
  54. * 根据时间 分页查询条件 yh
  55. *
  56. * @param startTime 开始时间
  57. * @param endTime 结束时间
  58. * @return 过滤条件
  59. */
  60. Specification<WindTowerStatusData> specificationFindByTime(final String stationCode, final Date startTime, final Date endTime, final String no) {
  61. return (Specification<WindTowerStatusData>) (root, criteriaQuery, cb) -> {
  62. List<Predicate> predicates = new ArrayList<>();
  63. predicates.add(cb.equal(root.get("stationCode").as(String.class), stationCode));
  64. if (!"ALL".equals(no)) {
  65. predicates.add(cb.equal(root.get("equipmentId").as(String.class), no));
  66. }
  67. if (startTime != null) {
  68. //大于或等于传入时间
  69. predicates.add(cb.greaterThanOrEqualTo(root.get("time").as(Date.class), startTime));
  70. }
  71. if (endTime != null) {
  72. //小于传入时间
  73. predicates.add(cb.lessThan(root.get("time").as(Date.class), endTime));
  74. }
  75. //添加排序的功能
  76. return cb.and(predicates.toArray(new Predicate[predicates.size()]));
  77. };
  78. }
  79. /**
  80. * 查询条件 yh
  81. *
  82. * @param startTime 开始时间
  83. * @param endTime 结束时间
  84. * @param no 设备编号
  85. * @return 过滤条件
  86. */
  87. Specification<WindTowerStatusData> Specification(final Date startTime, final Date endTime, final Integer no) {
  88. return (Specification<WindTowerStatusData>) (root, criteriaQuery, cb) -> {
  89. List<Predicate> predicates = new ArrayList<>();
  90. if (startTime != null) {
  91. //大于或等于传入时间
  92. predicates.add(cb.greaterThanOrEqualTo(root.get("time").as(Date.class), startTime));
  93. }
  94. if (endTime != null) {
  95. //小于传入时间
  96. predicates.add(cb.lessThan(root.get("time").as(Date.class), endTime));
  97. }
  98. if (no != null) {
  99. predicates.add(cb.equal(root.get("equipmentNo").as(Integer.class), no));
  100. }
  101. //添加排序的功能
  102. return cb.and(predicates.toArray(new Predicate[predicates.size()]));
  103. };
  104. }
  105. /**
  106. * 获取测风塔数据实体所有私有属性名称集合
  107. *
  108. * @return 属性名称集合
  109. */
  110. public List<String> getWindTowerStatusDataAttributeName() {
  111. List<String> attributeName = new ArrayList<>();
  112. Class<WindTowerStatusData> windTowerStatusData = WindTowerStatusData.class;
  113. Class c = windTowerStatusData;
  114. Field[] fs = c.getDeclaredFields();
  115. for (Field f : fs) {
  116. attributeName.add(f.getName());
  117. }
  118. return attributeName;
  119. }
  120. }