From d9aefeaf9cdf8c4e93ab764643ae3ab5d08e7bcf Mon Sep 17 00:00:00 2001 From: Gjm <你的邮箱> Date: Wed, 13 May 2026 10:32:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(iot):=20=E6=B7=BB=E5=8A=A0=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=97=A5=E5=BF=97=E5=AE=9A=E6=97=B6=E6=B8=85=E7=90=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在DeviceMapper中新增批量删除设备、事件、功能日志的方法 - 在DeviceMapper.xml中添加对应的SQL删除语句 - 在DeviceServiceImpl中实现批量删除日志逻辑和定时清理方法 - 创建DevLogDeleteJob定时任务类执行日志清理 - 在IDeviceService接口中添加devLogDelete方法定义 - 实现按天数阈值分批删除历史日志数据 - 添加日志清理进度监控和统计功能 Signed-off-by: Gjm <你的邮箱> --- .../lidee/iot/data/job/DevLogDeleteJob.java | 29 ++++++ .../iot/lidee/iot/mapper/DeviceMapper.java | 7 ++ .../iot/lidee/iot/service/IDeviceService.java | 1 + .../iot/service/impl/DeviceServiceImpl.java | 94 +++++++++++++++++++ .../resources/mapper/iot/DeviceMapper.xml | 18 ++++ 5 files changed, 149 insertions(+) create mode 100644 lidee-iot-data/src/main/java/iot/lidee/iot/data/job/DevLogDeleteJob.java diff --git a/lidee-iot-data/src/main/java/iot/lidee/iot/data/job/DevLogDeleteJob.java b/lidee-iot-data/src/main/java/iot/lidee/iot/data/job/DevLogDeleteJob.java new file mode 100644 index 0000000..fffc66f --- /dev/null +++ b/lidee-iot-data/src/main/java/iot/lidee/iot/data/job/DevLogDeleteJob.java @@ -0,0 +1,29 @@ +package iot.lidee.iot.data.job; + +import iot.lidee.iot.service.IDeviceService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 定时删除设备日志 + * @author gsb + * @date 2024/4/11 10:33 + */ +@Component("DevLogDeleteJob") +@Slf4j +public class DevLogDeleteJob { + @Resource + private IDeviceService deviceService; + + /** + * 定期删除设备日志 + */ + public void devLogDelete() { + log.info("------------------[定时删除设备日志]---------------------"); + deviceService.devLogDelete(); + log.info("------------------[删除设备日志完成]---------------------"); + + } +} diff --git a/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/mapper/DeviceMapper.java b/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/mapper/DeviceMapper.java index a5162f3..74b313c 100644 --- a/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/mapper/DeviceMapper.java +++ b/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/mapper/DeviceMapper.java @@ -11,6 +11,7 @@ import iot.lidee.iot.model.ThingsModels.ThingsModelValuesOutput; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; import java.util.Set; @@ -381,4 +382,10 @@ public interface DeviceMapper extends BaseMapperX */ public List selectSerialNumbersByProductId(@Param("productId") Long productId); + int deleteDeviceLogBatch(@Param("cutoffDate") Date cutoffDate, @Param("batchSize") int batchSize); + + int deleteEventLogBatch(@Param("cutoffDate") Date cutoffDate, @Param("batchSize") int batchSize); + + int deleteFunctionLogBatch(@Param("cutoffDate") Date cutoffDate, @Param("batchSize") int batchSize); + } diff --git a/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/service/IDeviceService.java b/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/service/IDeviceService.java index 1dde0f6..375a351 100644 --- a/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/service/IDeviceService.java +++ b/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/service/IDeviceService.java @@ -362,4 +362,5 @@ public interface IDeviceService public int updateDeviceBySerialNumber(Device device) ; + void devLogDelete(); } diff --git a/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/service/impl/DeviceServiceImpl.java b/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/service/impl/DeviceServiceImpl.java index 6a0dd3a..b9e6b97 100644 --- a/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/service/impl/DeviceServiceImpl.java +++ b/lidee-service/lidee-iot-service/src/main/java/iot/lidee/iot/service/impl/DeviceServiceImpl.java @@ -1847,5 +1847,99 @@ public class DeviceServiceImpl implements IDeviceService { public List selectSerialNumbersByProductId(Long productId) { return deviceMapper.selectSerialNumbersByProductId(productId); } + @Override + public void devLogDelete() { + batchDeleteLogsBeforeDays(15); + } + @Transactional(rollbackFor = Exception.class) + public void batchDeleteLogsBeforeDays(int days) { + Date cutoffDate = DateUtils.addDays(new Date(), -days); + log.info("开始删除{}天前的日志数据,截止时间:{}", days, cutoffDate); + + long totalDeleted = 0; + + long deviceLogDeleted = deleteDeviceLogBatch(cutoffDate); + totalDeleted += deviceLogDeleted; + log.info("删除设备日志(iot_device_log)完成,共删除:{}条", deviceLogDeleted); + + long eventLogDeleted = deleteEventLogBatch(cutoffDate); + totalDeleted += eventLogDeleted; + log.info("删除事件日志(iot_event_log)完成,共删除:{}条", eventLogDeleted); + + long functionLogDeleted = deleteFunctionLogBatch(cutoffDate); + totalDeleted += functionLogDeleted; + log.info("删除功能日志(iot_function_log)完成,共删除:{}条", functionLogDeleted); + + log.info("日志清理完成,总计删除:{}条记录", totalDeleted); + } + + private long deleteDeviceLogBatch(Date cutoffDate) { + long totalDeleted = 0; + int batchSize = 5000; + + while (true) { + int deleted = deviceMapper.deleteDeviceLogBatch(cutoffDate, batchSize); + totalDeleted += deleted; + + if (deleted == 0) { + break; + } + + try { + Thread.sleep(100); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + + return totalDeleted; + } + + private long deleteEventLogBatch(Date cutoffDate) { + long totalDeleted = 0; + int batchSize = 5000; + + while (true) { + int deleted = deviceMapper.deleteEventLogBatch(cutoffDate, batchSize); + totalDeleted += deleted; + + if (deleted == 0) { + break; + } + + try { + Thread.sleep(100); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + + return totalDeleted; + } + + private long deleteFunctionLogBatch(Date cutoffDate) { + long totalDeleted = 0; + int batchSize = 5000; + + while (true) { + int deleted = deviceMapper.deleteFunctionLogBatch(cutoffDate, batchSize); + totalDeleted += deleted; + + if (deleted == 0) { + break; + } + + try { + Thread.sleep(100); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + + return totalDeleted; + } } diff --git a/lidee-service/lidee-iot-service/src/main/resources/mapper/iot/DeviceMapper.xml b/lidee-service/lidee-iot-service/src/main/resources/mapper/iot/DeviceMapper.xml index 76ed8ef..b826b63 100644 --- a/lidee-service/lidee-iot-service/src/main/resources/mapper/iot/DeviceMapper.xml +++ b/lidee-service/lidee-iot-service/src/main/resources/mapper/iot/DeviceMapper.xml @@ -968,4 +968,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where d.product_id = #{productId,jdbcType=BIGINT} + + + DELETE FROM iot_device_log + WHERE create_time < #{cutoffDate} + LIMIT #{batchSize} + + + + DELETE FROM iot_event log + WHERE create_time < #{cutoffDate} + LIMIT #{batchSize} + + + + DELETE FROM iot_alert_log + WHERE create_time < #{cutoffDate} + LIMIT #{batchSize} +