添加道闸报表统计

This commit is contained in:
2024-03-31 14:38:40 +08:00
parent ef9289282e
commit 7a41853a80
4 changed files with 111 additions and 0 deletions

View File

@@ -52,6 +52,8 @@ public class AcDeviceController {
return this.service.list(request);
}
@PostMapping("/archive")
public Object archive(@RequestBody IdRequest request) {
this.service.archive(request);

View File

@@ -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<AcDeviceDataDto> list(@RequestBody CommonQuery request) {
return this.service.list(request);
}
@PostMapping("/report")
public Page report(@RequestBody AcDeviceDataReportRequest request) {
return this.service.report(request);
}
}

View File

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

View File

@@ -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<AcDeviceDataEntity, AcDevic
return page.map(this.mapper::toDto);
}
@PersistenceContext private EntityManager em;
public Page report(AcDeviceDataReportRequest request) {
String fields =
request.getReportFields().stream()
.map(s -> "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());
}
}