fix(system): 修复查询未读公告和消息数据错误

This commit is contained in:
摔倒的红烧肉
2025-06-16 12:30:24 +00:00
committed by Charles7c
parent 0322c3ecf2
commit 13c18f1861
5 changed files with 27 additions and 5 deletions

View File

@@ -17,8 +17,11 @@
package top.continew.admin.system.controller;
import cn.hutool.core.collection.CollUtil;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.continew.admin.common.controller.BaseController;
import top.continew.admin.system.enums.NoticeMethodEnum;
import top.continew.admin.system.enums.NoticeScopeEnum;
@@ -31,6 +34,7 @@ import top.continew.starter.core.validation.ValidationUtils;
import top.continew.starter.extension.crud.annotation.CrudApi;
import top.continew.starter.extension.crud.annotation.CrudRequestMapping;
import top.continew.starter.extension.crud.enums.Api;
import top.continew.starter.extension.crud.validation.CrudValidationGroup;
import java.lang.reflect.Method;
import java.util.Arrays;
@@ -69,4 +73,13 @@ public class NoticeController extends BaseController<NoticeService, NoticeResp,
.contains(method), "通知方式 [{}] 不正确", method));
}
}
@Parameter(name = "id", description = "ID", example = "1", in = ParameterIn.PATH)
@ResponseBody
@PutMapping({"/{id}"})
public void update(@Validated({CrudValidationGroup.Update.class}) @RequestBody NoticeReq req,
@PathVariable("id") Long id) {
//更新公告并删除阅读记录
this.baseService.update(req, id);
this.baseService.deleteReadLog(List.of(id));
}
}

View File

@@ -66,4 +66,9 @@ public interface NoticeService extends BaseService<NoticeResp, NoticeDetailResp,
* @return 仪表盘公告列表
*/
List<DashboardNoticeResp> listDashboard();
/**
* 删除阅读记录
*
*/
void deleteReadLog(List<Long> ids);
}

View File

@@ -182,4 +182,8 @@ public class NoticeServiceImpl extends BaseServiceImpl<NoticeMapper, NoticeDO, N
Long userId = UserContextHolder.getUserId();
return baseMapper.selectDashboardList(userId);
}
@Override
public void deleteReadLog(List<Long> ids) {
noticeLogService.deleteByNoticeIds(ids);
}
}

View File

@@ -53,7 +53,7 @@
SELECT
t1.*
FROM sys_message AS t1
LEFT JOIN sys_message_log AS t2 ON t2.message_id = t1.id
LEFT JOIN sys_message_log AS t2 ON t2.message_id = t1.id AND t2.user_id = #{userId}
WHERE (t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{userId}, '"'))))
AND t2.read_time IS NULL
</select>
@@ -62,7 +62,7 @@
SELECT
COUNT(1)
FROM sys_message AS t1
LEFT JOIN sys_message_log AS t2 ON t2.message_id = t1.id
LEFT JOIN sys_message_log AS t2 ON t2.message_id = t1.id AND t2.user_id = #{userId}
WHERE (t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{userId}, '"'))))
AND t2.read_time IS NULL
<if test="type != null">

View File

@@ -43,9 +43,9 @@
<select id="selectUnreadIdsByUserId" resultType="java.lang.Long">
SELECT
t1.id
t1.id
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 AND t2.user_id = #{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))