Files
pj_service_cloud/pjcloud-integrated/pjcloud-integrated-biz/NOTICE-EXPIRATION-GUIDE.md
T
2025-08-14 10:01:08 +08:00

5.2 KiB

通知公告过期时间功能使用指南

📋 功能概述

通知公告系统新增过期时间功能,支持为公告设置具体的过期时间。到期后,公告将自动下架,不再在前端显示,无需手动操作。

✨ 主要特性

  • 自动过期: 支持设置具体过期时间,到期自动下架
  • 灵活配置: 可选择设置过期时间或永不过期
  • 自动处理: 系统定时任务自动处理过期公告
  • 智能过滤: 所有查询接口自动过滤已过期公告
  • 性能优化: 添加数据库索引,提高查询效率

🗄️ 数据库变更

新增字段

ALTER TABLE notice ADD COLUMN expire_time DATETIME COMMENT '过期时间,到期后公告自动下架';

新增索引

-- 过期时间索引
CREATE INDEX idx_notice_expire_time ON notice(expire_time);

-- 状态+过期时间复合索引
CREATE INDEX idx_notice_status_expire ON notice(status, expire_time);

🔧 配置说明

1. 启用定时任务

在启动类或配置类上添加注解:

@EnableScheduling

2. 定时任务配置

系统默认每天凌晨2点执行过期处理:

@Scheduled(cron = "0 0 2 * * ?")

如需调整执行时间,可修改 NoticeExpirationTask 中的 cron 表达式。

💻 使用方法

1. 创建公告时设置过期时间

前端表单示例

<div class="form-group">
  <label>过期时间</label>
  <input type="datetime-local" name="expireTime" class="form-control">
  <small class="form-text text-muted">
    不设置表示永不过期,设置后到期自动下架
  </small>
</div>

后端实体字段

@Schema(description="过期时间,到期后公告自动下架")
private LocalDateTime expireTime;

2. 过期时间设置建议

短期公告(1-7天)

  • 活动通知
  • 临时维护公告
  • 节日祝福

中期公告(1-30天)

  • 功能更新通知
  • 政策变更公告
  • 培训通知

长期公告(30天以上)

  • 规章制度
  • 长期政策
  • 重要通知

永不过期

  • 系统说明文档
  • 基础操作指南
  • 重要规章制度

🔍 查询逻辑

自动过滤规则

所有查询接口都会自动过滤已过期公告:

// 过滤已过期的公告
wrapper.and(w -> w.isNull(NoticeEntity::getExpireTime)
        .or()
        .gt(NoticeEntity::getExpireTime, LocalDateTime.now()));

查询逻辑说明

  • expireTime IS NULL: 永不过期的公告
  • expireTime > NOW(): 未过期的公告
  • expireTime <= NOW(): 已过期的公告(自动过滤)

⏰ 定时任务详情

执行时间

  • 频率: 每天执行一次
  • 时间: 凌晨2点(可配置)
  • 时区: 系统默认时区

处理逻辑

  1. 查询已过期但状态仍为"已发布"的公告
  2. 批量更新状态为"已下架"
  3. 记录处理日志
  4. 异常处理和错误日志

日志示例

2025-01-27 02:00:00 INFO  - 开始执行通知公告过期处理任务
2025-01-27 02:00:01 INFO  - 发现 3 条过期公告,开始处理
2025-01-27 02:00:01 INFO  - 公告 [系统维护通知] 已过期,状态已更新为已下架
2025-01-27 02:00:01 INFO  - 通知公告过期处理任务执行完成,共处理 3 条过期公告

🚀 性能优化

数据库索引

  • 过期时间字段索引,提高过期查询性能
  • 状态+过期时间复合索引,优化常用查询

查询优化

  • 使用 MyBatis-Plus 的 Lambda 查询
  • 批量更新过期公告状态
  • 避免 N+1 查询问题

📊 监控和维护

1. 日志监控

  • 定时任务执行日志
  • 过期公告处理数量
  • 异常错误日志

2. 数据统计

-- 统计过期公告数量
SELECT COUNT(*) FROM notice 
WHERE expire_time IS NOT NULL 
AND expire_time <= NOW() 
AND status = '0';

-- 统计即将过期的公告
SELECT COUNT(*) FROM notice 
WHERE expire_time IS NOT NULL 
AND expire_time BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)
AND status = '0';

3. 定期维护

  • 清理过期的过期时间记录
  • 监控定时任务执行情况
  • 优化数据库查询性能

⚠️ 注意事项

1. 时区问题

  • 确保系统时区设置正确
  • 过期时间以系统时区为准
  • 考虑跨时区部署的情况

2. 性能考虑

  • 大量公告时,定时任务执行时间可能较长
  • 建议在业务低峰期执行
  • 监控数据库性能影响

3. 数据一致性

  • 定时任务执行期间,公告状态可能短暂不一致
  • 查询接口始终过滤过期公告,保证显示一致性
  • 建议在定时任务执行期间避免重要操作

🔧 故障排除

1. 定时任务未执行

检查项:

  • 是否启用 @EnableScheduling
  • 定时任务类是否被 Spring 管理
  • cron 表达式是否正确
  • 系统时间是否正确

2. 过期公告仍显示

检查项:

  • 过期时间字段是否正确设置
  • 数据库索引是否创建
  • 查询逻辑是否正确
  • 定时任务是否正常执行

3. 性能问题

优化建议:

  • 检查数据库索引使用情况
  • 优化查询语句
  • 调整定时任务执行时间
  • 考虑分页处理大量数据

📞 技术支持

如遇到问题,请联系技术支持并提供以下信息:

  • 错误日志
  • 数据库表结构
  • 定时任务配置
  • 系统环境信息

最后更新时间: 2025-01-27 版本: v1.0