mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 07:46:40 +08:00
添加道闸报表统计
This commit is contained in:
@@ -52,6 +52,8 @@ public class AcDeviceController {
|
||||
return this.service.list(request);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@PostMapping("/archive")
|
||||
public Object archive(@RequestBody IdRequest request) {
|
||||
this.service.archive(request);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user