package com.zhujizheng.IHome.everymoment.service; import com.zhujizheng.IHome.everymoment.dto.*; import com.zhujizheng.IHome.everymoment.sysmsg.PYEveryMomentCommentSysMsg; import com.zhujizheng.IHome.everymoment.sysmsg.PYEveryMomentSysMsg; import com.zhujizheng.IHome.everymoment.sysmsg.PYEveryMomentThumbupSysMsg; import com.zhujizheng.IHome.everymoment.vo.PYEveryMomentCommentVO; import com.zhujizheng.IHome.everymoment.vo.PYEveryMomentImgVO; import com.zhujizheng.IHome.everymoment.vo.PYEveryMomentThumbupVO; import com.zhujizheng.IHome.generator.dao.*; import com.zhujizheng.IHome.generator.mapper.*; import com.zhujizheng.IHome.everymoment.vo.PYEveryMomentVO; import com.zhujizheng.IHome.everymomentmsg.vo.PYEveryMomentMsgVO; import com.zhujizheng.IHome.util.CodeUtil; import com.zhujizheng.IHome.util.aes.AESUtil; import com.zhujizheng.IHome.util.alipush.AliPushService; import com.zhujizheng.IHome.util.dto.DTOUtils; import com.zhujizheng.IHome.everymomentmsg.net.NetEveryMomentMsg; import com.zhujizheng.IHome.websocket.server.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.tuple.Pair; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; /** * Created with IntelliJ IDEA * <p> * Author: yons * Date: 2019/03/08 * Time: 00:13 * Description: * Copyright © 2019å¹´ com.zhujizheng. All rights reserved. */ @Service @Slf4j @Transactional(rollbackFor = RuntimeException.class) public class PYEveryMomentServiceImpl implements PYEveryMomentService { @Autowired private PYEveryMomentMapper everyMomentMapper; @Autowired private PYEveryMomentImgMapper imgMapper; @Autowired private PYUserInfoMapper userInfoMapper; @Autowired private PYEveryMomentCommentMapper commentMapper; @Autowired private PYEveryMomentThumbupMapper thumbupMapper; @Autowired private CodeUtil codeUtil; @Autowired private AliPushService aliPushService; @Autowired private PYEveryMomentMsgMapper msgMapper; @Autowired private ApplicationEventPublisher publisher; private static final int DEFAULT_NUM = 10; @Override public List<PYEveryMomentVO> pullEveryMoment(PYEveryMomentPullDTO pullEveryMomentDTO) { Integer userId = pullEveryMomentDTO.getUserId(); Integer loverId = pullEveryMomentDTO.getLoverId(); String tag = pullEveryMomentDTO.getTag(); Integer emIdInt = pullEveryMomentDTO.getEmId(); String keyword = pullEveryMomentDTO.getKeyword(); if (emIdInt == null) { log.info("emIdIntæ•°æ®å¼‚常"); return null; } int emId = codeUtil.dealInt(emIdInt); List<PYEveryMoment> everyMomentList = null; if (userId == null && loverId == null && tag != null) { // æŸ¥è¯¢æŒ‡å®šç±»åž‹çš„æ•°æ® everyMomentList = everyMomentMapper.selectKongfuData(emId, tag, DEFAULT_NUM); } else if (userId != null && loverId != null && tag != null) { // æŸ¥è¯¢æŒ‡å®šç”¨æˆ·ï¼ŒæŒ‡å®šç±»åž‹çš„æ•°æ® everyMomentList = everyMomentMapper.selectEveryMomentWithTag(userId, loverId, emId, tag, DEFAULT_NUM); } else if (userId != null && loverId != null && keyword != null) { // æœç´¢åŠ¨æ€ everyMomentList = everyMomentMapper.selectEveryMomentWithKeyword(userId, loverId, emId, keyword, DEFAULT_NUM); } else if (userId != null && loverId != null) { // æŸ¥è¯¢æŒ‡å®šç”¨æˆ·çš„æ•°æ® everyMomentList = everyMomentMapper.selectEveryMoment(userId, loverId, emId, DEFAULT_NUM); } else { log.warn("pullEveryMomentæ•°æ®å¼‚常"); return null; } if (everyMomentList == null) { log.info("pullEveryMoment 查询动æ€é›†åˆä¸ºç©º" + pullEveryMomentDTO); return null; } // 动æ€VOé›†åˆ List<PYEveryMomentVO> everyMomentVOList = new ArrayList<>(); // é历所有动æ€æ¨¡åž‹ for (PYEveryMoment everyMoment : everyMomentList) { // 获å–æŸæ¡åŠ¨æ€æ¨¡åž‹ // æ ¹æ®åŠ¨æ€æ¨¡åž‹èŽ·å–动æ€VO Pair<PYEveryMomentVO, Integer> pair = PYEveryMomentVO.createVO(everyMoment, userInfoMapper, imgMapper, commentMapper, thumbupMapper); if (pair != null) { // 将动æ€VOæ·»åŠ åˆ°åŠ¨æ€VOé›†åˆ everyMomentVOList.add(pair.getLeft()); } else { log.info("pullEveryMoment æ ¹æ®åŠ¨æ€æ¨¡åž‹èŽ·å–动æ€VO为空" + everyMoment); } } return everyMomentVOList; } @Override public PYEveryMomentVO getEveryMomentByEmId(int emId) { log.info("emId = " + emId); // æ ¹æ®åŠ¨æ€id获å–动æ€æ¨¡åž‹ PYEveryMoment everyMoment = everyMomentMapper.selectEveryMomentByEmId(emId); // æ ¹æ®åŠ¨æ€æ¨¡åž‹èŽ·å–动æ€VO Pair<PYEveryMomentVO, Integer> pair = PYEveryMomentVO.createVO(everyMoment, userInfoMapper, imgMapper, commentMapper, thumbupMapper); if (pair == null) { log.info("getEveryMomentByEmId 获å–动æ€æ¨¡åž‹VO为空"); return null; } return pair.getLeft(); } @Override public PYEveryMomentVO pushEveryMoment(PYEveryMomentPushDTO pushDTO) { PYEveryMoment everyMoment = PYEveryMoment.createEveryMoment(pushDTO); int insertResult = everyMomentMapper.insertEveryMoment(everyMoment); if (insertResult == 0) { log.info("pushEveryMoment æ’入动æ€å¤±è´¥" + everyMoment); return null; } if (pushDTO.getImgs() != null && pushDTO.getImgs().size() > 0) { List<PYEveryMomentPushDTO.PYPushEveryMomentImgDTO> imgDTOList = pushDTO.getImgs(); log.info("imgDTOList = " + imgDTOList); for (PYEveryMomentPushDTO.PYPushEveryMomentImgDTO imgDTO : imgDTOList) { if (imgDTO.getType() == null) { imgDTO.setType(1); } assert everyMoment != null; int result = imgMapper.insertImgWithEmId(everyMoment.getId(), imgDTO.getUrl(), imgDTO.getIdx(), imgDTO.getWidth(), imgDTO.getHeight(), imgDTO.getOrientation(), pushDTO.getUserId(), pushDTO.getTag(), imgDTO.getType(), pushDTO.getReleaseTime()); if (result == 0) { log.info("pushEveryMoment æ’入动æ€çš„图片失败" + imgDTO + everyMoment); } } } /// å‘出事件通知 publisher.publishEvent(pushDTO); Pair<PYEveryMomentVO, Integer> pair = PYEveryMomentVO.createVO(everyMoment, userInfoMapper, imgMapper, commentMapper, thumbupMapper); if (pair == null) { log.info("pushEveryMoment æ ¹æ®åŠ¨æ€æ¨¡åž‹èŽ·å–动æ€VO为空" + everyMoment); return null; } // æ ¹æ®åŠ¨æ€VOåˆ›å»ºä¸€ä¸ªç³»ç»Ÿæ¶ˆæ¯ PYEveryMomentSysMsg sysMsg = PYEveryMomentSysMsg.createSystemMessage(pair.getLeft(), pair.getRight()); // æ’入系统消æ¯å¹¶æŽ¨é€ this.pushRemoteMessage(sysMsg); return pair.getLeft(); } @Override public int deleteEveryMoment(PYEveryMomentDeleteDTO deleteEveryMomentDTO) { int result = everyMomentMapper.updateEveryMoment(deleteEveryMomentDTO.getEmId(), deleteEveryMomentDTO.getUserId()); if (result == 0) { log.info("deleteEveryMoment åˆ é™¤åŠ¨æ€å¤±è´¥" + deleteEveryMomentDTO); } PYEveryMomentMsg sysMsg = msgMapper.selectMsgWithUserIdAndMsgTypeAndMsgTypeId(deleteEveryMomentDTO.getUserId(), 1, deleteEveryMomentDTO.getEmId()); this.deleteSystemMessage(sysMsg); return result; } @Override public PYEveryMomentThumbupVO thumbupEveryMoment(PYEveryMomentThumbupDTO thumbupDTO) { log.info("thumbupDTO = " + thumbupDTO); List<PYEveryMomentThumbup> thumbupList = thumbupMapper.selectAllThumbupWithEmIdAndUserId(thumbupDTO.getEmId(), thumbupDTO.getFromUserId()); log.info("thumbupList = " + thumbupList); int result; PYEveryMomentThumbup thumbup; AtomicBoolean needCreateMsg = new AtomicBoolean(); if (thumbupList == null || thumbupList.size() == 0) { // 如果ä¸èƒ½æŸ¥åˆ°ç‚¹èµžæ•°æ®ï¼Œå°±æ’入一æ¡æ–°çš„ç‚¹èµžæ•°æ® thumbup = PYEveryMomentThumbup.createThumbup(thumbupDTO); result = thumbupMapper.insertThumbupEveryMoment(thumbup); needCreateMsg.set(true); } else { // 如果能查到点赞数æ®ï¼Œå°±æ›´æ–°æ—§çš„点赞数æ®ï¼Œé˜²æ¢å¤šæ¬¡"点赞/å–消点赞"产生大é‡ç‚¹èµžè®°å½• thumbup = thumbupList.get(0); result = thumbupMapper.updateThumbupEveryMoment( thumbup.getId(), thumbup.getEmId(), thumbup.getFromUserId(), thumbup.getToUserId(), thumbup.getThumbupTime(), 0); needCreateMsg.set(false); } if (result == 0) { log.info("thumbupEveryMoment 更新或æ’入点赞数æ®å¤±è´¥" + thumbupList); return null; } else { PYEveryMomentThumbupVO thumbupVO = PYEveryMomentThumbupVO.createThumbupVO(thumbup, userInfoMapper); if (thumbupVO == null) { log.info("thumbupEveryMoment 获å–点赞VO为空" + thumbup); return null; } if (needCreateMsg.get()) { // 创建一æ¡ç³»ç»Ÿæ¶ˆæ¯ PYEveryMomentThumbupSysMsg sysMsg = PYEveryMomentThumbupSysMsg.createSystemMessage(thumbupVO, everyMomentMapper, imgMapper, userInfoMapper); // æ’入系统消æ¯å¹¶æŽ¨é€ this.pushRemoteMessage(sysMsg); } else { PYEveryMomentMsg sysMsg = msgMapper.selectMsgWithUserIdAndMsgTypeAndMsgTypeId(thumbupVO.getFromUserId(), 3, thumbupVO.getThumbupId()); msgMapper.updateMsgIsRead(sysMsg.getMsgId(), false); } return thumbupVO; } } @Override public void dealThumbupEveryMoment(String dataString, WebSocketServer socketServer, String protocolNumber) { PYEveryMomentThumbupDTO thumbupDTO = (PYEveryMomentThumbupDTO) DTOUtils.createDTO(dataString, PYEveryMomentThumbupDTO.class); if (thumbupDTO == null) { log.info("dealThumbupEveryMoment 解æžç‚¹èµžæ•°æ®å¼‚常" + dataString + protocolNumber); return; } PYEveryMomentThumbupVO thumbupVO = this.thumbupEveryMoment(thumbupDTO); // socketServer.send(thumbupVO, protocolNumber); } @Override public int cancelThumbupEveryMoment(PYEveryMomentCancelThumbupDTO cancelThumbupDTO) { int result = thumbupMapper.updateThumbupEveryMoment(cancelThumbupDTO.getThumbupId(), cancelThumbupDTO.getEmId(), cancelThumbupDTO.getFromUserId(), cancelThumbupDTO.getToUserId(), cancelThumbupDTO.getThumbupTime(), 1); if (result == 0) { log.info("cancelThumbupEveryMoment 更新点赞数æ®å¤±è´¥" + cancelThumbupDTO); } PYEveryMomentMsg sysMsg = msgMapper.selectMsgWithUserIdAndMsgTypeAndMsgTypeId(cancelThumbupDTO.getFromUserId(), 3, cancelThumbupDTO.getThumbupId()); this.deleteSystemMessage(sysMsg); return result; } @Override public void dealCancelThumbupEveryMoment(String dataString, WebSocketServer socketServer, String protocolNumber) { log.info("dataString = " + dataString); PYEveryMomentCancelThumbupDTO cancelThumbupDTO = (PYEveryMomentCancelThumbupDTO)DTOUtils.createDTO(dataString, PYEveryMomentCancelThumbupDTO.class); log.info("cancelThumbupDTO = " + cancelThumbupDTO); if (cancelThumbupDTO == null) { log.info("dealCancelThumbupEveryMoment 解æžå–消点赞数æ®å¼‚常" + dataString + protocolNumber); return; } int result = this.cancelThumbupEveryMoment(cancelThumbupDTO); // socketServer.send(result, protocolNumber); } @Override public PYEveryMomentCommentVO commentEveryMoment(PYEveryMomentCommentDTO commentDTO) { PYEveryMomentComment comment = PYEveryMomentComment.createComment(commentDTO); log.info("comment = " + comment); int result = commentMapper.insertCommentEveryMoment(comment); log.info("result = " + result + "comment = " + comment); if (result == 0) { log.info("commentEveryMoment æ’入评论数æ®å¤±è´¥" + commentDTO); return null; } PYEveryMomentCommentVO commentVO = PYEveryMomentCommentVO.createCommentVO(comment, userInfoMapper); if (commentVO == null) { log.info("commentEveryMoment 获å–评论数æ®å¼‚常" + commentDTO); return null; } // 创建一æ¡ç³»ç»Ÿæ¶ˆæ¯ PYEveryMomentCommentSysMsg sysMsg = PYEveryMomentCommentSysMsg.createSystemMessage(commentVO, everyMomentMapper, imgMapper, userInfoMapper); // æ’入系统消æ¯å¹¶æŽ¨é€ this.pushRemoteMessage(sysMsg); return commentVO; } @Override public int deleteCommentEveryMoment(PYEveryMomentDeleteCommentDTO deleteCommentDTO) { log.info("deleteCommentDTO = " + deleteCommentDTO); int result = commentMapper.updateCommentEveryMoment(deleteCommentDTO.getCommentId(), deleteCommentDTO.getEmId(), deleteCommentDTO.getFromUserId(), deleteCommentDTO.getToUserId(), deleteCommentDTO.getCommentTime()); if (result == 0) { log.info("deleteCommentEveryMoment åˆ é™¤è¯„è®ºå¤±è´¥" + deleteCommentDTO); } else { PYEveryMomentMsg sysMsg = msgMapper.selectMsgWithUserIdAndMsgTypeAndMsgTypeId(deleteCommentDTO.getFromUserId(), 2, deleteCommentDTO.getCommentId()); this.deleteSystemMessage(sysMsg); } return result; } private void deleteSystemMessage(PYEveryMomentMsg sysMsg) { log.info("sysMsg = " + sysMsg); if (sysMsg == null) { return; } int result = msgMapper.updateMsg(sysMsg.getMsgId(), true); if (result == 0) { log.info("deleteSystemMessage åˆ é™¤ç³»ç»Ÿæ¶ˆæ¯å¤±è´¥"); } } @Override public List<PYEveryMomentImgVO> getImgListWithUserId(int userId) { log.info("getImgListWithUserId userId = " + userId); List<PYEveryMomentImg> imgList = imgMapper.selectImgListWithUserId(userId); List<PYEveryMomentImgVO> imgVOList = new ArrayList<>(); for (PYEveryMomentImg img: imgList) { PYEveryMomentImgVO vo = PYEveryMomentImgVO.createImgVO(img); if (vo != null) { imgVOList.add(vo); } } return imgVOList; } /** * @Description: 推é€è¿œç¨‹æ¶ˆæ¯ * @Param: com.zhujizheng.IHome.generator.dao.PYSystemMessage * @return: æ— * @Author: 朱å‰å³¥ * @Date: 2019/04/30 */ private void pushRemoteMessage(PYEveryMomentMsg sysMsg) { if (sysMsg == null) { log.info("pushRemoteMessage 创建一æ¡ç³»ç»Ÿæ¶ˆæ¯å¤±è´¥"); return; } if (sysMsg.getMsgId() == null) { // æ’入一æ¡ç³»ç»Ÿæ¶ˆæ¯ int result = msgMapper.insertMsg(sysMsg); if (result == 0) { log.info("pushRemoteMessage æ’入一æ¡ç³»ç»Ÿæ¶ˆæ¯å¤±è´¥" + sysMsg); return; } log.info("pushRemoteMessage æ’入一æ¡ç³»ç»Ÿæ¶ˆæ¯æˆåŠŸï¼š" + sysMsg); } else { // 更新一æ¡ç³»ç»Ÿæ¶ˆæ¯ int result = msgMapper.updateMsg(sysMsg.getMsgId(), false); if (result == 0) { log.info("pushRemoteMessage 更新一æ¡ç³»ç»Ÿæ¶ˆæ¯å¤±è´¥" + sysMsg); return; } } // 获å–æœªè¯»æ¶ˆæ¯ List<PYEveryMomentMsg> list = msgMapper.selectUnreadMsgs(sysMsg.getLoverId()); if (list == null || list.size() == 0) { log.info("pushRemoteMessage 获å–未读消æ¯åˆ—表异常" + list + sysMsg); return; } log.info("获å–未读消æ¯list = " + list); PYEveryMomentMsgVO msgVO = PYEveryMomentMsgVO.createVO(sysMsg, userInfoMapper); if (msgVO == null) { return; } if (null != msgVO.getContent() && msgVO.getNeedDecode()) { String result = AESUtil.commonDecrypt(msgVO.getContent()); msgVO.setContent(result); } // åœ¨çº¿æŽ¨é€ String sid = sysMsg.getLoverId().toString(); WebSocketServer item = WebSocketServer.getWebSocketMap().get(sid); if (null == item) { // ç¦»çº¿æŽ¨é€ log.info("离线推é€ï¼šmsgVO:" + msgVO + ", sysMsg.getLoverId() = " + sysMsg.getLoverId() + "list.size() = " + list.size()); aliPushService.pushRemoteNotify(msgVO, sysMsg.getLoverId(), list.size()); return; } log.info("在线推é€ï¼šmsgVO:" + msgVO + ", sid = " + sid); NetEveryMomentMsg netEveryMomentMsg = new NetEveryMomentMsg(); netEveryMomentMsg.sendObject(msgVO, sid); } }