1.简化messageMarks的逻辑

This commit is contained in:
乾乾
2025-05-08 09:19:43 +08:00
parent 323435b67e
commit ede68a4dae
2 changed files with 16 additions and 24 deletions

View File

@@ -43,22 +43,16 @@ public class ChatMessageResp extends BaseEntity {
private Integer type;
@Schema(description ="消息内容不同的消息类型,内容体不同")
private Object body;
@Schema(description ="消息标记")
private MessageMark messageMark;
}
@Data
public static class MessageMark {
@Schema(description = "扩展标记统计type为MessageMarkTypeEnum的type字段")
private Map<Integer, MarkItem> markStats;
@Data
@AllArgsConstructor
public static class MarkItem {
@Schema(description = "标记数量")
private Integer count;
@Schema(description = "当前用户是否标记")
private Boolean userMarked;
}
private Map<Integer, MarkItem> messageMarks;
}
@Data
@AllArgsConstructor
public static class MarkItem {
@Schema(description = "标记数量")
private Integer count;
@Schema(description = "当前用户是否标记")
private Boolean userMarked;
}
}

View File

@@ -60,29 +60,27 @@ public class MessageAdapter {
messageVO.setBody(msgHandler.showMsg(message));
}
//消息标记
messageVO.setMessageMark(buildMsgMark(marks, receiveUid));
messageVO.setMessageMarks(buildMsgMark(marks, receiveUid));
return messageVO;
}
private static ChatMessageResp.MessageMark buildMsgMark(List<MessageMark> marks, Long receiveUid) {
private static Map<Integer, ChatMessageResp.MarkItem> buildMsgMark(List<MessageMark> marks, Long receiveUid) {
Map<Integer, List<MessageMark>> typeMap = marks.stream().collect(Collectors.groupingBy(MessageMark::getType));
ChatMessageResp.MessageMark mark = new ChatMessageResp.MessageMark();
Map<Integer, ChatMessageResp.MessageMark.MarkItem> stats = new HashMap<>();
// 构造动态统计为主数据源
Map<Integer, ChatMessageResp.MarkItem> stats = new HashMap<>();
// 批量映射操作数量
Arrays.stream(MessageMarkTypeEnum.values()).forEach(typeEnum -> {
List<MessageMark> list = typeMap.getOrDefault(typeEnum.getType(), Collections.emptyList());
stats.put(typeEnum.getType(), new ChatMessageResp.MessageMark.MarkItem(list.size(), Optional.ofNullable(receiveUid)
stats.put(typeEnum.getType(), new ChatMessageResp.MarkItem(list.size(), Optional.ofNullable(receiveUid)
.filter(uid -> list.stream().anyMatch(m -> m != null && Objects.equals(m.getUid(), uid)))
.map(uid -> YesOrNoEnum.YES.getBool())
.orElse(YesOrNoEnum.NO.getBool())));
});
// 设置动态统计为主数据源
mark.setMarkStats(stats);
return mark;
return stats;
}
private static ChatMessageResp.UserInfo buildFromUser(Long fromUid) {