✨
1. 关注功能 2. 代码优化 3. 消息通知优化 4. 后台管理功能优化
This commit is contained in:
parent
0fb2ed1de0
commit
8a89873844
@ -23,6 +23,8 @@ import java.util.Map;
|
||||
|
||||
/**
|
||||
* 全局异常处理器
|
||||
*
|
||||
* @author ronger
|
||||
* */
|
||||
@RestControllerAdvice
|
||||
public class BaseExceptionHandler {
|
||||
@ -46,7 +48,8 @@ public class BaseExceptionHandler {
|
||||
result.setCode(1000002);
|
||||
result.setMessage("用户无权限");
|
||||
logger.info("用户无权限");
|
||||
}else if (ex instanceof ServiceException) {//业务失败的异常,如“账号或密码错误”
|
||||
}else if (ex instanceof ServiceException) {
|
||||
//业务失败的异常,如“账号或密码错误”
|
||||
result.setCode(((ServiceException) ex).getCode());
|
||||
result.setMessage(ex.getMessage());
|
||||
logger.info(ex.getMessage());
|
||||
@ -88,7 +91,8 @@ public class BaseExceptionHandler {
|
||||
} else if (ex instanceof UnauthorizedException) {
|
||||
attributes.put("code", "1000002");
|
||||
attributes.put("message", "用户无权限");
|
||||
} else if (ex instanceof ServiceException) {//业务失败的异常,如“账号或密码错误”
|
||||
} else if (ex instanceof ServiceException) {
|
||||
//业务失败的异常,如“账号或密码错误”
|
||||
attributes.put("code",((ServiceException) ex).getCode());
|
||||
attributes.put("message",ex.getMessage());
|
||||
logger.info(ex.getMessage());
|
||||
|
@ -42,8 +42,6 @@ public class BaseShiroRealm extends AuthorizingRealm {
|
||||
|
||||
@Override
|
||||
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
|
||||
//Principal principal = (Principal) getAvailablePrincipal(principals);
|
||||
// System.out.println("权限配置-->MyShiroRealm.doGetAuthorizationInfo()");
|
||||
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
|
||||
Principal principal = (Principal)principals.getPrimaryPrincipal();
|
||||
User user = new User();
|
||||
@ -55,7 +53,7 @@ public class BaseShiroRealm extends AuthorizingRealm {
|
||||
authorizationInfo.addRole(role.getInputCode());
|
||||
}
|
||||
}
|
||||
List<Permission> permissions = permissionService.selectMenuByUser(user);
|
||||
List<Permission> permissions = permissionService.selectPermissionByUser(user);
|
||||
for (Permission perm : permissions) {
|
||||
if (perm.getPermissionCategory() != null) {
|
||||
authorizationInfo.addStringPermission(perm.getPermissionCategory());
|
||||
|
@ -55,6 +55,7 @@ public class ShiroConfig implements EnvironmentAware {
|
||||
|
||||
filterChainDefinitionMap.put("/api/**", "anon");
|
||||
filterChainDefinitionMap.put("/ws/**", "anon");
|
||||
filterChainDefinitionMap.put("/wx/**", "anon");
|
||||
filterChainDefinitionMap.put("/**", "auth");
|
||||
//配置shiro默认登录界面地址,前后端分离中登录界面跳转应由前端路由控制,后台仅返回json数据
|
||||
shiroFilterFactoryBean.setLoginUrl("/login");
|
||||
|
@ -2,11 +2,13 @@ package com.rymcu.vertical.dto;
|
||||
|
||||
import com.rymcu.vertical.entity.Notification;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @author ronger
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class NotificationDTO extends Notification {
|
||||
|
||||
private Integer idNotification;
|
||||
|
@ -44,4 +44,6 @@ public class Tag implements Serializable,Cloneable {
|
||||
private Date updatedTime;
|
||||
/** 保留标签 */
|
||||
private String tagReservation;
|
||||
/** 描述 */
|
||||
private String tagDescriptionHtml;
|
||||
}
|
||||
|
@ -42,5 +42,7 @@ public class Topic {
|
||||
private Date createdTime;
|
||||
/** 更新时间 */
|
||||
private Date updatedTime;
|
||||
/** 专题描述 Html */
|
||||
private String topicDescriptionHtml;
|
||||
|
||||
}
|
||||
|
@ -136,4 +136,26 @@ public interface ArticleMapper extends Mapper<Article> {
|
||||
* @return
|
||||
*/
|
||||
List<PortfolioArticleDTO> selectPortfolioArticles(@Param("idArticle") Integer idArticle);
|
||||
|
||||
/**
|
||||
* 更新文章标签
|
||||
* @param idArticle
|
||||
* @param tags
|
||||
* @return
|
||||
*/
|
||||
Integer updateArticleTags(@Param("idArticle") Integer idArticle, @Param("tags") String tags);
|
||||
|
||||
/**
|
||||
* 判断是否有评论
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
boolean existsCommentWithPrimaryKey(@Param("id") Integer id);
|
||||
|
||||
/**
|
||||
* 删除关联作品集数据
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
Integer deleteLinkedPortfolioData(@Param("id") Integer id);
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ public interface TopicMapper extends Mapper<Topic> {
|
||||
List<TagDTO> selectTopicTag(@Param("idTopic") Integer idTopic);
|
||||
|
||||
/**
|
||||
* 更新
|
||||
* @param idTopic
|
||||
* @param topicTitle
|
||||
* @param topicUri
|
||||
@ -40,9 +41,10 @@ public interface TopicMapper extends Mapper<Topic> {
|
||||
* @param topicStatus
|
||||
* @param topicSort
|
||||
* @param topicDescription
|
||||
* @param topicDescriptionHtml
|
||||
* @return
|
||||
*/
|
||||
Integer update(@Param("idTopic") Integer idTopic, @Param("topicTitle") String topicTitle, @Param("topicUri") String topicUri, @Param("topicIconPath") String topicIconPath, @Param("topicNva") String topicNva, @Param("topicStatus") String topicStatus, @Param("topicSort") Integer topicSort, @Param("topicDescription") String topicDescription);
|
||||
Integer update(@Param("idTopic") Integer idTopic, @Param("topicTitle") String topicTitle, @Param("topicUri") String topicUri, @Param("topicIconPath") String topicIconPath, @Param("topicNva") String topicNva, @Param("topicStatus") String topicStatus, @Param("topicSort") Integer topicSort, @Param("topicDescription") String topicDescription, @Param("topicDescriptionHtml") String topicDescriptionHtml);
|
||||
|
||||
/**
|
||||
* @param idTopic
|
||||
|
@ -113,4 +113,11 @@ public interface UserMapper extends Mapper<User> {
|
||||
* @return
|
||||
*/
|
||||
Author selectAuthor(@Param("id") Integer id);
|
||||
|
||||
/**
|
||||
* 更新用户最后登录时间
|
||||
* @param idUser
|
||||
* @return
|
||||
*/
|
||||
Integer updateLastLoginTime(@Param("idUser") Integer idUser);
|
||||
}
|
@ -105,4 +105,12 @@ public interface ArticleService extends Service<Article> {
|
||||
* @return
|
||||
*/
|
||||
List<ArticleDTO> selectUnbindArticles(Integer idPortfolio, String searchText, Integer idUser);
|
||||
|
||||
/**
|
||||
* 更新文章标签
|
||||
* @param idArticle
|
||||
* @param tags
|
||||
* @return
|
||||
*/
|
||||
Map updateTags(Integer idArticle, String tags) throws UnsupportedEncodingException, BaseApiException;
|
||||
}
|
||||
|
@ -14,5 +14,10 @@ import java.util.List;
|
||||
*/
|
||||
public interface PermissionService extends Service<Permission> {
|
||||
|
||||
List<Permission> selectMenuByUser(User sysUser);
|
||||
/**
|
||||
* 获取用户权限
|
||||
* @param sysUser
|
||||
* @return
|
||||
*/
|
||||
List<Permission> selectPermissionByUser(User sysUser);
|
||||
}
|
||||
|
@ -22,11 +22,9 @@ public interface TopicService extends Service<Topic> {
|
||||
/**
|
||||
* 根据 topicUri 获取主题信息及旗下标签数据
|
||||
* @param topicUri 主题 URI
|
||||
* @param page
|
||||
* @param rows
|
||||
* @return
|
||||
* */
|
||||
Map findTopicByTopicUri(String topicUri, Integer page, Integer rows);
|
||||
Topic findTopicByTopicUri(String topicUri);
|
||||
|
||||
/**
|
||||
* 新增/更新主题信息
|
||||
@ -56,4 +54,13 @@ public interface TopicService extends Service<Topic> {
|
||||
* @return
|
||||
*/
|
||||
Map unbindTopicTag(TopicTagDTO topicTag);
|
||||
|
||||
/**
|
||||
* 获取主题下标签列表
|
||||
* @param topicUri
|
||||
* @param page
|
||||
* @param rows
|
||||
* @return
|
||||
*/
|
||||
Map findTagsByTopicUri(String topicUri, Integer page, Integer rows);
|
||||
}
|
||||
|
@ -25,10 +25,7 @@ import tk.mybatis.mapper.entity.Condition;
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author ronger
|
||||
@ -114,11 +111,12 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
|
||||
map.put("message", "正文不能为空!");
|
||||
return map;
|
||||
}
|
||||
boolean isUpdate = false;
|
||||
String articleTitle = article.getArticleTitle();
|
||||
String articleTags = article.getArticleTags();
|
||||
String articleContent = article.getArticleContent();
|
||||
String articleContentHtml = article.getArticleContentHtml();
|
||||
User user = UserUtils.getWxCurrentUser();
|
||||
User user = UserUtils.getCurrentUserByToken();
|
||||
String reservedTag = checkTags(articleTags);
|
||||
boolean notification = false;
|
||||
if (StringUtils.isNotBlank(reservedTag)) {
|
||||
@ -141,10 +139,8 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
|
||||
newArticle.setArticleStatus(article.getArticleStatus());
|
||||
articleMapper.insertSelective(newArticle);
|
||||
articleMapper.insertArticleContent(newArticle.getIdArticle(), articleContent, articleContentHtml);
|
||||
if (!ProjectConstant.ENV.equals(env) && defaultStatus.equals(newArticle.getArticleStatus())) {
|
||||
BaiDuUtils.sendSEOData(newArticle.getArticlePermalink());
|
||||
}
|
||||
} else {
|
||||
isUpdate = true;
|
||||
newArticle = articleMapper.selectByPrimaryKey(article.getIdArticle());
|
||||
if (!user.getIdUser().equals(newArticle.getArticleAuthorId())) {
|
||||
map.put("message", "非法访问!");
|
||||
@ -155,9 +151,6 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
|
||||
newArticle.setArticleStatus(article.getArticleStatus());
|
||||
newArticle.setUpdatedTime(new Date());
|
||||
articleMapper.updateArticleContent(newArticle.getIdArticle(), articleContent, articleContentHtml);
|
||||
if (!ProjectConstant.ENV.equals(env) && defaultStatus.equals(newArticle.getArticleStatus())) {
|
||||
BaiDuUtils.sendUpdateSEOData(newArticle.getArticlePermalink());
|
||||
}
|
||||
}
|
||||
|
||||
if (notification && defaultStatus.equals(newArticle.getArticleStatus())) {
|
||||
@ -184,6 +177,17 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
|
||||
}
|
||||
articleMapper.updateByPrimaryKeySelective(newArticle);
|
||||
|
||||
// 推送百度 SEO
|
||||
if (!ProjectConstant.ENV.equals(env)
|
||||
&& defaultStatus.equals(newArticle.getArticleStatus())
|
||||
&& articleContent.length() >= MAX_PREVIEW) {
|
||||
if (isUpdate) {
|
||||
BaiDuUtils.sendUpdateSEOData(newArticle.getArticlePermalink());
|
||||
} else {
|
||||
BaiDuUtils.sendSEOData(newArticle.getArticlePermalink());
|
||||
}
|
||||
}
|
||||
|
||||
map.put("id", newArticle.getIdArticle());
|
||||
return map;
|
||||
}
|
||||
@ -225,19 +229,29 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
|
||||
public Map delete(Integer id) {
|
||||
Map<String, String> map = new HashMap(1);
|
||||
Integer result;
|
||||
// 删除引用标签记录
|
||||
result = articleMapper.deleteTagArticle(id);
|
||||
if (result > 0){
|
||||
// 判断是否有评论
|
||||
boolean isHavComment = articleMapper.existsCommentWithPrimaryKey(id);
|
||||
if (isHavComment) {
|
||||
map.put("message", "已有评论的文章不允许删除!");
|
||||
} else {
|
||||
// 删除关联数据(作品集关联关系,标签关联关系)
|
||||
deleteLinkedData(id);
|
||||
// 删除文章
|
||||
result = articleMapper.deleteByPrimaryKey(id);
|
||||
if (result < 1) {
|
||||
map.put("message", "删除失败!");
|
||||
}
|
||||
} else {
|
||||
map.put("message", "删除失败!");
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
private void deleteLinkedData(Integer id) {
|
||||
// 删除关联作品集
|
||||
articleMapper.deleteLinkedPortfolioData(id);
|
||||
// 删除引用标签记录
|
||||
articleMapper.deleteTagArticle(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void incrementArticleViewCount(Integer id) {
|
||||
@ -249,7 +263,7 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
|
||||
@Override
|
||||
public Map share(Integer id) throws BaseApiException {
|
||||
Article article = articleMapper.selectByPrimaryKey(id);
|
||||
User user = UserUtils.getWxCurrentUser();
|
||||
User user = UserUtils.getCurrentUserByToken();
|
||||
StringBuilder shareUrl = new StringBuilder(article.getArticlePermalink());
|
||||
shareUrl.append("?s=").append(user.getNickname());
|
||||
Map map = new HashMap(1);
|
||||
@ -259,7 +273,7 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
|
||||
|
||||
@Override
|
||||
public List<ArticleDTO> findDrafts() throws BaseApiException {
|
||||
User user = UserUtils.getWxCurrentUser();
|
||||
User user = UserUtils.getCurrentUserByToken();
|
||||
List<ArticleDTO> list = articleMapper.selectDrafts(user.getIdUser());
|
||||
list.forEach(article -> {
|
||||
genArticle(article, 0);
|
||||
@ -285,6 +299,23 @@ public class ArticleServiceImpl extends AbstractService<Article> implements Arti
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Map updateTags(Integer idArticle, String tags) throws UnsupportedEncodingException, BaseApiException {
|
||||
Map map = new HashMap(2);
|
||||
Article article = articleMapper.selectByPrimaryKey(idArticle);
|
||||
if (Objects.nonNull(article)) {
|
||||
article.setArticleTags(tags);
|
||||
articleMapper.updateArticleTags(idArticle, tags);
|
||||
tagService.saveTagArticle(article);
|
||||
map.put("success", true);
|
||||
} else {
|
||||
map.put("success", false);
|
||||
map.put("message", "更新失败,文章不存在!");
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
private ArticleDTO genArticle(ArticleDTO article, Integer type) {
|
||||
Integer ARTICLE_LIST = 0;
|
||||
Integer ARTICLE_VIEW = 1;
|
||||
|
@ -5,20 +5,20 @@ import com.rymcu.vertical.dto.ArticleDTO;
|
||||
import com.rymcu.vertical.dto.Author;
|
||||
import com.rymcu.vertical.dto.NotificationDTO;
|
||||
import com.rymcu.vertical.entity.Comment;
|
||||
import com.rymcu.vertical.entity.Follow;
|
||||
import com.rymcu.vertical.entity.Notification;
|
||||
import com.rymcu.vertical.entity.User;
|
||||
import com.rymcu.vertical.mapper.NotificationMapper;
|
||||
import com.rymcu.vertical.service.ArticleService;
|
||||
import com.rymcu.vertical.service.CommentService;
|
||||
import com.rymcu.vertical.service.NotificationService;
|
||||
import com.rymcu.vertical.service.UserService;
|
||||
import com.rymcu.vertical.service.*;
|
||||
import com.rymcu.vertical.util.BeanCopierUtil;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author ronger
|
||||
@ -34,6 +34,10 @@ public class NotificationServiceImpl extends AbstractService<Notification> imple
|
||||
private CommentService commentService;
|
||||
@Resource
|
||||
private UserService userService;
|
||||
@Resource
|
||||
private FollowService followService;
|
||||
@Value("${resource.domain}")
|
||||
private String domain;
|
||||
|
||||
@Override
|
||||
public List<Notification> findUnreadNotifications(Integer idUser) {
|
||||
@ -58,6 +62,7 @@ public class NotificationServiceImpl extends AbstractService<Notification> imple
|
||||
ArticleDTO article;
|
||||
Comment comment;
|
||||
User user;
|
||||
Follow follow;
|
||||
switch (notification.getDataType()) {
|
||||
case "0":
|
||||
// 系统公告/帖子
|
||||
@ -69,6 +74,11 @@ public class NotificationServiceImpl extends AbstractService<Notification> imple
|
||||
break;
|
||||
case "1":
|
||||
// 关注
|
||||
follow = followService.findById(notification.getDataId().toString());
|
||||
notificationDTO.setDataTitle("关注提醒");
|
||||
user = userService.findById(follow.getFollowerId().toString());
|
||||
notificationDTO.setDataUrl(getFollowLink(follow.getFollowingType(), user.getNickname()));
|
||||
notificationDTO.setAuthor(genAuthor(user));
|
||||
break;
|
||||
case "2":
|
||||
// 回帖
|
||||
@ -79,10 +89,25 @@ public class NotificationServiceImpl extends AbstractService<Notification> imple
|
||||
user = userService.findById(comment.getCommentAuthorId().toString());
|
||||
notificationDTO.setAuthor(genAuthor(user));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return notificationDTO;
|
||||
}
|
||||
|
||||
private String getFollowLink(String followingType, String id) {
|
||||
StringBuilder url = new StringBuilder();
|
||||
url.append(domain);
|
||||
switch (followingType) {
|
||||
case "0":
|
||||
url = url.append("/user/").append(id);
|
||||
break;
|
||||
default:
|
||||
url.append("/notification");
|
||||
}
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
private Author genAuthor(User user) {
|
||||
Author author = new Author();
|
||||
author.setUserNickname(user.getNickname());
|
||||
|
@ -17,10 +17,11 @@ import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* Created by CodeGenerator on 2018/05/29.
|
||||
*
|
||||
* @author CodeGenerator
|
||||
* @date 2018/05/29
|
||||
*/
|
||||
@Service
|
||||
@Transactional
|
||||
public class PermissionServiceImpl extends AbstractService<Permission> implements PermissionService {
|
||||
@Resource
|
||||
private PermissionMapper permissionMapper;
|
||||
@ -29,7 +30,7 @@ public class PermissionServiceImpl extends AbstractService<Permission> implement
|
||||
private RoleService roleService;
|
||||
|
||||
@Override
|
||||
public List<Permission> selectMenuByUser(User sysUser) {
|
||||
public List<Permission> selectPermissionByUser(User sysUser) {
|
||||
List<Permission> list = new ArrayList<Permission>();
|
||||
List<Role> roles = roleService.selectRoleByUser(sysUser);
|
||||
roles.forEach(role -> list.addAll(permissionMapper.selectMenuByIdRole(role.getIdRole())));
|
||||
|
@ -62,7 +62,7 @@ public class PortfolioServiceImpl extends AbstractService<Portfolio> implements
|
||||
|
||||
@Override
|
||||
public Portfolio postPortfolio(Portfolio portfolio) throws BaseApiException {
|
||||
User user = UserUtils.getWxCurrentUser();
|
||||
User user = UserUtils.getCurrentUserByToken();
|
||||
if (portfolio.getIdPortfolio() == null || portfolio.getIdPortfolio() == 0) {
|
||||
portfolio.setPortfolioAuthorId(user.getIdUser());
|
||||
portfolio.setCreatedTime(new Date());
|
||||
@ -78,7 +78,7 @@ public class PortfolioServiceImpl extends AbstractService<Portfolio> implements
|
||||
@Override
|
||||
public Map findUnbindArticles(Integer page, Integer rows, String searchText, Integer idPortfolio) throws BaseApiException {
|
||||
Map map = new HashMap(1);
|
||||
User user = UserUtils.getWxCurrentUser();
|
||||
User user = UserUtils.getCurrentUserByToken();
|
||||
Portfolio portfolio = portfolioMapper.selectByPrimaryKey(idPortfolio);
|
||||
if (portfolio == null) {
|
||||
map.put("message", "该作品集不存在或已被删除!");
|
||||
|
@ -39,7 +39,7 @@ public class TagServiceImpl extends AbstractService<Tag> implements TagService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = {UnsupportedEncodingException.class, BaseApiException.class})
|
||||
public Integer saveTagArticle(Article article) throws UnsupportedEncodingException, BaseApiException {
|
||||
User user = UserUtils.getWxCurrentUser();
|
||||
User user = UserUtils.getCurrentUserByToken();
|
||||
String articleTags = article.getArticleTags();
|
||||
if (StringUtils.isNotBlank(articleTags)) {
|
||||
String[] tags = articleTags.split(",");
|
||||
@ -61,10 +61,13 @@ public class TagServiceImpl extends AbstractService<Tag> implements TagService {
|
||||
addTagArticle = true;
|
||||
addUserTag = true;
|
||||
} else {
|
||||
for(int m=0,n=articleTagDTOList.size()-1;m<n; m++) {
|
||||
int n = articleTagDTOList.size();
|
||||
for (int m = 0; m < n; m++) {
|
||||
ArticleTagDTO articleTag = articleTagDTOList.get(m);
|
||||
if (articleTag.getIdTag().equals(tag.getIdTag())) {
|
||||
articleTagDTOList.remove(articleTag);
|
||||
m--;
|
||||
n--;
|
||||
}
|
||||
}
|
||||
Integer count = tagMapper.selectCountTagArticleById(tag.getIdTag(), article.getIdArticle());
|
||||
|
@ -37,23 +37,10 @@ public class TopicServiceImpl extends AbstractService<Topic> implements TopicSer
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map findTopicByTopicUri(String topicUri, Integer page, Integer rows) {
|
||||
Map map = new HashMap(2);
|
||||
TopicDTO topic = topicMapper.selectTopicByTopicUri(topicUri);
|
||||
if (topic == null) {
|
||||
return map;
|
||||
}
|
||||
PageHelper.startPage(page, rows);
|
||||
List<TagDTO> list = topicMapper.selectTopicTag(topic.getIdTopic());
|
||||
PageInfo pageInfo = new PageInfo(list);
|
||||
topic.setTags(pageInfo.getList());
|
||||
map.put("topic", topic);
|
||||
Map pagination = new HashMap(3);
|
||||
pagination.put("pageSize",pageInfo.getPageSize());
|
||||
pagination.put("total",pageInfo.getTotal());
|
||||
pagination.put("currentPage",pageInfo.getPageNum());
|
||||
map.put("pagination", pagination);
|
||||
return map;
|
||||
public Topic findTopicByTopicUri(String topicUri) {
|
||||
Topic searchTopic = new Topic();
|
||||
searchTopic.setTopicUri(topicUri);
|
||||
return topicMapper.selectOne(searchTopic);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -82,6 +69,7 @@ public class TopicServiceImpl extends AbstractService<Topic> implements TopicSer
|
||||
newTopic.setTopicStatus(topic.getTopicStatus());
|
||||
newTopic.setTopicSort(topic.getTopicSort());
|
||||
newTopic.setTopicDescription(topic.getTopicDescription());
|
||||
newTopic.setTopicDescriptionHtml(topic.getTopicDescriptionHtml());
|
||||
newTopic.setCreatedTime(new Date());
|
||||
newTopic.setUpdatedTime(topic.getCreatedTime());
|
||||
result = topicMapper.insertSelective(newTopic);
|
||||
@ -89,7 +77,7 @@ public class TopicServiceImpl extends AbstractService<Topic> implements TopicSer
|
||||
topic.setCreatedTime(new Date());
|
||||
result = topicMapper.update(topic.getIdTopic(),topic.getTopicTitle(),topic.getTopicUri()
|
||||
,topic.getTopicIconPath(),topic.getTopicNva(),topic.getTopicStatus()
|
||||
,topic.getTopicSort(),topic.getTopicDescription());
|
||||
,topic.getTopicSort(),topic.getTopicDescription(),topic.getTopicDescriptionHtml());
|
||||
}
|
||||
if (result == 0) {
|
||||
map.put("message","操作失败!");
|
||||
@ -132,4 +120,23 @@ public class TopicServiceImpl extends AbstractService<Topic> implements TopicSer
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map findTagsByTopicUri(String topicUri, Integer page, Integer rows) {
|
||||
Map map = new HashMap(2);
|
||||
TopicDTO topic = topicMapper.selectTopicByTopicUri(topicUri);
|
||||
if (topic == null) {
|
||||
return map;
|
||||
}
|
||||
PageHelper.startPage(page, rows);
|
||||
List<TagDTO> list = topicMapper.selectTopicTag(topic.getIdTopic());
|
||||
PageInfo pageInfo = new PageInfo(list);
|
||||
map.put("tags", pageInfo.getList());
|
||||
Map pagination = new HashMap(3);
|
||||
pagination.put("pageSize",pageInfo.getPageSize());
|
||||
pagination.put("total",pageInfo.getTotal());
|
||||
pagination.put("currentPage",pageInfo.getPageNum());
|
||||
map.put("pagination", pagination);
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
@ -100,8 +100,7 @@ public class UserServiceImpl extends AbstractService<User> implements UserServic
|
||||
user = userMapper.selectOne(user);
|
||||
if(user != null){
|
||||
if(Utils.comparePwd(password, user.getPassword())){
|
||||
user.setLastLoginTime(new Date());
|
||||
userMapper.updateByPrimaryKeySelective(user);
|
||||
userMapper.updateLastLoginTime(user.getIdUser());
|
||||
TokenUser tokenUser = new TokenUser();
|
||||
BeanCopierUtil.copy(user, tokenUser);
|
||||
tokenUser.setToken(tokenManager.createToken(account));
|
||||
@ -183,6 +182,7 @@ public class UserServiceImpl extends AbstractService<User> implements UserServic
|
||||
if (StringUtils.isNotBlank(user.getAvatarType()) && avatarSvgType.equals(user.getAvatarType())) {
|
||||
String avatarUrl = UploadController.uploadBase64File(user.getAvatarUrl(), 0);
|
||||
user.setAvatarUrl(avatarUrl);
|
||||
user.setAvatarType("0");
|
||||
}
|
||||
Integer result = userMapper.updateUserInfo(user.getIdUser(), user.getNickname(), user.getAvatarType(),user.getAvatarUrl(),
|
||||
user.getEmail(),user.getPhone(),user.getSignature(), user.getSex());
|
||||
|
@ -80,6 +80,7 @@ public class BaiDuUtils {
|
||||
}
|
||||
|
||||
public static void main(String[] args){
|
||||
sendUpdateSEOData("https://rymcu.com");
|
||||
// sendUpdateSEOData("https://rymcu.com");
|
||||
sendSEOData("https://rymcu.com/article/98");
|
||||
}
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ public class UserUtils {
|
||||
* 通过token获取当前用户的信息
|
||||
* @return
|
||||
*/
|
||||
public static User getWxCurrentUser() throws BaseApiException {
|
||||
public static User getCurrentUserByToken() throws BaseApiException {
|
||||
String authHeader = ContextHolderUtils.getRequest().getHeader(JwtConstants.AUTHORIZATION);
|
||||
if (authHeader == null) {
|
||||
return null;
|
||||
|
@ -109,11 +109,20 @@ public class AdminController {
|
||||
}
|
||||
|
||||
@GetMapping("/topic/{topicUri}")
|
||||
public GlobalResult topic(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "10") Integer rows,@PathVariable String topicUri){
|
||||
public GlobalResult topic(@PathVariable String topicUri){
|
||||
if (StringUtils.isBlank(topicUri)) {
|
||||
return GlobalResultGenerator.genErrorResult("数据异常!");
|
||||
}
|
||||
Map map = topicService.findTopicByTopicUri(topicUri,page,rows);
|
||||
Topic topic = topicService.findTopicByTopicUri(topicUri);
|
||||
return GlobalResultGenerator.genSuccessResult(topic);
|
||||
}
|
||||
|
||||
@GetMapping("/topic/{topicUri}/tags")
|
||||
public GlobalResult topicTags(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "10") Integer rows,@PathVariable String topicUri){
|
||||
if (StringUtils.isBlank(topicUri)) {
|
||||
return GlobalResultGenerator.genErrorResult("数据异常!");
|
||||
}
|
||||
Map map = topicService.findTagsByTopicUri(topicUri,page,rows);
|
||||
return GlobalResultGenerator.genSuccessResult(map);
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,7 @@ 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.entity.Article;
|
||||
import com.rymcu.vertical.service.ArticleService;
|
||||
import com.rymcu.vertical.service.CommentService;
|
||||
import com.rymcu.vertical.util.Utils;
|
||||
@ -80,4 +81,10 @@ public class ArticleController {
|
||||
return GlobalResultGenerator.genSuccessResult(map);
|
||||
}
|
||||
|
||||
@PostMapping("/{id}/update-tags")
|
||||
public GlobalResult updateTags(@PathVariable Integer id, @RequestBody Article article) throws BaseApiException, UnsupportedEncodingException {
|
||||
Map map = articleService.updateTags(id, article.getArticleTags());
|
||||
return GlobalResultGenerator.genSuccessResult(map);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ import java.util.Set;
|
||||
|
||||
/**
|
||||
* 文件上传控制器
|
||||
*
|
||||
* @author ronger
|
||||
*/
|
||||
@RestController
|
||||
|
@ -30,7 +30,7 @@ public class NotificationController {
|
||||
|
||||
@GetMapping("/all")
|
||||
public GlobalResult notifications(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "10") Integer rows) throws BaseApiException {
|
||||
User user = UserUtils.getWxCurrentUser();
|
||||
User user = UserUtils.getCurrentUserByToken();
|
||||
PageHelper.startPage(page, rows);
|
||||
List<NotificationDTO> list = notificationService.findNotifications(user.getIdUser());
|
||||
PageInfo<NotificationDTO> pageInfo = new PageInfo(list);
|
||||
@ -40,7 +40,7 @@ public class NotificationController {
|
||||
|
||||
@GetMapping("/unread")
|
||||
public GlobalResult unreadNotification(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "10") Integer rows) throws BaseApiException {
|
||||
User user = UserUtils.getWxCurrentUser();
|
||||
User user = UserUtils.getCurrentUserByToken();
|
||||
PageHelper.startPage(page, rows);
|
||||
List<Notification> list = notificationService.findUnreadNotifications(user.getIdUser());
|
||||
PageInfo<Notification> pageInfo = new PageInfo(list);
|
||||
|
@ -4,6 +4,7 @@ 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.core.service.log.annotation.VisitLogger;
|
||||
import com.rymcu.vertical.dto.ArticleDTO;
|
||||
import com.rymcu.vertical.dto.PortfolioDTO;
|
||||
import com.rymcu.vertical.dto.UserDTO;
|
||||
@ -33,6 +34,7 @@ public class UserController {
|
||||
private PortfolioService portfolioService;
|
||||
|
||||
@GetMapping("/{nickname}")
|
||||
@VisitLogger
|
||||
public GlobalResult detail(@PathVariable String nickname){
|
||||
UserDTO userDTO = userService.findUserDTOByNickname(nickname);
|
||||
return GlobalResultGenerator.genSuccessResult(userDTO);
|
||||
|
@ -71,14 +71,26 @@
|
||||
<update id="updateArticleViewCount">
|
||||
update vertical_article set article_view_count = #{articleViewCount} where id = #{id}
|
||||
</update>
|
||||
<update id="updateArticleTags">
|
||||
update vertical_article set article_tags = #{tags} where id = #{idArticle}
|
||||
</update>
|
||||
<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>
|
||||
<delete id="deleteLinkedPortfolioData">
|
||||
delete from vertical_portfolio_article where id_vertical_article = #{id}
|
||||
</delete>
|
||||
<select id="selectArticles" resultMap="DTOResultMap">
|
||||
select art.*,su.nickname,su.avatar_url from vertical_article art 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 join vertical_user su on art.article_author_id = su.id
|
||||
where article_status = '0'
|
||||
<if test="topicUri != 'news'">
|
||||
and not exists (select * from vertical_tag_article vta where vta.id_article = art.id
|
||||
and exists (select * from vertical_tag vt where vta.id_tag = vt.id and vt.tag_title = '划水'))
|
||||
</if>
|
||||
order by updated_time desc
|
||||
</select>
|
||||
<select id="selectArticleDTOById" resultMap="DTOResultMap">
|
||||
select art.*,su.nickname,su.avatar_url from vertical_article art join vertical_user su on art.article_author_id = su.id where art.id = #{id}
|
||||
@ -119,4 +131,7 @@
|
||||
<select id="selectPortfolioArticles" resultMap="PortfolioArticleResultMap">
|
||||
select vp.portfolio_title,vp.portfolio_head_img_url,vpa.id_vertical_portfolio,vpa.id_vertical_article from vertical_portfolio vp join vertical_portfolio_article vpa on vp.id = vpa.id_vertical_portfolio where vpa.id_vertical_article = #{idArticle}
|
||||
</select>
|
||||
<select id="existsCommentWithPrimaryKey" resultType="java.lang.Boolean">
|
||||
select exists (select * from vertical_comment where comment_article_id = #{id})
|
||||
</select>
|
||||
</mapper>
|
@ -9,26 +9,23 @@
|
||||
select count(*) from vertical_user
|
||||
</select>
|
||||
<select id="selectNewUserCount" resultType="java.lang.Integer">
|
||||
select count(*) from vertical_user where created_time between date_sub(sysdate(),interval 1 day)
|
||||
and date_sub(sysdate(),interval - 1 day)
|
||||
select count(*) from vertical_user where created_time > str_to_date(date_format(sysdate(),'%Y-%m-%d'),'%Y-%m-%d')
|
||||
</select>
|
||||
<select id="selectArticleCount" resultType="java.lang.Integer">
|
||||
select count(*) from vertical_article
|
||||
</select>
|
||||
<select id="selectNewArticleCount" resultType="java.lang.Integer">
|
||||
select count(*) from vertical_article where created_time between date_sub(sysdate(),interval 1 day)
|
||||
and date_sub(sysdate(),interval - 1 day)
|
||||
select count(*) from vertical_article where created_time > str_to_date(date_format(sysdate(),'%Y-%m-%d'),'%Y-%m-%d') and article_status = 0
|
||||
</select>
|
||||
<select id="selectCountViewNum" resultType="java.lang.Integer">
|
||||
select count(*) from vertical_visit
|
||||
</select>
|
||||
<select id="selectTodayViewNum" resultType="java.lang.Integer">
|
||||
select count(*) from vertical_visit where created_time between str_to_date(date_format(sysdate(),'%Y-%m-%d'),'%Y-%m-%d')
|
||||
and str_to_date(date_format(date_sub(sysdate(),interval - 1 day),'%Y-%m-%d'),'%Y-%m-%d')
|
||||
select count(*) from vertical_visit where created_time > str_to_date(date_format(sysdate(),'%Y-%m-%d'),'%Y-%m-%d')
|
||||
</select>
|
||||
<select id="selectLastThirtyDaysArticleData" resultMap="DashboardDataResultMap">
|
||||
select COUNT(*) as value, date_format(created_time, '%Y-%m-%d') as label from vertical_article
|
||||
where created_time > str_to_date(date_format(date_sub(sysdate(),interval + 30 day),'%Y-%m-%d'),'%Y-%m-%d') GROUP BY date_format(created_time, '%Y-%m-%d')
|
||||
where created_time > str_to_date(date_format(date_sub(sysdate(),interval + 30 day),'%Y-%m-%d'),'%Y-%m-%d') and article_status = 0 GROUP BY date_format(created_time, '%Y-%m-%d')
|
||||
</select>
|
||||
<select id="selectLastThirtyDaysUserData" resultMap="DashboardDataResultMap">
|
||||
select COUNT(*) as value, date_format(created_time, '%Y-%m-%d') as label from vertical_user
|
||||
@ -40,7 +37,7 @@
|
||||
</select>
|
||||
<select id="selectHistoryArticleData" resultMap="DashboardDataResultMap">
|
||||
select COUNT(*) as value, date_format(created_time, '%Y-%m') as label from vertical_article
|
||||
where created_time > str_to_date(date_format(date_sub(sysdate(),interval + 1 year),'%Y-%m-%d'),'%Y-%m-%d') GROUP BY date_format(created_time, '%Y-%m')
|
||||
where created_time > str_to_date(date_format(date_sub(sysdate(),interval + 1 year),'%Y-%m-%d'),'%Y-%m-%d') and article_status = 0 GROUP BY date_format(created_time, '%Y-%m')
|
||||
</select>
|
||||
<select id="selectHistoryUserData" resultMap="DashboardDataResultMap">
|
||||
select COUNT(*) as value, date_format(created_time, '%Y-%m') as label from vertical_user
|
||||
|
@ -54,8 +54,8 @@
|
||||
insert into vertical_topic_tag (id_topic, id_tag, created_time, updated_time) values (#{idTopic}, #{idTag}, sysdate(), sysdate())
|
||||
</insert>
|
||||
<update id="update">
|
||||
update vertical_topic set topic_title = #{topicTitle},topic_uri = #{topicUri},topic_icon_path = #{topicIconPath}
|
||||
,topic_nva = #{topicNva},topic_status = #{topicStatus},topic_sort = #{topicSort},topic_description = #{topicDescription}
|
||||
update vertical_topic set topic_title = #{topicTitle},topic_uri = #{topicUri},topic_icon_path = #{topicIconPath}, updated_time = sysdate(),
|
||||
topic_nva = #{topicNva},topic_status = #{topicStatus},topic_sort = #{topicSort},topic_description = #{topicDescription},topic_description_html = #{topicDescriptionHtml}
|
||||
where id = #{idTopic}
|
||||
</update>
|
||||
<delete id="deleteTopicTag">
|
||||
@ -73,7 +73,7 @@
|
||||
<select id="selectUnbindTagsById" resultMap="TagResultMap">
|
||||
select * from vertical_tag vt where not exists(select * from vertical_topic_tag vtt where vtt.id_topic = #{idTopic} and vtt.id_tag = vt.id)
|
||||
<if test="tagTitle != '' and tagTitle != null">
|
||||
and vt.tag_title = #{tagTitle}
|
||||
and LOCATE(#{tagTitle}, vt.tag_title) > 0
|
||||
</if>
|
||||
order by vt.created_time desc
|
||||
</select>
|
||||
|
@ -65,6 +65,9 @@
|
||||
</if>
|
||||
where id = #{idUser}
|
||||
</update>
|
||||
<update id="updateLastLoginTime">
|
||||
update vertical_user set last_login_time = sysdate() where id = #{idUser}
|
||||
</update>
|
||||
|
||||
<select id="findByAccount" resultMap="BaseResultMap">
|
||||
select id, nickname, account, password, status from vertical_user where account = #{account} and status = 0
|
||||
|
Loading…
Reference in New Issue
Block a user