From 7a41853a80d92ac1426bb801d42c163b74c575fd Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Sun, 31 Mar 2024 14:38:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=81=93=E9=97=B8=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AcDeviceController.java | 2 + .../controller/AcDeviceDataController.java | 8 +++ .../dto/AcDeviceDataReportRequest.java | 34 ++++++++++ .../service/AcDeviceDataService.java | 67 +++++++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 src/main/java/cn/lihongjie/coal/acDeviceData/dto/AcDeviceDataReportRequest.java diff --git a/src/main/java/cn/lihongjie/coal/acDevice/controller/AcDeviceController.java b/src/main/java/cn/lihongjie/coal/acDevice/controller/AcDeviceController.java index c3993d1b..75164950 100644 --- a/src/main/java/cn/lihongjie/coal/acDevice/controller/AcDeviceController.java +++ b/src/main/java/cn/lihongjie/coal/acDevice/controller/AcDeviceController.java @@ -52,6 +52,8 @@ public class AcDeviceController { return this.service.list(request); } + + @PostMapping("/archive") public Object archive(@RequestBody IdRequest request) { this.service.archive(request); diff --git a/src/main/java/cn/lihongjie/coal/acDeviceData/controller/AcDeviceDataController.java b/src/main/java/cn/lihongjie/coal/acDeviceData/controller/AcDeviceDataController.java index b8c8e321..57855536 100644 --- a/src/main/java/cn/lihongjie/coal/acDeviceData/controller/AcDeviceDataController.java +++ b/src/main/java/cn/lihongjie/coal/acDeviceData/controller/AcDeviceDataController.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.acDeviceData.controller; import cn.lihongjie.coal.acDeviceData.dto.AcDeviceDataDto; +import cn.lihongjie.coal.acDeviceData.dto.AcDeviceDataReportRequest; import cn.lihongjie.coal.acDeviceData.dto.CreateAcDeviceDataDto; import cn.lihongjie.coal.acDeviceData.dto.UpdateAcDeviceDataDto; import cn.lihongjie.coal.acDeviceData.service.AcDeviceDataService; @@ -49,6 +50,13 @@ public class AcDeviceDataController { @PostMapping("/list") public Page list(@RequestBody CommonQuery request) { + + return this.service.list(request); } + + @PostMapping("/report") + public Page report(@RequestBody AcDeviceDataReportRequest request) { + return this.service.report(request); + } } diff --git a/src/main/java/cn/lihongjie/coal/acDeviceData/dto/AcDeviceDataReportRequest.java b/src/main/java/cn/lihongjie/coal/acDeviceData/dto/AcDeviceDataReportRequest.java new file mode 100644 index 00000000..e41f4884 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/acDeviceData/dto/AcDeviceDataReportRequest.java @@ -0,0 +1,34 @@ +package cn.lihongjie.coal.acDeviceData.dto; + +import cn.lihongjie.coal.base.dto.CommonQuery; + +import lombok.Data; + +import org.hibernate.annotations.Comment; + +import java.util.*; + +@Data +public class AcDeviceDataReportRequest extends CommonQuery { + + @Comment(""" +时间维度 +year +month +week +day +hour +""") + private String timeDimension; + + @Comment(""" +统计字段 +plate_no, +park_name, +gate_name, +lane_name, +direction_name, + +""") + private List reportFields; +} diff --git a/src/main/java/cn/lihongjie/coal/acDeviceData/service/AcDeviceDataService.java b/src/main/java/cn/lihongjie/coal/acDeviceData/service/AcDeviceDataService.java index e882df55..2a5e4fb7 100644 --- a/src/main/java/cn/lihongjie/coal/acDeviceData/service/AcDeviceDataService.java +++ b/src/main/java/cn/lihongjie/coal/acDeviceData/service/AcDeviceDataService.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.acDeviceData.service; import cn.lihongjie.coal.acDeviceData.dto.AcDeviceDataDto; +import cn.lihongjie.coal.acDeviceData.dto.AcDeviceDataReportRequest; import cn.lihongjie.coal.acDeviceData.dto.CreateAcDeviceDataDto; import cn.lihongjie.coal.acDeviceData.dto.UpdateAcDeviceDataDto; import cn.lihongjie.coal.acDeviceData.entity.AcDeviceDataEntity; @@ -11,16 +12,27 @@ import cn.lihongjie.coal.base.dto.IdRequest; import cn.lihongjie.coal.base.service.BaseService; import cn.lihongjie.coal.dbFunctions.DbFunctionService; +import com.google.common.base.CaseFormat; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; + import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.convert.ConversionService; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + @Service @Slf4j @Transactional @@ -70,4 +82,59 @@ public class AcDeviceDataService extends BaseService "d." + s) + .collect(Collectors.joining(",")); + + + + + + var sql = + "select DATE_TRUNC('" + + request.getTimeDimension() + + "', d.pass_time) as time,\n" + + fields + + ",\n" + + " count(1) as cnt\n" + + "from t_ac_device_data d\n" + + "\n" + + "group by DATE_TRUNC('" + + request.getTimeDimension() + + "', d.pass_time), " + + fields + + "\n" + + "order by time desc , cnt desc"; + + Query nativeQuery = em.createNativeQuery(sql, Map.class); + + List resultList = nativeQuery.getResultList(); + + List ans = + resultList.stream() + .map( + x -> + ((Map) x) + .entrySet().stream() + .collect( + Collectors.toMap( + (Map.Entry e) -> + CaseFormat + .LOWER_UNDERSCORE + .to( + CaseFormat + .UPPER_CAMEL, + e.getKey() + .toString()), + e -> e.getValue()))) + .toList(); + + return new PageImpl<>(ans, PageRequest.of(0, ans.size()), ans.size()); + } }