Revert "新功能发布,缺陷代码修复,用户体验提升"

This commit is contained in:
ronger 2020-03-30 16:20:49 +08:00 committed by GitHub
parent 1a632d790b
commit d74d470597
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 31 additions and 564 deletions

View File

@ -10,6 +10,4 @@ public class NotificationConstant {
public static String Follow = "1";
public static String Comment = "2";
}

View File

@ -2,25 +2,16 @@ package com.rymcu.vertical.core.constant;
/**
* 项目常量
* @author ronger
*/
public final class ProjectConstant {
/**当前环境*/
public static final String ENV = "dev";
/**项目基础包名称,根据自己公司的项目修改*/
public static final String BASE_PACKAGE = "com.rymcu.vertical";
/**DTO所在包*/
public static final String DTO_PACKAGE = BASE_PACKAGE + ".dto";
/**Model所在包*/
public static final String MODEL_PACKAGE = BASE_PACKAGE + ".entity";
/**Mapper所在包*/
public static final String MAPPER_PACKAGE = BASE_PACKAGE + ".mapper";
/**Service所在包*/
public static final String SERVICE_PACKAGE = BASE_PACKAGE + ".service";
/**ServiceImpl所在包*/
public static final String SERVICE_IMPL_PACKAGE = SERVICE_PACKAGE + ".impl";
/**Controller所在包*/
public static final String CONTROLLER_PACKAGE = BASE_PACKAGE + ".web";
/**Mapper插件基础接口的完全限定名*/
public static final String MAPPER_INTERFACE_REFERENCE = BASE_PACKAGE + ".core.mapper.Mapper";
public static final String BASE_PACKAGE = "com.rymcu.vertical";//项目基础包名称根据自己公司的项目修改
public static final String DTO_PACKAGE = BASE_PACKAGE + ".dto";//DTO所在包
public static final String MODEL_PACKAGE = BASE_PACKAGE + ".entity";//Model所在包
public static final String MAPPER_PACKAGE = BASE_PACKAGE + ".mapper";//Mapper所在包
public static final String SERVICE_PACKAGE = BASE_PACKAGE + ".service";//Service所在包
public static final String SERVICE_IMPL_PACKAGE = SERVICE_PACKAGE + ".impl";//ServiceImpl所在包
public static final String CONTROLLER_PACKAGE = BASE_PACKAGE + ".web";//Controller所在包
public static final String MAPPER_INTERFACE_REFERENCE = BASE_PACKAGE + ".core.mapper.Mapper";//Mapper插件基础接口的完全限定名
}

View File

@ -41,14 +41,10 @@ public class ArticleDTO {
private String articlePermalink;
/** 站内链接 */
private String articleLink;
/** 文章状态 */
private String articleStatus;
/** 更新时间 */
private Date updatedTime;
private Author articleAuthor;
private List<ArticleTagDTO> tags;
private List<CommentDTO> articleComments;
}

View File

@ -7,13 +7,8 @@ import lombok.Data;
*/
@Data
public class ArticleTagDTO {
private Integer idArticleTag;
private Integer idTag;
private Integer idArticle;
private String tagTitle;
private String tagUri;

View File

@ -2,9 +2,6 @@ package com.rymcu.vertical.dto;
import lombok.Data;
/**
* @author ronger
*/
@Data
public class Author {

View File

@ -1,41 +0,0 @@
package com.rymcu.vertical.dto;
import lombok.Data;
import java.util.Date;
/**
* @author ronger
*/
@Data
public class CommentDTO {
private Integer idComment;
/** 评论内容 */
private String commentContent;
/** 作者 id */
private Integer commentAuthorId;
/** 文章 id */
private Integer commentArticleId;
/** 锚点 url */
private String commentSharpUrl;
/** 父评论 id */
private Integer commentOriginalCommentId;
/** 父评论作者头像 */
private String commentOriginalAuthorThumbnailURL;
/** 父评论作者昵称 */
private String commentOriginalAuthorNickname;
/** 状态 */
private String commentStatus;
/** 0公开回帖1匿名回帖 */
private String commentAnonymous;
/** 回帖计数 */
private Integer commentReplyCount;
/** 0所有人可见1仅楼主和自己可见 */
private String commentVisible;
/** 创建时间 */
private Date createdTime;
private Author commenter;
private String timeAgo;
}

View File

@ -46,6 +46,4 @@ public class Article implements Serializable,Cloneable {
private Date createdTime;
/** 更新时间 */
private Date updatedTime;
/** 文章状态 */
private String articleStatus;
}

View File

@ -19,7 +19,7 @@ public class Comment implements Serializable,Cloneable {
@Id
@GeneratedValue(generator = "JDBC")
@Column(name = "id")
private Integer idComment;
private Integer id;
/** 评论内容 */
@Column(name = "comment_content")
private String commentContent;

View File

@ -10,113 +10,34 @@ import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author ronger
*/
public interface ArticleMapper extends Mapper<Article> {
/**
* 获取文章列表
* @param searchText
* @param tag
* @return
*/
List<ArticleDTO> selectArticles(@Param("searchText") String searchText, @Param("tag") String tag);
/**
* 根据用户 ID 获取作者信息
* @param id
* @return
*/
Author selectAuthor(@Param("id") Integer id);
/**
* 根据文章 ID 查询文章
* @param id
* @param type
* @return
*/
ArticleDTO selectArticleDTOById(@Param("id") Integer id, @Param("type") int type);
ArticleDTO selectArticleDTOById(@Param("id") Integer id);
/**
* 保存文章内容
* @param idArticle
* @param articleContent
* @param articleContentHtml
* @return
*/
Integer insertArticleContent(@Param("idArticle") Integer idArticle, @Param("articleContent") String articleContent, @Param("articleContentHtml") String articleContentHtml);
/**
* 更新文章内容
* @param idArticle
* @param articleContent
* @param articleContentHtml
* @return
*/
Integer updateArticleContent(@Param("idArticle") Integer idArticle, @Param("articleContent") String articleContent, @Param("articleContentHtml") String articleContentHtml);
/**
* 获取文章正文内容
* @param idArticle
* @return
*/
ArticleContent selectArticleContent(@Param("idArticle") Integer idArticle);
/**
* 获取主题下文章列表
* @param topicName
* @return
*/
List<ArticleDTO> selectArticlesByTopicUri(@Param("topicName") String topicName);
/**
* 获取标签下文章列表
* @param tagName
* @return
*/
List<ArticleDTO> selectArticlesByTagName(@Param("tagName") String tagName);
/**
* 获取用户文章列表
* @param idUser
* @return
*/
List<ArticleDTO> selectUserArticles(@Param("idUser") Integer idUser);
/**
* 删除文章标签
* @param id
* @return
*/
Integer deleteTagArticle(@Param("id") Integer id);
/**
* 获取文章标签列表
* @param idArticle
* @return
*/
List<ArticleTagDTO> selectTags(@Param("idArticle") Integer idArticle);
/**
* 更新文章浏览数
*
* @param id
* @param articleViewCount
* @return
*/
Integer updateArticleViewCount(@Param("id") Integer id, @Param("articleViewCount") Integer articleViewCount);
/**
* 获取草稿列表
* @param idUser
* @return
*/
List<ArticleDTO> selectDrafts(@Param("idUser") Integer idUser);
/**
* 删除未使用的文章标签
* @param idArticleTag
* @return
*/
Integer deleteUnusedArticleTag(@Param("idArticleTag") Integer idArticleTag);
}

View File

@ -1,36 +0,0 @@
package com.rymcu.vertical.mapper;
import com.rymcu.vertical.core.mapper.Mapper;
import com.rymcu.vertical.dto.Author;
import com.rymcu.vertical.dto.CommentDTO;
import com.rymcu.vertical.entity.Comment;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface CommentMapper extends Mapper<Comment> {
/**
* @param idArticle
* @return
*/
List<CommentDTO> selectArticleComments(@Param("idArticle") Integer idArticle);
/**
* @param commentAuthorId
* @return
*/
Author selectAuthor(@Param("commentAuthorId") Integer commentAuthorId);
/**
* @param commentOriginalCommentId
* @return
*/
Author selectCommentOriginalAuthor(@Param("commentOriginalCommentId") Integer commentOriginalCommentId);
/**
* @param idComment
* @param toString
* @return
*/
Integer updateCommentSharpUrl(@Param("idComment") Integer idComment, @Param("commentSharpUrl") String commentSharpUrl);
}

View File

@ -74,17 +74,4 @@ public interface ArticleService extends Service<Article> {
* @param id
*/
void incrementArticleViewCount(Integer id);
/**
* 获取分享链接数据
* @param id
* @return
*/
Map share(Integer id) throws BaseApiException;
/**
* 查询草稿文章类别
* @return
*/
List<ArticleDTO> findDrafts() throws BaseApiException;
}

View File

@ -1,16 +0,0 @@
package com.rymcu.vertical.service;
import com.rymcu.vertical.core.service.Service;
import com.rymcu.vertical.dto.CommentDTO;
import com.rymcu.vertical.entity.Comment;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
public interface CommentService extends Service<Comment> {
List<CommentDTO> getArticleComments(Integer idArticle);
Map postComment(Comment comment, HttpServletRequest request);
}

View File

@ -1,19 +1,16 @@
package com.rymcu.vertical.service.impl;
import com.rymcu.vertical.core.constant.NotificationConstant;
import com.rymcu.vertical.core.constant.ProjectConstant;
import com.rymcu.vertical.core.service.AbstractService;
import com.rymcu.vertical.dto.ArticleDTO;
import com.rymcu.vertical.dto.ArticleTagDTO;
import com.rymcu.vertical.dto.Author;
import com.rymcu.vertical.dto.CommentDTO;
import com.rymcu.vertical.entity.Article;
import com.rymcu.vertical.entity.ArticleContent;
import com.rymcu.vertical.entity.Tag;
import com.rymcu.vertical.entity.User;
import com.rymcu.vertical.mapper.ArticleMapper;
import com.rymcu.vertical.service.ArticleService;
import com.rymcu.vertical.service.CommentService;
import com.rymcu.vertical.service.TagService;
import com.rymcu.vertical.service.UserService;
import com.rymcu.vertical.util.*;
@ -45,16 +42,11 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
private TagService tagService;
@Resource
private UserService userService;
@Resource
private CommentService commentService;
@Value("${resource.domain}")
private String domain;
@Value("${env}")
private String env;
private static String domain;
private static final int MAX_PREVIEW = 200;
private static final String defaultStatus = "0";
@Override
public List<ArticleDTO> findArticles(String searchText, String tag) {
@ -67,10 +59,7 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
@Override
public ArticleDTO findArticleDTOById(Integer id, int type) {
ArticleDTO articleDTO = articleMapper.selectArticleDTOById(id,type);
if (articleDTO == null) {
return null;
}
ArticleDTO articleDTO = articleMapper.selectArticleDTOById(id);
articleDTO = genArticle(articleDTO,type);
return articleDTO;
}
@ -132,12 +121,11 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
newArticle.setArticleTags(articleTags);
newArticle.setCreatedTime(new Date());
newArticle.setUpdatedTime(newArticle.getCreatedTime());
newArticle.setArticleStatus(article.getArticleStatus());
articleMapper.insertSelective(newArticle);
newArticle.setArticlePermalink(domain + "/article/"+newArticle.getIdArticle());
newArticle.setArticleLink("/article/"+newArticle.getIdArticle());
articleMapper.insertArticleContent(newArticle.getIdArticle(),articleContent,articleContentHtml);
if (!ProjectConstant.ENV.equals(env) && defaultStatus.equals(newArticle.getArticleStatus())) {
BaiDuUtils.sendSEOData(newArticle.getArticlePermalink());
}
BaiDuUtils.sendSEOData(newArticle.getArticlePermalink());
} else {
newArticle = articleMapper.selectByPrimaryKey(article.getIdArticle());
if(!user.getIdUser().equals(newArticle.getArticleAuthorId())){
@ -154,27 +142,16 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
String articlePreviewContent = articleContentHtml.substring(0,length);
newArticle.setArticlePreviewContent(Html2TextUtil.getContent(articlePreviewContent));
}
newArticle.setArticleStatus(article.getArticleStatus());
newArticle.setUpdatedTime(new Date());
articleMapper.updateArticleContent(newArticle.getIdArticle(),articleContent,articleContentHtml);
if (!ProjectConstant.ENV.equals(env) && defaultStatus.equals(newArticle.getArticleStatus())) {
BaiDuUtils.updateSEOData(newArticle.getArticlePermalink());
}
BaiDuUtils.updateSEOData(newArticle.getArticlePermalink());
}
if (notification && defaultStatus.equals(newArticle.getArticleStatus())) {
if (notification) {
NotificationUtils.sendAnnouncement(newArticle.getIdArticle(), NotificationConstant.Article, newArticle.getArticleTitle());
}
tagService.saveTagArticle(newArticle);
if (defaultStatus.equals(newArticle.getArticleStatus())) {
newArticle.setArticlePermalink(domain + "/article/" + newArticle.getIdArticle());
newArticle.setArticleLink("/article/" + newArticle.getIdArticle());
} else {
newArticle.setArticlePermalink(domain + "/draft/" + newArticle.getIdArticle());
newArticle.setArticleLink("/draft/" + newArticle.getIdArticle());
}
articleMapper.updateByPrimaryKeySelective(newArticle);
map.put("id", newArticle.getIdArticle());
@ -239,27 +216,6 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
articleMapper.updateArticleViewCount(article.getIdArticle(), articleViewCount);
}
@Override
public Map share(Integer id) throws BaseApiException {
Article article = articleMapper.selectByPrimaryKey(id);
User user = UserUtils.getWxCurrentUser();
StringBuilder shareUrl = new StringBuilder(article.getArticlePermalink());
shareUrl.append("?s=").append(user.getNickname());
Map map = new HashMap(1);
map.put("shareUrl", shareUrl);
return map;
}
@Override
public List<ArticleDTO> findDrafts() throws BaseApiException {
User user = UserUtils.getWxCurrentUser();
List<ArticleDTO> list = articleMapper.selectDrafts(user.getIdUser());
list.forEach(article->{
genArticle(article,0);
});
return list;
}
private ArticleDTO genArticle(ArticleDTO article,Integer type) {
Author author = articleMapper.selectAuthor(article.getArticleAuthorId());
article.setArticleAuthor(author);
@ -283,8 +239,6 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
String articlePreviewContent = articleContent.getArticleContentHtml().substring(0,length);
article.setArticlePreviewContent(Html2TextUtil.getContent(articlePreviewContent));
}
List<CommentDTO> commentDTOList = commentService.getArticleComments(article.getIdArticle());
article.setArticleComments(commentDTOList);
return article;
}
}

View File

@ -1,114 +0,0 @@
package com.rymcu.vertical.service.impl;
import com.rymcu.vertical.core.constant.NotificationConstant;
import com.rymcu.vertical.core.service.AbstractService;
import com.rymcu.vertical.dto.Author;
import com.rymcu.vertical.dto.CommentDTO;
import com.rymcu.vertical.entity.Article;
import com.rymcu.vertical.entity.Comment;
import com.rymcu.vertical.mapper.CommentMapper;
import com.rymcu.vertical.service.ArticleService;
import com.rymcu.vertical.service.CommentService;
import com.rymcu.vertical.util.Html2TextUtil;
import com.rymcu.vertical.util.NotificationUtils;
import com.rymcu.vertical.util.Utils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
* @author ronger
*/
@Service
public class CommentServiceImpl extends AbstractService<Comment> implements CommentService {
@Resource
private CommentMapper commentMapper;
@Resource
private ArticleService articleService;
private static final int MAX_PREVIEW = 200;
@Override
public List<CommentDTO> getArticleComments(Integer idArticle) {
List<CommentDTO> commentDTOList = commentMapper.selectArticleComments(idArticle);
commentDTOList.forEach(commentDTO -> {
commentDTO.setTimeAgo(Utils.getTimeAgo(commentDTO.getCreatedTime()));
if (commentDTO.getCommentAuthorId() != null) {
Author author = commentMapper.selectAuthor(commentDTO.getCommentAuthorId());
if (author != null) {
commentDTO.setCommenter(author);
}
}
if (commentDTO.getCommentOriginalCommentId() != null) {
Author commentOriginalAuthor = commentMapper.selectCommentOriginalAuthor(commentDTO.getCommentOriginalCommentId());
if (commentOriginalAuthor != null) {
commentDTO.setCommentOriginalAuthorThumbnailURL(commentOriginalAuthor.getUserAvatarURL());
commentDTO.setCommentOriginalAuthorNickname(commentOriginalAuthor.getUserNickname());
}
}
});
return commentDTOList;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Map postComment(Comment comment, HttpServletRequest request) {
Map map = new HashMap(1);
if(comment.getCommentArticleId() == null){
map.put("message","非法访问,文章主键异常!");
return map;
}
if(comment.getCommentAuthorId() == null){
map.put("message","非法访问,用户未登录!");
return map;
}
if(StringUtils.isBlank(comment.getCommentContent())){
map.put("message","回帖内容不能为空!");
return map;
}
Article article = articleService.findById(comment.getCommentArticleId().toString());
if (article == null) {
map.put("message","文章不存在!");
return map;
}
String ip = Utils.getIpAddress(request);
String ua = request.getHeader("user-agent");
comment.setCommentIP(ip);
comment.setCommentUA(ua);
comment.setCreatedTime(new Date());
commentMapper.insertSelective(comment);
StringBuilder commentSharpUrl = new StringBuilder(article.getArticlePermalink());
commentSharpUrl.append("/comment/").append(comment.getIdComment());
commentMapper.updateCommentSharpUrl(comment.getIdComment(), commentSharpUrl.toString());
String commentContent = comment.getCommentContent();
if(StringUtils.isNotBlank(commentContent)){
Integer length = commentContent.length();
if(length > MAX_PREVIEW){
length = 200;
}
String commentPreviewContent = commentContent.substring(0,length);
commentContent = Html2TextUtil.getContent(commentPreviewContent);
// 评论者不是作者本人则进行消息通知
if (!article.getArticleAuthorId().equals(comment.getCommentAuthorId())) {
NotificationUtils.saveNotification(article.getArticleAuthorId(),comment.getIdComment(), NotificationConstant.Comment, commentContent);
}
// 判断是否是回复消息
if (comment.getCommentOriginalCommentId() != null && comment.getCommentOriginalCommentId() != 0) {
Comment originalComment = commentMapper.selectByPrimaryKey(comment.getCommentOriginalCommentId());
// 回复消息时,评论者不是上级评论作者则进行消息通知
if (!comment.getCommentAuthorId().equals(originalComment.getCommentAuthorId())) {
NotificationUtils.saveNotification(originalComment.getCommentAuthorId(),comment.getIdComment(), NotificationConstant.Comment, commentContent);
}
}
}
return map;
}
}

View File

@ -1,11 +1,9 @@
package com.rymcu.vertical.service.impl;
import com.rymcu.vertical.core.service.AbstractService;
import com.rymcu.vertical.dto.ArticleTagDTO;
import com.rymcu.vertical.entity.Article;
import com.rymcu.vertical.entity.Tag;
import com.rymcu.vertical.entity.User;
import com.rymcu.vertical.mapper.ArticleMapper;
import com.rymcu.vertical.mapper.TagMapper;
import com.rymcu.vertical.service.TagService;
import com.rymcu.vertical.util.UserUtils;
@ -31,8 +29,6 @@ public class TagServiceImpl extends AbstractService<Tag> implements TagService {
@Resource
private TagMapper tagMapper;
@Resource
private ArticleMapper articleMapper;
@Override
@Transactional(rollbackFor = { UnsupportedEncodingException.class,BaseApiException.class })
@ -41,7 +37,6 @@ public class TagServiceImpl extends AbstractService<Tag> implements TagService {
String articleTags = article.getArticleTags();
if(StringUtils.isNotBlank(articleTags)){
String[] tags = articleTags.split(",");
List<ArticleTagDTO> articleTagDTOList = articleMapper.selectTags(article.getIdArticle());
for (int i = 0; i < tags.length; i++) {
boolean addTagArticle = false;
boolean addUserTag = false;
@ -59,12 +54,6 @@ public class TagServiceImpl extends AbstractService<Tag> implements TagService {
addTagArticle = true;
addUserTag = true;
} else {
for(int m=0,n=articleTagDTOList.size()-1;m<n; m++) {
ArticleTagDTO articleTag = articleTagDTOList.get(m);
if (articleTag.getIdTag().equals(tag.getIdTag())) {
articleTagDTOList.remove(articleTag);
}
}
Integer count = tagMapper.selectCountTagArticleById(tag.getIdTag(),article.getIdArticle());
if(count == 0){
tag.setTagArticleCount(tag.getTagArticleCount() + 1);
@ -76,9 +65,6 @@ public class TagServiceImpl extends AbstractService<Tag> implements TagService {
addUserTag = true;
}
}
articleTagDTOList.forEach(articleTagDTO -> {
articleMapper.deleteUnusedArticleTag(articleTagDTO.getIdArticleTag());
});
if(addTagArticle){
tagMapper.insertTagArticle(tag.getIdTag(),article.getIdArticle());
}

View File

@ -33,29 +33,6 @@ public class BaiDuUtils {
}
return 0;
},executor);
return;
}
public static void sendUpdateSEOData(String permalink) {
if (StringUtils.isBlank(permalink) || StringUtils.isBlank(token)) {
return;
}
ExecutorService executor= new ThreadPoolExecutor(1,1,0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
CompletableFuture.supplyAsync(()-> {
try {
HttpResponse response = HttpRequest.post("http://data.zz.baidu.com/update?site=" + site + "&token=" + token).
header("User-Agent", "curl/7.12.1").
header("Host", "data.zz.baidu.com").
header("Content-Type", "text/plain").
header("Connection", "close").body(permalink.getBytes(), "text/plain").timeout(30000).send();
response.charset("UTF-8");
System.out.println(response.bodyText());
} catch (Exception e){
e.printStackTrace();
}
return 0;
},executor);
return;
}
public static void updateSEOData(String permalink) {
@ -100,7 +77,7 @@ public class BaiDuUtils {
},executor);
}
public static void main(){
sendUpdateSEOData("https://rymcu.com");
public static void main(String agrs[]){
sendSEOData("https://rymcu.com/article/31");
}
}

View File

@ -42,7 +42,7 @@ public class NotificationUtils {
},executor);
}
public static void saveNotification(Integer idUser, Integer dataId, String dataType, String dataSummary) {
private static void saveNotification(Integer idUser, Integer dataId, String dataType, String dataSummary) {
ExecutorService executor= new ThreadPoolExecutor(1,1,0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
CompletableFuture.supplyAsync(()-> {
try {

View File

@ -1,14 +1,9 @@
package com.rymcu.vertical.web.api.article;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.rymcu.vertical.core.result.GlobalResult;
import com.rymcu.vertical.core.result.GlobalResultGenerator;
import com.rymcu.vertical.dto.ArticleDTO;
import com.rymcu.vertical.dto.CommentDTO;
import com.rymcu.vertical.service.ArticleService;
import com.rymcu.vertical.service.CommentService;
import com.rymcu.vertical.util.Utils;
import com.rymcu.vertical.web.api.exception.BaseApiException;
import org.springframework.web.bind.annotation.*;
@ -16,7 +11,6 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -28,8 +22,6 @@ public class ArticleController {
@Resource
private ArticleService articleService;
@Resource
private CommentService commentService;
@ -59,27 +51,4 @@ public class ArticleController {
return GlobalResultGenerator.genSuccessResult(map);
}
@GetMapping("/{id}/comments")
public GlobalResult<Map<String, Object>> commons(@PathVariable Integer id){
List<CommentDTO> commentDTOList = commentService.getArticleComments(id);
Map map = new HashMap<>(1);
map.put("comments", commentDTOList);
return GlobalResultGenerator.genSuccessResult(map);
}
@GetMapping("/drafts")
public GlobalResult drafts(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "10") Integer rows) throws BaseApiException {
PageHelper.startPage(page, rows);
List<ArticleDTO> list = articleService.findDrafts();
PageInfo<ArticleDTO> pageInfo = new PageInfo(list);
Map map = Utils.getArticlesGlobalResult(pageInfo);
return GlobalResultGenerator.genSuccessResult(map);
}
@GetMapping("/{id}/share")
public GlobalResult share(@PathVariable Integer id) throws BaseApiException {
Map map = articleService.share(id);
return GlobalResultGenerator.genSuccessResult(map);
}
}

View File

@ -1,34 +0,0 @@
package com.rymcu.vertical.web.api.comment;
import com.rymcu.vertical.core.result.GlobalResult;
import com.rymcu.vertical.core.result.GlobalResultGenerator;
import com.rymcu.vertical.dto.ArticleDTO;
import com.rymcu.vertical.entity.Comment;
import com.rymcu.vertical.service.CommentService;
import com.rymcu.vertical.web.api.exception.BaseApiException;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.Map;
/**
* @author ronger
*/
@RestController
@RequestMapping("/api/v1/comment")
public class CommentController {
@Resource
private CommentService commentService;
@PostMapping("/post")
public GlobalResult postComment(@RequestBody Comment comment, HttpServletRequest request) throws BaseApiException, UnsupportedEncodingException {
Map map = commentService.postComment(comment,request);
return GlobalResultGenerator.genSuccessResult(map);
}
}

View File

@ -35,7 +35,6 @@
<result column="time_ago" property="timeAgo"></result>
<result column="article_permalink" property="articlePermalink"></result>
<result column="article_link" property="articleLink"></result>
<result column="article_status" property="articleStatus"></result>
<result column="updated_time" property="updatedTime"></result>
</resultMap>
<resultMap id="AuthorResultMap" type="com.rymcu.vertical.dto.Author">
@ -51,13 +50,11 @@
<result column="updated_time" property="updatedTime"/>
</resultMap>
<resultMap id="ArticleTagDTOResultMap" type="com.rymcu.vertical.dto.ArticleTagDTO">
<id column="id" property="idArticleTag"/>
<result column="id_tag" property="idTag"></result>
<result column="id_article" property="idArticle"></result>
<result column="tag_title" property="tagTitle"></result>
<result column="tag_icon_path" property="tagIconPath"></result>
<result column="tag_uri" property="tagUri"></result>
<result column="tag_description" property="tagDescription"></result>
<id column="id" property="idTag"/>
<id column="tag_title" property="tagTitle"/>
<id column="tag_icon_path" property="tagIconPath"/>
<id column="tag_uri" property="tagUri"/>
<id column="tag_description" property="tagDescription"/>
</resultMap>
<insert id="insertArticleContent">
insert into vertical_article_content (id_article,article_content,article_content_html,created_time,updated_time)
@ -72,20 +69,14 @@
<delete id="deleteTagArticle">
delete from vertical_tag_article where id_article = #{id}
</delete>
<delete id="deleteUnusedArticleTag">
delete from vertical_tag_article where id = #{idArticleTag}
</delete>
<select id="selectArticles" resultMap="DTOResultMap">
select art.*,su.nickname,su.avatar_url from vertical_article art left join vertical_user su on art.article_author_id = su.id where article_status = '0' order by updated_time desc
select art.*,su.nickname,su.avatar_url from vertical_article art left join vertical_user su on art.article_author_id = su.id order by updated_time desc
</select>
<select id="selectAuthor" resultMap="AuthorResultMap">
select * from vertical_user where id = #{id}
</select>
<select id="selectArticleDTOById" resultMap="DTOResultMap">
select art.*,su.nickname,su.avatar_url from vertical_article art left join vertical_user su on art.article_author_id = su.id where art.id = #{id}
<if test="type == 1">
and art.article_status = 0
</if>
</select>
<select id="selectArticleContent" resultMap="ArticleContentResultMap">
select article_content,article_content_html from vertical_article_content where id_article = #{idArticle}
@ -103,9 +94,6 @@
select art.*,su.nickname,su.avatar_url from vertical_article art left join vertical_user su on su.id = #{idUser} and art.article_author_id = su.id where article_author_id = #{idUser} order by updated_time desc
</select>
<select id="selectTags" resultMap="ArticleTagDTOResultMap">
select vta.id, vta.id_tag, vta.id_article, vt.tag_title, vt.tag_icon_path, vt.tag_uri, vt.tag_description from vertical_tag vt left join vertical_tag_article vta on vt.id = vta.id_tag where vta.id_article = #{idArticle}
</select>
<select id="selectDrafts" resultMap="DTOResultMap">
select art.*,su.nickname,su.avatar_url from vertical_article art left join vertical_user su on art.article_author_id = su.id where article_status = '1' and art.article_author_id = #{idUser} order by updated_time desc
select vt.id, vt.tag_title, vt.tag_icon_path, vt.tag_uri, vt.tag_description from vertical_tag vt left join vertical_tag_article vta on vt.id = vta.id_tag where vta.id_article = #{idArticle}
</select>
</mapper>

View File

@ -1,49 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.rymcu.vertical.mapper.CommentMapper">
<resultMap id="BaseResultMap" type="com.rymcu.vertical.entity.Comment">
<id column="id" property="idComment"></id>
<result column="comment_content" property="commentContent"></result>
<result column="comment_author_id" property="commentAuthorId"></result>
<result column="comment_article_id" property="commentArticleId"></result>
<result column="comment_sharp_url" property="commentSharpUrl"></result>
<result column="comment_original_comment_id" property="commentOriginalCommentId"></result>
<result column="comment_status" property="commentStatus"></result>
<result column="comment_ip" property="commentIP"></result>
<result column="comment_ua" property="commentUA"></result>
<result column="comment_anonymous" property="commentAnonymous"></result>
<result column="comment_reply_count" property="commentReplyCount"></result>
<result column="comment_visible" property="commentVisible"></result>
<result column="created_time" property="createdTime"></result>
</resultMap>
<resultMap id="DTOResultMap" type="com.rymcu.vertical.dto.CommentDTO">
<id column="id" property="idComment"></id>
<result column="comment_content" property="commentContent"></result>
<result column="comment_author_id" property="commentAuthorId"></result>
<result column="comment_article_id" property="commentArticleId"></result>
<result column="comment_sharp_url" property="commentSharpUrl"></result>
<result column="comment_original_comment_id" property="commentOriginalCommentId"></result>
<result column="comment_status" property="commentStatus"></result>
<result column="comment_anonymous" property="commentAnonymous"></result>
<result column="comment_reply_count" property="commentReplyCount"></result>
<result column="comment_visible" property="commentVisible"></result>
<result column="created_time" property="createdTime"></result>
</resultMap>
<resultMap id="AuthorResultMap" type="com.rymcu.vertical.dto.Author">
<result column="id" property="idUser"/>
<result column="nickname" property="userNickname"/>
<result column="avatar_url" property="userAvatarURL"/>
</resultMap>
<update id="updateCommentSharpUrl">
update vertical_comment set comment_sharp_url = #{commentSharpUrl} where id = #{idComment}
</update>
<select id="selectArticleComments" resultMap="DTOResultMap">
select * from vertical_comment where comment_article_id = #{idArticle} order by created_time desc
</select>
<select id="selectAuthor" resultMap="AuthorResultMap">
select id,nickname,avatar_url from vertical_user where id = #{commentAuthorId}
</select>
<select id="selectCommentOriginalAuthor" resultMap="AuthorResultMap">
select vu.id,vu.nickname,vu.avatar_url from vertical_comment vc left join vertical_user vu on vu.id = vc.comment_author_id where vc.id = #{commentOriginalCommentId}
</select>
</mapper>

View File

@ -17,7 +17,7 @@
update vertical_role set status = #{status},updated_time = sysdate() where id = #{idRole}
</update>
<update id="update">
update vertical_role set name = #{name}, input_code = #{inputCode}, weights = #{weights}, updated_time = sysdate() where id = #{idRole}
update vertical_role set name = #{name}, input_code = ${inputCode}, weights = #{weights}, updated_time = sysdate() where id = #{idRole}
</update>
<select id="selectRoleByIdUser" resultMap="BaseResultMap">