mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 07:46:40 +08:00
完善报表统计
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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())))
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user