From 175a001fe7138a3f09a4e66c80537fd0658c1d14 Mon Sep 17 00:00:00 2001 From: zhugongping Date: Wed, 9 Sep 2026 16:29:18 +0800 Subject: [PATCH 1/3] =?UTF-8?q?20260909:=E4=BC=98=E5=8C=96=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fastbee/controller/tool/ToolController.java | 12 +++++------- .../iot/service/impl/DataRepairServiceImpl.java | 2 +- .../iot/service/impl/DeviceServiceImpl.java | 15 +++++++-------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/fastbee-open-api/src/main/java/com/fastbee/controller/tool/ToolController.java b/fastbee-open-api/src/main/java/com/fastbee/controller/tool/ToolController.java index 5254dd68..337dd926 100644 --- a/fastbee-open-api/src/main/java/com/fastbee/controller/tool/ToolController.java +++ b/fastbee-open-api/src/main/java/com/fastbee/controller/tool/ToolController.java @@ -254,20 +254,19 @@ public class ToolController extends BaseController { } } catch (Exception ex) { - ex.printStackTrace(); log.error("发生错误:{}", ex.getMessage(), ex); } } @ApiOperation("mqtt钩子处理") @PostMapping("/mqtt/webhookv5") - public void webHookProcessv5(@RequestBody JSONObject json) { + public void webHookProcessV5(@RequestBody JSONObject json) { try { String clientid = json.getString("clientid"); String event = json.getString("event"); String peername = json.getString("peername"); // 类似 127.0.0.1:8812 String ipAddress = peername; - if (peername.indexOf(":") != -1) { + if (peername.contains(":")) { ipAddress = peername.substring(0, peername.indexOf(":")); } log.info("webhook:{},clientid:{},peername:{}", event, clientid, peername); @@ -310,18 +309,17 @@ public class ToolController extends BaseController { // 影子模式,发布属性和功能 if (device.getIsShadow() == 1) { ThingsModelShadow shadow = deviceService.getDeviceShadowThingsModel(device); - if (shadow.getProperties().size() > 0) { + if (!shadow.getProperties().isEmpty()) { messagePublish.publishProperty(device.getProductId(), device.getSerialNumber(), shadow.getProperties(), 3); } - if (shadow.getFunctions().size() > 0) { + if (!shadow.getFunctions().isEmpty()) { messagePublish.publishFunction(device.getProductId(), device.getSerialNumber(), shadow.getFunctions(), 3); } } } } catch (Exception ex) { - ex.printStackTrace(); - log.error("发生错误:" + ex.getMessage()); + log.error("发生错误:{}", ex.getMessage()); } } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DataRepairServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DataRepairServiceImpl.java index f7a43b12..6902bd9c 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DataRepairServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DataRepairServiceImpl.java @@ -210,7 +210,7 @@ public class DataRepairServiceImpl implements IDataRepairService { public void executeDataRepair(String serialNumber, boolean isShadow, List currentLogs) { if (CollectionUtils.isEmpty(currentLogs) || isShadow) { - log.debug("无数据或为影子模式,不执行数据修复: serialNumber={}, isShadow={}", serialNumber, isShadow); + //log.debug("无数据或为影子模式,不执行数据修复: serialNumber={}, isShadow={}", serialNumber, isShadow); return; } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java index cec4da61..3ec87d94 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java @@ -648,8 +648,7 @@ public class DeviceServiceImpl implements IDeviceService { */ @Override @DSTransactional - public List reportDeviceThingsModelValue(ThingsModelValuesInput input, int type, - boolean isShadow) { + public List reportDeviceThingsModelValue(ThingsModelValuesInput input, int type, boolean isShadow) { String serialNumber = input.getDeviceNumber(); String key = RedisKeyBuilder.buildTSLVCacheKey(input.getProductId(), serialNumber); Map maps = new HashMap<>(); @@ -675,6 +674,9 @@ public class DeviceServiceImpl implements IDeviceService { ThingsModelSimpleItem::getValue, (oldValue, newValue) -> oldValue)); } + // 查询设备信息 + Device device = this.selectDeviceBySerialNumber(serialNumber); + for (ThingsModelSimpleItem item : thingsModelValueRemarkItem) { String identity = item.getId(); if (identity.startsWith("array_")) { @@ -746,11 +748,9 @@ public class DeviceServiceImpl implements IDeviceService { valueItem.setId(identity); if (id.startsWith("array_")) { // 查询是否有缓存,如果没有先进行缓存 - if (!redisCache.containsKey(key)) { - Device device = this.selectDeviceBySerialNumber(serialNumber); - this.selectDeviceByDeviceId(device.getDeviceId()); - } - +// if (!redisCache.containsKey(key)) { +// itslValueCache.addCacheDeviceStatus(input.getProductId(), serialNumber); +// } int index = Integer.parseInt(id.substring(6, 8)); if (isShadow) { String[] shadows = cacheIdentifier.getShadow().split(","); @@ -791,7 +791,6 @@ public class DeviceServiceImpl implements IDeviceService { /* ★★★★★★★★★★★★★★★★★★★★★★ 存储数据 - 开始 ★★★★★★★★★★★★★★★★★★★★★★ */ ThingsModelType modelType = ThingsModelType.getType(thingModels.getType()); - Device device = this.selectDeviceBySerialNumber(serialNumber); switch (modelType) { case PROP: if (1 == thingModels.getIsHistory()) { From ff41725d8bb825430ae35feb2b03b2eff47545a7 Mon Sep 17 00:00:00 2001 From: zhugongping Date: Thu, 10 Sep 2026 20:57:26 +0800 Subject: [PATCH 2/3] =?UTF-8?q?20260910:=E6=B8=85=E7=90=86=E6=97=A5?= =?UTF-8?q?=E5=BF=97=EF=BC=8Ciot=5Fdevice=5Flog=E8=BF=99=E4=B8=AA=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E9=87=87=E9=9B=86=E7=9A=84=E6=95=B0=E6=8D=AE=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E5=81=9A=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fastbee/web/task/LogCleanTask.java | 88 +++++++++++++++++ .../notify/mapper/NotifyLogMapper.java | 8 ++ .../notify/service/INotifyLogService.java | 7 ++ .../service/impl/NotifyLogServiceImpl.java | 10 ++ .../main/resources/mapper/NotifyLogMapper.xml | 5 + .../controller/system/LogCleanController.java | 96 +++++++++++++++++++ .../quartz/mapper/SysJobLogMapper.java | 8 ++ .../quartz/service/ISysJobLogService.java | 7 ++ .../service/impl/SysJobLogServiceImpl.java | 10 ++ .../mapper/quartz/SysJobLogMapper.xml | 5 + .../fastbee/iot/mapper/AlertLogMapper.java | 8 ++ .../fastbee/iot/mapper/EventLogMapper.java | 8 ++ .../fastbee/iot/service/IAlertLogService.java | 7 ++ .../fastbee/iot/service/IEventLogService.java | 7 ++ .../iot/service/impl/AlertLogServiceImpl.java | 10 ++ .../iot/service/impl/EventLogServiceImpl.java | 10 ++ .../resources/mapper/iot/AlertLogMapper.xml | 5 + .../resources/mapper/iot/EventLogMapper.xml | 5 + .../system/mapper/SysLogininforMapper.java | 8 ++ .../system/mapper/SysOperLogMapper.java | 8 ++ .../system/service/ISysLogininforService.java | 7 ++ .../system/service/ISysOperLogService.java | 7 ++ .../impl/SysLogininforServiceImpl.java | 10 ++ .../service/impl/SysOperLogServiceImpl.java | 10 ++ .../mapper/system/SysLogininforMapper.xml | 5 + .../mapper/system/SysOperLogMapper.xml | 5 + sql/log_clean_task_init.sql | 96 +++++++++++++++++++ 27 files changed, 460 insertions(+) create mode 100644 fastbee-admin/src/main/java/com/fastbee/web/task/LogCleanTask.java create mode 100644 fastbee-open-api/src/main/java/com/fastbee/controller/system/LogCleanController.java create mode 100644 sql/log_clean_task_init.sql diff --git a/fastbee-admin/src/main/java/com/fastbee/web/task/LogCleanTask.java b/fastbee-admin/src/main/java/com/fastbee/web/task/LogCleanTask.java new file mode 100644 index 00000000..a742b693 --- /dev/null +++ b/fastbee-admin/src/main/java/com/fastbee/web/task/LogCleanTask.java @@ -0,0 +1,88 @@ +package com.fastbee.web.task; + +import com.fastbee.iot.service.IAlertLogService; +import com.fastbee.iot.service.IEventLogService; +import com.fastbee.notify.service.INotifyLogService; +import com.fastbee.quartz.service.ISysJobLogService; +import com.fastbee.system.service.ISysLogininforService; +import com.fastbee.system.service.ISysOperLogService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 日志清理定时任务 + * + * @author fastbee + */ +@Component("logCleanTask") +public class LogCleanTask { + private static final Logger log = LoggerFactory.getLogger(LogCleanTask.class); + + @Autowired + private IEventLogService eventLogService; + + @Autowired + private ISysOperLogService operLogService; + + @Autowired + private ISysLogininforService logininforService; + + @Autowired + private IAlertLogService alertLogService; + + @Autowired + private ISysJobLogService jobLogService; + + @Autowired + private INotifyLogService notifyLogService; + + // 之后还有清理的表往下写 + + /** + * 清理日志(默认清理15天前) + */ + public void cleanLogs() { + cleanLogs(15); + } + + /** + * 清理日志 + * + * @param days 保留天数 + */ + public void cleanLogs(int days) { + log.info("========== 开始清理日志数据,保留最近 {} 天的记录 ==========", days); + try { + // 清理 IoT 事件日志 + eventLogService.cleanEventLog(days); + //log.info("已清理 iot_event_log 表 {} 天前的数据", days); + + // 清理系统操作日志 + operLogService.cleanOperLog(days); + //log.info("已清理 sys_oper_log 表 {} 天前的数据", days); + + // 清理登录日志 + logininforService.cleanLogininfor(days); + //log.info("已清理 sys_logininfor 表 {} 天前的数据", days); + + // 清理设备告警日志 + alertLogService.cleanAlertLog(days); + //log.info("已清理 iot_alert_log 表 {} 天前的数据", days); + + // 清理定时任务日志 + jobLogService.cleanJobLog(days); + //log.info("已清理 sys_job_log 表 {} 天前的数据", days); + + // 清理通知日志 + notifyLogService.cleanNotifyLog(days); + //log.info("已清理 notify_log 表 {} 天前的数据", days); + + log.info("========== 日志清理任务执行完成 =========="); + } catch (Exception e) { + log.error("日志清理任务执行失败", e); + throw e; + } + } +} \ No newline at end of file diff --git a/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/mapper/NotifyLogMapper.java b/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/mapper/NotifyLogMapper.java index 70d5b288..ea14c5cb 100644 --- a/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/mapper/NotifyLogMapper.java +++ b/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/mapper/NotifyLogMapper.java @@ -58,4 +58,12 @@ public interface NotifyLogMapper { * @return 结果 */ public int deleteNotifyLogByIds(Long[] ids); + + /** + * 删除指定天数前的通知日志 + * + * @param days 保留天数 + * @return 删除记录数 + */ + public int deleteNotifyLogBeforeDays(int days); } diff --git a/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/service/INotifyLogService.java b/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/service/INotifyLogService.java index c1e9205c..63821556 100644 --- a/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/service/INotifyLogService.java +++ b/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/service/INotifyLogService.java @@ -58,4 +58,11 @@ public interface INotifyLogService { * @return 结果 */ public int deleteNotifyLogById(Long id); + + /** + * 清理通知日志 + * + * @param days 保留天数 + */ + public void cleanNotifyLog(int days); } diff --git a/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/service/impl/NotifyLogServiceImpl.java b/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/service/impl/NotifyLogServiceImpl.java index 8df01608..08ed7090 100644 --- a/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/service/impl/NotifyLogServiceImpl.java +++ b/fastbee-notify/fastbee-notify-web/src/main/java/com/fastbee/notify/service/impl/NotifyLogServiceImpl.java @@ -132,4 +132,14 @@ public class NotifyLogServiceImpl implements INotifyLogService { public int deleteNotifyLogById(Long id) { return notifyLogMapper.deleteNotifyLogById(id); } + + /** + * 清理通知日志 + * + * @param days 保留天数 + */ + @Override + public void cleanNotifyLog(int days) { + notifyLogMapper.deleteNotifyLogBeforeDays(days); + } } diff --git a/fastbee-notify/fastbee-notify-web/src/main/resources/mapper/NotifyLogMapper.xml b/fastbee-notify/fastbee-notify-web/src/main/resources/mapper/NotifyLogMapper.xml index 24ca6bc4..7ec3c353 100644 --- a/fastbee-notify/fastbee-notify-web/src/main/resources/mapper/NotifyLogMapper.xml +++ b/fastbee-notify/fastbee-notify-web/src/main/resources/mapper/NotifyLogMapper.xml @@ -138,4 +138,9 @@ #{id} + + + DELETE FROM notify_log + WHERE create_time < DATE_SUB(NOW(), INTERVAL #{days} DAY) + diff --git a/fastbee-open-api/src/main/java/com/fastbee/controller/system/LogCleanController.java b/fastbee-open-api/src/main/java/com/fastbee/controller/system/LogCleanController.java new file mode 100644 index 00000000..5d66c39c --- /dev/null +++ b/fastbee-open-api/src/main/java/com/fastbee/controller/system/LogCleanController.java @@ -0,0 +1,96 @@ +package com.fastbee.controller.system; + +import com.fastbee.common.annotation.Log; +import com.fastbee.common.core.controller.BaseController; +import com.fastbee.common.core.domain.AjaxResult; +import com.fastbee.common.enums.BusinessType; +import com.fastbee.iot.service.IAlertLogService; +import com.fastbee.iot.service.IEventLogService; +import com.fastbee.notify.service.INotifyLogService; +import com.fastbee.quartz.service.ISysJobLogService; +import com.fastbee.system.service.ISysLogininforService; +import com.fastbee.system.service.ISysOperLogService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * 日志清理Controller + * + * @author fastbee + */ +@Api(tags = "系统管理:日志清理") +@RestController +@RequestMapping("/system/log") +public class LogCleanController extends BaseController { + + @Autowired + private IEventLogService eventLogService; + + @Autowired + private ISysOperLogService operLogService; + + @Autowired + private ISysLogininforService logininforService; + + @Autowired + private IAlertLogService alertLogService; + + @Autowired + private ISysJobLogService jobLogService; + + @Autowired + private INotifyLogService notifyLogService; + + /** + * 清理日志数据 + * + * @param days 保留天数,默认15天 + * @return 清理结果 + */ + @ApiOperation("清理日志数据") + @PreAuthorize("@ss.hasRole('admin')") + @Log(title = "日志清理", businessType = BusinessType.CLEAN) + @PostMapping("/clean") + public AjaxResult cleanLogs( + @ApiParam("保留天数,默认15天") + @RequestParam(value = "days", defaultValue = "15") Integer days) { + try { + logger.info("手动触发日志清理,保留最近 {} 天的记录", days); + + if (days < 1) { + return error("保留天数必须大于等于1天"); + } + + // 清理 IoT 事件日志 + eventLogService.cleanEventLog(days); + + // 清理系统操作日志 + operLogService.cleanOperLog(days); + + // 清理登录日志 + logininforService.cleanLogininfor(days); + + // 清理设备告警日志 + alertLogService.cleanAlertLog(days); + + // 清理定时任务日志 + jobLogService.cleanJobLog(days); + + // 清理通知日志 + notifyLogService.cleanNotifyLog(days); + + logger.info("日志清理完成,保留最近 {} 天的记录", days); + return success(String.format("日志清理完成,已删除 %d 天前的历史数据", days)); + } catch (Exception e) { + logger.error("日志清理失败", e); + return error("日志清理失败:" + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/mapper/SysJobLogMapper.java b/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/mapper/SysJobLogMapper.java index 8b35eefe..cf40842d 100644 --- a/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/mapper/SysJobLogMapper.java +++ b/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/mapper/SysJobLogMapper.java @@ -61,4 +61,12 @@ public interface SysJobLogMapper { * 清空任务日志 */ public void cleanJobLog(); + + /** + * 删除指定天数前的任务日志 + * + * @param days 保留天数 + * @return 删除记录数 + */ + public int deleteJobLogBeforeDays(int days); } diff --git a/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/service/ISysJobLogService.java b/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/service/ISysJobLogService.java index 50893074..a0bea432 100644 --- a/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/service/ISysJobLogService.java +++ b/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/service/ISysJobLogService.java @@ -53,4 +53,11 @@ public interface ISysJobLogService { * 清空任务日志 */ public void cleanJobLog(); + + /** + * 清理指定天数前的任务日志 + * + * @param days 保留天数 + */ + public void cleanJobLog(int days); } diff --git a/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/service/impl/SysJobLogServiceImpl.java b/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/service/impl/SysJobLogServiceImpl.java index a5dfbe5e..8ba0f9dc 100644 --- a/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/service/impl/SysJobLogServiceImpl.java +++ b/fastbee-plugs/fastbee-quartz/src/main/java/com/fastbee/quartz/service/impl/SysJobLogServiceImpl.java @@ -78,4 +78,14 @@ public class SysJobLogServiceImpl implements ISysJobLogService { public void cleanJobLog() { jobLogMapper.cleanJobLog(); } + + /** + * 清理指定天数前的任务日志 + * + * @param days 保留天数 + */ + @Override + public void cleanJobLog(int days) { + jobLogMapper.deleteJobLogBeforeDays(days); + } } diff --git a/fastbee-plugs/fastbee-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml b/fastbee-plugs/fastbee-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml index 1a3e279e..9aafb989 100644 --- a/fastbee-plugs/fastbee-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml +++ b/fastbee-plugs/fastbee-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml @@ -77,6 +77,11 @@ truncate table sys_job_log + + DELETE FROM sys_job_log + WHERE create_time < DATE_SUB(NOW(), INTERVAL #{days} DAY) + + insert into sys_job_log( job_log_id, diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/mapper/AlertLogMapper.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/mapper/AlertLogMapper.java index 93ad999b..7a840871 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/mapper/AlertLogMapper.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/mapper/AlertLogMapper.java @@ -115,4 +115,12 @@ public interface AlertLogMapper { * @return com.fastbee.iot.model.AlertCountVO */ List countAlertLevel(DataCenterParam dataCenterParam); + + /** + * 删除指定天数前的告警日志 + * + * @param days 保留天数 + * @return 删除记录数 + */ + int deleteAlertLogBeforeDays(@Param("days") int days); } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/mapper/EventLogMapper.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/mapper/EventLogMapper.java index b89ad082..6c3b5ea3 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/mapper/EventLogMapper.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/mapper/EventLogMapper.java @@ -25,4 +25,12 @@ public interface EventLogMapper extends BaseMapperX { Long selectEventLogCount(@Param("userId") Long userId); + /** + * 删除指定天数前的日志 + * + * @param days 保留天数 + * @return 删除记录数 + */ + int deleteEventLogBeforeDays(@Param("days") int days); + } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IAlertLogService.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IAlertLogService.java index 2aa708ca..311277e6 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IAlertLogService.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IAlertLogService.java @@ -107,4 +107,11 @@ public interface IAlertLogService { * @return com.fastbee.iot.model.AlertCountVO */ List countAlertLevel(DataCenterParam dataCenterParam); + + /** + * 清理告警日志 + * + * @param days 保留天数 + */ + void cleanAlertLog(int days); } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IEventLogService.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IEventLogService.java index 5807e9db..0f94f59d 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IEventLogService.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/IEventLogService.java @@ -37,4 +37,11 @@ public interface IEventLogService extends IService { */ List listHistory(EventLog eventLog); + /** + * 清理事件日志 + * + * @param days 保留天数 + */ + void cleanEventLog(int days); + } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/AlertLogServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/AlertLogServiceImpl.java index f309e7ca..b4d9f367 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/AlertLogServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/AlertLogServiceImpl.java @@ -199,4 +199,14 @@ public class AlertLogServiceImpl implements IAlertLogService { public List countAlertLevel(DataCenterParam dataCenterParam) { return alertLogMapper.countAlertLevel(dataCenterParam); } + + /** + * 清理告警日志 + * + * @param days 保留天数 + */ + @Override + public void cleanAlertLog(int days) { + alertLogMapper.deleteAlertLogBeforeDays(days); + } } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/EventLogServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/EventLogServiceImpl.java index 2b8bc211..ebb756e9 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/EventLogServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/EventLogServiceImpl.java @@ -64,4 +64,14 @@ public class EventLogServiceImpl extends ServiceImpl i public List listHistory(EventLog eventLog) { return eventLogMapper.listHistory(eventLog); } + + /** + * 清理事件日志 + * + * @param days 保留天数 + */ + @Override + public void cleanEventLog(int days) { + eventLogMapper.deleteEventLogBeforeDays(days); + } } diff --git a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/AlertLogMapper.xml b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/AlertLogMapper.xml index 01d5c50b..ac0ac040 100644 --- a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/AlertLogMapper.xml +++ b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/AlertLogMapper.xml @@ -274,4 +274,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + DELETE FROM iot_alert_log + WHERE create_time < DATE_SUB(NOW(), INTERVAL #{days} DAY) + + diff --git a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/EventLogMapper.xml b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/EventLogMapper.xml index f5536dd3..0a1756eb 100644 --- a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/EventLogMapper.xml +++ b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/EventLogMapper.xml @@ -59,4 +59,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and user_id = #{userId} + + + DELETE FROM iot_event_log + WHERE create_time < DATE_SUB(NOW(), INTERVAL #{days} DAY) + diff --git a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/mapper/SysLogininforMapper.java b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/mapper/SysLogininforMapper.java index c68e4946..d9397f81 100644 --- a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/mapper/SysLogininforMapper.java +++ b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/mapper/SysLogininforMapper.java @@ -41,4 +41,12 @@ public interface SysLogininforMapper { public int cleanLogininfor(); public List getUserCount(); + + /** + * 删除指定天数前的登录日志 + * + * @param days 保留天数 + * @return 删除记录数 + */ + public int deleteLogininforBeforeDays(int days); } diff --git a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/mapper/SysOperLogMapper.java b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/mapper/SysOperLogMapper.java index 46ac307e..a05e33b6 100644 --- a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/mapper/SysOperLogMapper.java +++ b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/mapper/SysOperLogMapper.java @@ -45,4 +45,12 @@ public interface SysOperLogMapper { * 清空操作日志 */ public void cleanOperLog(); + + /** + * 删除指定天数前的操作日志 + * + * @param days 保留天数 + * @return 删除记录数 + */ + public int deleteOperLogBeforeDays(int days); } diff --git a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/ISysLogininforService.java b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/ISysLogininforService.java index ef1fcb69..7c27865a 100644 --- a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/ISysLogininforService.java +++ b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/ISysLogininforService.java @@ -42,4 +42,11 @@ public interface ISysLogininforService { * 统计一周内的登陆数据 */ public List getUserCount(); + + /** + * 清理指定天数前的登录日志 + * + * @param days 保留天数 + */ + public void cleanLogininfor(int days); } diff --git a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/ISysOperLogService.java b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/ISysOperLogService.java index b7713433..f2b21e28 100644 --- a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/ISysOperLogService.java +++ b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/ISysOperLogService.java @@ -45,4 +45,11 @@ public interface ISysOperLogService { * 清空操作日志 */ public void cleanOperLog(); + + /** + * 清理指定天数前的操作日志 + * + * @param days 保留天数 + */ + public void cleanOperLog(int days); } diff --git a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysLogininforServiceImpl.java b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysLogininforServiceImpl.java index 3d8cd3d3..e17fdf6f 100644 --- a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysLogininforServiceImpl.java +++ b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysLogininforServiceImpl.java @@ -63,4 +63,14 @@ public class SysLogininforServiceImpl implements ISysLogininforService { public List getUserCount() { return logininforMapper.getUserCount(); } + + /** + * 清理指定天数前的登录日志 + * + * @param days 保留天数 + */ + @Override + public void cleanLogininfor(int days) { + logininforMapper.deleteLogininforBeforeDays(days); + } } diff --git a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysOperLogServiceImpl.java b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysOperLogServiceImpl.java index 5bfed0ee..f0ace9a1 100644 --- a/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysOperLogServiceImpl.java +++ b/fastbee-service/fastbee-system-service/src/main/java/com/fastbee/system/service/impl/SysOperLogServiceImpl.java @@ -68,4 +68,14 @@ public class SysOperLogServiceImpl implements ISysOperLogService { public void cleanOperLog() { operLogMapper.cleanOperLog(); } + + /** + * 清理指定天数前的操作日志 + * + * @param days 保留天数 + */ + @Override + public void cleanOperLog(int days) { + operLogMapper.deleteOperLogBeforeDays(days); + } } diff --git a/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysLogininforMapper.xml b/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysLogininforMapper.xml index 3fe4ccd7..d5ecdf38 100644 --- a/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysLogininforMapper.xml +++ b/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysLogininforMapper.xml @@ -76,4 +76,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ) b on a.login_time = b.datetime; + + DELETE FROM sys_logininfor + WHERE login_time < DATE_SUB(NOW(), INTERVAL #{days} DAY) + + diff --git a/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysOperLogMapper.xml b/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysOperLogMapper.xml index 38456ed0..13a93f56 100644 --- a/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysOperLogMapper.xml +++ b/fastbee-service/fastbee-system-service/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -80,4 +80,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" truncate table sys_oper_log + + DELETE FROM sys_oper_log + WHERE oper_time < DATE_SUB(NOW(), INTERVAL #{days} DAY) + + \ No newline at end of file diff --git a/sql/log_clean_task_init.sql b/sql/log_clean_task_init.sql new file mode 100644 index 00000000..36e0efb2 --- /dev/null +++ b/sql/log_clean_task_init.sql @@ -0,0 +1,96 @@ +-- ============================================ +-- 日志清理定时任务初始化 SQL +-- ============================================ + +-- 1. 插入定时任务记录到 sys_job 表 +-- 说明:每天凌晨 0 点自动清理 15 天前的日志数据 +-- 注意:LogCleanTask 类位于 fastbee-admin 模块的 com.fastbee.web.task 包下 +INSERT INTO `sys_job` ( + `job_name`, + `job_group`, + `invoke_target`, + `cron_expression`, + `misfire_policy`, + `concurrent`, + `status`, + `create_by`, + `create_time`, + `remark` +) VALUES ( + '日志清理任务', -- 任务名称 + 'SYSTEM', -- 任务组名 + 'logCleanTask.cleanLogs()', -- 调用目标字符串 + '0 0 0 * * ?', -- Cron 表达式:每天凌晨 00:00:00 + '3', -- 错误策略:不触发立即执行 + '1', -- 禁止并发执行 + '0', -- 状态:正常 + 'admin', -- 创建者 + NOW(), -- 创建时间 + '每天凌晨0点自动清理15天前的日志数据(iot_event_log、sys_oper_log、sys_logininfor、iot_alert_log、sys_job_log、notify_log)' +); + +-- ============================================ +-- 清理的日志表说明 +-- ============================================ +-- 1. iot_event_log - IoT 事件日志 +-- 2. sys_oper_log - 系统操作日志 +-- 3. sys_logininfor - 登录日志 +-- 4. iot_alert_log - 设备告警日志 +-- 5. sys_job_log - 定时任务日志 +-- 6. notify_log - 通知日志 +-- +-- 注意:iot_device_log 表(设备监测日志)不参与清理 +-- 该表为核心数据,目前有 214 万条记录,需要数据迁移方案 + +-- 2. 可选:添加日志清理权限菜单(根据需要执行) +-- 如果需要在管理后台显示权限按钮,可以执行以下 SQL +/* +INSERT INTO `sys_menu` ( + `menu_name`, + `parent_id`, + `order_num`, + `path`, + `component`, + `query`, + `is_frame`, + `is_cache`, + `menu_type`, + `visible`, + `status`, + `perms`, + `icon`, + `create_by`, + `create_time`, + `remark` +) VALUES ( + '日志清理', -- 菜单名称 + 2, -- 父菜单ID(根据实际情况调整,2通常是系统管理) + 99, -- 显示顺序 + '', -- 路由地址 + '', -- 组件路径 + '', -- 路由参数 + 1, -- 不是外链 + 0, -- 不缓存 + 'F', -- 菜单类型:F=按钮 + '0', -- 显示状态 + '0', -- 菜单状态 + 'system:log:clean', -- 权限标识 + '#', -- 图标 + 'admin', -- 创建者 + NOW(), -- 创建时间 + '日志清理按钮权限' +); +*/ + +-- ============================================ +-- 验证定时任务是否创建成功 +-- ============================================ +-- SELECT * FROM sys_job WHERE job_name = '日志清理任务'; + +-- ============================================ +-- 手动触发清理(可选) +-- ============================================ +-- 如果需要立即清理历史数据,可以通过以下方式: +-- 方式1:通过管理后台 -> 系统监控 -> 定时任务 -> 点击"执行一次" +-- 方式2:调用 API 接口:POST /system/log/clean?days=30 +-- 方式3:数据库执行:UPDATE sys_job SET status = '0' WHERE job_name = '日志清理任务'; \ No newline at end of file From 2ae8b8fab3b8fe707e9c59bb34beafab897caf76 Mon Sep 17 00:00:00 2001 From: zhugongping Date: Sun, 13 Sep 2026 16:02:08 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=B0=83=E6=95=B4docker=E5=AE=B9=E5=99=A8?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index fa154571..ed2c0423 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -72,7 +72,7 @@ services: logging: driver: "json-file" options: - max-size: "10m" + max-size: "50m" max-file: "2" ports: - 8080:8080