From 8662dd44f0dc6228ec04989ba7c81202c7649324 Mon Sep 17 00:00:00 2001 From: Yaoyuan Chu Date: Thu, 10 Sep 2020 18:29:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=84=E8=AE=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jiscuss/common/PostCommonUtil.java | 43 +++++++++- .../controller/UserPostController.java | 2 +- .../jiscuss/repository/PostsRepository.java | 28 ++++++- .../jiscuss/service/IPostsService.java | 4 - .../service/impl/PostsServiceImpl.java | 80 ++++++++----------- src/main/resources/templates/discussions.ftl | 59 +++++++++++++- 6 files changed, 154 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/yaoyuan/jiscuss/common/PostCommonUtil.java b/src/main/java/com/yaoyuan/jiscuss/common/PostCommonUtil.java index 89b8f7a..b2a3f12 100644 --- a/src/main/java/com/yaoyuan/jiscuss/common/PostCommonUtil.java +++ b/src/main/java/com/yaoyuan/jiscuss/common/PostCommonUtil.java @@ -6,10 +6,7 @@ import org.springframework.beans.BeanUtils; import java.io.BufferedReader; import java.io.Reader; import java.sql.Clob; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author yaoyuan2.chu @@ -21,6 +18,44 @@ import java.util.Map; public class PostCommonUtil { + public static List getNewPostsObjMap(List> posts) { + + List postCustomList = new ArrayList<>(); + for (Map mapObj : posts) { + PostCustom postCustom = new PostCustom(); + postCustom.setId(Integer.parseInt(String.valueOf(mapObj.get("id")))); + postCustom.setParentId(mapObj.get("parent_id") != null ? Integer.parseInt(String.valueOf(mapObj.get("parent_id"))) : null); + if (null != mapObj.get("create_time")) { + postCustom.setCreateTime((Date) mapObj.get("create_time")); + } + String content = ""; + if (mapObj.get("content") != null) { + Clob clob = (Clob) mapObj.get("content"); + content = PostCommonUtil.clobToString(clob); + } + postCustom.setContent(content); + String avatar = ""; + if (mapObj.get("create_avatar") != null) { + Clob clob = (Clob) mapObj.get("create_avatar"); + avatar = PostCommonUtil.clobToString(clob); + } + postCustom.setAvatar(avatar); + postCustom.setUsername(mapObj.get("create_username") != null ? String.valueOf(mapObj.get("create_username")) : null); + postCustom.setRealname(mapObj.get("create_realname") != null ? String.valueOf(mapObj.get("create_realname")) : null); + String avatarReply = ""; + if (mapObj.get("user_avatar") != null) { + Clob clob = (Clob) mapObj.get("user_avatar"); + avatarReply = PostCommonUtil.clobToString(clob); + } + postCustom.setAvatarReply(avatarReply); + postCustom.setUsernameReply(mapObj.get("user_username") != null ? String.valueOf(mapObj.get("user_username")) : null); + postCustom.setRealnameReply(mapObj.get("user_realname") != null ? String.valueOf(mapObj.get("user_realname")) : null); + + postCustomList.add(postCustom); + } + return postCustomList; + } + public static List getNewPostsObjCustom(List postCustomList) { List mainList = new ArrayList<>(); Map postMap = new LinkedHashMap<>(); diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java b/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java index 4123c7c..0ea0ada 100644 --- a/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java +++ b/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java @@ -80,7 +80,7 @@ public class UserPostController extends BaseController { List tags = tagsService.findByDId(id); - List postsObj = postsService.findPostCustomById(id); + List postsObj = postsService.findPostCustomById(id); map.put("tags", tags); diff --git a/src/main/java/com/yaoyuan/jiscuss/repository/PostsRepository.java b/src/main/java/com/yaoyuan/jiscuss/repository/PostsRepository.java index dad5ea3..789eaca 100644 --- a/src/main/java/com/yaoyuan/jiscuss/repository/PostsRepository.java +++ b/src/main/java/com/yaoyuan/jiscuss/repository/PostsRepository.java @@ -30,9 +30,29 @@ public interface PostsRepository extends JpaRepository { , nativeQuery = true) List> findPostCustomById(@Param("dId")Integer dId); - @Query("from Post where parentId is null and discussionId = :dId") - List findAllByDIdAndparentIdNull(@Param("dId")Integer dId); - @Query("from Post where parentId is not null and discussionId = :dId") - List findAllByDIdAndparentIdNotNull(@Param("dId")Integer dId); + @Query(value = "select p.*,u.avatar as user_avatar ,u.username as user_username ,u.realname as user_realname ," + + "u2.avatar as create_avatar ,u2.username as create_username ,u2.realname as create_realname \n" + + "from Post p \n" + + "left join User u on p.user_id = u.id \n" + + "left join User u2 on p.create_id = u2.id \n" + + "where p.discussion_id = :dId and p.parent_id is null order by p.create_time desc" + , nativeQuery = true) + List> findAllByDIdAndparentIdNull(@Param("dId")Integer dId); + + @Query(value = "select p.*,u.avatar as user_avatar ,u.username as user_username ,u.realname as user_realname ," + + "u2.avatar as create_avatar ,u2.username as create_username ,u2.realname as create_realname \n" + + "from Post p \n" + + "left join User u on p.user_id = u.id \n" + + "left join User u2 on p.create_id = u2.id \n" + + "where p.discussion_id = :dId and p.parent_id is not null order by p.create_time desc" + , nativeQuery = true) + List> findAllByDIdAndparentIdNotNull(@Param("dId")Integer dId); + + +// @Query("from Post where parentId is null and discussionId = :dId") +// List findAllByDIdAndparentIdNull(@Param("dId")Integer dId); +// +// @Query("from Post where parentId is not null and discussionId = :dId") +// List findAllByDIdAndparentIdNotNull(@Param("dId")Integer dId); } diff --git a/src/main/java/com/yaoyuan/jiscuss/service/IPostsService.java b/src/main/java/com/yaoyuan/jiscuss/service/IPostsService.java index 48595fa..473cc7b 100644 --- a/src/main/java/com/yaoyuan/jiscuss/service/IPostsService.java +++ b/src/main/java/com/yaoyuan/jiscuss/service/IPostsService.java @@ -13,10 +13,6 @@ public interface IPostsService { List findOneBy(Integer id); - List findAllByDIdAndparentIdNull(Integer dId); - - List findAllByDIdAndparentIdNotNull(Integer dId); - List findPostCustomById(Integer id); Post findOneByid(Integer parentId); diff --git a/src/main/java/com/yaoyuan/jiscuss/service/impl/PostsServiceImpl.java b/src/main/java/com/yaoyuan/jiscuss/service/impl/PostsServiceImpl.java index 00254d0..9ff1a8a 100644 --- a/src/main/java/com/yaoyuan/jiscuss/service/impl/PostsServiceImpl.java +++ b/src/main/java/com/yaoyuan/jiscuss/service/impl/PostsServiceImpl.java @@ -5,6 +5,7 @@ import java.io.Reader; import java.sql.Clob; import java.util.*; +import com.yaoyuan.jiscuss.common.Node; import com.yaoyuan.jiscuss.common.PostCommonUtil; import com.yaoyuan.jiscuss.entity.Discussion; import com.yaoyuan.jiscuss.entity.custom.DiscussionCustom; @@ -49,60 +50,47 @@ public class PostsServiceImpl implements IPostsService { } @Override - public List findPostCustomById(Integer id) { + public List findPostCustomById(Integer id) { + //查询id为1且parentId为null的评论 + List> firstposts = postsRepository.findAllByDIdAndparentIdNull(id); - List> posts = postsRepository.findPostCustomById(id); -// List> postsObjNew = this.getNewPostsObj(posts); + List firstpostCustomList = PostCommonUtil.getNewPostsObjMap(firstposts); - List postCustomList = new ArrayList<>(); - for(Map mapObj : posts){ - PostCustom postCustom = new PostCustom(); - postCustom.setId(Integer.parseInt(String.valueOf(mapObj.get("id")))); - postCustom.setParentId(mapObj.get("parent_id") != null ? Integer.parseInt(String.valueOf(mapObj.get("parent_id"))) : null); - if(null != mapObj.get("create_time")){ - postCustom.setCreateTime((Date) mapObj.get("create_time")); - } - String content = ""; - if(mapObj.get("content") != null){ - Clob clob = (Clob) mapObj.get("content"); - content = PostCommonUtil.clobToString(clob); - } - postCustom.setContent(content); - String avatar = ""; - if(mapObj.get("create_avatar") != null){ - Clob clob = (Clob) mapObj.get("create_avatar"); - avatar = PostCommonUtil.clobToString(clob); - } - postCustom.setAvatar(avatar); - postCustom.setUsername(mapObj.get("create_username") != null ? String.valueOf(mapObj.get("create_username")): null); - postCustom.setRealname(mapObj.get("create_realname") != null ? String.valueOf(mapObj.get("create_realname")): null); - String avatarReply = ""; - if(mapObj.get("user_avatar") != null){ - Clob clob = (Clob) mapObj.get("user_avatar"); - avatarReply = PostCommonUtil.clobToString(clob); - } - postCustom.setAvatarReply(avatarReply); - postCustom.setUsernameReply(mapObj.get("user_username") != null ? String.valueOf(mapObj.get("user_username")): null); - postCustom.setRealnameReply(mapObj.get("user_realname") != null ? String.valueOf(mapObj.get("user_realname")): null); +// List firstpostCustomListNew = PostCommonUtil.getNewPostsObjCustom(firstpostCustomList); - postCustomList.add(postCustom); + //查询id为1且parentId不为null的评论 + List> thenposts = postsRepository.findAllByDIdAndparentIdNotNull(id); + + List thenpostCustomList = PostCommonUtil.getNewPostsObjMap(thenposts); + +// List thenpostCustomListNew = PostCommonUtil.getNewPostsObjCustom(thenpostCustomList); + + + + //新建一个Node集合。 + ArrayList nodes = new ArrayList<>(); + //将第一层评论都添加都Node集合中 + for (PostCustom post : firstpostCustomList) { + Node node = new Node(); + BeanUtils.copyProperties(post, node); + nodes.add(node); } + //将回复添加到对应的位置 + List list = Node.addAllNode(nodes, thenpostCustomList); + System.out.println(); + //打印回复链表 + Node.show(list); - List postCustomListNew = PostCommonUtil.getNewPostsObjCustom(postCustomList); - return postCustomListNew; - } - @Override - public List findAllByDIdAndparentIdNull(Integer dId) { - List posts = postsRepository.findAllByDIdAndparentIdNull(dId); - return posts; - } - @Override - public List findAllByDIdAndparentIdNotNull(Integer dId) { - List posts = postsRepository.findAllByDIdAndparentIdNotNull(dId); - return posts; +// List> posts = postsRepository.findPostCustomById(id); +// +// List postCustomList = PostCommonUtil.getNewPostsObjMap(posts); +// +// List postCustomListNew = PostCommonUtil.getNewPostsObjCustom(postCustomList); + + return list; } diff --git a/src/main/resources/templates/discussions.ftl b/src/main/resources/templates/discussions.ftl index d2c3a31..a3f17e7 100644 --- a/src/main/resources/templates/discussions.ftl +++ b/src/main/resources/templates/discussions.ftl @@ -82,7 +82,8 @@

评论区

- <#list posts as post> + + <#--<#list posts as post>
- <#list post.child as child> + <#list post.nextNodes as child> - + --> + + + <#macro bpTree posts> + <#if posts?? && posts?size gt 0> + + <#list posts as post> + <#if post.nextNodes?? && post.nextNodes?size gt 0> + +
+ + + +
+ ${post.username} + +
+ ${post.content} +
+
+ 回复 +
+
+
+ <@bpTree posts=post.nextNodes /> +
+
+ <#else> + +
+ + + +
+ ${post.username} + +
+ ${post.content} +
+
+ 回复 +
+
+
+ + + + + <@bpTree posts=posts />