Compare commits

..

3 Commits

Author SHA1 Message Date
Gjm
e116c95d57 Merge remote-tracking branch 'origin/main' 2026-05-13 10:32:33 +08:00
Gjm
d9aefeaf9c feat(iot): 添加设备日志定时清理功能
- 在DeviceMapper中新增批量删除设备、事件、功能日志的方法
- 在DeviceMapper.xml中添加对应的SQL删除语句
- 在DeviceServiceImpl中实现批量删除日志逻辑和定时清理方法
- 创建DevLogDeleteJob定时任务类执行日志清理
- 在IDeviceService接口中添加devLogDelete方法定义
- 实现按天数阈值分批删除历史日志数据
- 添加日志清理进度监控和统计功能

Signed-off-by: Gjm <你的邮箱>
2026-05-13 10:32:16 +08:00
Gjm
51eb4a90d3 config(env): 切换到生产环境配置
- 将激活的Spring配置文件从dev更改为prod
- 更新环境配置以匹配生产环境设置

Signed-off-by: Gjm <你的邮箱>
2026-05-11 08:36:16 +08:00
6 changed files with 150 additions and 1 deletions

View File

@@ -56,7 +56,7 @@ server:
spring:
# 环境配置dev=开发环境prod=生产环境
profiles:
active: dev # 环境配置dev=开发环境prod=生产环境
active: prod # 环境配置dev=开发环境prod=生产环境
# 资源信息
messages:
# 国际化资源文件路径

View File

@@ -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("------------------[删除设备日志完成]---------------------");
}
}

View File

@@ -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<Device>
*/
public List<String> 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);
}

View File

@@ -362,4 +362,5 @@ public interface IDeviceService
public int updateDeviceBySerialNumber(Device device) ;
void devLogDelete();
}

View File

@@ -1847,5 +1847,99 @@ public class DeviceServiceImpl implements IDeviceService {
public List<String> 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;
}
}

View File

@@ -968,4 +968,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where d.product_id = #{productId,jdbcType=BIGINT}
</select>
<delete id="deleteDeviceLogBatch">
DELETE FROM iot_device_log
WHERE create_time &lt; #{cutoffDate}
LIMIT #{batchSize}
</delete>
<delete id="deleteEventLogBatch">
DELETE FROM iot_event log
WHERE create_time &lt; #{cutoffDate}
LIMIT #{batchSize}
</delete>
<delete id="deleteFunctionLogBatch">
DELETE FROM iot_alert_log
WHERE create_time &lt; #{cutoffDate}
LIMIT #{batchSize}
</delete>
</mapper>