package com.apobates.forum.thrones.event; import com.apobates.forum.core.entity.Board; import com.apobates.forum.core.entity.BoardGroup; import com.apobates.forum.core.entity.BoardModerator; import com.apobates.forum.core.entity.ModeratorLevelEnum; import com.apobates.forum.core.entity.proxy.BoardGroupReplica; import com.apobates.forum.core.entity.proxy.BoardReplica; import com.apobates.forum.core.impl.event.ModeratorBornEvent; import com.apobates.forum.core.service.BoardGroupService; import com.apobates.forum.core.service.BoardService; import com.apobates.forum.letterbox.entity.ForumLetter; import com.apobates.forum.letterbox.entity.ForumLetterReceiver; import com.apobates.forum.letterbox.service.ForumLetterService; import com.apobates.forum.member.entity.MemberRoleEnum; import com.github.davidmarquis.redisq.Message; import com.github.davidmarquis.redisq.consumer.MessageListener; import com.github.davidmarquis.redisq.consumer.retry.RetryableMessageException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; import java.util.Optional; @Component("bornNotice") public class ModeratorBornNoticeListener implements MessageListener { @Autowired private BoardService boardService; @Autowired private BoardGroupService boardGroupService; @Autowired private ForumLetterService forumLetterService; private final static Logger logger = LoggerFactory.getLogger(ModeratorBornNoticeListener.class); @Override public void onMessage(Message message) throws RetryableMessageException { logger.info("[Moderator][BornEvent][2]版主任命通知开始发送"); BoardModerator bm = message.getPayload().getModerator(); MemberRoleEnum currentRole = bm.isVolumesMaster()?MemberRoleEnum.MASTER:MemberRoleEnum.BM; forumLetterService.create( getModeratorBornNotice(bm.getLevel(), currentRole, boardGroupService.get(bm.getVolumesId()), boardService.get(bm.getBoardId())), List.of(new ForumLetterReceiver(bm.getMemberId(), bm.getMemberNickname()))); logger.info("[Moderator][BornEvent][2]版主任命通知发送结束"); } //生成任命通知 private ForumLetter getModeratorBornNotice(ModeratorLevelEnum level, MemberRoleEnum currentRole, Optional boardGroup, Optional board) { String section = ""; if(MemberRoleEnum.MASTER == currentRole && boardGroup.isPresent()){ BoardGroupReplica bgr = BoardGroupReplica.copyBoardGroup.apply(boardGroup.get()); section=String.format("%s的", bgr.getConnect(), bgr.getTitle()); } if(MemberRoleEnum.BM == currentRole && boardGroup.isPresent() && board.isPresent()){ BoardGroupReplica bgr = BoardGroupReplica.copyBoardGroup.apply(boardGroup.get()); BoardReplica br = BoardReplica.copyBoard.apply(board.get()); section=String.format("%s » %s的", bgr.getConnect(), bgr.getTitle(), br.getConnect(), br.getTitle()); } String content = String.format("恭喜您加入社区管理团队, 您现在是%s%s%s", section, level.getTitle(), currentRole.getTitle()); //(String title, String content, long author, String authorNames, ForumLetterTypeEnum type) return ForumLetter.noticeLetter("版主任命通知", content); } }