评论优化

This commit is contained in:
2020-09-10 17:01:30 +08:00
parent 96c065c0a2
commit f70c890b4d
38 changed files with 470 additions and 459 deletions
+2 -1
View File
@@ -68,12 +68,13 @@
<version>2.9.2</version> <version>2.9.2</version>
</dependency> </dependency>
<!-- lombok -->
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- 阿里系的Druid依赖包 --> <!-- 阿里系的Druid依赖包 -->
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
@@ -1,115 +0,0 @@
package com.yaoyuan.jiscuss.common;
import com.yaoyuan.jiscuss.entity.Posts;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import javax.persistence.Column;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author yaoyuan2.chu
* @Title:
* @Package com.yaoyuan.jiscuss.common
* @Description:
* @date 2020/8/17 14:51
*/
@Data
public class Node {
public Node() {
}
private Integer id;
private Integer discussionId;
private Integer number;
private Date time;
private Integer userId;
private String type;
private String content;
private Integer parentId;
private Date editTime;
private Integer editUserId;
private String ipAddress;
private String copyright;
private Integer isApproved;
private Integer createId;
private Date createTime;
//下一条回复
private List<Node> nextNodes = new ArrayList<Node>();
/**
* 将单个node添加到链表中
*
* @param list
* @param node
* @return
*/
public static boolean addNode(List<Node> list, Node node) {
for (Node node1 : list) { //循环添加
if (node1.getId() .equals(node.getParentId()) ) { //判断留言的上一段是都是这条留言
node1.getNextNodes().add(node); //是,添加,返回true;
System.out.println("添加了一个");
return true;
} else { //否则递归继续判断
if (node1.getNextNodes().size() != 0) {
if (Node.addNode(node1.getNextNodes(), node)) {
return true;
}
}
}
}
return false;
}
/**
* 将查出来的lastId不为null的回复都添加到第一层Node集合中
*
* @param firstList
* @param thenList
* @return
*/
public static List addAllNode(List<Node> firstList, List<Posts> thenList) {
while (thenList.size() != 0) {
int size = thenList.size();
for (int i = 0; i < size; i++) {
Node node = new Node();
BeanUtils.copyProperties(thenList.get(i), node);
if (Node.addNode(firstList, node)) {
thenList.remove(i);
i--;
size--;
}
}
}
return firstList;
}
//打印
public static void show(List<Node> list) {
for (Node node : list) {
System.out.println(node.getUserId() + " 用户回复了你:" + node.getContent());
if (node.getNextNodes().size() != 0) {
Node.show(node.getNextNodes());
}
}
}
}
@@ -43,7 +43,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
"/js/**", "/js/**",
"/images/**", "/images/**",
"/static/**", "/static/**",
"/h2-console/**" "/h2-console/**",
"/druid/**"
); );
} }
/** /**
@@ -1,16 +1,14 @@
package com.yaoyuan.jiscuss.controller; package com.yaoyuan.jiscuss.controller;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import com.yaoyuan.jiscuss.common.Node; import com.yaoyuan.jiscuss.entity.*;
import com.yaoyuan.jiscuss.entity.Posts; import com.yaoyuan.jiscuss.entity.custom.DiscussionCustom;
import com.yaoyuan.jiscuss.entity.UserInfo; import com.yaoyuan.jiscuss.entity.custom.PostCustom;
import com.yaoyuan.jiscuss.service.IPostsService; import com.yaoyuan.jiscuss.service.IPostsService;
import com.yaoyuan.jiscuss.service.IUsersService;
import org.json.JSONObject; import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -26,8 +24,6 @@ import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import com.yaoyuan.jiscuss.entity.Discussions;
import com.yaoyuan.jiscuss.entity.Tags;
import com.yaoyuan.jiscuss.service.IDiscussionsService; import com.yaoyuan.jiscuss.service.IDiscussionsService;
import com.yaoyuan.jiscuss.service.ITagsService; import com.yaoyuan.jiscuss.service.ITagsService;
@@ -49,6 +45,10 @@ public class UserPostController extends BaseController {
@Autowired @Autowired
private IPostsService postsService; private IPostsService postsService;
@Autowired
private IUsersService usersService;
//首页查看主题列表(各种条件筛选,最热最新标签等) //首页查看主题列表(各种条件筛选,最热最新标签等)
@@ -58,34 +58,34 @@ public class UserPostController extends BaseController {
public String getDiscussionsById(HttpServletRequest request, ModelMap map, @RequestParam("id") Integer id) { public String getDiscussionsById(HttpServletRequest request, ModelMap map, @RequestParam("id") Integer id) {
logger.info(">>> getDiscussionsById{}",id); logger.info(">>> getDiscussionsById{}",id);
Discussions discussions = discussionsService.findOne(id); Discussion discussion = discussionsService.findOne(id);
// 获取此主题下的评论
List<Post> posts = postsService.findOneBy(id);
List<Posts> posts = postsService.findOneBy(id); DiscussionCustom newdd = new DiscussionCustom();
BeanUtils.copyProperties(discussion , newdd);
List<Tags> tags = tagsService.findByDId(id); if (null != newdd.getStartUserId()){
User startUser = usersService.findOne(newdd.getStartUserId());
//查询id为1且parentId为null的评论 newdd.setAvatar(startUser.getAvatar());
List<Posts> firstList = postsService.findAllByDIdAndparentIdNull(1); newdd.setRealname(startUser.getRealname());
//查询id为1且parentId不为null的评论 newdd.setUsername(startUser.getUsername());
List<Posts> thenList = postsService.findAllByDIdAndparentIdNotNull(1); }
//新建一个Node集合。 if (null != newdd.getLastUserId()){
ArrayList<Node> nodes = new ArrayList<>(); User lastUser = usersService.findOne(newdd.getLastUserId());
//将第一层评论都添加都Node集合中 newdd.setAvatarLast(lastUser.getAvatar());
for (Posts post : firstList) { newdd.setRealnameLast(lastUser.getRealname());
Node node = new Node(); newdd.setUsernameLast(lastUser.getUsername());
BeanUtils.copyProperties(post, node);
nodes.add(node);
} }
//将回复添加到对应的位置
List list = Node.addAllNode(nodes, thenList);
System.out.println();
//打印回复链表
Node.show(list);
List<Tag> tags = tagsService.findByDId(id);
map.put("discussions", discussions); List<PostCustom> postsObj = postsService.findPostCustomById(id);
map.put("posts", posts);
map.put("tags", tags);
map.put("discussions", newdd);
map.put("posts", postsObj);
UserInfo user = getUserInfo(request); UserInfo user = getUserInfo(request);
if(user != null){ if(user != null){
map.put("username", user.getUsername()); map.put("username", user.getUsername());
@@ -94,25 +94,26 @@ public class UserPostController extends BaseController {
} }
//新建主题 //新建主题
@PostMapping(value = "/newdiscussions") @PostMapping(value = "/newdiscussions")
@ResponseBody @ResponseBody
public String newDiscussions(@RequestBody Discussions discussions) { public String newDiscussions(@RequestBody Discussion discussion) {
logger.info(">>> newPost"+discussions); logger.info(">>> newPost"+ discussion);
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest(); HttpServletRequest request = servletRequestAttributes.getRequest();
UserInfo user = getUserInfo(request); UserInfo user = getUserInfo(request);
if(user != null){ if(user != null){
discussions.setLastUserId( user.getId()); discussion.setLastUserId( user.getId());
discussions.setCreateId( user.getId()); discussion.setCreateId( user.getId());
} }
discussions.setCreateTime(new Date()); discussion.setCreateTime(new Date());
Discussions saveDiscussions = discussionsService.insert(discussions); Discussion saveDiscussion = discussionsService.insert(discussion);
JSONObject resultobj = new JSONObject(); JSONObject resultobj = new JSONObject();
logger.info(">>>{}",saveDiscussions ); logger.info(">>>{}", saveDiscussion);
resultobj.put("msg", "添加成功"); resultobj.put("msg", "添加成功");
resultobj.put("flag", true); resultobj.put("flag", true);
return resultobj.toString(); // return resultobj.toString(); //
@@ -127,19 +128,24 @@ public class UserPostController extends BaseController {
//新建评论 //新建评论
@PostMapping(value = "/newpost") @PostMapping(value = "/newpost")
@ResponseBody @ResponseBody
public String newPosts(@RequestBody Posts posts) { public String newPosts(@RequestBody Post post) {
logger.info(">>> newpost"+posts); logger.info(">>> newpost"+ post);
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest(); HttpServletRequest request = servletRequestAttributes.getRequest();
UserInfo user = getUserInfo(request); UserInfo user = getUserInfo(request);
if(user != null){ if(user != null){
posts.setCreateId( user.getId()); post.setCreateId( user.getId());
} }
posts.setCreateTime(new Date()); post.setCreateTime(new Date());
if(null != post.getParentId()){
Post temp =postsService.findOneByid(post.getParentId());
post.setUserId(temp.getCreateId());
Posts savePost = postsService.insert(posts); }
Post savePost = postsService.insert(post);
JSONObject resultobj = new JSONObject(); JSONObject resultobj = new JSONObject();
logger.info(">>>{}",savePost ); logger.info(">>>{}",savePost );
@@ -153,22 +159,22 @@ public class UserPostController extends BaseController {
//新建标签 //新建标签
@PostMapping(value = "/newtags") @PostMapping(value = "/newtags")
@ResponseBody @ResponseBody
public String newTags(@RequestBody Tags tags) { public String newTags(@RequestBody Tag tag) {
logger.info(">>> newTags"+tags); logger.info(">>> newTags"+ tag);
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest(); HttpServletRequest request = servletRequestAttributes.getRequest();
UserInfo user = getUserInfo(request); UserInfo user = getUserInfo(request);
if(user != null){ if(user != null){
tags.setCreateId( user.getId()); tag.setCreateId( user.getId());
} }
tags.setCreateTime(new Date()); tag.setCreateTime(new Date());
Tags saveTags = tagsService.insert(tags); Tag saveTag = tagsService.insert(tag);
JSONObject resultobj = new JSONObject(); JSONObject resultobj = new JSONObject();
logger.info(">>>{}",saveTags ); logger.info(">>>{}", saveTag);
resultobj.put("msg", "添加成功"); resultobj.put("msg", "添加成功");
resultobj.put("flag", true); resultobj.put("flag", true);
return resultobj.toString(); // return resultobj.toString(); //
@@ -1,14 +1,14 @@
package com.yaoyuan.jiscuss.controller; package com.yaoyuan.jiscuss.controller;
import com.yaoyuan.jiscuss.entity.Discussions; import com.yaoyuan.jiscuss.entity.Discussion;
import com.yaoyuan.jiscuss.entity.Tags; import com.yaoyuan.jiscuss.entity.Tag;
import com.yaoyuan.jiscuss.entity.UserInfo; import com.yaoyuan.jiscuss.entity.UserInfo;
import com.yaoyuan.jiscuss.entity.Users; import com.yaoyuan.jiscuss.entity.User;
import com.yaoyuan.jiscuss.entity.custom.DiscussionCustom;
import com.yaoyuan.jiscuss.service.IDiscussionsService; import com.yaoyuan.jiscuss.service.IDiscussionsService;
import com.yaoyuan.jiscuss.service.ITagsService; import com.yaoyuan.jiscuss.service.ITagsService;
import com.yaoyuan.jiscuss.service.IUsersService; import com.yaoyuan.jiscuss.service.IUsersService;
import com.yaoyuan.jiscuss.util.DelTagsUtil; import com.yaoyuan.jiscuss.util.DelTagsUtil;
import org.apache.catalina.mbeans.MBeanUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@@ -48,23 +48,23 @@ public class UserSystemController extends BaseController {
logger.info(">>> index"); logger.info(">>> index");
logger.info(">>> tag:" + tag); logger.info(">>> tag:" + tag);
logger.info(">>> pageNum:" + pageNum); logger.info(">>> pageNum:" + pageNum);
List<Users> userall = usersService.getAllList(); List<User> userall = usersService.getAllList();
logger.info(">>> 第一遍的全部用户:"+userall); logger.info(">>> 第一遍的全部用户:"+userall);
List<Users> useral2 = usersService.getAllList(); List<User> useral2 = usersService.getAllList();
logger.info(">>> 第二遍的全部用户:"+useral2); logger.info(">>> 第二遍的全部用户:"+useral2);
int pageSiz = 10; int pageSiz = 10;
int pageNumNew = pageNum - 1; int pageNumNew = pageNum - 1;
Discussions discussions = new Discussions(); Discussion discussion = new Discussion();
//分页获取主题帖子 //分页获取主题帖子
Page<Discussions> allDiscussionsPage = discussionsService.queryAllDiscussionsList(discussions,pageNumNew,pageSiz); Page<Discussion> allDiscussionsPage = discussionsService.queryAllDiscussionsList(discussion,pageNumNew,pageSiz);
List<Discussions> allDiscussions = allDiscussionsPage.getContent(); List<Discussion> allDiscussions = allDiscussionsPage.getContent();
List<Discussions> newAllD = new ArrayList<>(); List<DiscussionCustom> newAllD = new ArrayList<>();
for (Discussions dd : allDiscussions){ for (Discussion dd : allDiscussions){
Discussions newdd = new Discussions(); DiscussionCustom newdd = new DiscussionCustom();
BeanUtils.copyProperties(dd , newdd); BeanUtils.copyProperties(dd , newdd);
String newCon = ""; String newCon = "";
String content = DelTagsUtil.getTextFromHtml(newdd.getContent()); String content = DelTagsUtil.getTextFromHtml(newdd.getContent());
@@ -74,6 +74,19 @@ public class UserSystemController extends BaseController {
newCon = content; newCon = content;
} }
newdd.setContent(newCon); newdd.setContent(newCon);
if (null != newdd.getStartUserId()){
User startUser = usersService.findOne(newdd.getStartUserId());
newdd.setAvatar(startUser.getAvatar());
newdd.setRealname(startUser.getRealname());
newdd.setUsername(startUser.getUsername());
}
if (null != newdd.getLastUserId()){
User lastUser = usersService.findOne(newdd.getLastUserId());
newdd.setAvatarLast(lastUser.getAvatar());
newdd.setRealnameLast(lastUser.getRealname());
newdd.setUsernameLast(lastUser.getUsername());
}
newAllD.add(newdd); newAllD.add(newdd);
} }
@@ -85,7 +98,7 @@ public class UserSystemController extends BaseController {
List<String> pageNumList = getPageNumList(allDiscussionsPage.getTotalPages()); List<String> pageNumList = getPageNumList(allDiscussionsPage.getTotalPages());
//获取所有标签(以后尝试去缓存中取) //获取所有标签(以后尝试去缓存中取)
List<Tags> allTags = tagsService.getAllList(); List<Tag> allTags = tagsService.getAllList();
logger.info("全部标签==>{}",allTags); logger.info("全部标签==>{}",allTags);
System.out.println(userall.toString()); System.out.println(userall.toString());
@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.yaoyuan.jiscuss.entity.Discussions; import com.yaoyuan.jiscuss.entity.Discussion;
import com.yaoyuan.jiscuss.exception.BaseException; import com.yaoyuan.jiscuss.exception.BaseException;
import com.yaoyuan.jiscuss.response.ResponseCode; import com.yaoyuan.jiscuss.response.ResponseCode;
import com.yaoyuan.jiscuss.service.IDiscussionsService; import com.yaoyuan.jiscuss.service.IDiscussionsService;
@@ -31,10 +31,10 @@ public class RestPostController {
@PostMapping("/discussion") @PostMapping("/discussion")
@ApiOperation("新增主题") @ApiOperation("新增主题")
public Discussions save(@RequestBody Discussions discussions) { public Discussion save(@RequestBody Discussion discussion) {
Discussions saveDiscussions = discussionsService.insert(discussions); Discussion saveDiscussion = discussionsService.insert(discussion);
if (saveDiscussions!=null) { if (saveDiscussion !=null) {
return saveDiscussions; return saveDiscussion;
} else { } else {
throw new BaseException(ResponseCode.RESOURCES_NOT_EXIST); throw new BaseException(ResponseCode.RESOURCES_NOT_EXIST);
} }
@@ -43,15 +43,15 @@ public class RestPostController {
@GetMapping("/discussion/{id}") @GetMapping("/discussion/{id}")
@ApiOperation("获取主题") @ApiOperation("获取主题")
public Discussions getDiscussions(@PathVariable Integer id) { public Discussion getDiscussions(@PathVariable Integer id) {
Discussions discussions = discussionsService.findOne(id); Discussion discussion = discussionsService.findOne(id);
return discussions; return discussion;
} }
@GetMapping("/discussions") @GetMapping("/discussions")
@ApiOperation("获取全部主题") @ApiOperation("获取全部主题")
public List<Discussions> getAllDiscussions() { public List<Discussion> getAllDiscussions() {
List<Discussions> allDiscussions = discussionsService.getAllList(); List<Discussion> allDiscussions = discussionsService.getAllList();
logger.info("全部主题==>{}",allDiscussions); logger.info("全部主题==>{}",allDiscussions);
return allDiscussions; return allDiscussions;
} }
@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.yaoyuan.jiscuss.entity.Users; import com.yaoyuan.jiscuss.entity.User;
import com.yaoyuan.jiscuss.exception.BaseException; import com.yaoyuan.jiscuss.exception.BaseException;
import com.yaoyuan.jiscuss.response.ResponseCode; import com.yaoyuan.jiscuss.response.ResponseCode;
import com.yaoyuan.jiscuss.service.IUsersService; import com.yaoyuan.jiscuss.service.IUsersService;
@@ -34,8 +34,8 @@ public class RestUserController {
@PostMapping("/user") @PostMapping("/user")
@ApiOperation("新增用户") @ApiOperation("新增用户")
public Users save(@RequestBody Users user) { public User save(@RequestBody User user) {
Users saveUser = usersService.insert(user); User saveUser = usersService.insert(user);
if (saveUser!=null) { if (saveUser!=null) {
return saveUser; return saveUser;
} else { } else {
@@ -58,8 +58,8 @@ public class RestUserController {
@PutMapping("/user/{id}") @PutMapping("/user/{id}")
@ApiOperation("修改用户") @ApiOperation("修改用户")
public Users update(@RequestBody Users user, @PathVariable Integer id) { public User update(@RequestBody User user, @PathVariable Integer id) {
Users updateuser = usersService.update(user, id); User updateuser = usersService.update(user, id);
if (updateuser!=null) { if (updateuser!=null) {
return updateuser; return updateuser;
} else { } else {
@@ -69,15 +69,15 @@ public class RestUserController {
@GetMapping("/user/{id}") @GetMapping("/user/{id}")
@ApiOperation("获取用户") @ApiOperation("获取用户")
public Users getUser(@PathVariable Integer id) { public User getUser(@PathVariable Integer id) {
Users user = usersService.findOne(id); User user = usersService.findOne(id);
return user; return user;
} }
@GetMapping("/user") @GetMapping("/user")
@ApiOperation("获取全部用户") @ApiOperation("获取全部用户")
public List<Users> getUser(Users user) { public List<User> getUser(User user) {
List<Users> userall = usersService.getAllList(); List<User> userall = usersService.getAllList();
logger.info("全部用户==>{}",userall); logger.info("全部用户==>{}",userall);
return userall; return userall;
} }
@@ -13,8 +13,8 @@ import javax.persistence.Table;
import lombok.Data; import lombok.Data;
@Data @Data
@Entity @Entity
@Table(name="discussions") @Table(name="discussion")
public class Discussions implements Serializable { public class Discussion implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id @Id
@@ -10,8 +10,8 @@ import javax.persistence.Table;
import lombok.Data; import lombok.Data;
@Data @Data
@Entity @Entity
@Table(name="discussionstags") @Table(name="discussiontag")
public class DiscussionsTags implements Serializable{ public class DiscussionTag implements Serializable{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id @Id
@@ -14,8 +14,8 @@ import lombok.Data;
@Data @Data
@Entity @Entity
@Table(name="posts") @Table(name="post")
public class Posts implements Serializable{ public class Post implements Serializable{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id @Id
@@ -11,8 +11,8 @@ import lombok.Data;
@Data @Data
@Entity @Entity
@Table(name="settings") @Table(name="setting")
public class Settings implements Serializable{ public class Setting implements Serializable{
/** /**
* *
*/ */
@@ -14,8 +14,8 @@ import lombok.Data;
@Data @Data
@Entity @Entity
@Table(name="tags") @Table(name="tag")
public class Tags implements Serializable{ public class Tag implements Serializable{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id @Id
@@ -23,8 +23,8 @@ import org.springframework.security.core.userdetails.UserDetails;
@Data @Data
@Entity @Entity
@Table(name="users") @Table(name="user")
public class Users implements Serializable { public class User implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id @Id
@@ -52,6 +52,9 @@ public class Users implements Serializable {
@Column(name="gender") @Column(name="gender")
private String gender; private String gender;
@Column(name="avatar")
private String avatar;
@Column(name="phone") @Column(name="phone")
private String phone; private String phone;
@@ -1,9 +1,11 @@
package com.yaoyuan.jiscuss.repository; package com.yaoyuan.jiscuss.repository;
import com.yaoyuan.jiscuss.entity.Discussions; import com.yaoyuan.jiscuss.entity.Discussion;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@Repository @Repository
public interface DiscussionsRepository extends JpaRepository<Discussions,Integer> { public interface DiscussionsRepository extends JpaRepository<Discussion,Integer> {
} }
@@ -1,10 +1,10 @@
package com.yaoyuan.jiscuss.repository; package com.yaoyuan.jiscuss.repository;
import com.yaoyuan.jiscuss.entity.DiscussionsTags; import com.yaoyuan.jiscuss.entity.DiscussionTag;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@Repository @Repository
public interface DiscussionsTagsRepository extends JpaRepository<DiscussionsTags,Integer> { public interface DiscussionsTagsRepository extends JpaRepository<DiscussionTag,Integer> {
} }
@@ -1,28 +1,38 @@
package com.yaoyuan.jiscuss.repository; package com.yaoyuan.jiscuss.repository;
import com.yaoyuan.jiscuss.entity.Posts; import com.yaoyuan.jiscuss.entity.Post;
import com.yaoyuan.jiscuss.entity.Users; import com.yaoyuan.jiscuss.entity.custom.PostCustom;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
import java.util.Map;
@Repository @Repository
public interface PostsRepository extends JpaRepository<Posts,Integer> { public interface PostsRepository extends JpaRepository<Post,Integer> {
/** /**
* *
* @param dId * @param dId
* @return * @return
*/ */
@Query("from Posts where discussionId = :dId") @Query("from Post where discussionId = :dId")
List<Posts> findOneBy(@Param("dId")Integer dId); List<Post> findOneBy(@Param("dId")Integer dId);
@Query("from Posts where parentId is null and discussionId = :dId") @Query(value = "select p.*,u.avatar as user_avatar ,u.username as user_username ,u.realname as user_realname ," +
List<Posts> findAllByDIdAndparentIdNull(@Param("dId")Integer dId); "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 order by p.create_time desc"
, nativeQuery = true)
List<Map<String, Object>> findPostCustomById(@Param("dId")Integer dId);
@Query("from Posts where parentId is not null and discussionId = :dId") @Query("from Post where parentId is null and discussionId = :dId")
List<Posts> findAllByDIdAndparentIdNotNull(@Param("dId")Integer dId); List<Post> findAllByDIdAndparentIdNull(@Param("dId")Integer dId);
@Query("from Post where parentId is not null and discussionId = :dId")
List<Post> findAllByDIdAndparentIdNotNull(@Param("dId")Integer dId);
} }
@@ -1,9 +1,9 @@
package com.yaoyuan.jiscuss.repository; package com.yaoyuan.jiscuss.repository;
import com.yaoyuan.jiscuss.entity.Settings; import com.yaoyuan.jiscuss.entity.Setting;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@Repository @Repository
public interface SettingsRepository extends JpaRepository<Settings,Integer> { public interface SettingsRepository extends JpaRepository<Setting,Integer> {
} }
@@ -1,7 +1,6 @@
package com.yaoyuan.jiscuss.repository; package com.yaoyuan.jiscuss.repository;
import com.yaoyuan.jiscuss.entity.Posts; import com.yaoyuan.jiscuss.entity.Tag;
import com.yaoyuan.jiscuss.entity.Tags;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
@@ -10,8 +9,8 @@ import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@Repository @Repository
public interface TagsRepository extends JpaRepository<Tags,Integer> { public interface TagsRepository extends JpaRepository<Tag,Integer> {
@Query(value = "FROM Tags a, DiscussionsTags b WHERE a.id = b.tagId and b.discussionId = :dId") @Query(value = "FROM Tag a, DiscussionTag b WHERE a.id = b.tagId and b.discussionId = :dId")
List<Tags> findByDId(@Param("dId")Integer dId); List<Tag> findByDId(@Param("dId")Integer dId);
} }
@@ -7,33 +7,33 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.yaoyuan.jiscuss.entity.Users; import com.yaoyuan.jiscuss.entity.User;
@Repository @Repository
public interface UsersRepository extends JpaRepository<Users,Integer> { public interface UsersRepository extends JpaRepository<User,Integer> {
/** /**
* *
* @param username * @param username
* @return * @return
*/ */
@Query("from Users where username like %:username%") @Query("from User where username like %:username%")
List<Users> getByUsernameIsLike(@Param("username")String username); List<User> getByUsernameIsLike(@Param("username")String username);
/** /**
* *
* @param id * @param id
* @return * @return
*/ */
Users getById(Integer id); User getById(Integer id);
/** /**
* *
* @param username * @param username
* @return * @return
*/ */
@Query("from Users where username = :username") @Query("from User where username = :username")
Users getByUsername(String username); User getByUsername(String username);
/** /**
* *
@@ -41,7 +41,7 @@ public interface UsersRepository extends JpaRepository<Users,Integer> {
* @param password * @param password
* @return * @return
*/ */
@Query("from Users where username = :username and password = :password") @Query("from User where username = :username and password = :password")
Users checkByUsernameAndPassword(String username, String password); User checkByUsernameAndPassword(String username, String password);
} }
@@ -4,16 +4,16 @@ import java.util.List;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import com.yaoyuan.jiscuss.entity.Discussions; import com.yaoyuan.jiscuss.entity.Discussion;
public interface IDiscussionsService { public interface IDiscussionsService {
List<Discussions> getAllList(); List<Discussion> getAllList();
Discussions insert(Discussions discussions); Discussion insert(Discussion discussion);
Discussions findOne(Integer id); Discussion findOne(Integer id);
Page<Discussions> queryAllDiscussionsList(Discussions discussions,int pageNum,int pageSize); Page<Discussion> queryAllDiscussionsList(Discussion discussion, int pageNum, int pageSize);
} }
@@ -2,11 +2,11 @@ package com.yaoyuan.jiscuss.service;
import java.util.List; import java.util.List;
import com.yaoyuan.jiscuss.entity.DiscussionsTags; import com.yaoyuan.jiscuss.entity.DiscussionTag;
public interface IDiscussionsTagsService { public interface IDiscussionsTagsService {
List<DiscussionsTags> getAllList(); List<DiscussionTag> getAllList();
DiscussionsTags insert(DiscussionsTags discussionsTags); DiscussionTag insert(DiscussionTag discussionTag);
} }
@@ -1,17 +1,23 @@
package com.yaoyuan.jiscuss.service; package com.yaoyuan.jiscuss.service;
import java.util.List; import java.util.List;
import java.util.Map;
import com.yaoyuan.jiscuss.entity.Posts; import com.yaoyuan.jiscuss.entity.Post;
import com.yaoyuan.jiscuss.entity.custom.PostCustom;
public interface IPostsService { public interface IPostsService {
List<Posts> getAllList(); List<Post> getAllList();
Posts insert(Posts posts); Post insert(Post post);
List<Posts> findOneBy(Integer id); List<Post> findOneBy(Integer id);
List<Posts> findAllByDIdAndparentIdNull(Integer dId); List<Post> findAllByDIdAndparentIdNull(Integer dId);
List<Posts> findAllByDIdAndparentIdNotNull(Integer dId); List<Post> findAllByDIdAndparentIdNotNull(Integer dId);
List<PostCustom> findPostCustomById(Integer id);
Post findOneByid(Integer parentId);
} }
@@ -2,11 +2,11 @@ package com.yaoyuan.jiscuss.service;
import java.util.List; import java.util.List;
import com.yaoyuan.jiscuss.entity.Settings; import com.yaoyuan.jiscuss.entity.Setting;
public interface ISettingsService { public interface ISettingsService {
List<Settings> getAllList(); List<Setting> getAllList();
Settings insert(Settings settings); Setting insert(Setting setting);
} }
@@ -2,13 +2,13 @@ package com.yaoyuan.jiscuss.service;
import java.util.List; import java.util.List;
import com.yaoyuan.jiscuss.entity.Tags; import com.yaoyuan.jiscuss.entity.Tag;
public interface ITagsService { public interface ITagsService {
List<Tags> getAllList(); List<Tag> getAllList();
Tags insert(Tags tags); Tag insert(Tag tag);
List<Tags> findByDId(Integer id); List<Tag> findByDId(Integer id);
} }
@@ -4,29 +4,29 @@ import java.util.List;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import com.yaoyuan.jiscuss.entity.Users; import com.yaoyuan.jiscuss.entity.User;
public interface IUsersService { public interface IUsersService {
List<Users> getAllList(); List<User> getAllList();
Page<Users> queryAllUsersList(int pageNum,int pageSize); Page<User> queryAllUsersList(int pageNum, int pageSize);
List<Users> getByUsernameIsLike(String name); List<User> getByUsernameIsLike(String name);
// @Cacheable("myCache") // @Cacheable("myCache")
Users findOne(Integer id); User findOne(Integer id);
Users insert(Users user); User insert(User user);
void remove(Integer id); void remove(Integer id);
void deleteAll(); void deleteAll();
Users getByUsername(String username); User getByUsername(String username);
Users checkByUsernameAndPassword(String username, String password); User checkByUsernameAndPassword(String username, String password);
Users update(Users user, Integer id); User update(User user, Integer id);
} }
@@ -8,7 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.*; import org.springframework.data.domain.*;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.yaoyuan.jiscuss.entity.Discussions; import com.yaoyuan.jiscuss.entity.Discussion;
import com.yaoyuan.jiscuss.repository.DiscussionsRepository; import com.yaoyuan.jiscuss.repository.DiscussionsRepository;
import com.yaoyuan.jiscuss.service.IDiscussionsService; import com.yaoyuan.jiscuss.service.IDiscussionsService;
@@ -19,30 +19,30 @@ public class DiscussionsServiceImpl implements IDiscussionsService {
private DiscussionsRepository discussionsRepository; private DiscussionsRepository discussionsRepository;
@Override @Override
public List<Discussions> getAllList() { public List<Discussion> getAllList() {
return discussionsRepository.findAll(); return discussionsRepository.findAll();
} }
@Override @Override
public Discussions insert(Discussions discussions) { public Discussion insert(Discussion discussion) {
return discussionsRepository.save(discussions); return discussionsRepository.save(discussion);
} }
@Override @Override
public Discussions findOne(Integer id) { public Discussion findOne(Integer id) {
Discussions discussions = new Discussions(); Discussion discussion = new Discussion();
discussions.setId(id); discussion.setId(id);
return discussionsRepository.getOne(id); return discussionsRepository.getOne(id);
} }
@Override @Override
public Page<Discussions> queryAllDiscussionsList(Discussions discussions,int pageNum, int pageSize) { public Page<Discussion> queryAllDiscussionsList(Discussion discussion, int pageNum, int pageSize) {
Sort sort=new Sort(Sort.Direction.DESC,"id"); Sort sort=new Sort(Sort.Direction.DESC,"id");
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
Pageable pageable=new PageRequest(pageNum,pageSize,sort); Pageable pageable=new PageRequest(pageNum,pageSize,sort);
//将匹配对象封装成Example对象 //将匹配对象封装成Example对象
Example<Discussions> example = Example.of(discussions); Example<Discussion> example = Example.of(discussion);
return discussionsRepository.findAll(example,pageable); return discussionsRepository.findAll(example,pageable);
} }
@@ -7,7 +7,7 @@ import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.yaoyuan.jiscuss.entity.DiscussionsTags; import com.yaoyuan.jiscuss.entity.DiscussionTag;
import com.yaoyuan.jiscuss.repository.DiscussionsTagsRepository; import com.yaoyuan.jiscuss.repository.DiscussionsTagsRepository;
import com.yaoyuan.jiscuss.service.IDiscussionsTagsService; import com.yaoyuan.jiscuss.service.IDiscussionsTagsService;
@@ -18,13 +18,13 @@ public class DiscussionsTagsServiceImpl implements IDiscussionsTagsService {
private DiscussionsTagsRepository discussionsTagsRepository; private DiscussionsTagsRepository discussionsTagsRepository;
@Override @Override
public List<DiscussionsTags> getAllList() { public List<DiscussionTag> getAllList() {
return discussionsTagsRepository.findAll(); return discussionsTagsRepository.findAll();
} }
@Override @Override
public DiscussionsTags insert(DiscussionsTags discussionsTags) { public DiscussionTag insert(DiscussionTag discussionTag) {
return discussionsTagsRepository.save(discussionsTags); return discussionsTagsRepository.save(discussionTag);
} }
@@ -1,13 +1,21 @@
package com.yaoyuan.jiscuss.service.impl; package com.yaoyuan.jiscuss.service.impl;
import java.util.List; import java.io.BufferedReader;
import java.util.Optional; import java.io.Reader;
import java.sql.Clob;
import java.util.*;
import com.yaoyuan.jiscuss.common.PostCommonUtil;
import com.yaoyuan.jiscuss.entity.Discussion;
import com.yaoyuan.jiscuss.entity.custom.DiscussionCustom;
import com.yaoyuan.jiscuss.entity.custom.PostCustom;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import com.yaoyuan.jiscuss.entity.Posts; import com.yaoyuan.jiscuss.entity.Post;
import com.yaoyuan.jiscuss.repository.PostsRepository; import com.yaoyuan.jiscuss.repository.PostsRepository;
import com.yaoyuan.jiscuss.service.IPostsService; import com.yaoyuan.jiscuss.service.IPostsService;
import org.springframework.data.domain.Example;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.transaction.Transactional; import javax.transaction.Transactional;
@@ -20,32 +28,86 @@ public class PostsServiceImpl implements IPostsService {
private PostsRepository postsRepository; private PostsRepository postsRepository;
@Override @Override
public List<Posts> getAllList() { public List<Post> getAllList() {
return postsRepository.findAll(); return postsRepository.findAll();
} }
@Override @Override
public List<Posts> findOneBy(Integer id) { public List<Post> findOneBy(Integer id) {
List<Posts> posts = postsRepository.findOneBy(id); List<Post> posts = postsRepository.findOneBy(id);
return posts; return posts;
} }
@Override @Override
public List<Posts> findAllByDIdAndparentIdNull(Integer dId) { public Post findOneByid(Integer id) {
List<Posts> posts = postsRepository.findAllByDIdAndparentIdNull(dId); Post post =new Post();
post.setId(id);
Example<Post> example = Example.of(post);
Optional<Post> postRes = postsRepository.findOne(example);
return postRes.get();
}
@Override
public List<PostCustom> findPostCustomById(Integer id) {
List<Map<String, Object>> posts = postsRepository.findPostCustomById(id);
// List<Map<String, Object>> postsObjNew = this.getNewPostsObj(posts);
List<PostCustom> postCustomList = new ArrayList<>();
for(Map<String, Object> 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);
}
List<PostCustom> postCustomListNew = PostCommonUtil.getNewPostsObjCustom(postCustomList);
return postCustomListNew;
}
@Override
public List<Post> findAllByDIdAndparentIdNull(Integer dId) {
List<Post> posts = postsRepository.findAllByDIdAndparentIdNull(dId);
return posts; return posts;
} }
@Override @Override
public List<Posts> findAllByDIdAndparentIdNotNull(Integer dId) { public List<Post> findAllByDIdAndparentIdNotNull(Integer dId) {
List<Posts> posts = postsRepository.findAllByDIdAndparentIdNotNull(dId); List<Post> posts = postsRepository.findAllByDIdAndparentIdNotNull(dId);
return posts; return posts;
} }
@Override @Override
public Posts insert(Posts posts) { public Post insert(Post post) {
return postsRepository.save(posts); return postsRepository.save(post);
} }
} }
@@ -7,7 +7,7 @@ import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.yaoyuan.jiscuss.entity.Settings; import com.yaoyuan.jiscuss.entity.Setting;
import com.yaoyuan.jiscuss.repository.SettingsRepository; import com.yaoyuan.jiscuss.repository.SettingsRepository;
import com.yaoyuan.jiscuss.service.ISettingsService; import com.yaoyuan.jiscuss.service.ISettingsService;
@@ -18,12 +18,12 @@ public class SettingsServiceImpl implements ISettingsService {
private SettingsRepository settingsRepository; private SettingsRepository settingsRepository;
@Override @Override
public List<Settings> getAllList() { public List<Setting> getAllList() {
return settingsRepository.findAll(); return settingsRepository.findAll();
} }
@Override @Override
public Settings insert(Settings settings) { public Setting insert(Setting setting) {
return settingsRepository.save(settings); return settingsRepository.save(setting);
} }
} }
@@ -5,10 +5,9 @@ import java.util.List;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.yaoyuan.jiscuss.entity.Tags; import com.yaoyuan.jiscuss.entity.Tag;
import com.yaoyuan.jiscuss.repository.TagsRepository; import com.yaoyuan.jiscuss.repository.TagsRepository;
import com.yaoyuan.jiscuss.service.ITagsService; import com.yaoyuan.jiscuss.service.ITagsService;
@@ -19,17 +18,17 @@ public class TagsServiceImpl implements ITagsService {
private TagsRepository tagsRepository; private TagsRepository tagsRepository;
@Override @Override
public List<Tags> getAllList() { public List<Tag> getAllList() {
return tagsRepository.findAll(); return tagsRepository.findAll();
} }
@Override @Override
public Tags insert(Tags tags) { public Tag insert(Tag tag) {
return tagsRepository.save(tags); return tagsRepository.save(tag);
} }
@Override @Override
public List<Tags> findByDId(Integer id) { public List<Tag> findByDId(Integer id) {
return tagsRepository.findByDId(id); return tagsRepository.findByDId(id);
} }
} }
@@ -1,13 +1,11 @@
package com.yaoyuan.jiscuss.service.impl; package com.yaoyuan.jiscuss.service.impl;
import com.yaoyuan.jiscuss.entity.UserInfo; import com.yaoyuan.jiscuss.entity.UserInfo;
import com.yaoyuan.jiscuss.entity.Users; import com.yaoyuan.jiscuss.entity.User;
import com.yaoyuan.jiscuss.service.IUsersService; import com.yaoyuan.jiscuss.service.IUsersService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
@@ -37,7 +35,7 @@ public class UserDetailServiceImpl implements UserDetailsService {
@Override @Override
public UserInfo loadUserByUsername(String username) throws UsernameNotFoundException { public UserInfo loadUserByUsername(String username) throws UsernameNotFoundException {
// 通过用户名从数据库获取用户信息 // 通过用户名从数据库获取用户信息
Users userInfo = userInfoService.getByUsername(username); User userInfo = userInfoService.getByUsername(username);
if (userInfo == null) { if (userInfo == null) {
throw new UsernameNotFoundException("用户不存在"); throw new UsernameNotFoundException("用户不存在");
} }
@@ -17,7 +17,7 @@ import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import com.yaoyuan.jiscuss.entity.Users; import com.yaoyuan.jiscuss.entity.User;
import com.yaoyuan.jiscuss.repository.UsersRepository; import com.yaoyuan.jiscuss.repository.UsersRepository;
import com.yaoyuan.jiscuss.service.IUsersService; import com.yaoyuan.jiscuss.service.IUsersService;
@@ -33,7 +33,7 @@ public class UsersServiceImpl implements IUsersService {
*/ */
@Cacheable(value = "user") @Cacheable(value = "user")
@Override @Override
public List<Users> getAllList() { public List<User> getAllList() {
return usersRepository.findAll(); return usersRepository.findAll();
} }
@@ -44,7 +44,7 @@ public class UsersServiceImpl implements IUsersService {
* @return * @return
*/ */
@Override @Override
public Page<Users> queryAllUsersList(int pageNum,int pageSize) { public Page<User> queryAllUsersList(int pageNum, int pageSize) {
Sort sort=new Sort(Sort.Direction.DESC,"id"); Sort sort=new Sort(Sort.Direction.DESC,"id");
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
Pageable pageable=new PageRequest(pageNum,pageSize,sort); Pageable pageable=new PageRequest(pageNum,pageSize,sort);
@@ -57,7 +57,7 @@ public class UsersServiceImpl implements IUsersService {
* @return * @return
*/ */
@Override @Override
public List<Users> getByUsernameIsLike(String name) { public List<User> getByUsernameIsLike(String name) {
return usersRepository.getByUsernameIsLike(name); return usersRepository.getByUsernameIsLike(name);
} }
@@ -68,7 +68,7 @@ public class UsersServiceImpl implements IUsersService {
*/ */
@Cacheable(value = "user", key = "#id") @Cacheable(value = "user", key = "#id")
@Override @Override
public Users findOne(Integer id) { public User findOne(Integer id) {
return usersRepository.getById(id); return usersRepository.getById(id);
} }
@@ -79,7 +79,7 @@ public class UsersServiceImpl implements IUsersService {
*/ */
@CachePut(value = "user", key = "#user.id") @CachePut(value = "user", key = "#user.id")
@Override @Override
public Users insert(Users user) { public User insert(User user) {
return usersRepository.save(user); return usersRepository.save(user);
} }
@@ -91,7 +91,7 @@ public class UsersServiceImpl implements IUsersService {
*/ */
@CachePut(value = "user", key = "#user.id") @CachePut(value = "user", key = "#user.id")
@Override @Override
public Users update(Users user, Integer id) { public User update(User user, Integer id) {
return usersRepository.saveAndFlush(user); return usersRepository.saveAndFlush(user);
} }
@@ -119,7 +119,7 @@ public class UsersServiceImpl implements IUsersService {
* @return * @return
*/ */
@Override @Override
public Users getByUsername(String username) { public User getByUsername(String username) {
return usersRepository.getByUsername(username); return usersRepository.getByUsername(username);
} }
@@ -130,7 +130,7 @@ public class UsersServiceImpl implements IUsersService {
* @return * @return
*/ */
@Override @Override
public Users checkByUsernameAndPassword(String username,String password) { public User checkByUsernameAndPassword(String username, String password) {
return usersRepository.checkByUsernameAndPassword(username,password); return usersRepository.checkByUsernameAndPassword(username,password);
} }
+26 -1
View File
@@ -28,7 +28,32 @@ spring:
initial-size: 5 initial-size: 5
max-active: 10 max-active: 10
max-wait: 5000 max-wait: 5000
validation-query: select 1 validation-query: select 1SS
# 状态监控
filter:
stat:
enabled: true
db-type: h2
log-slow-sql: true
slow-sql-millis: 2000
# 监控过滤器
web-stat-filter:
enabled: true
exclusions:
- "*.js"
- "*.gif"
- "*.jpg"
- "*.png"
- "*.css"
- "*.ico"
- "/druid/*"
# druid 监控页面
stat-view-servlet:
enabled: true
url-pattern: /druid/*
# reset-enable: false
# login-username: root
# login-password: root
freemarker: freemarker:
# 设置模板后缀名 # 设置模板后缀名
suffix: .ftl suffix: .ftl
+33 -29
View File
@@ -1,67 +1,71 @@
insert into users insert into user
values (1, 'admin', '管理员', 'as_2583698@sina.com','123','2019-09-09 00:00:00',31,'','13804250293',0,0,'2019-09-09 00:00:00',1,1); values (1, 'admin', '管理员', 'as_2583698@sina.com','123','2019-09-09 00:00:00',31,'','','13804250293',0,0,'2019-09-09 00:00:00',1,1);
insert into users insert into user
values (2, 'test', '测试用户1', 'as_2583698@sina.com','123','2019-09-09 00:00:00',31,'','13804250293',0,0,'2019-09-09 00:00:00',1,0); values (2, 'test', '测试用户1', 'as_2583698@sina.com','123','2019-09-09 00:00:00',31,'','','13804250293',0,0,'2019-09-09 00:00:00',1,0);
insert into discussions insert into discussion
values (1, '测试主题1', '测试内容1',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null); values (1, '测试主题1', '测试内容1',null,null,null,'2020-09-19 00:00:00',1,null,'2020-09-29 00:00:00',2,null,null,null,null,null,1,'2020-09-09 00:00:00');
insert into discussions insert into discussion
values (2, '测试主题2', '测试内容2',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null); values (2, '测试主题2', '测试内容2',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null);
insert into discussions insert into discussion
values (3, '测试主题3', '测试内容3',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null); values (3, '测试主题3', '测试内容3',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null);
insert into discussions insert into discussion
values (4, '测试主题4', '测试内容4',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null); values (4, '测试主题4', '测试内容4',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null);
insert into discussions insert into discussion
values (5, '测试主题5', '测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null); values (5, '测试主题5', '测试内容2测试内容2测试内容2测试内容2测试内容2测试内容2',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null);
insert into discussions insert into discussion
values (6, '测试主题6', '测试内容3测试测试测试测试测试测试测试测试测试测试测试测试测试',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null); values (6, '测试主题6', '测试内容3测试测试测试测试测试测试测试测试测试测试测试测试测试',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null);
insert into discussions insert into discussion
values (7, '测试主题7', '测试内容7',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null); values (7, '测试主题7', '测试内容7',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null);
insert into discussions insert into discussion
values (8, '测试主题8', '测试内容8',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null); values (8, '测试主题8', '测试内容8',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null);
insert into discussions insert into discussion
values (9, '测试主题9', '测试内容9',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null); values (9, '测试主题9', '测试内容9',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null);
insert into discussions insert into discussion
values (10, '测试主题10', '测试内容113',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null); values (10, '测试主题10', '测试内容113',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null);
insert into discussions insert into discussion
values (11, '测试主题11', '测试内容3测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null); values (11, '测试主题11', '测试内容3测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试',null,null,null,null,null,null,null,1,null,null,null,null,null,null,null);
insert into tags insert into tag
values (1, '测试标签1',null,null,null,null,null,null,null,null,null); values (1, '测试标签1',null,null,null,null,null,null,null,null,null);
insert into posts insert into post
values (1, 1, 1,null,1,null,'评论内容222',null,null,null,null,null,null,null,null); values (1, 1, 1,'2020-02-09 00:00:00',1,null,'评论内容222',null,null,null,null,null,null,1,'2020-08-09 00:00:00');
insert into posts insert into post
values (2, 1, 2,null,1,null,'评论内容333',null,null,1,null,null,null,null,null); values (2, 1, 2,'2020-01-09 00:00:00',2,null,'评论内容333',null,null,1,null,null,null,2,'2020-07-09 00:00:00');
insert into posts insert into post
values (3, 1, 3,null,1,1,'评论内容444',null,null,1,null,null,null,null,null); values (7, 1, 7,'2020-01-09 00:00:00',1,null,'评论内容3331111',null,null,1,null,null,null,1,'2020-03-09 00:00:00');
insert into posts
values (4, 1, 4,null,1,1,'评论内容555',null,null,null,null,null,null,null,null);
insert into posts insert into post
values (5, 1, 5,null,1,null,'评论内容666',null,null,4,null,null,null,null,null); values (3, 1, 3,'2020-01-09 00:00:00',1,1,'评论内容444',null,null,1,null,null,null,1,'2020-02-09 00:00:00');
insert into posts insert into post
values (6, 1, 6,null,1,null,'评论内容777',null,null,5,null,null,null,null,null); values (4, 1, 4,'2020-01-09 00:00:00',2,1,'评论内容555',null,null,null,null,null,null,2,'2020-03-09 00:00:00');
insert into post
values (5, 1, 5,'2020-01-09 00:00:00',2,null,'评论内容666',null,null,1,null,null,null,2,'2020-09-09 00:00:00');
insert into post
values (6, 1, 6,'2020-01-09 00:00:00',1,null,'评论内容777',null,null,5,null,null,null,1,'2020-09-09 00:00:00');
+13 -12
View File
@@ -1,6 +1,6 @@
-- 用户表1 -- 用户表1
drop table if exists users; drop table if exists user;
CREATE TABLE users( CREATE TABLE user(
id INTEGER not null primary key auto_increment, id INTEGER not null primary key auto_increment,
username varchar(20), username varchar(20),
realname varchar(20), realname varchar(20),
@@ -8,6 +8,7 @@ email varchar(20),
password varchar(20), password varchar(20),
join_time datetime, join_time datetime,
age INTEGER, age INTEGER,
avatar text,
gender char(20), gender char(20),
phone char(20), phone char(20),
discussions_count INTEGER, discussions_count INTEGER,
@@ -17,8 +18,8 @@ flag INTEGER,
level INTEGER level INTEGER
); );
-- 主题表2 -- 主题表2
drop table if exists discussions; drop table if exists discussion;
CREATE TABLE discussions( CREATE TABLE discussion(
id INTEGER not null primary key auto_increment, id INTEGER not null primary key auto_increment,
title varchar(200), title varchar(200),
content text, content text,
@@ -39,14 +40,14 @@ create_id INTEGER,
create_time datetime create_time datetime
); );
-- 主题标签关联表3 -- 主题标签关联表3
drop table if exists discussionstags; drop table if exists discussiontag;
CREATE TABLE discussionstags( CREATE TABLE discussiontag(
discussion_id INTEGER not null , discussion_id INTEGER not null ,
tag_id INTEGER tag_id INTEGER
); );
-- 评论表4 -- 评论表4
drop table if exists posts; drop table if exists post;
CREATE TABLE posts( CREATE TABLE post(
id INTEGER not null primary key auto_increment , id INTEGER not null primary key auto_increment ,
discussion_id INTEGER, discussion_id INTEGER,
number INTEGER, number INTEGER,
@@ -64,14 +65,14 @@ create_id INTEGER,
create_time datetime create_time datetime
); );
-- 设置表5 -- 设置表5
drop table if exists settings; drop table if exists setting;
CREATE TABLE settings( CREATE TABLE setting(
key varchar(20) primary key, key varchar(20) primary key,
value text value text
); );
-- 标签表6 -- 标签表6
drop table if exists tags; drop table if exists tag;
CREATE TABLE tags( CREATE TABLE tag(
id INTEGER not null primary key auto_increment, id INTEGER not null primary key auto_increment,
name varchar(200), name varchar(200),
description varchar(200), description varchar(200),
@@ -9,20 +9,22 @@ $("#addPost").click(function () {
console.log("点击 addPost"); console.log("点击 addPost");
console.log(username); console.log(username);
console.log(discussionsId); console.log(discussionsId);
let postId = $("#postId").val();
console.log(postId);
if(username && username!=null){ if(username && username!=null){
var token = $("meta[name='_csrf']").attr("content"); var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content"); var header = $("meta[name='_csrf_header']").attr("content");
console.warn(header) console.warn(header)
console.warn(token) console.warn(token)
var content = $("#postcontent").val(); var content = $("#postContent").val();
console.log(content); console.log(content);
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: "/newpost", url: "/newpost",
data: JSON.stringify({ data: JSON.stringify({
content: content, content: content,
discussion_id: discussionsId discussionId: discussionsId,
parentId: postId
}), }),
contentType: 'application/json', contentType: 'application/json',
beforeSend: function(request) { beforeSend: function(request) {
@@ -32,7 +34,7 @@ $("#addPost").click(function () {
success: function (data) { success: function (data) {
console.log(data); console.log(data);
if(data.flag){ if(data.flag){
massage(title+',添加成功!',''); massage(content+',添加成功!','');
location.reload(); location.reload();
}else{ }else{
massage(data.msg,''); massage(data.msg,'');
@@ -46,4 +48,16 @@ $("#addPost").click(function () {
} }
}); });
// 回复
function replyThis(username, postId) {
console.warn(username)
console.warn(postId)
$("#postId").val(postId);
var content = $("#postContent").val();
if (content) content += '\n';
$("#postContent").val(content + "@" + username + " ");
$("#postContent").focus();
}
+1 -1
View File
@@ -1,6 +1,6 @@
<div class="ui main menu" id="menu"> <div class="ui main menu" id="menu">
<div class="ui container"> <div class="ui container">
<div href="#" class="header borderless item"> <div href="/" class="header borderless item">
<img class="logo" src="static/assets/images/logo.png"> <img class="logo" src="static/assets/images/logo.png">
&nbsp;Jiscuss &nbsp;Jiscuss
</div> </div>
+46 -64
View File
@@ -35,10 +35,13 @@
<div id="context2"> <div id="context2">
<h2 class="ui header"> <h2 class="ui header">
<i class="save outline"></i> <i class="settings icon"></i>
<div class="content"> <div class="content">
${discussions.title} ${discussions.title}
<div class="sub header">某某标签分类</div> <div class="sub header">某某标签分类</div>
<#list tags as tag>
<div class="sub header">${tag.name}</div>
</#list>
</div> </div>
</h2> </h2>
@@ -55,9 +58,15 @@
</div> </div>
<div class="content"> <div class="content">
<div class="summary"> <div class="summary">
用户 <a>测试人员1</a> 发布于 用户 <a>${discussions.realname}</a> 发布于
<div class="date"> <div class="date">
${discussions.createTime} ${discussions.startTime}
</div>
</div>
<div class="summary">
用户 <a>${discussions.realnameLast}</a> 最后回复于
<div class="date">
${discussions.lastTime}
</div> </div>
</div> </div>
<div class="meta"> <div class="meta">
@@ -70,84 +79,57 @@
</div> </div>
<div class="ui minimal comments"> <div class="ui threaded comments">
<h3 class="ui dividing header">评论区</h3> <h3 class="ui dividing header">评论区</h3>
<input type="hidden" name="postId" id="postId" value=""/>
<#list posts as post>
<div class="comment"> <div class="comment">
<a class="avatar"> <a class="avatar">
<img src="/static/assets/images/logo.png"> <img src="/static/assets/images/logo.png">
</a> </a>
<div class="content"> <div class="content">
<a class="author">用户6</a> <a class="author">${post.username}</a>
<div class="metadata"> <div class="metadata">
<span class="date">Today at 5:42PM</span> <span class="date">${post.createTime}</span>
</div> </div>
<div class="text"> <div class="text">
测试测试6666! ${post.content}
</div> </div>
<div class="actions"> <div class="actions">
<a class="reply">回复</a> <a class="reply" onclick="replyThis('${post.username}', '${post.id}')">回复</a>
</div>
</div>
</div>
<div class="comment">
<a class="avatar">
<img src="/static/assets/images/logo.png">
</a>
<div class="content">
<a class="author">用户7</a>
<div class="metadata">
<span class="date">Yesterday at 12:30AM</span>
</div>
<div class="text">
<p>测试评论!</p>
</div>
<div class="actions">
<a class="reply">回复</a>
</div> </div>
</div> </div>
<#list post.child as child>
<div class="comments"> <div class="comments">
<div class="comment"> <div class="comment">
<a class="avatar"> <a class="avatar">
<img src="/static/assets/images/logo.png"> <img src="/static/assets/images/logo.png">
</a> </a>
<div class="content"> <div class="content">
<a class="author">用户8</a> <a class="author">${child.username}</a>
<div class="metadata"> <div class="metadata">
<span class="date">Just now</span> <span class="date">${child.createTime}</span>
</div> </div>
<div class="text"> <div class="text">
测试平路8 :) ${child.content}
</div> </div>
<div class="actions"> <div class="actions">
<a class="reply">回复</a> <a class="reply" onclick="replyThis('${child.username}', '${child.id}')">回复</a>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</#list>
</div> </div>
<div class="comment"> </#list>
<a class="avatar">
<img src="/static/assets/images/logo.png">
</a>
<div class="content">
<a class="author">测试用户999n</a>
<div class="metadata">
<span class="date">5 days ago</span>
</div>
<div class="text">
哈哈哈哈, 测试评论
</div>
<div class="actions">
<a class="reply">回复</a>
</div>
</div>
</div>
<div class="ui section divider"></div> <div class="ui">
</div>
<form class="ui reply form"> <form class="ui reply form">
<div class="field"> <div class="field">
<textarea id="postcontent"></textarea> <textarea id="postContent"></textarea>
</div> </div>
<div class="ui blue labeled submit icon button" id="addPost"> <div class="ui blue labeled submit icon button" id="addPost">
<i class="icon edit"></i> 添加评论 <i class="icon edit"></i> 添加评论
@@ -155,13 +137,10 @@
</form> </form>
</div> </div>
</div> </div>
</div> </div>
<div <div class="widescreen large screen computer tablet only four wide column">
class="widescreen large screen computer tablet only four wide column">
<div class="ui fluid action input"> <div class="ui fluid action input">
<input type="text" placeholder="搜索..."> <input type="text" placeholder="搜索...">
<div class="ui button">搜索</div> <div class="ui button">搜索</div>
@@ -200,30 +179,32 @@
<div class="ui card"> <div class="ui card">
<div class="content"> <div class="content">
<div class="header">预留功能</div> <div class="header">作者的热门主题</div>
</div> </div>
<div class="content"> <div class="content">
<h4 class="ui sub header">Jiscuss</h4> <div class="ui middle aligned divided list">
<div class="ui small feed"> <div class="item">
<div class="event"> <img class="ui avatar image" src="/static/assets/images/logo.png">
<div class="content"> <div class="content">
<div class="summary"> <a class="header">他的测试主题1</a>
<a>Jiscuss</a> 一直持续更新, <a>Jiscuss</a> 一直更新完善,感谢支持!
</div> </div>
</div> </div>
</div> <div class="item">
<img class="ui avatar image" src="/static/assets/images/logo.png">
<div class="event">
<div class="content"> <div class="content">
<div class="summary"> <a class="header">他的测试主题2</a>
<a>2019</a> 测试内容
</div> </div>
</div> </div>
<div class="item">
<img class="ui avatar image" src="/static/assets/images/logo.png">
<div class="content">
<a class="header">他的测试主题3</a>
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="extra content"> <div class="extra content">
<button class="ui button">预留按钮</button> <p>预留信息</p>
</div> </div>
</div> </div>
@@ -297,6 +278,7 @@
$(document).ready(function () { $(document).ready(function () {
<#if username??> <#if username??>
setusername('${username}');
console.log('已经登陆:' + username); console.log('已经登陆:' + username);
</#if> </#if>
setDiscussionsId('${discussions.id}'); setDiscussionsId('${discussions.id}');