完善报表统计

This commit is contained in:
2024-03-31 15:45:39 +08:00
parent 7a41853a80
commit 42afde07c1
3 changed files with 112 additions and 12 deletions

View File

@@ -6,6 +6,7 @@ import lombok.Data;
import org.hibernate.annotations.Comment;
import java.time.LocalDateTime;
import java.util.*;
@Data
@@ -31,4 +32,21 @@ direction_name,
""")
private List<String> reportFields;
private LocalDateTime startTime;
private LocalDateTime endTime;
private String plateNo;
private String parkName;
private String gateName;
private String laneName;
private String directionName;
}

View File

@@ -14,12 +14,12 @@ 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 jakarta.persistence.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.domain.Page;
@@ -29,6 +29,8 @@ import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -82,19 +84,61 @@ public class AcDeviceDataService extends BaseService<AcDeviceDataEntity, AcDevic
return page.map(this.mapper::toDto);
}
public static List<Map<String, Object>> convertTuplesToMap(List<Tuple> tuples) {
List<Map<String, Object>> result = new ArrayList<>();
for (Tuple single : tuples) {
Map<String, Object> tempMap = new HashMap<>();
for (TupleElement<?> key : single.getElements()) {
tempMap.put(key.getAlias(), single.get(key));
}
result.add(tempMap);
}
return result;
}
@PersistenceContext private EntityManager em;
public Page report(AcDeviceDataReportRequest request) {
if (StringUtils.isNotEmpty(request.getTimeDimension())){
request.setTimeDimension("day");
}
String fields =
request.getReportFields().stream()
.map(s -> "d." + s)
.collect(Collectors.joining(","));
CollectionUtils.isEmpty(request.getReportFields())
? " 1 "
: request.getReportFields().stream()
.map(s -> "d." + s)
.collect(Collectors.joining(","));
String where = "where 1 = 1 ";
if (request.getStartTime() != null) {
where += " and d.pass_time >= :startTime ";
}
if (request.getEndTime() != null) {
where += " and d.pass_time <= :endTime ";
}
if (StringUtils.isNotEmpty(request.getPlateNo())) {
where += " and d.plate_no = :plateNo ";
}
if (StringUtils.isNotEmpty(request.getParkName())) {
where += " and d.park_name = :parkName ";
}
if (StringUtils.isNotEmpty(request.getGateName())) {
where += " and d.gate_name = :gateName ";
}
if (StringUtils.isNotEmpty(request.getLaneName())) {
where += " and d.lane_name = :laneName ";
}
if (StringUtils.isNotEmpty(request.getDirectionName())) {
where += " and d.direction_name = :directionName ";
}
var sql =
"select DATE_TRUNC('"
@@ -104,6 +148,9 @@ public class AcDeviceDataService extends BaseService<AcDeviceDataEntity, AcDevic
+ ",\n"
+ " count(1) as cnt\n"
+ "from t_ac_device_data d\n"
+ " "
+ where
+ " "
+ "\n"
+ "group by DATE_TRUNC('"
+ request.getTimeDimension()
@@ -112,11 +159,39 @@ public class AcDeviceDataService extends BaseService<AcDeviceDataEntity, AcDevic
+ "\n"
+ "order by time desc , cnt desc";
Query nativeQuery = em.createNativeQuery(sql, Map.class);
Query nativeQuery = em.createNativeQuery(sql, Tuple.class);
List resultList = nativeQuery.getResultList();
if (request.getStartTime() != null) {
nativeQuery.setParameter("startTime", request.getStartTime());
}
List ans =
if (request.getEndTime() != null) {
nativeQuery.setParameter("endTime", request.getEndTime());
}
if (StringUtils.isNotEmpty(request.getPlateNo())) {
nativeQuery.setParameter("plateNo", request.getPlateNo());
}
if (StringUtils.isNotEmpty(request.getParkName())) {
nativeQuery.setParameter("parkName", request.getParkName());
}
if (StringUtils.isNotEmpty(request.getGateName())) {
nativeQuery.setParameter("gateName", request.getGateName());
}
if (StringUtils.isNotEmpty(request.getLaneName())) {
nativeQuery.setParameter("laneName", request.getLaneName());
}
if (StringUtils.isNotEmpty(request.getDirectionName())) {
nativeQuery.setParameter("directionName", request.getDirectionName());
}
var resultList = convertTuplesToMap(nativeQuery.getResultList());
var ans =
resultList.stream()
.map(
x ->
@@ -129,7 +204,7 @@ public class AcDeviceDataService extends BaseService<AcDeviceDataEntity, AcDevic
.LOWER_UNDERSCORE
.to(
CaseFormat
.UPPER_CAMEL,
.LOWER_CAMEL,
e.getKey()
.toString()),
e -> e.getValue())))

View File

@@ -1,6 +1,5 @@
package cn.lihongjie.coal.spring.config;
import com.fasterxml.jackson.core.JacksonException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
@@ -18,6 +17,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -42,6 +42,13 @@ public class JacksonConfig {
gen.writeString(value.getAddress());
}
});
module.addSerializer(Timestamp.class, new JsonSerializer<Timestamp>() {
@Override
public void serialize(Timestamp value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeObject(value.toLocalDateTime());
}
});
module.addDeserializer(Inet.class, new JsonDeserializer<Inet>() {
@Override