From 19ff90cf77319e1a3ed18518d4153db16aec20d4 Mon Sep 17 00:00:00 2001 From: cwchen <1048842385@qq.com> Date: Tue, 23 Dec 2025 18:20:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=86=E5=88=AB=E6=95=B0=E6=8D=AE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/DeviceIdentificationController.java | 61 +++++++++ .../bonus/web/service/data/AlarmService.java | 27 +++- .../data/DeviceIdentificationService.java | 116 ++++++++++++++++++ .../common/domain/data/dto/ParamsDto.java | 3 + .../vo/DeviceIdentificationDataCountVo.java | 32 +++++ .../data/vo/DeviceIdentificationDataVo.java | 55 +++++++++ .../mapper/DIDeviceIdentificationMapper.java | 27 ++++ .../DIDeviceIdentificationService.java | 27 ++++ .../DDeviceIdentificationServiceImpl.java | 31 +++++ .../mapper/DDeviceIdentificationMapper.xml | 32 +++++ 10 files changed, 410 insertions(+), 1 deletion(-) create mode 100644 bonus-admin/src/main/java/com/bonus/web/controller/data/DeviceIdentificationController.java create mode 100644 bonus-admin/src/main/java/com/bonus/web/service/data/DeviceIdentificationService.java create mode 100644 bonus-common/src/main/java/com/bonus/common/domain/data/vo/DeviceIdentificationDataCountVo.java create mode 100644 bonus-common/src/main/java/com/bonus/common/domain/data/vo/DeviceIdentificationDataVo.java create mode 100644 bonus-data/src/main/java/com/bonus/data/mapper/DIDeviceIdentificationMapper.java create mode 100644 bonus-data/src/main/java/com/bonus/data/service/DIDeviceIdentificationService.java create mode 100644 bonus-data/src/main/java/com/bonus/data/service/impl/DDeviceIdentificationServiceImpl.java create mode 100644 bonus-data/src/main/resources/mapper/DDeviceIdentificationMapper.xml diff --git a/bonus-admin/src/main/java/com/bonus/web/controller/data/DeviceIdentificationController.java b/bonus-admin/src/main/java/com/bonus/web/controller/data/DeviceIdentificationController.java new file mode 100644 index 0000000..ae9a998 --- /dev/null +++ b/bonus-admin/src/main/java/com/bonus/web/controller/data/DeviceIdentificationController.java @@ -0,0 +1,61 @@ +package com.bonus.web.controller.data; + +import com.bonus.common.annotation.RequiresPermissions; +import com.bonus.common.annotation.SysLog; +import com.bonus.common.core.controller.BaseController; +import com.bonus.common.core.domain.AjaxResult; +import com.bonus.common.core.page.TableDataInfo; +import com.bonus.common.domain.data.dto.ParamsDto; +import com.bonus.common.domain.data.vo.DeviceIdentificationDataVo; +import com.bonus.common.enums.OperaType; +import com.bonus.web.service.data.DeviceIdentificationService; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @className:DeviceIdentificationController + * @author:cwchen + * @date:2025-12-23-16:31 + * @version:1.0 + * @description:设备识别-web层 + */ +@RestController +@RequestMapping("/data/deviceIdentification") +public class DeviceIdentificationController extends BaseController { + + @Resource(name = "DeviceIdentificationService") + private DeviceIdentificationService deviceIdentificationService; + + @ApiOperation(notes = "查询识别图片",value = "查询识别图片") + @RequiresPermissions("data:deviceIdentification:list") + @GetMapping("/getDeviceIdentificationList") + @SysLog(title = "设备管理", businessType = OperaType.QUERY, logType = 1, module = "设备管理->识别图片", details = "查询识别图片") + public TableDataInfo getDeviceIdentificationList(ParamsDto dto) { + startPage(); + List list = deviceIdentificationService.getDeviceIdentificationList(dto); + return getDataTable(list); + } + + @ApiOperation(notes = "查询识别数据",value = "查询识别数据") + @RequiresPermissions("data:deviceIdentification:list") + @GetMapping("/getDeviceIdentificationByDataList") + @SysLog(title = "设备管理", businessType = OperaType.QUERY, logType = 1, module = "设备管理->识别图片", details = "查询识别数据") + public TableDataInfo getDeviceIdentificationByDataList(ParamsDto dto) { + startPage(); + List list = deviceIdentificationService.getDeviceIdentificationList(dto); + return getDataTable(list); + } + + @ApiOperation(notes = "查询识别数据(车流量)",value = "查询识别数据(车流量)") + @RequiresPermissions("data:deviceIdentification:list") + @GetMapping("/getDeviceIdentificationByDataDetail") + public AjaxResult getDeviceIdentificationByDataDetail(ParamsDto dto) { + return deviceIdentificationService.getDeviceIdentificationByDataDetail(dto); + } + +} diff --git a/bonus-admin/src/main/java/com/bonus/web/service/data/AlarmService.java b/bonus-admin/src/main/java/com/bonus/web/service/data/AlarmService.java index 334e300..c6231bc 100644 --- a/bonus-admin/src/main/java/com/bonus/web/service/data/AlarmService.java +++ b/bonus-admin/src/main/java/com/bonus/web/service/data/AlarmService.java @@ -3,9 +3,15 @@ package com.bonus.web.service.data; import com.bonus.common.domain.data.dto.ParamsDto; import com.bonus.common.domain.data.vo.AlarmVo; import com.bonus.data.service.DlAlarmService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.util.Collections; +import java.util.Date; import java.util.List; /** @@ -15,6 +21,7 @@ import java.util.List; * @version:1.0 * @description: */ +@Slf4j @Service(value = "AlarmService") public class AlarmService { @@ -29,6 +36,24 @@ public class AlarmService { * @date 2025/12/23 15:44 */ public List getAlarmList(ParamsDto dto) { - return dlAlarmService.getAlarmList(dto); + try { + if (dto.getStartTime() == null || dto.getEndTime() == null) { + // 获取今天的日期 + LocalDateTime now = LocalDateTime.now(); + // 设置开始时间为 00:00:00 + LocalDateTime startOfDay = now.with(LocalTime.MIN); + // 设置结束时间为 23:59:59 (也可以使用 LocalTime.MAX) + LocalDateTime endOfDay = now.with(LocalTime.MAX); + // 转换为 Date 赋值给 dto (如果你的字段类型是 Date) + ZoneId zone = ZoneId.systemDefault(); + dto.setStartTime(Date.from(startOfDay.atZone(zone).toInstant())); + dto.setEndTime(Date.from(endOfDay.atZone(zone).toInstant())); + } + List alarmList = dlAlarmService.getAlarmList(dto); + return alarmList != null ? alarmList : Collections.emptyList(); + } catch (Exception e) { + log.error(e.toString(),e); + return Collections.emptyList(); + } } } diff --git a/bonus-admin/src/main/java/com/bonus/web/service/data/DeviceIdentificationService.java b/bonus-admin/src/main/java/com/bonus/web/service/data/DeviceIdentificationService.java new file mode 100644 index 0000000..eda65c6 --- /dev/null +++ b/bonus-admin/src/main/java/com/bonus/web/service/data/DeviceIdentificationService.java @@ -0,0 +1,116 @@ +package com.bonus.web.service.data; + +import com.bonus.common.core.domain.AjaxResult; +import com.bonus.common.domain.data.dto.ParamsDto; +import com.bonus.common.domain.data.vo.DeviceIdentificationDataCountVo; +import com.bonus.common.domain.data.vo.DeviceIdentificationDataVo; +import com.bonus.data.service.DIDeviceIdentificationService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +/** + * @className:DeviceIdentificationService + * @author:cwchen + * @date:2025-12-23-16:32 + * @version:1.0 + * @description:设备识别-业务层 + */ +@Service(value = "DeviceIdentificationService") +@Slf4j +public class DeviceIdentificationService { + + @Resource(name = "DIDeviceIdentificationService") + private DIDeviceIdentificationService deviceIdentificationService; + + public List getDeviceIdentificationList(ParamsDto dto) { + try { + if (dto.getStartTime() == null || dto.getEndTime() == null) { + // 获取今天的日期 + LocalDateTime now = LocalDateTime.now(); + // 设置开始时间为 00:00:00 + LocalDateTime startOfDay = now.with(LocalTime.MIN); + // 设置结束时间为 23:59:59 (也可以使用 LocalTime.MAX) + LocalDateTime endOfDay = now.with(LocalTime.MAX); + // 转换为 Date 赋值给 dto (如果你的字段类型是 Date) + ZoneId zone = ZoneId.systemDefault(); + dto.setStartTime(Date.from(startOfDay.atZone(zone).toInstant())); + dto.setEndTime(Date.from(endOfDay.atZone(zone).toInstant())); + } + List result = deviceIdentificationService.getDeviceIdentificationList(dto); + // 处理图片-待实现 + return result != null ? result : Collections.emptyList(); + } catch (Exception e) { + log.error(e.toString(), e); + return Collections.emptyList(); + } + } + + /** + * 查询识别数据 + * + * @param dto + * @return AjaxResult + * @author cwchen + * @date 2025/12/23 17:38 + */ + public AjaxResult getDeviceIdentificationByDataDetail(ParamsDto dto) { + DeviceIdentificationDataCountVo vo = null; + try { + List result = deviceIdentificationService.getDeviceIdentificationList(dto); + vo = calculateStatistics(result, dto.getStartTime(), dto.getEndTime()); + + } catch (Exception e) { + log.error(e.toString(), e); + vo = new DeviceIdentificationDataCountVo(); + } + return AjaxResult.success(vo); + } + + public DeviceIdentificationDataCountVo calculateStatistics(List result, Date startTime, Date endTime) { + DeviceIdentificationDataCountVo countVo = new DeviceIdentificationDataCountVo(); + + // 1. 计算小时数(不足1小时按1小时算) + long durationMillis = Math.abs(endTime.getTime() - startTime.getTime()); + double hours = Math.ceil(durationMillis / (1000.0 * 60 * 60)); + if (hours <= 0) hours = 1.0; + + // 2. 分类统计数量 + // 假设 carType: "1" 是油车,"2" 是电车 + long totalCount = result.size(); + long petrolCount = result.stream() + .filter(item -> "1".equals(item.getCarType())) + .count(); + long electricCount = result.stream() + .filter(item -> "2".equals(item.getCarType())) + .count(); + + // 3. 赋值数量 + countVo.setTotalCarNum(totalCount); + countVo.setPetrolVehiclesNum(petrolCount); + countVo.setNewEnergyNum(electricCount); + + // 4. 计算并赋值车流量 (PCU = 数量 / 小时) + // 使用 BigDecimal 或 保留小数处理以防精度丢失 + countVo.setTotalPCU(round(totalCount / hours)); + countVo.setPetrolVehiclesPCU(round(petrolCount / hours)); + countVo.setNewEnergyPCU(round(electricCount / hours)); + return countVo; + } + + /** + * 辅助方法:保留两位小数 + */ + private double round(double value) { + return BigDecimal.valueOf(value).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/bonus-common/src/main/java/com/bonus/common/domain/data/dto/ParamsDto.java b/bonus-common/src/main/java/com/bonus/common/domain/data/dto/ParamsDto.java index 57846e4..2fa7de8 100644 --- a/bonus-common/src/main/java/com/bonus/common/domain/data/dto/ParamsDto.java +++ b/bonus-common/src/main/java/com/bonus/common/domain/data/dto/ParamsDto.java @@ -16,6 +16,9 @@ import java.util.Date; @Data public class ParamsDto { + /**车辆类型 1.油车 2.新能源*/ + private String carType; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date startTime; diff --git a/bonus-common/src/main/java/com/bonus/common/domain/data/vo/DeviceIdentificationDataCountVo.java b/bonus-common/src/main/java/com/bonus/common/domain/data/vo/DeviceIdentificationDataCountVo.java new file mode 100644 index 0000000..3d32941 --- /dev/null +++ b/bonus-common/src/main/java/com/bonus/common/domain/data/vo/DeviceIdentificationDataCountVo.java @@ -0,0 +1,32 @@ +package com.bonus.common.domain.data.vo; + +import lombok.Data; + +/** + * @className:DeviceIdentificationDataCountVo + * @author:cwchen + * @date:2025-12-23-17:38 + * @version:1.0 + * @description:识别数据统计 + */ +@Data +public class DeviceIdentificationDataCountVo { + + /**车辆总数(辆)*/ + private long totalCarNum; + + /**油车数量(辆)*/ + private long petrolVehiclesNum; + + /**新能源数量(辆)*/ + private long newEnergyNum; + + /**总车流量(PCU/h)*/ + private double totalPCU; + + /**油车车流量(PCU/h)*/ + private double petrolVehiclesPCU; + + /**新能源车流量(PCU/h)*/ + private double newEnergyPCU; +} diff --git a/bonus-common/src/main/java/com/bonus/common/domain/data/vo/DeviceIdentificationDataVo.java b/bonus-common/src/main/java/com/bonus/common/domain/data/vo/DeviceIdentificationDataVo.java new file mode 100644 index 0000000..1097bd0 --- /dev/null +++ b/bonus-common/src/main/java/com/bonus/common/domain/data/vo/DeviceIdentificationDataVo.java @@ -0,0 +1,55 @@ +package com.bonus.common.domain.data.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @className:DeviceIdentificationDataVo + * @author:cwchen + * @date:2025-12-23-16:30 + * @version:1.0 + * @description:设备识别数据 + */ +@Data +public class DeviceIdentificationDataVo { + + /** + * 识别数据id + */ + private Long identificationDataId; + + /** + * 系统id + */ + private Long systemId; + + /** + * 识别地点 + */ + private String identificationLocation; + + /** + * 识别时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date identificationTime; + + /** + * 车牌颜色 1.蓝色 2.绿色 + */ + private String carColor; + + /** + * 车辆类型 1.油车 2.电车 + */ + private String carType; + + /** + * 文件路径 + * */ + private String filePath; +} diff --git a/bonus-data/src/main/java/com/bonus/data/mapper/DIDeviceIdentificationMapper.java b/bonus-data/src/main/java/com/bonus/data/mapper/DIDeviceIdentificationMapper.java new file mode 100644 index 0000000..d644860 --- /dev/null +++ b/bonus-data/src/main/java/com/bonus/data/mapper/DIDeviceIdentificationMapper.java @@ -0,0 +1,27 @@ +package com.bonus.data.mapper; + +import com.bonus.common.domain.data.dto.ParamsDto; +import com.bonus.common.domain.data.vo.DeviceIdentificationDataVo; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @className:DIDeviceIdentificationMapper + * @author:cwchen + * @date:2025-12-23-16:35 + * @version:1.0 + * @description:设备识别-数据层 + */ +@Repository(value = "DIDeviceIdentificationMapper") +public interface DIDeviceIdentificationMapper { + + /** + * 查询识别图片 + * @param dto + * @return List + * @author cwchen + * @date 2025/12/23 16:42 + */ + List getDeviceIdentificationList(ParamsDto dto); +} diff --git a/bonus-data/src/main/java/com/bonus/data/service/DIDeviceIdentificationService.java b/bonus-data/src/main/java/com/bonus/data/service/DIDeviceIdentificationService.java new file mode 100644 index 0000000..af889cf --- /dev/null +++ b/bonus-data/src/main/java/com/bonus/data/service/DIDeviceIdentificationService.java @@ -0,0 +1,27 @@ +package com.bonus.data.service; + +import com.bonus.common.domain.data.dto.ParamsDto; +import com.bonus.common.domain.data.vo.AlarmVo; +import com.bonus.common.domain.data.vo.DeviceIdentificationDataVo; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @className:DIDeviceIdentification + * @author:cwchen + * @date:2025-12-23-16:34 + * @version:1.0 + * @description:设备识别-业务层 + */ +@Service(value = "DIDeviceIdentificationService") +public interface DIDeviceIdentificationService { + /** + * 查询识别图片 + * @param dto + * @return List + * @author cwchen + * @date 2025/12/23 16:38 + */ + List getDeviceIdentificationList(ParamsDto dto); +} diff --git a/bonus-data/src/main/java/com/bonus/data/service/impl/DDeviceIdentificationServiceImpl.java b/bonus-data/src/main/java/com/bonus/data/service/impl/DDeviceIdentificationServiceImpl.java new file mode 100644 index 0000000..2c71545 --- /dev/null +++ b/bonus-data/src/main/java/com/bonus/data/service/impl/DDeviceIdentificationServiceImpl.java @@ -0,0 +1,31 @@ +package com.bonus.data.service.impl; + +import com.bonus.common.domain.data.dto.ParamsDto; +import com.bonus.common.domain.data.vo.AlarmVo; +import com.bonus.common.domain.data.vo.DeviceIdentificationDataVo; +import com.bonus.data.mapper.DIDeviceIdentificationMapper; +import com.bonus.data.service.DIDeviceIdentificationService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; + +/** + * @className:DDeviceIdentificationServiceImpl + * @author:cwchen + * @date:2025-12-23-16:35 + * @version:1.0 + * @description:设备识别-业务逻辑层 + */ +@Service(value = "DIDeviceIdentificationService") +public class DDeviceIdentificationServiceImpl implements DIDeviceIdentificationService { + + @Resource(name = "DIDeviceIdentificationMapper") + private DIDeviceIdentificationMapper diDeviceIdentificationMapper; + + @Override + public List getDeviceIdentificationList(ParamsDto dto) { + return diDeviceIdentificationMapper.getDeviceIdentificationList(dto); + } +} diff --git a/bonus-data/src/main/resources/mapper/DDeviceIdentificationMapper.xml b/bonus-data/src/main/resources/mapper/DDeviceIdentificationMapper.xml new file mode 100644 index 0000000..cbfaa36 --- /dev/null +++ b/bonus-data/src/main/resources/mapper/DDeviceIdentificationMapper.xml @@ -0,0 +1,32 @@ + + + + + + +