1.YesOrNoEnum新增布尔类型

2.优化消息返回时标记类型的收集
This commit is contained in:
乾乾
2025-05-07 20:39:00 +08:00
parent ba7688bd1e
commit 323435b67e
5 changed files with 37 additions and 23 deletions

View File

@@ -16,10 +16,11 @@ import java.util.stream.Collectors;
@AllArgsConstructor
@Getter
public enum YesOrNoEnum {
NO(0, ""),
YES(1, ""),
NO(false,0, ""),
YES(true,1, ""),
;
private final Boolean bool;
private final Integer status;
private final String desc;

View File

@@ -42,7 +42,7 @@ public class MessageMark implements Serializable {
private Long uid;
/**
* 标记类型 1点赞 2举报
* 标记类型 @see com.hula.core.chat.domain.enums.MessageMarkTypeEnum
*/
@TableField("type")
private Integer type;

View File

@@ -33,7 +33,7 @@ public enum MessageMarkTypeEnum {
private final Integer type;
private final String desc;
private final Integer riseNum; // 需要多少个标记升级
private final Integer riseNum; // 需要多少个标记升级 TODO 达到多少次数之后触发的效果
private static final Map<Integer, MessageMarkTypeEnum> CACHE;

View File

@@ -8,6 +8,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.Map;
/**
* 消息
@@ -48,13 +49,16 @@ public class ChatMessageResp extends BaseEntity {
@Data
public static class MessageMark {
@Schema(description ="点赞数")
private Integer likeCount;
@Schema(description ="该用户是否已经点赞 0否 1是")
private Integer userLike;
@Schema(description ="举报数")
private Integer dislikeCount;
@Schema(description ="该用户是否已经举报 0否 1是")
private Integer userDislike;
@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;
}
}
}

View File

@@ -66,13 +66,22 @@ public class MessageAdapter {
private static ChatMessageResp.MessageMark buildMsgMark(List<MessageMark> marks, Long receiveUid) {
Map<Integer, List<MessageMark>> typeMap = marks.stream().collect(Collectors.groupingBy(MessageMark::getType));
List<MessageMark> likeMarks = typeMap.getOrDefault(MessageMarkTypeEnum.LIKE.getType(), new ArrayList<>());
List<MessageMark> dislikeMarks = typeMap.getOrDefault(MessageMarkTypeEnum.DISLIKE.getType(), new ArrayList<>());
ChatMessageResp.MessageMark mark = new ChatMessageResp.MessageMark();
mark.setLikeCount(likeMarks.size());
mark.setUserLike(Optional.ofNullable(receiveUid).filter(uid -> likeMarks.stream().anyMatch(a -> Objects.equals(a.getUid(), uid))).map(a -> YesOrNoEnum.YES.getStatus()).orElse(YesOrNoEnum.NO.getStatus()));
mark.setDislikeCount(dislikeMarks.size());
mark.setUserDislike(Optional.ofNullable(receiveUid).filter(uid -> dislikeMarks.stream().anyMatch(a -> Objects.equals(a.getUid(), uid))).map(a -> YesOrNoEnum.YES.getStatus()).orElse(YesOrNoEnum.NO.getStatus()));
Map<Integer, ChatMessageResp.MessageMark.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)
.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;
}