| | |
| | | package com.doumee.service.business.impl; |
| | | |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | | import com.doumee.config.listener.event.IntegralEvent; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.CommentJoinMapper; |
| | | import com.doumee.dao.business.CommentMapper; |
| | | import com.doumee.dao.business.MemberMapper; |
| | | import com.doumee.dao.business.MultifileMapper; |
| | | import com.doumee.dao.business.model.Activity; |
| | | import com.doumee.dao.business.model.Comment; |
| | | import com.doumee.dao.business.model.Member; |
| | | import com.doumee.dao.business.model.Multifile; |
| | | import com.doumee.dao.web.dto.CommentDTO; |
| | | import com.doumee.dao.web.dto.ZanDTO; |
| | | import com.doumee.dao.web.dto.activity.ActivityCommentDTO; |
| | | import com.doumee.dao.web.dto.activity.ActivityReplyCommentDTO; |
| | | import com.doumee.dao.web.request.CommentApplyRequest; |
| | | import com.doumee.service.business.CommentService; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | |
| | | private CommentJoinMapper commentJoinMapper; |
| | | |
| | | @Autowired |
| | | private MemberService memberService; |
| | | private MemberMapper memberMapper; |
| | | |
| | | @Autowired |
| | | private ZanService zanService; |
| | | |
| | | @Autowired |
| | | private ApplicationEventPublisher applicationEventPublisher; |
| | | |
| | | @Autowired |
| | | private MultifileMapper multifileMapper; |
| | | |
| | | @Autowired |
| | | private SystemDictDataBiz systemDictDataBiz; |
| | | |
| | | @Override |
| | | public Integer create(Comment comment,Integer memberId) { |
| | | LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal(); |
| | | public Comment apply(CommentApplyRequest comment, Integer memberId) { |
| | | Comment target = new Comment(); |
| | | target.setCreator(loginUserInfo.getId()); |
| | | target.setCreateDate(new Date()); |
| | | target.setEditor(loginUserInfo.getId()); |
| | | target.setEditDate(new Date()); |
| | | target.setRemark(comment.getRemark()); |
| | | target.setMemberId(loginUserInfo.getMemberId()); |
| | | target.setMemberId(memberId); |
| | | target.setActivityId(comment.getActivityId()); |
| | | target.setContent(comment.getContent()); |
| | | target.setAnonymous(comment.getAnonymous()); |
| | | target.setAnonymous(Constants.ONE); |
| | | target.setStatus(Constants.ZERO); |
| | | target.setType(Constants.ZERO); |
| | | |
| | | if (comment.getReplyId() != null){ |
| | | Comment reply = commentMapper.selectById(comment.getReplyId()); |
| | | reply = Optional.ofNullable(reply).orElseThrow(() -> new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "回复目标不存在")); |
| | | target.setReplyId(reply.getId()); |
| | | target.setReplyMemberId(reply.getMemberId()); |
| | | target.setCommentId(reply.getId()); |
| | | target.setType(Constants.ONE); |
| | | } |
| | | |
| | |
| | | target.setRecIntegral(new BigDecimal("0")); |
| | | commentMapper.insert(target); |
| | | |
| | | String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() ; |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(comment.getMultifileList())){ |
| | | String commentFile = path + systemDictDataBiz.queryByCode(Constants.OSS, Constants.COMMENT_FILE).getCode(); |
| | | for (Multifile multifile:comment.getMultifileList()) { |
| | | multifile.setCreateDate(new Date()); |
| | | multifile.setEditDate(new Date()); |
| | | multifile.setObjId(target.getId()); |
| | | multifile.setObjType(Constants.MultiFile.COMMENT_FILE.getKey()); |
| | | multifile.setFileFullUrl(commentFile + multifile.getFileurl()); |
| | | } |
| | | multifileMapper.insert(comment.getMultifileList()); |
| | | target.setMultifileList(comment.getMultifileList()); |
| | | } |
| | | |
| | | Member member = memberMapper.selectById(memberId); |
| | | if(Objects.nonNull(member)){ |
| | | target.setNikeName(member.getNickname()); |
| | | if(StringUtils.isNotBlank(member.getImgurl())){ |
| | | String memberFile = path + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode(); |
| | | target.setMemberImgUrl(memberFile + member.getImgurl()); |
| | | } |
| | | } |
| | | IntegralEvent<Comment> integralEvent = new IntegralEvent(this,target, Constants.CoffeeBeanTask.POST_COMMENTS,memberId); |
| | | applicationEventPublisher.publishEvent(integralEvent); |
| | | |
| | | return comment.getId(); |
| | | target.setZanCount(Constants.ZERO); |
| | | target.setZanStatus(Constants.ZERO); |
| | | return target; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | @Override |
| | | public void deleteById(Integer id) { |
| | |
| | | MPJLambdaWrapper<Comment> queryWrapper = new MPJLambdaWrapper<>(); |
| | | Utils.MP.blankToNull(pageWrap.getModel()); |
| | | queryWrapper.selectAll(Comment.class); |
| | | if(Objects.isNull(pageWrap.getModel().getMemberId())){ |
| | | queryWrapper.select(" 0 ",ActivityCommentDTO::getZanStatus); |
| | | }else{ |
| | | queryWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.MEMBER_ID = "+pageWrap.getModel().getMemberId()+" and z.ISDELETED = 0 and z.OBJ_TYPE = 1) ",ActivityCommentDTO::getZanStatus); |
| | | } |
| | | queryWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.ISDELETED = 0 and z.OBJ_TYPE = 0) ",ActivityCommentDTO::getZanCount); |
| | | queryWrapper.selectAs(Member::getNickname,ActivityCommentDTO::getNikeName); |
| | | queryWrapper.selectAs(Member::getImgurl,ActivityCommentDTO::getMemberImgUrl); |
| | | queryWrapper.selectAs(Member::getImgurl,ActivityCommentDTO::getMemberImgUrl); |
| | | queryWrapper.leftJoin(Member.class,Member::getId,Comment::getMemberId); |
| | | queryWrapper.eq(Comment::getType, Constants.ZERO); |
| | | queryWrapper.eq(Comment::getStatus, Constants.ZERO); |
| | | queryWrapper.eq(Comment::getActivityId,pageWrap.getModel().getActivityId()); |
| | | queryWrapper.orderByDesc(Comment::getId); |
| | | IPage<ActivityCommentDTO> result = commentJoinMapper.selectJoinPage(page, ActivityCommentDTO.class, queryWrapper); |
| | | |
| | | if (CollectionUtils.isEmpty(result.getRecords())){ |
| | |
| | | } |
| | | // 查询各个评论 的首条回复 和回复总条数 |
| | | List<Integer> commentIds = result.getRecords().stream().map(s -> s.getId()).collect(Collectors.toList()); |
| | | |
| | | MPJLambdaWrapper<Comment> replyWrapper = new MPJLambdaWrapper<>(); |
| | | Utils.MP.blankToNull(pageWrap.getModel()); |
| | | replyWrapper.selectAs(Comment::getId,ActivityReplyCommentDTO::getId); |
| | | if(Objects.isNull(pageWrap.getModel().getMemberId())){ |
| | | replyWrapper.select(" 0 ",ActivityReplyCommentDTO::getZanStatus); |
| | | }else{ |
| | | replyWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.MEMBER_ID = "+pageWrap.getModel().getMemberId()+" and z.ISDELETED = 0 and z.OBJ_TYPE = 1) ",ActivityReplyCommentDTO::getZanStatus); |
| | | } |
| | | replyWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.ISDELETED = 0 and z.OBJ_TYPE = 0) ",ActivityReplyCommentDTO::getZanCount); |
| | | replyWrapper.selectAs(Comment::getCommentId,ActivityReplyCommentDTO::getCommentId); |
| | | replyWrapper.selectAs(Comment::getMemberId,ActivityReplyCommentDTO::getMemberId); |
| | | replyWrapper.selectAs(Comment::getContent,ActivityReplyCommentDTO::getContent); |
| | |
| | | replyWrapper.in(Comment::getCommentId,commentIds); |
| | | replyWrapper.groupBy(Comment::getCommentId); |
| | | |
| | | List<ActivityReplyCommentDTO> activityCommentDTOS = commentJoinMapper.selectJoinList(ActivityReplyCommentDTO.class, queryWrapper); |
| | | |
| | | List<ActivityReplyCommentDTO> activityCommentDTOS = commentJoinMapper.selectJoinList(ActivityReplyCommentDTO.class, replyWrapper); |
| | | List<Integer> integerStream = activityCommentDTOS.stream().map(s -> s.getId()).collect(Collectors.toList()); |
| | | commentIds.addAll(integerStream); |
| | | |
| | | Map<Integer, ZanDTO> count = zanService.count(commentIds); |
| | | |
| | | Map<Integer, ActivityReplyCommentDTO> collect = activityCommentDTOS.stream().collect(Collectors.toMap(s -> s.getCommentId(), s -> s)); |
| | | String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode(); |
| | | String memberFile = path + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode(); |
| | | String commentFile = path + systemDictDataBiz.queryByCode(Constants.OSS, Constants.COMMENT_FILE).getCode(); |
| | | |
| | | List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>() |
| | | .lambda() |
| | | .eq(Multifile::getIsdeleted,Constants.ZERO) |
| | | .in(Multifile::getObjId,commentIds) |
| | | .eq(Multifile::getObjType,Constants.MultiFile.COMMENT_FILE.getKey()) |
| | | .orderByDesc(Multifile::getId) |
| | | ); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ |
| | | for (Multifile multifile:multifileList) { |
| | | multifile.setFileFullUrl(commentFile + multifile.getFileurl()); |
| | | } |
| | | } |
| | | result.getRecords().forEach(s->{ |
| | | |
| | | s.setMemberImgUrl(StringUtils.isNotBlank(s.getMemberImgUrl())?memberFile+s.getMemberImgUrl():null); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ |
| | | s.setMultifileList(multifileList.stream().filter(t -> t.getObjId().equals(s.getId())).collect(Collectors.toList())); |
| | | } |
| | | ZanDTO object = MapUtils.getObject(count, s.getId()); |
| | | |
| | | ActivityReplyCommentDTO replyCommentDTO = collect.get(s.getId()); |
| | | if(Objects.nonNull(replyCommentDTO)){ |
| | | ZanDTO replyZan = MapUtils.getObject(count, replyCommentDTO.getId()); |
| | | replyCommentDTO.setZanCount(replyZan != null ? replyZan.getCount() : 0); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ |
| | | replyCommentDTO.setMultifileList(multifileList.stream().filter(t -> t.getObjId().equals(s.getId())).collect(Collectors.toList())); |
| | | } |
| | | replyCommentDTO.setMemberImgUrl(StringUtils.isNotBlank(replyCommentDTO.getMemberImgUrl())?memberFile+replyCommentDTO.getMemberImgUrl():null); |
| | | s.setActivityReplyCommentDTO(replyCommentDTO); |
| | | s.setReplyCount(replyCommentDTO.getReplyCount()); |
| | | } |
| | | s.setZanCount(object != null ? object.getCount() : 0); |
| | | }); |
| | | |
| | | }); |
| | | return PageData.from(result); |
| | | } |
| | | |
| | |
| | | queryWrapper.selectAll(Comment.class); |
| | | queryWrapper.selectAs(Member::getNickname,ActivityReplyCommentDTO::getMemberNikeName); |
| | | queryWrapper.selectAs(Member::getImgurl,ActivityReplyCommentDTO::getMemberImgUrl); |
| | | if(Objects.isNull(pageWrap.getModel().getMemberId())){ |
| | | queryWrapper.select(" 0 ",ActivityReplyCommentDTO::getZanStatus); |
| | | }else{ |
| | | queryWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.MEMBER_ID = "+pageWrap.getModel().getMemberId()+" and z.ISDELETED = 0 and z.OBJ_TYPE = 1) ",ActivityReplyCommentDTO::getZanStatus); |
| | | } |
| | | queryWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.ISDELETED = 0 and z.OBJ_TYPE = 0) ",ActivityReplyCommentDTO::getZanCount); |
| | | queryWrapper.select("reply.NICKNAME as replyMemberNikeName"); |
| | | queryWrapper.leftJoin(Member.class,Member::getId,Comment::getMemberId); |
| | | queryWrapper.leftJoin("member reply on reply.id = t.REPLY_MEMBER_ID"); |
| | |
| | | if (CollectionUtils.isEmpty(result.getRecords())){ |
| | | return PageData.from(result); |
| | | } |
| | | |
| | | String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode(); |
| | | String memberFile = path + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode(); |
| | | String commentFile = path + systemDictDataBiz.queryByCode(Constants.OSS, Constants.COMMENT_FILE).getCode(); |
| | | List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>() |
| | | .lambda() |
| | | .eq(Multifile::getIsdeleted,Constants.ZERO) |
| | | .eq(Multifile::getObjId,pageWrap.getModel().getCommentId()) |
| | | .eq(Multifile::getObjType,Constants.MultiFile.COMMENT_FILE.getKey()) |
| | | .orderByDesc(Multifile::getId) |
| | | ); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ |
| | | for (Multifile multifile:multifileList) { |
| | | multifile.setFileFullUrl(commentFile + multifile.getFileurl()); |
| | | } |
| | | } |
| | | List<Integer> integerStream = result.getRecords().stream().map(s -> s.getId()).collect(Collectors.toList()); |
| | | |
| | | Map<Integer, ZanDTO> count = zanService.count(integerStream); |
| | | result.getRecords().forEach(s->{ |
| | | s.setMemberImgUrl(StringUtils.isNotBlank(s.getMemberImgUrl())?memberFile+s.getMemberImgUrl():null); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ |
| | | s.setMultifileList(multifileList.stream().filter(t -> t.getObjId().equals(s.getId())).collect(Collectors.toList())); |
| | | } |
| | | ZanDTO replyZan = MapUtils.getObject(count, s.getId()); |
| | | s.setZanCount(replyZan != null ? replyZan.getCount() : 0); |
| | | if (pageWrap.getModel().getCommentId().equals(s.getReplyId())){ |