perf: 后台评论管理

This commit is contained in:
xiongxiaoyang 2023-04-14 23:16:55 +08:00
parent 8ddc6cc434
commit 3ffa75dc10
7 changed files with 314 additions and 242 deletions

View File

@ -1,15 +1,15 @@
package com.java2nb.novel.dao; package com.java2nb.novel.dao;
import com.java2nb.novel.domain.BookDO; import com.java2nb.novel.domain.BookDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
/** /**
* 小说表 * 小说表
*
* @author xiongxy * @author xiongxy
* @email 1179705413@qq.com * @email 1179705413@qq.com
* @date 2020-12-01 03:49:46 * @date 2020-12-01 03:49:46
@ -17,19 +17,22 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface BookDao { public interface BookDao {
BookDO get(Long id); BookDO get(Long id);
List<BookDO> list(Map<String,Object> map); List<BookDO> list(Map<String, Object> map);
int count(Map<String,Object> map); int count(Map<String, Object> map);
int save(BookDO book); int save(BookDO book);
int update(BookDO book); int update(BookDO book);
int remove(Long id); int remove(Long id);
int batchRemove(Long[] ids); int batchRemove(Long[] ids);
List<Map<Object, Object>> tableSta(Date minDate); List<Map<Object, Object>> tableSta(Date minDate);
List<BookDO> batchGet(List<Long> ids);
} }

View File

@ -1,15 +1,13 @@
package com.java2nb.novel.dao; package com.java2nb.novel.dao;
import com.java2nb.novel.domain.UserDO; import com.java2nb.novel.domain.UserDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
/** /**
*
* @author xiongxy * @author xiongxy
* @email 1179705413@qq.com * @email 1179705413@qq.com
* @date 2020-12-01 03:49:08 * @date 2020-12-01 03:49:08
@ -17,19 +15,21 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface UserDao { public interface UserDao {
UserDO get(Long id); UserDO get(Long id);
List<UserDO> list(Map<String,Object> map); List<UserDO> list(Map<String, Object> map);
int count(Map<String,Object> map); int count(Map<String, Object> map);
int save(UserDO user); int save(UserDO user);
int update(UserDO user); int update(UserDO user);
int remove(Long id); int remove(Long id);
int batchRemove(Long[] ids); int batchRemove(Long[] ids);
List<Map<Object, Object>> tableSta(Date minDate); List<Map<Object, Object>> tableSta(Date minDate);
List<UserDO> batchGet(List<Long> userIds);
} }

View File

@ -1,17 +1,11 @@
package com.java2nb.novel.domain; package com.java2nb.novel.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.java2nb.common.jsonserializer.LongToStringSerializer; import com.java2nb.common.jsonserializer.LongToStringSerializer;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.io.Serializable;
import java.util.Date;
/** /**
@ -22,116 +16,150 @@ import java.util.Date;
* @date 2023-04-14 21:59:28 * @date 2023-04-14 21:59:28
*/ */
public class BookCommentDO implements Serializable { public class BookCommentDO implements Serializable {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;
//主键 //主键
//java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)
//所以通过序列化成字符串来解决 //所以通过序列化成字符串来解决
@JsonSerialize(using = LongToStringSerializer.class) @JsonSerialize(using = LongToStringSerializer.class)
private Long id; private Long id;
//小说ID //小说ID
//java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)
//所以通过序列化成字符串来解决 //所以通过序列化成字符串来解决
@JsonSerialize(using = LongToStringSerializer.class) @JsonSerialize(using = LongToStringSerializer.class)
private Long bookId; private Long bookId;
//评价内容 //评价内容
private String commentContent; private String commentContent;
//回复数量 //回复数量
private Integer replyCount; private Integer replyCount;
//审核状态0待审核1审核通过2审核不通过 //审核状态0待审核1审核通过2审核不通过
private Integer auditStatus; private Integer auditStatus;
//评价时间 //评价时间
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime; private Date createTime;
//评价人 //评价人
//java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)
//所以通过序列化成字符串来解决 //所以通过序列化成字符串来解决
@JsonSerialize(using = LongToStringSerializer.class) @JsonSerialize(using = LongToStringSerializer.class)
private Long createUserId; private Long createUserId;
/** private String bookName;
* 设置主键
*/ private String userName;
public void setId(Long id) {
this.id = id; public String getBookName() {
} return bookName;
/** }
* 获取主键
*/ public void setBookName(String bookName) {
public Long getId() { this.bookName = bookName;
return id; }
}
/** public String getUserName() {
* 设置小说ID return userName;
*/ }
public void setBookId(Long bookId) {
this.bookId = bookId; public void setUserName(String userName) {
} this.userName = userName;
/** }
* 获取小说ID
*/ /**
public Long getBookId() { * 设置主键
return bookId; */
} public void setId(Long id) {
/** this.id = id;
* 设置评价内容 }
*/
public void setCommentContent(String commentContent) { /**
this.commentContent = commentContent; * 获取主键
} */
/** public Long getId() {
* 获取评价内容 return id;
*/ }
public String getCommentContent() {
return commentContent; /**
} * 设置小说ID
/** */
* 设置回复数量 public void setBookId(Long bookId) {
*/ this.bookId = bookId;
public void setReplyCount(Integer replyCount) { }
this.replyCount = replyCount;
} /**
/** * 获取小说ID
* 获取回复数量 */
*/ public Long getBookId() {
public Integer getReplyCount() { return bookId;
return replyCount; }
}
/** /**
* 设置审核状态0待审核1审核通过2审核不通过 * 设置评价内容
*/ */
public void setAuditStatus(Integer auditStatus) { public void setCommentContent(String commentContent) {
this.auditStatus = auditStatus; this.commentContent = commentContent;
} }
/**
* 获取审核状态0待审核1审核通过2审核不通过 /**
*/ * 获取评价内容
public Integer getAuditStatus() { */
return auditStatus; public String getCommentContent() {
} return commentContent;
/** }
* 设置评价时间
*/ /**
public void setCreateTime(Date createTime) { * 设置回复数量
this.createTime = createTime; */
} public void setReplyCount(Integer replyCount) {
/** this.replyCount = replyCount;
* 获取评价时间 }
*/
public Date getCreateTime() { /**
return createTime; * 获取回复数量
} */
/** public Integer getReplyCount() {
* 设置评价人 return replyCount;
*/ }
public void setCreateUserId(Long createUserId) {
this.createUserId = createUserId; /**
} * 设置审核状态0待审核1审核通过2审核不通过
/** */
* 获取评价人 public void setAuditStatus(Integer auditStatus) {
*/ this.auditStatus = auditStatus;
public Long getCreateUserId() { }
return createUserId;
} /**
* 获取审核状态0待审核1审核通过2审核不通过
*/
public Integer getAuditStatus() {
return auditStatus;
}
/**
* 设置评价时间
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
/**
* 获取评价时间
*/
public Date getCreateTime() {
return createTime;
}
/**
* 设置评价人
*/
public void setCreateUserId(Long createUserId) {
this.createUserId = createUserId;
}
/**
* 获取评价人
*/
public Long getCreateUserId() {
return createUserId;
}
} }

View File

@ -1,55 +1,77 @@
package com.java2nb.novel.service.impl; package com.java2nb.novel.service.impl;
import com.java2nb.novel.dao.BookCommentDao;
import com.java2nb.novel.dao.BookDao;
import com.java2nb.novel.dao.UserDao;
import com.java2nb.novel.domain.BookCommentDO;
import com.java2nb.novel.domain.BookDO;
import com.java2nb.novel.domain.UserDO;
import com.java2nb.novel.service.BookCommentService;
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 org.springframework.util.CollectionUtils;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
import com.java2nb.novel.dao.BookCommentDao;
import com.java2nb.novel.domain.BookCommentDO;
import com.java2nb.novel.service.BookCommentService;
@Service @Service
public class BookCommentServiceImpl implements BookCommentService { public class BookCommentServiceImpl implements BookCommentService {
@Autowired
private BookCommentDao bookCommentDao;
@Override @Autowired
public BookCommentDO get(Long id){ private BookCommentDao bookCommentDao;
return bookCommentDao.get(id); @Autowired
} private BookDao bookDao;
@Autowired
private UserDao userDao;
@Override @Override
public List<BookCommentDO> list(Map<String, Object> map){ public BookCommentDO get(Long id) {
return bookCommentDao.list(map); return bookCommentDao.get(id);
} }
@Override @Override
public int count(Map<String, Object> map){ public List<BookCommentDO> list(Map<String, Object> map) {
return bookCommentDao.count(map); List<BookCommentDO> list = bookCommentDao.list(map);
} if (!CollectionUtils.isEmpty(list)) {
List<Long> bookIds = list.stream().map(BookCommentDO::getBookId).collect(Collectors.toList());
Map<Long, String> bookNameMap = bookDao.batchGet(bookIds).stream()
.collect(Collectors.toMap(BookDO::getId, BookDO::getBookName));
List<Long> userIds = list.stream().map(BookCommentDO::getCreateUserId).collect(Collectors.toList());
Map<Long, String> userNameMap = userDao.batchGet(userIds).stream()
.collect(Collectors.toMap(UserDO::getId, UserDO::getUsername));
list.forEach(v -> {
v.setBookName(bookNameMap.get(v.getBookId()));
v.setUserName(userNameMap.get(v.getCreateUserId()));
});
}
return list;
}
@Override @Override
public int save(BookCommentDO bookComment){ public int count(Map<String, Object> map) {
return bookCommentDao.save(bookComment); return bookCommentDao.count(map);
} }
@Override @Override
public int update(BookCommentDO bookComment){ public int save(BookCommentDO bookComment) {
return bookCommentDao.update(bookComment); return bookCommentDao.save(bookComment);
} }
@Override @Override
public int remove(Long id){ public int update(BookCommentDO bookComment) {
return bookCommentDao.remove(id); return bookCommentDao.update(bookComment);
} }
@Override @Override
public int batchRemove(Long[] ids){ public int remove(Long id) {
return bookCommentDao.batchRemove(ids); return bookCommentDao.remove(id);
} }
@Override
public int batchRemove(Long[] ids) {
return bookCommentDao.batchRemove(ids);
}
} }

View File

@ -285,5 +285,13 @@
GROUP BY DATE_FORMAT(create_time, "%Y-%m-%d") GROUP BY DATE_FORMAT(create_time, "%Y-%m-%d")
ORDER BY staDate ORDER BY staDate
</select> </select>
<select id="batchGet" resultType="com.java2nb.novel.domain.BookDO">
select
`id`,`work_direction`,`cat_id`,`cat_name`,`pic_url`,`book_name`,`author_id`,`author_name`,`book_desc`,`score`,`book_status`,`visit_count`,`word_count`,`comment_count`,`yesterday_buy`,`last_index_id`,`last_index_name`,`last_index_update_time`,`is_vip`,`status`,`update_time`,`create_time`,`crawl_source_id`,`crawl_book_id`,`crawl_last_time`,`crawl_is_stop`
from book where id in
<foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper> </mapper>

View File

@ -4,8 +4,19 @@
<mapper namespace="com.java2nb.novel.dao.UserDao"> <mapper namespace="com.java2nb.novel.dao.UserDao">
<select id="get" resultType="com.java2nb.novel.domain.UserDO"> <select id="get" resultType="com.java2nb.novel.domain.UserDO">
select `id`,`username`,`password`,`nick_name`,`user_photo`,`user_sex`,`account_balance`,`status`,`create_time`,`update_time` from user where id = #{value} select `id`,
</select> `username`,
`password`,
`nick_name`,
`user_photo`,
`user_sex`,
`account_balance`,
`status`,
`create_time`,
`update_time`
from user
where id = #{value}
</select>
<select id="list" resultType="com.java2nb.novel.domain.UserDO"> <select id="list" resultType="com.java2nb.novel.domain.UserDO">
select select
@ -53,33 +64,28 @@
</select> </select>
<insert id="save" parameterType="com.java2nb.novel.domain.UserDO"> <insert id="save" parameterType="com.java2nb.novel.domain.UserDO">
insert into user insert into user
( (`id`,
`id`, `username`,
`username`, `password`,
`password`, `nick_name`,
`nick_name`, `user_photo`,
`user_photo`, `user_sex`,
`user_sex`, `account_balance`,
`account_balance`, `status`,
`status`, `create_time`,
`create_time`, `update_time`)
`update_time` values (#{id},
) #{username},
values #{password},
( #{nickName},
#{id}, #{userPhoto},
#{username}, #{userSex},
#{password}, #{accountBalance},
#{nickName}, #{status},
#{userPhoto}, #{createTime},
#{userSex}, #{updateTime})
#{accountBalance}, </insert>
#{status},
#{createTime},
#{updateTime}
)
</insert>
<insert id="saveSelective" parameterType="com.java2nb.novel.domain.UserDO"> <insert id="saveSelective" parameterType="com.java2nb.novel.domain.UserDO">
insert into user insert into user
@ -127,8 +133,10 @@
</update> </update>
<delete id="remove"> <delete id="remove">
delete from user where id = #{value} delete
</delete> from user
where id = #{value}
</delete>
<delete id="batchRemove"> <delete id="batchRemove">
delete from user where id in delete from user where id in
@ -138,17 +146,20 @@
</delete> </delete>
<select id="tableSta" resultType="map"> <select id="tableSta" resultType="map">
SELECT SELECT DATE_FORMAT(create_time, "%Y-%m-%d") AS staDate,
DATE_FORMAT( create_time, "%Y-%m-%d" ) AS staDate, COUNT(1) userCount
COUNT( 1 ) userCount FROM user
FROM WHERE create_time >= #{minDate}
user GROUP BY DATE_FORMAT(create_time, "%Y-%m-%d")
WHERE ORDER BY staDate
create_time >= #{minDate} </select>
GROUP BY <select id="batchGet" resultType="com.java2nb.novel.domain.UserDO">
DATE_FORMAT( create_time, "%Y-%m-%d" ) select
ORDER BY `id`,`username`,`password`,`nick_name`,`user_photo`,`user_sex`,`account_balance`,`status`,`create_time`,`update_time`
staDate from user where id in
</select> <foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper> </mapper>

View File

@ -61,25 +61,25 @@ function load() {
}, },
{ {
field: 'bookId', field: 'bookName',
title: '小说ID' title: '评论小说'
}, },
{ {
field: 'commentContent', field: 'commentContent',
title: '内容' title: '内容'
}, },
{ {
field: 'createTime', field: 'createTime',
title: '时间' title: '时间'
}, },
{ {
field: 'createUserId', field: 'userName',
title: '价人ID' title: '论人'
}, },