diff --git a/pjcloud-integrated/pjcloud-integrated-biz/API-INTEGRATION-GUIDE.md b/pjcloud-integrated/pjcloud-integrated-biz/API-INTEGRATION-GUIDE.md index 002fb9072..635bd9cd9 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/API-INTEGRATION-GUIDE.md +++ b/pjcloud-integrated/pjcloud-integrated-biz/API-INTEGRATION-GUIDE.md @@ -46,11 +46,13 @@ X-App-Secret: 550e8400-e29b-41d4-a716-446655440001 "msg": "操作成功", "data": [ { + "id": 1, "title": "系统维护通知", "createTime": "2025-01-27 10:00:00", "description": "系统将于今晚进行维护升级" }, { + "id": 2, "title": "新功能上线", "createTime": "2025-01-26 15:30:00", "description": "新增用户管理功能模块" @@ -68,6 +70,16 @@ X-App-Secret: 550e8400-e29b-41d4-a716-446655440001 } ``` +## ⏰ 过期时间功能 + +系统支持为公告设置过期时间,到期后公告将自动下架不再显示: + +- **过期时间字段**: `expireTime` +- **自动处理**: 每天凌晨2点自动检查并处理过期公告 +- **处理逻辑**: 过期公告状态自动更新为"已下架" +- **查询过滤**: 所有查询接口自动过滤已过期公告 +- **灵活设置**: 支持设置具体过期时间,也支持永不过期(不设置过期时间) + ## 💻 集成示例 ### JavaScript 调用示例 diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/NoticeController.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/NoticeController.java index 8c5ed997a..880e68e20 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/NoticeController.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/NoticeController.java @@ -27,6 +27,7 @@ import com.bsd.pjcloud.integrated.config.ExternalAppConfig; import java.util.List; import java.util.Objects; +import java.time.LocalDateTime; /** * 通知公告 @@ -56,6 +57,11 @@ public class NoticeController { public R getNoticePage(@ParameterObject Page page, @ParameterObject NoticeEntity notice) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.like(StrUtil.isNotBlank(notice.getTitle()),NoticeEntity::getTitle,notice.getTitle()); + // 过滤已过期和已下架的公告 +// wrapper.and(w -> w.eq(NoticeEntity::getStatus, "0") +// .and(inner -> inner.isNull(NoticeEntity::getExpireTime) +// .or() +// .gt(NoticeEntity::getExpireTime, LocalDateTime.now()))); return R.ok(noticeService.pageScope(page, wrapper)); } @@ -138,6 +144,10 @@ public class NoticeController { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(NoticeEntity::getStatus, "0"); // 只查已发布 wrapper.like(StrUtil.isNotBlank(title), NoticeEntity::getTitle, title); + // 过滤已过期的公告 + wrapper.and(w -> w.isNull(NoticeEntity::getExpireTime) + .or() + .gt(NoticeEntity::getExpireTime, LocalDateTime.now())); wrapper.orderByDesc(NoticeEntity::getIsTop, NoticeEntity::getCreateTime); // 置顶优先,时间倒序 return R.ok(noticeService.page(page, wrapper)); } @@ -154,6 +164,10 @@ public class NoticeController { if (notice == null || !"0".equals(notice.getStatus())) { return R.failed("公告不存在或已下架"); } + // 检查是否已过期 + if (notice.getExpireTime() != null && notice.getExpireTime().isBefore(LocalDateTime.now())) { + return R.failed("公告已过期"); + } return R.ok(notice); } @@ -169,6 +183,10 @@ public class NoticeController { if (notice == null || !"0".equals(notice.getStatus())) { return R.failed("公告不存在或已下架"); } + // 检查是否已过期 + if (notice.getExpireTime() != null && notice.getExpireTime().isBefore(LocalDateTime.now())) { + return R.failed("公告已过期"); + } notice.setViewCount((notice.getViewCount() == null ? 0 : notice.getViewCount()) + 1); noticeService.updateById(notice); return R.ok(); @@ -183,6 +201,10 @@ public class NoticeController { public R> getScreenNoticeList() { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(NoticeEntity::getStatus, "0"); + // 过滤已过期的公告 + wrapper.and(w -> w.isNull(NoticeEntity::getExpireTime) + .or() + .gt(NoticeEntity::getExpireTime, LocalDateTime.now())); wrapper.orderByDesc(NoticeEntity::getCreateTime); wrapper.last("limit 10"); List list = noticeService.list(wrapper); @@ -224,6 +246,10 @@ public class NoticeController { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(NoticeEntity::getStatus, "0"); // 只查询已发布的公告 + // 过滤已过期的公告 + wrapper.and(w -> w.isNull(NoticeEntity::getExpireTime) + .or() + .gt(NoticeEntity::getExpireTime, LocalDateTime.now())); wrapper.orderByDesc(NoticeEntity::getIsTop, NoticeEntity::getCreateTime); // 置顶优先,时间倒序 wrapper.last("limit " + limit); diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/NoticeEntity.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/NoticeEntity.java index 9e2992449..ca6f36114 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/NoticeEntity.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/NoticeEntity.java @@ -71,6 +71,12 @@ public class NoticeEntity extends Model { @Schema(description="浏览次数") private Integer viewCount; + /** + * 过期时间 + */ + @Schema(description="过期时间,到期后公告自动下架") + private LocalDateTime expireTime; + /** * 创建者 */