From a15aec50b0a686d6711bb3829d443e32ad6708d2 Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Wed, 1 May 2024 22:50:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PdcDeviceDataController.java | 10 ++- .../pdcDeviceData/dto/GetReport2Request.java | 35 ++++++++ .../service/PdcDeviceDataService.java | 84 +++++++++++++++---- .../service/WeightDeviceDataService.java | 4 +- 4 files changed, 111 insertions(+), 22 deletions(-) create mode 100644 src/main/java/cn/lihongjie/coal/pdcDeviceData/dto/GetReport2Request.java diff --git a/src/main/java/cn/lihongjie/coal/pdcDeviceData/controller/PdcDeviceDataController.java b/src/main/java/cn/lihongjie/coal/pdcDeviceData/controller/PdcDeviceDataController.java index 3f804023..4bd1016a 100644 --- a/src/main/java/cn/lihongjie/coal/pdcDeviceData/controller/PdcDeviceDataController.java +++ b/src/main/java/cn/lihongjie/coal/pdcDeviceData/controller/PdcDeviceDataController.java @@ -4,10 +4,7 @@ import cn.lihongjie.coal.annotation.OrgScope; import cn.lihongjie.coal.annotation.SysLog; import cn.lihongjie.coal.base.dto.CommonQuery; import cn.lihongjie.coal.base.dto.IdRequest; -import cn.lihongjie.coal.pdcDeviceData.dto.CreatePdcDeviceDataDto; -import cn.lihongjie.coal.pdcDeviceData.dto.GetReportRequest; -import cn.lihongjie.coal.pdcDeviceData.dto.PdcDeviceDataDto; -import cn.lihongjie.coal.pdcDeviceData.dto.UpdatePdcDeviceDataDto; +import cn.lihongjie.coal.pdcDeviceData.dto.*; import cn.lihongjie.coal.pdcDeviceData.service.PdcDeviceDataService; import lombok.extern.slf4j.Slf4j; @@ -57,4 +54,9 @@ public class PdcDeviceDataController { public Object getReport(@RequestBody GetReportRequest request) { return this.service.getReport(request); } + + @PostMapping("/getReport2") + public Object getReport2(@RequestBody GetReport2Request request) { + return this.service.getReport2(request); + } } diff --git a/src/main/java/cn/lihongjie/coal/pdcDeviceData/dto/GetReport2Request.java b/src/main/java/cn/lihongjie/coal/pdcDeviceData/dto/GetReport2Request.java new file mode 100644 index 00000000..7783e5ba --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/pdcDeviceData/dto/GetReport2Request.java @@ -0,0 +1,35 @@ +package cn.lihongjie.coal.pdcDeviceData.dto; + +import lombok.Data; + +import org.hibernate.annotations.Comment; + +import java.time.LocalDateTime; + +@Data +public class GetReport2Request { + + private String deviceName; + + private String deviceCode; + + private String deviceGroup; + + @Comment( + """ +时间维度 +year +month +week +day +hour +""") + private String timeDimension; + + + private LocalDateTime startTime; + private LocalDateTime endTime; + + private String td; + +} diff --git a/src/main/java/cn/lihongjie/coal/pdcDeviceData/service/PdcDeviceDataService.java b/src/main/java/cn/lihongjie/coal/pdcDeviceData/service/PdcDeviceDataService.java index dc007959..a11aca9c 100644 --- a/src/main/java/cn/lihongjie/coal/pdcDeviceData/service/PdcDeviceDataService.java +++ b/src/main/java/cn/lihongjie/coal/pdcDeviceData/service/PdcDeviceDataService.java @@ -4,13 +4,11 @@ import cn.lihongjie.coal.base.dto.CommonQuery; import cn.lihongjie.coal.base.dto.IdRequest; import cn.lihongjie.coal.base.service.BaseService; import cn.lihongjie.coal.common.Ctx; +import cn.lihongjie.coal.common.FreeMakerUtils; import cn.lihongjie.coal.common.JpaUtils; import cn.lihongjie.coal.dbFunctions.DbFunctionService; import cn.lihongjie.coal.pdcDevice.service.PdcDeviceService; -import cn.lihongjie.coal.pdcDeviceData.dto.CreatePdcDeviceDataDto; -import cn.lihongjie.coal.pdcDeviceData.dto.GetReportRequest; -import cn.lihongjie.coal.pdcDeviceData.dto.PdcDeviceDataDto; -import cn.lihongjie.coal.pdcDeviceData.dto.UpdatePdcDeviceDataDto; +import cn.lihongjie.coal.pdcDeviceData.dto.*; import cn.lihongjie.coal.pdcDeviceData.entity.PdcDeviceDataEntity; import cn.lihongjie.coal.pdcDeviceData.mapper.PdcDeviceDataMapper; import cn.lihongjie.coal.pdcDeviceData.repository.PdcDeviceDataRepository; @@ -94,21 +92,75 @@ public class PdcDeviceDataService @PersistenceContext EntityManager em; + public List getReport2(GetReport2Request request) { + + request.setTd("1 " + request.getTimeDimension()); + + return JpaUtils.execNativeQuery( + em, + FreeMakerUtils.render( + """ + + select time_bucket_gapfill(:td, dd.time) as bucket, + device_id, + pd.code, + pd.name, + min(dd.total_data) as min_total, + max(dd.total_data) as max_total, + coalesce(max(dd.total_data) - min(dd.total_data), 0) as buckt_total + + + from t_pdc_device_data dd + inner join t_pdc_device pd on dd.device_id = pd.id + + where dd.time >= :startTime + and dd.time <= :endTime + + <#if deviceGroup??> + + and pd.device_group like '%' || :deviceGroup '%' + + + + + <#if deviceName??> + + and pd.name like '%' || :deviceName '%' + + + + <#if deviceCode??> + + and pd.code like '%' || :deviceCode '%' + + + + group by bucket, dd.device_id, pd.code, pd.name + + + + """, request), + request, + Map.class); + } + public List getReport(GetReportRequest request) { - Tuple minMaxTime = em.createQuery( - "select min(d.time) as minTime, max(d.time) as maxTime from PdcDeviceDataEntity d where d.time >= :startTime and d.time<=:endTime and d.device.deviceGroup = :deviceGroup and d.organizationId = :organizationId", Tuple.class) - .setParameter("startTime", request.getStartTime()) - .setParameter( - "endTime", - request.getEndTime().isAfter(LocalDateTime.now()) - ? LocalDateTime.now() - : request.getEndTime()) - .setParameter("deviceGroup", request.getDeviceGroup()) - .setParameter("organizationId", Ctx.currentUser().getOrganizationId()) - .getSingleResult(); + Tuple minMaxTime = + em.createQuery( + "select min(d.time) as minTime, max(d.time) as maxTime from PdcDeviceDataEntity d where d.time >= :startTime and d.time<=:endTime and d.device.deviceGroup = :deviceGroup and d.organizationId = :organizationId", + Tuple.class) + .setParameter("startTime", request.getStartTime()) + .setParameter( + "endTime", + request.getEndTime().isAfter(LocalDateTime.now()) + ? LocalDateTime.now() + : request.getEndTime()) + .setParameter("deviceGroup", request.getDeviceGroup()) + .setParameter("organizationId", Ctx.currentUser().getOrganizationId()) + .getSingleResult(); - if (minMaxTime == null ) { + if (minMaxTime == null) { return List.of(); } diff --git a/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java b/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java index 2ba50121..837ce7a0 100644 --- a/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java +++ b/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java @@ -188,7 +188,7 @@ public class WeightDeviceDataService where += " and d.specification = :specification "; } - where += " and ( d.invalid is null or !d.invalid ) "; + where += " and ( d.invalid is null or not d.invalid ) "; where += " and ( d.finished is null or d.finished ) "; @@ -264,7 +264,7 @@ public class WeightDeviceDataService countQuery.setParameter("specification", "%" + request.getSpecification() + "%"); } - + var resultList = JpaUtils.convertTuplesToMap(selectQuery.getResultList());