# Conflicts: # luoo_user/src/main/java/com/luoo/user/controller/UserController.java # luoo_user/src/main/java/com/luoo/user/dao/UserDao.java # luoo_user/src/main/java/com/luoo/user/service/UserService.javamain
commit
cb60dcd5e5
@ -0,0 +1,11 @@
|
||||
package com.luoo.comment.client;
|
||||
|
||||
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
|
||||
@FeignClient("luoo-user")
|
||||
public interface UserClient {
|
||||
|
||||
//todo 根据用户 IDs 获取用户昵称集合
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package com.luoo.comment.config;
|
||||
|
||||
import com.luoo.comment.constant.GlobalConstant;
|
||||
import com.luoo.comment.pojo.LoginAuthDto;
|
||||
import com.luoo.comment.utils.ThreadLocalMap;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class TokenInterceptor implements HandlerInterceptor {
|
||||
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
return HandlerInterceptor.super.preHandle(request, response, handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
||||
|
||||
String token = StringUtils.substringAfter(request.getHeader(HttpHeaders.AUTHORIZATION), "Bearer ");
|
||||
LoginAuthDto loginUser= decode(token);
|
||||
if (loginUser == null) {
|
||||
log.error("获取用户信息失败, 不允许操作,需重新登录");
|
||||
throw new RuntimeException("获取用户信息失败, 不允许操作,需重新登录");
|
||||
}
|
||||
log.info("请求uri => {} method => {} user => {} userId => {} token => {}",
|
||||
request.getRequestURI(), request.getMethod(), loginUser.getLoginName(), loginUser.getUserId(),token);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||
ThreadLocalMap.remove(GlobalConstant.TOKEN_AUTH_DTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析token
|
||||
* @param token
|
||||
* @return
|
||||
*/
|
||||
public static LoginAuthDto decode(String token){
|
||||
// Jwt decode = JwtHelper.decode(token);
|
||||
// return decodeLoginUser(decode);
|
||||
// 解析 token
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package com.luoo.comment.constant;
|
||||
|
||||
public class GlobalConstant {
|
||||
|
||||
/**
|
||||
* 全局用户名
|
||||
*/
|
||||
public static final String TOKEN_AUTH_DTO = "CURRENT_USER_DTO";
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package com.luoo.comment.controller;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.luoo.comment.pojo.LoginAuthDto;
|
||||
import com.luoo.comment.utils.ThreadLocalMap;
|
||||
|
||||
public class BaseController {
|
||||
|
||||
/**
|
||||
* 全局用户名
|
||||
*/
|
||||
public static final String TOKEN_AUTH_DTO = "CURRENT_USER_DTO";
|
||||
|
||||
protected LoginAuthDto getLoginAuthDto() {
|
||||
LoginAuthDto loginAuthDto = (LoginAuthDto) ThreadLocalMap.get(TOKEN_AUTH_DTO);
|
||||
if (ObjectUtil.isEmpty(loginAuthDto)) {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
return loginAuthDto;
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.luoo.comment.enums;
|
||||
|
||||
public enum CommentStatusEnum {
|
||||
|
||||
/**
|
||||
* 正常
|
||||
*/
|
||||
NORMAL(1),
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
DELETE(2),
|
||||
|
||||
/**
|
||||
* 审核中
|
||||
*/
|
||||
AUDITING(3);
|
||||
|
||||
private final int value;
|
||||
|
||||
CommentStatusEnum(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.luoo.comment.pojo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class CommentDto implements Serializable {
|
||||
|
||||
/**
|
||||
* 文章 ID
|
||||
*/
|
||||
private String articleId;
|
||||
|
||||
/**
|
||||
* 评论内容
|
||||
*/
|
||||
private String content;
|
||||
|
||||
/**
|
||||
* 父节点 ID
|
||||
*/
|
||||
private String parentId;
|
||||
|
||||
/**
|
||||
* 目标 ID
|
||||
*/
|
||||
private String targetId;
|
||||
|
||||
/**
|
||||
* IP 地址
|
||||
*/
|
||||
private String ipAddress;
|
||||
|
||||
private String userId;
|
||||
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package com.luoo.comment.pojo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class CommentVo {
|
||||
|
||||
private String id;
|
||||
/**
|
||||
* 评论内容
|
||||
*/
|
||||
private String content;
|
||||
/**
|
||||
* 发布时间
|
||||
*/
|
||||
private Date publishTime;
|
||||
/**
|
||||
* 用户 ID
|
||||
*/
|
||||
private String userId;
|
||||
/**
|
||||
* 昵称
|
||||
*/
|
||||
private String nickName;
|
||||
/**
|
||||
* 点赞数
|
||||
*/
|
||||
private Integer thumbup;
|
||||
/**
|
||||
* 转发数
|
||||
*/
|
||||
private Integer share;
|
||||
/**
|
||||
* 评论数量
|
||||
*/
|
||||
private Integer comment;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private String state;
|
||||
|
||||
/**
|
||||
* 父节点 ID
|
||||
*/
|
||||
private String parentId;
|
||||
|
||||
/**
|
||||
* 文章
|
||||
*/
|
||||
private String articleId;
|
||||
|
||||
/**
|
||||
* 层级
|
||||
*/
|
||||
private Integer level;
|
||||
|
||||
/**
|
||||
* 目标ID
|
||||
*/
|
||||
private String targetId;
|
||||
|
||||
/**
|
||||
* 目标对象
|
||||
*/
|
||||
private CommentVo targetComment;
|
||||
|
||||
/**
|
||||
* 评论类型
|
||||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 城市
|
||||
*/
|
||||
private String city;
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.luoo.comment.pojo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ApiModel(value = "登录人信息")
|
||||
public class LoginAuthDto implements Serializable {
|
||||
private static final long serialVersionUID = -1137852221455042256L;
|
||||
@ApiModelProperty(value = "用户ID")
|
||||
private String userId;
|
||||
@ApiModelProperty(value = "登录名")
|
||||
private String loginName;
|
||||
@ApiModelProperty(value = "用户名")
|
||||
private String userName;
|
||||
|
||||
public LoginAuthDto() {
|
||||
}
|
||||
|
||||
public LoginAuthDto(String userId, String loginName, String userName) {
|
||||
this.userId = userId;
|
||||
this.loginName = loginName;
|
||||
this.userName = userName;
|
||||
}
|
||||
|
||||
}
|
@ -1,87 +1,26 @@
|
||||
package com.luoo.comment.service;
|
||||
|
||||
|
||||
import com.luoo.comment.dao.CommentDao;
|
||||
import com.luoo.comment.pojo.Comment;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import com.luoo.comment.pojo.CommentDto;
|
||||
import com.luoo.comment.pojo.CommentVo;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.data.mongodb.core.query.Update;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import util.IdWorker;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class CommentService {
|
||||
public interface CommentService {
|
||||
|
||||
@Autowired
|
||||
private CommentDao commentDao;
|
||||
Comment findById(String id);
|
||||
|
||||
@Autowired
|
||||
private IdWorker idWorker;
|
||||
void save(CommentDto commentDto);
|
||||
|
||||
@Autowired
|
||||
private MongoTemplate mongoTemplate;
|
||||
public List<Comment> findAll() {
|
||||
return commentDao.findAll();
|
||||
}
|
||||
void update(Comment comment);
|
||||
|
||||
public Comment findById(String id) {
|
||||
return commentDao.findById(id).get();
|
||||
}
|
||||
void deleteById(String id);
|
||||
|
||||
public void save(Comment comment){
|
||||
comment.set_id(idWorker.nextId()+"");
|
||||
comment.setPublishtime(new Date());
|
||||
comment.setVisits(0);
|
||||
comment.setShare(0);
|
||||
comment.setThumbup(0);
|
||||
comment.setComment(0);
|
||||
comment.setState("1");
|
||||
// 如果当前添加的吐槽,有父节点,那么父节点的吐槽回复数要加一
|
||||
if (comment.getParentid()!=null && !"".equals(comment.getParentid())) {
|
||||
Query query = new Query();
|
||||
query.addCriteria(Criteria.where("_id").is(comment.getParentid()));
|
||||
Update update = new Update();
|
||||
update.inc("comment",1);
|
||||
mongoTemplate.updateFirst(query,update,"spit");
|
||||
}
|
||||
commentDao.save(comment);
|
||||
}
|
||||
Page<CommentVo> findByParentId(String parentId, int page, int size);
|
||||
|
||||
public void update(Comment comment) {
|
||||
commentDao.save(comment);
|
||||
}
|
||||
void thumbup(String commentId);
|
||||
|
||||
public void deleteById(String id) {
|
||||
commentDao.deleteById(id);
|
||||
}
|
||||
|
||||
|
||||
public Page<Comment> findByParentId(String parentid,int page,int size){
|
||||
|
||||
Pageable pageable = PageRequest.of(page-1,size);
|
||||
return commentDao.findByParentid(parentid,pageable);
|
||||
}
|
||||
|
||||
public void thumbup(String commentId) {
|
||||
|
||||
Query query = new Query();
|
||||
query.addCriteria(Criteria.where("_id").is("1"));
|
||||
Update update = new Update();
|
||||
update.inc("thumbup",1);
|
||||
mongoTemplate.updateFirst(query,update,"spit");
|
||||
}
|
||||
|
||||
public List<Comment> findByVolid(String volid) {
|
||||
return commentDao.findByArticleid(volid);
|
||||
}
|
||||
List<Comment> findByVolid(String volid);
|
||||
}
|
||||
|
@ -0,0 +1,136 @@
|
||||
package com.luoo.comment.service.impl;
|
||||
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.luoo.comment.dao.CommentDao;
|
||||
import com.luoo.comment.enums.CommentStatusEnum;
|
||||
import com.luoo.comment.pojo.Comment;
|
||||
import com.luoo.comment.pojo.CommentDto;
|
||||
import com.luoo.comment.pojo.CommentVo;
|
||||
import com.luoo.comment.service.CommentService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.*;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.data.mongodb.core.query.Update;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import util.IdWorker;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class CommentServiceImpl implements CommentService {
|
||||
|
||||
@Autowired
|
||||
private CommentDao commentDao;
|
||||
|
||||
@Autowired
|
||||
private IdWorker idWorker;
|
||||
|
||||
@Autowired
|
||||
private MongoTemplate mongoTemplate;
|
||||
|
||||
|
||||
public Comment findById(String id) {
|
||||
return commentDao.findById(id).get();
|
||||
}
|
||||
|
||||
public void save(CommentDto commentDto){
|
||||
Comment comment = new Comment();
|
||||
comment.setContent(commentDto.getContent());
|
||||
comment.setPublishTime(new Date());
|
||||
comment.setUserId(commentDto.getUserId());
|
||||
comment.setComment(0);
|
||||
comment.setParentId(commentDto.getParentId());
|
||||
comment.setArticleId(commentDto.getArticleId());
|
||||
comment.setLevel(1);
|
||||
comment.setTargetId(commentDto.getTargetId());
|
||||
comment.setType(0);
|
||||
comment.setCity("上海");
|
||||
comment.setId(String.valueOf(idWorker.nextId()));
|
||||
comment.setShare(0);
|
||||
comment.setThumbup(0);
|
||||
comment.setComment(0);
|
||||
comment.setState(CommentStatusEnum.NORMAL.getValue());
|
||||
// 如果当前添加的吐槽,有父节点,那么父节点的吐槽回复数要加一
|
||||
if (ObjectUtil.isNotEmpty(comment.getParentId())) {
|
||||
// 更新父节点的评论回复数
|
||||
Query query = new Query();
|
||||
query.addCriteria(Criteria.where("_id").is(comment.getParentId()));
|
||||
Update update = new Update();
|
||||
update.inc("comment",1);
|
||||
mongoTemplate.updateFirst(query,update,Comment.class);
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(comment.getTargetId())) {
|
||||
Comment parentIdComment = mongoTemplate.findById(comment.getTargetId(), Comment.class);
|
||||
comment.setLevel(parentIdComment.getLevel()+1);
|
||||
Query query = new Query();
|
||||
query.addCriteria(Criteria.where("_id").is(comment.getTargetId()));
|
||||
Update update = new Update();
|
||||
update.inc("comment",1);
|
||||
mongoTemplate.updateFirst(query,update,Comment.class);
|
||||
}
|
||||
commentDao.save(comment);
|
||||
}
|
||||
|
||||
public void update(Comment comment) {
|
||||
commentDao.save(comment);
|
||||
}
|
||||
|
||||
public void deleteById(String id) {
|
||||
commentDao.deleteById(id);
|
||||
}
|
||||
|
||||
|
||||
public Page<CommentVo> findByParentId(String parentId,int page,int size){
|
||||
Pageable pageable = PageRequest.of(page, size);
|
||||
Query query = new Query();
|
||||
Criteria criteria = Criteria.where("parentId").is(parentId);
|
||||
query.addCriteria(criteria);
|
||||
Sort sort = Sort.by(Sort.Direction.ASC, "age");
|
||||
query.with(sort);
|
||||
query.with(pageable);
|
||||
List<Comment> comments = mongoTemplate.find(query, Comment.class);
|
||||
|
||||
List<CommentVo> commentVos = comments.stream().map(Comment::convertVo).collect(Collectors.toList());
|
||||
|
||||
List<String> targetComments = comments.stream().map(Comment::getTargetId).collect(Collectors.toList());
|
||||
|
||||
Map<String, CommentVo> idCommentMap = commentVos.stream().collect(Collectors.toMap(CommentVo::getId, Function.identity()));
|
||||
|
||||
long total = mongoTemplate.count(query, Comment.class);
|
||||
|
||||
// boolean isChange = targetComments.removeAll(idCommentMap.keySet());
|
||||
|
||||
for (CommentVo commentVo : commentVos) {
|
||||
if (commentVo.getLevel() > 2 && ObjectUtil.isNotEmpty(commentVo.getTargetId())) {
|
||||
CommentVo targetCommentVo = idCommentMap.get(commentVo.getTargetId());
|
||||
if (targetCommentVo != null) {
|
||||
commentVo.setTargetComment(targetCommentVo);
|
||||
}
|
||||
}
|
||||
}
|
||||
return new PageImpl<>(commentVos, pageable, total);
|
||||
}
|
||||
|
||||
public void thumbup(String commentId) {
|
||||
|
||||
Query query = new Query();
|
||||
query.addCriteria(Criteria.where("_id").is("1"));
|
||||
Update update = new Update();
|
||||
update.inc("thumbup",1);
|
||||
mongoTemplate.updateFirst(query,update,"spit");
|
||||
}
|
||||
|
||||
public List<Comment> findByVolid(String volid) {
|
||||
return commentDao.findByArticleId(volid);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue