mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-11-04 10:57:10 +08:00 
			
		
		
		
	refactor: 优化通知公告相关代码
This commit is contained in:
		@@ -33,7 +33,12 @@ public enum NoticeMethodEnum implements BaseEnum<Integer> {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 系统消息
 | 
					     * 系统消息
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    SYSTEM_MESSAGE(1, "系统消息"),;
 | 
					    SYSTEM_MESSAGE(1, "系统消息"),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 登录弹窗
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    POPUP(2, "登录弹窗"),;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final Integer value;
 | 
					    private final Integer value;
 | 
				
			||||||
    private final String description;
 | 
					    private final String description;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,12 +45,13 @@ public interface NoticeMapper extends BaseMapper<NoticeDO> {
 | 
				
			|||||||
    IPage<NoticeResp> selectNoticePage(@Param("page") Page<NoticeDO> page, @Param("query") NoticeQuery query);
 | 
					    IPage<NoticeResp> selectNoticePage(@Param("page") Page<NoticeDO> page, @Param("query") NoticeQuery query);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 查询未读公告数量
 | 
					     * 查询未读公告 ID 列表
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * @param noticeMethod 通知方式
 | 
				
			||||||
     * @param userId       用户 ID
 | 
					     * @param userId       用户 ID
 | 
				
			||||||
     * @return 未读公告数量
 | 
					     * @return 未读公告 ID 列表
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    Long selectUnreadCountByUserId(@Param("userId") Long userId);
 | 
					    List<Long> selectUnreadIdsByUserId(@Param("noticeMethod") Integer noticeMethod, @Param("userId") Long userId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 查询仪表盘公告列表
 | 
					     * 查询仪表盘公告列表
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,15 +24,15 @@ import java.io.Serial;
 | 
				
			|||||||
import java.io.Serializable;
 | 
					import java.io.Serializable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 未读公告响应参数
 | 
					 * 未读公告数量响应参数
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @author Charles7c
 | 
					 * @author Charles7c
 | 
				
			||||||
 * @since 2025/5/20 22:00
 | 
					 * @since 2025/5/22 22:15
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@Data
 | 
					@Data
 | 
				
			||||||
@NoArgsConstructor
 | 
					@NoArgsConstructor
 | 
				
			||||||
@Schema(description = "未读公告响应参数")
 | 
					@Schema(description = "未读公告数量响应参数")
 | 
				
			||||||
public class NoticeUnreadResp implements Serializable {
 | 
					public class NoticeUnreadCountResp implements Serializable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Serial
 | 
					    @Serial
 | 
				
			||||||
    private static final long serialVersionUID = 1L;
 | 
					    private static final long serialVersionUID = 1L;
 | 
				
			||||||
@@ -41,9 +41,9 @@ public class NoticeUnreadResp implements Serializable {
 | 
				
			|||||||
     * 未读公告数量
 | 
					     * 未读公告数量
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    @Schema(description = "未读公告数量", example = "1")
 | 
					    @Schema(description = "未读公告数量", example = "1")
 | 
				
			||||||
    private Long total;
 | 
					    private Integer total;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public NoticeUnreadResp(Long total) {
 | 
					    public NoticeUnreadCountResp(Integer total) {
 | 
				
			||||||
        this.total = total;
 | 
					        this.total = total;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -16,13 +16,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
package top.continew.admin.system.service;
 | 
					package top.continew.admin.system.service;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import top.continew.admin.system.enums.NoticeMethodEnum;
 | 
				
			||||||
import top.continew.admin.system.model.entity.NoticeDO;
 | 
					import top.continew.admin.system.model.entity.NoticeDO;
 | 
				
			||||||
import top.continew.admin.system.model.query.NoticeQuery;
 | 
					import top.continew.admin.system.model.query.NoticeQuery;
 | 
				
			||||||
import top.continew.admin.system.model.req.NoticeReq;
 | 
					import top.continew.admin.system.model.req.NoticeReq;
 | 
				
			||||||
import top.continew.admin.system.model.resp.dashboard.DashboardNoticeResp;
 | 
					import top.continew.admin.system.model.resp.dashboard.DashboardNoticeResp;
 | 
				
			||||||
import top.continew.admin.system.model.resp.notice.NoticeDetailResp;
 | 
					import top.continew.admin.system.model.resp.notice.NoticeDetailResp;
 | 
				
			||||||
import top.continew.admin.system.model.resp.notice.NoticeResp;
 | 
					import top.continew.admin.system.model.resp.notice.NoticeResp;
 | 
				
			||||||
import top.continew.admin.system.model.resp.notice.NoticeUnreadResp;
 | 
					 | 
				
			||||||
import top.continew.starter.data.mp.service.IService;
 | 
					import top.continew.starter.data.mp.service.IService;
 | 
				
			||||||
import top.continew.starter.extension.crud.service.BaseService;
 | 
					import top.continew.starter.extension.crud.service.BaseService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,12 +44,13 @@ public interface NoticeService extends BaseService<NoticeResp, NoticeDetailResp,
 | 
				
			|||||||
    void publish(NoticeDO notice);
 | 
					    void publish(NoticeDO notice);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 查询未读公告数量
 | 
					     * 查询未读公告 ID 列表
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * @param method 通知方式
 | 
				
			||||||
     * @param userId 用户 ID
 | 
					     * @param userId 用户 ID
 | 
				
			||||||
     * @return 未读公告响应参数
 | 
					     * @return 未读公告 ID 响应参数
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    NoticeUnreadResp countUnreadByUserId(Long userId);
 | 
					    List<Long> listUnreadIdsByUserId(NoticeMethodEnum method, Long userId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 阅读公告
 | 
					     * 阅读公告
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,6 @@ import top.continew.admin.system.model.req.NoticeReq;
 | 
				
			|||||||
import top.continew.admin.system.model.resp.dashboard.DashboardNoticeResp;
 | 
					import top.continew.admin.system.model.resp.dashboard.DashboardNoticeResp;
 | 
				
			||||||
import top.continew.admin.system.model.resp.notice.NoticeDetailResp;
 | 
					import top.continew.admin.system.model.resp.notice.NoticeDetailResp;
 | 
				
			||||||
import top.continew.admin.system.model.resp.notice.NoticeResp;
 | 
					import top.continew.admin.system.model.resp.notice.NoticeResp;
 | 
				
			||||||
import top.continew.admin.system.model.resp.notice.NoticeUnreadResp;
 | 
					 | 
				
			||||||
import top.continew.admin.system.service.MessageService;
 | 
					import top.continew.admin.system.service.MessageService;
 | 
				
			||||||
import top.continew.admin.system.service.NoticeLogService;
 | 
					import top.continew.admin.system.service.NoticeLogService;
 | 
				
			||||||
import top.continew.admin.system.service.NoticeService;
 | 
					import top.continew.admin.system.service.NoticeService;
 | 
				
			||||||
@@ -169,8 +168,8 @@ public class NoticeServiceImpl extends BaseServiceImpl<NoticeMapper, NoticeDO, N
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public NoticeUnreadResp countUnreadByUserId(Long userId) {
 | 
					    public List<Long> listUnreadIdsByUserId(NoticeMethodEnum method, Long userId) {
 | 
				
			||||||
        return new NoticeUnreadResp(baseMapper.selectUnreadCountByUserId(userId));
 | 
					        return baseMapper.selectUnreadIdsByUserId(method != null ? method.getValue() : null, userId);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@
 | 
				
			|||||||
        LEFT JOIN sys_notice_log AS t2 ON t2.notice_id = t1.id
 | 
					        LEFT JOIN sys_notice_log AS t2 ON t2.notice_id = t1.id
 | 
				
			||||||
        <where>
 | 
					        <where>
 | 
				
			||||||
            <if test="query.userId != null">
 | 
					            <if test="query.userId != null">
 | 
				
			||||||
                (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_EXTRACT(t1.notice_users, "$[0]") = CAST(#{query.userId} AS CHAR)))
 | 
					                (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{userId}, '"'))))
 | 
				
			||||||
            </if>
 | 
					            </if>
 | 
				
			||||||
            <if test="query.title != null and query.title != ''">
 | 
					            <if test="query.title != null and query.title != ''">
 | 
				
			||||||
                AND t1.title LIKE CONCAT('%', #{query.title}, '%')
 | 
					                AND t1.title LIKE CONCAT('%', #{query.title}, '%')
 | 
				
			||||||
@@ -41,12 +41,15 @@
 | 
				
			|||||||
        </if>
 | 
					        </if>
 | 
				
			||||||
    </select>
 | 
					    </select>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <select id="selectUnreadCountByUserId" resultType="java.lang.Long">
 | 
					    <select id="selectUnreadIdsByUserId" resultType="java.lang.Long">
 | 
				
			||||||
        SELECT
 | 
					        SELECT
 | 
				
			||||||
            COUNT(1)
 | 
					            t1.id
 | 
				
			||||||
        FROM sys_notice AS t1
 | 
					        FROM sys_notice AS t1
 | 
				
			||||||
        LEFT JOIN sys_notice_log AS t2 ON t2.notice_id = t1.id
 | 
					        LEFT JOIN sys_notice_log AS t2 ON t2.notice_id = t1.id
 | 
				
			||||||
        WHERE (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{userId}, '"'))))
 | 
					        WHERE (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{userId}, '"'))))
 | 
				
			||||||
 | 
					        <if test="noticeMethod != null">
 | 
				
			||||||
 | 
					            AND JSON_CONTAINS(t1.notice_methods, CAST(#{noticeMethod} AS CHAR))
 | 
				
			||||||
 | 
					        </if>
 | 
				
			||||||
        AND t2.read_time IS NULL
 | 
					        AND t2.read_time IS NULL
 | 
				
			||||||
    </select>
 | 
					    </select>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@ import lombok.RequiredArgsConstructor;
 | 
				
			|||||||
import org.springframework.validation.annotation.Validated;
 | 
					import org.springframework.validation.annotation.Validated;
 | 
				
			||||||
import org.springframework.web.bind.annotation.*;
 | 
					import org.springframework.web.bind.annotation.*;
 | 
				
			||||||
import top.continew.admin.common.context.UserContextHolder;
 | 
					import top.continew.admin.common.context.UserContextHolder;
 | 
				
			||||||
 | 
					import top.continew.admin.system.enums.NoticeMethodEnum;
 | 
				
			||||||
import top.continew.admin.system.enums.NoticeScopeEnum;
 | 
					import top.continew.admin.system.enums.NoticeScopeEnum;
 | 
				
			||||||
import top.continew.admin.system.model.query.MessageQuery;
 | 
					import top.continew.admin.system.model.query.MessageQuery;
 | 
				
			||||||
import top.continew.admin.system.model.query.NoticeQuery;
 | 
					import top.continew.admin.system.model.query.NoticeQuery;
 | 
				
			||||||
@@ -31,7 +32,7 @@ import top.continew.admin.system.model.resp.message.MessageResp;
 | 
				
			|||||||
import top.continew.admin.system.model.resp.message.MessageUnreadResp;
 | 
					import top.continew.admin.system.model.resp.message.MessageUnreadResp;
 | 
				
			||||||
import top.continew.admin.system.model.resp.notice.NoticeDetailResp;
 | 
					import top.continew.admin.system.model.resp.notice.NoticeDetailResp;
 | 
				
			||||||
import top.continew.admin.system.model.resp.notice.NoticeResp;
 | 
					import top.continew.admin.system.model.resp.notice.NoticeResp;
 | 
				
			||||||
import top.continew.admin.system.model.resp.notice.NoticeUnreadResp;
 | 
					import top.continew.admin.system.model.resp.notice.NoticeUnreadCountResp;
 | 
				
			||||||
import top.continew.admin.system.service.MessageService;
 | 
					import top.continew.admin.system.service.MessageService;
 | 
				
			||||||
import top.continew.admin.system.service.NoticeService;
 | 
					import top.continew.admin.system.service.NoticeService;
 | 
				
			||||||
import top.continew.starter.core.validation.CheckUtils;
 | 
					import top.continew.starter.core.validation.CheckUtils;
 | 
				
			||||||
@@ -41,6 +42,8 @@ import top.continew.starter.extension.crud.model.resp.BasePageResp;
 | 
				
			|||||||
import top.continew.starter.extension.crud.model.resp.PageResp;
 | 
					import top.continew.starter.extension.crud.model.resp.PageResp;
 | 
				
			||||||
import top.continew.starter.log.annotation.Log;
 | 
					import top.continew.starter.log.annotation.Log;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 个人消息 API
 | 
					 * 个人消息 API
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@@ -93,8 +96,17 @@ public class UserMessageController {
 | 
				
			|||||||
    @Log(ignore = true)
 | 
					    @Log(ignore = true)
 | 
				
			||||||
    @Operation(summary = "查询未读公告数量", description = "查询当前用户的未读公告数量")
 | 
					    @Operation(summary = "查询未读公告数量", description = "查询当前用户的未读公告数量")
 | 
				
			||||||
    @GetMapping("/notice/unread")
 | 
					    @GetMapping("/notice/unread")
 | 
				
			||||||
    public NoticeUnreadResp countUnreadNotice() {
 | 
					    public NoticeUnreadCountResp countUnreadNotice() {
 | 
				
			||||||
        return noticeService.countUnreadByUserId(UserContextHolder.getUserId());
 | 
					        List<Long> list = noticeService.listUnreadIdsByUserId(null, UserContextHolder.getUserId());
 | 
				
			||||||
 | 
					        return new NoticeUnreadCountResp(list.size());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Log(ignore = true)
 | 
				
			||||||
 | 
					    @Operation(summary = "查询未读公告", description = "查询当前用户的未读公告")
 | 
				
			||||||
 | 
					    @Parameter(name = "method", description = "通知方式", example = "LOGIN_POPUP", in = ParameterIn.PATH)
 | 
				
			||||||
 | 
					    @GetMapping("/notice/unread/{method}")
 | 
				
			||||||
 | 
					    public List<Long> listUnreadNotice(@PathVariable String method) {
 | 
				
			||||||
 | 
					        return noticeService.listUnreadIdsByUserId(NoticeMethodEnum.valueOf(method), UserContextHolder.getUserId());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Operation(summary = "分页查询公告列表", description = "分页查询公告列表")
 | 
					    @Operation(summary = "分页查询公告列表", description = "分页查询公告列表")
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user