This commit is contained in:
2024-05-01 22:50:31 +08:00
parent 47383a6030
commit a15aec50b0
4 changed files with 111 additions and 22 deletions

View File

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

View File

@@ -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;
}

View File

@@ -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<Map> 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>
<#if deviceName??>
and pd.name like '%' || :deviceName '%'
</#if>
<#if deviceCode??>
and pd.code like '%' || :deviceCode '%'
</#if>
group by bucket, dd.device_id, pd.code, pd.name
""", request),
request,
Map.class);
}
public List<Map> 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();
}

View File

@@ -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());