Commit df7d2edf6da9aa7eb1d38ac686b747545f27908e

Authored by 云中非
1 parent 37fa55ac

fix: 修复接收消息通知的用户被删除后,通知接收人为空

1、消息接收者用户名从属性“receiverName”取
... ... @@ -21,6 +21,7 @@ public class SysNoticeUserDTO extends TenantDTO {
21 21 private String receiverId;
22 22 @ApiModelProperty(value = "接收者")
23 23 private UserDTO user;
  24 + private String receiverName;
24 25 @ApiModelProperty(value = "通知ID")
25 26 private String noticeId;
26 27 @ApiModelProperty(value = "阅读状态 0:未读 1:已读")
... ...
... ... @@ -22,6 +22,7 @@ public class SysNoticeUser extends TenantBaseEntity {
22 22 private static final long serialVersionUID = -5421685500963791707L;
23 23 /** 接收者ID */
24 24 private String receiverId;
  25 + private String receiverName;
25 26 /** 通知ID */
26 27 private String noticeId;
27 28 /** 阅读状态 0:未读 1:已读 */
... ...
... ... @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 4 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
5 5 import com.baomidou.mybatisplus.core.metadata.IPage;
6 6 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
  7 +import lombok.RequiredArgsConstructor;
7 8 import org.apache.commons.lang3.StringUtils;
8 9 import org.springframework.stereotype.Service;
9 10 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
... ... @@ -14,6 +15,7 @@ import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
14 15 import org.thingsboard.server.dao.yunteng.entities.SysNoticeUser;
15 16 import org.thingsboard.server.dao.yunteng.entities.User;
16 17 import org.thingsboard.server.dao.yunteng.mapper.SysNoticeUserMapper;
  18 +import org.thingsboard.server.dao.yunteng.mapper.UserMapper;
17 19 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
18 20 import org.thingsboard.server.dao.yunteng.service.SysNoticeUserService;
19 21
... ... @@ -29,93 +31,101 @@ import java.util.stream.Collectors;
29 31 * @date: 2021/12/2-20:43
30 32 */
31 33 @Service
  34 +@RequiredArgsConstructor
32 35 public class SysNoticeUserServiceImpl
33   - extends AbstractBaseService<SysNoticeUserMapper, SysNoticeUser>
34   - implements SysNoticeUserService {
  36 + extends AbstractBaseService<SysNoticeUserMapper, SysNoticeUser>
  37 + implements SysNoticeUserService {
  38 + private final UserMapper userMapper;
35 39
36   - @Override
37   - public YtPageData<SysNoticeUserDTO> page(Map<String, Object> queryMap) {
38   - return getPage(queryMap);
39   - }
  40 + @Override
  41 + public YtPageData<SysNoticeUserDTO> page(Map<String, Object> queryMap) {
  42 + return getPage(queryMap);
  43 + }
40 44
41   - @Override
42   - public YtPageData<SysNoticeUserDTO> pageByNoticeId(Map<String, Object> queryMap) {
43   - return getPage(queryMap);
44   - }
  45 + @Override
  46 + public YtPageData<SysNoticeUserDTO> pageByNoticeId(Map<String, Object> queryMap) {
  47 + return getPage(queryMap);
  48 + }
45 49
46   - @Override
47   - public YtPageData<SysNoticeUserDTO> read(Map<String, Object> queryMap, String currentUserId) {
48   - queryMap.put("creator", currentUserId);
49   - return getPage(queryMap);
50   - }
  50 + @Override
  51 + public YtPageData<SysNoticeUserDTO> read(Map<String, Object> queryMap, String currentUserId) {
  52 + queryMap.put("creator", currentUserId);
  53 + return getPage(queryMap);
  54 + }
51 55
52   - @Override
53   - public SysNoticeUserDTO get(String id, String tenantId) {
54   - SysNoticeUser sysNoticeUser = baseMapper.get(id, tenantId).getEntity(SysNoticeUser.class);
55   - if (!FastIotConstants.ReadState.READ.equals(sysNoticeUser.getReadStatus())
56   - || sysNoticeUser.getReadDate() == null) {
57   - // 设置已读
58   - sysNoticeUser.setReadStatus(FastIotConstants.ReadState.READ);
59   - sysNoticeUser.setReadDate(LocalDateTime.now());
60   - baseMapper.update(
61   - null,
62   - new LambdaUpdateWrapper<SysNoticeUser>()
63   - .eq(SysNoticeUser::getId, sysNoticeUser.getId())
64   - .set(SysNoticeUser::getReadStatus, sysNoticeUser.getReadStatus())
65   - .set(SysNoticeUser::getReadDate, sysNoticeUser.getReadDate()));
  56 + @Override
  57 + public SysNoticeUserDTO get(String id, String tenantId) {
  58 + SysNoticeUser sysNoticeUser = baseMapper.get(id, tenantId).getEntity(SysNoticeUser.class);
  59 + if (!FastIotConstants.ReadState.READ.equals(sysNoticeUser.getReadStatus())
  60 + || sysNoticeUser.getReadDate() == null) {
  61 + // 设置已读
  62 + sysNoticeUser.setReadStatus(FastIotConstants.ReadState.READ);
  63 + sysNoticeUser.setReadDate(LocalDateTime.now());
  64 + baseMapper.update(
  65 + null,
  66 + new LambdaUpdateWrapper<SysNoticeUser>()
  67 + .eq(SysNoticeUser::getId, sysNoticeUser.getId())
  68 + .set(SysNoticeUser::getReadStatus, sysNoticeUser.getReadStatus())
  69 + .set(SysNoticeUser::getReadDate, sysNoticeUser.getReadDate()));
  70 + }
  71 + return sysNoticeUser.getDTO(SysNoticeUserDTO.class);
66 72 }
67   - return sysNoticeUser.getDTO(SysNoticeUserDTO.class);
68   - }
69 73
70   - @Override
71   - public void saveSysNoticeUser(
72   - List<String> userIds, String tenantId, String noticeId, String status) {
73   - List<SysNoticeUser> sysNoticeUserList = new ArrayList<>();
74   - userIds.forEach(
75   - userId -> {
76   - SysNoticeUser sysNoticeUser = new SysNoticeUser();
77   - sysNoticeUser.setNoticeId(noticeId);
78   - sysNoticeUser.setStatus(status);
79   - sysNoticeUser.setTenantId(tenantId);
80   - sysNoticeUser.setReadStatus(FastIotConstants.ReadState.UNREAD);
81   - sysNoticeUser.setReceiverId(userId);
82   - sysNoticeUserList.add(sysNoticeUser);
83   - });
84   - insertBatch(sysNoticeUserList, sysNoticeUserList.size());
85   - }
  74 + @Override
  75 + public void saveSysNoticeUser(
  76 + List<String> userIds, String tenantId, String noticeId, String status) {
  77 + List<User> userList = userMapper
  78 + .selectList(
  79 + new LambdaQueryWrapper<User>().in(User::getId, userIds))
  80 + .stream()
  81 + .collect(Collectors.toList());
  82 + List<SysNoticeUser> sysNoticeUserList = new ArrayList<>();
  83 + userList.forEach(
  84 + user -> {
  85 + SysNoticeUser sysNoticeUser = new SysNoticeUser();
  86 + sysNoticeUser.setNoticeId(noticeId);
  87 + sysNoticeUser.setStatus(status);
  88 + sysNoticeUser.setTenantId(tenantId);
  89 + sysNoticeUser.setReadStatus(FastIotConstants.ReadState.UNREAD);
  90 + sysNoticeUser.setReceiverId(user.getId());
  91 + sysNoticeUser.setReceiverName(user.getRealName());
  92 + sysNoticeUserList.add(sysNoticeUser);
  93 + });
  94 + insertBatch(sysNoticeUserList, sysNoticeUserList.size());
  95 + }
86 96
87   - @Override
88   - public List<String> getSysNoticeUserIdsByNoticeId(String noticeId) {
89   - if (StringUtils.isAllEmpty(noticeId)) {
90   - throw new YtDataValidationException(ErrorMessage.INTERNAL_ERROR.name());
  97 + @Override
  98 + public List<String> getSysNoticeUserIdsByNoticeId(String noticeId) {
  99 + if (StringUtils.isAllEmpty(noticeId)) {
  100 + throw new YtDataValidationException(ErrorMessage.INTERNAL_ERROR.name());
  101 + }
  102 + return baseMapper
  103 + .selectList(
  104 + new LambdaQueryWrapper<SysNoticeUser>().eq(SysNoticeUser::getNoticeId, noticeId))
  105 + .stream()
  106 + .map(SysNoticeUser::getId)
  107 + .collect(Collectors.toList());
91 108 }
92   - return baseMapper
93   - .selectList(
94   - new LambdaQueryWrapper<SysNoticeUser>().eq(SysNoticeUser::getNoticeId, noticeId))
95   - .stream()
96   - .map(SysNoticeUser::getId)
97   - .collect(Collectors.toList());
98   - }
99 109
100   - @Override
101   - public boolean updateSysNoticeUsersStatusByNoticeId(String id, String status) {
102   - if (StringUtils.isAllEmpty(id) || StringUtils.isAllEmpty(status)) {
103   - throw new YtDataValidationException(ErrorMessage.INTERNAL_ERROR.name());
  110 + @Override
  111 + public boolean updateSysNoticeUsersStatusByNoticeId(String id, String status) {
  112 + if (StringUtils.isAllEmpty(id) || StringUtils.isAllEmpty(status)) {
  113 + throw new YtDataValidationException(ErrorMessage.INTERNAL_ERROR.name());
  114 + }
  115 + return baseMapper.updateSysNoticeUsersStatusByNoticeId(id, status);
104 116 }
105   - return baseMapper.updateSysNoticeUsersStatusByNoticeId(id, status);
106   - }
107 117
108   - @Override
109   - public boolean deleteNoticUserByNoticeId(List<String> noticeId) {
  118 + @Override
  119 + public boolean deleteNoticUserByNoticeId(List<String> noticeId) {
110 120
111   - return baseMapper.delete(
112   - new LambdaQueryWrapper<SysNoticeUser>().in(SysNoticeUser::getNoticeId, noticeId))
113   - > 0;
114   - }
  121 + return baseMapper.delete(
  122 + new LambdaQueryWrapper<SysNoticeUser>().in(SysNoticeUser::getNoticeId, noticeId))
  123 + > 0;
  124 + }
115 125
116   - private YtPageData<SysNoticeUserDTO> getPage(Map<String, Object> queryMap) {
117   - IPage<SysNoticeUser> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false);
118   - IPage<SysNoticeUserDTO> pageDto = baseMapper.page(page, queryMap);
119   - return getPageData(pageDto, SysNoticeUserDTO.class);
120   - }
  126 + private YtPageData<SysNoticeUserDTO> getPage(Map<String, Object> queryMap) {
  127 + IPage<SysNoticeUser> page = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME, false);
  128 + IPage<SysNoticeUserDTO> pageDto = baseMapper.page(page, queryMap);
  129 + return getPageData(pageDto, SysNoticeUserDTO.class);
  130 + }
121 131 }
... ...
... ... @@ -13,6 +13,7 @@
13 13 <result property="updateTime" column="update_time"/>
14 14 <result property="tenantId" column="tenant_id"/>
15 15 <result property="id" column="id"/>
  16 + <result property="receiverName" column="receiver_name"/>
16 17 <association property="user" column="receiver_id"
17 18 javaType="org.thingsboard.server.common.data.yunteng.dto.UserDTO">
18 19 <result property="realName" column="real_name"/>
... ... @@ -37,7 +38,7 @@
37 38 </sql>
38 39
39 40 <sql id="columns">
40   - SELECT snu.receiver_id receiver_id,
  41 + SELECT snu.receiver_id receiver_id,snu.receiver_name,
41 42 snu.notice_id notice_id,
42 43 snu.read_status read_status,
43 44 snu.read_date read_date,
... ...