1.YesOrNoEnum新增布尔类型
2.优化消息返回时标记类型的收集
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user