// Path: src/main/java/cn/niriqiang/blog/dto/Result.java
// public class Result<T> {
// 
// 
//     private Integer code;
// 
//     private String message;
// 
//     private T data;
// 
//     @Override
//     public String toString() {
//         return "Result{" +
//                 "code=" + code +
//                 ", message='" + message + '\'' +
//                 ", data=" + data +
//                 '}';
//     }
// 
//     public Result(Integer code, String message) {
//         this.code = code;
//         this.message = message;
//     }
// 
//     public Result(Integer code, String message, T data) {
//         this.code = code;
//         this.message = message;
//         this.data = data;
//     }
// 
//     public Integer getCode() {
//         return code;
//     }
// 
//     public void setCode(Integer code) {
//         this.code = code;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public T getData() {
//         return data;
//     }
// 
//     public void setData(T data) {
//         this.data = data;
//     }
// }
// 
// Path: src/main/java/cn/niriqiang/blog/enums/ResultEnum.java
// @ApiModel
// public enum ResultEnum {
//     OK(200, "成功"),
//     NOT_BLANK(0, "不能为空"),
//     UNKNOW_ERROR(-1, "未知错误"),
//     NOT_FOUND(-2, "目标未找到"),
//     ADD_EXITS(-3, "目标已存在"),
//     DELETE_FALSE(-4, "不能删除相关文章还存在的分类"),
//     CURRENT_PAGE_NOT_NULL(-5, "页码不能为空"),
//     ERROR_NAME_PW(-6, "用户名密码错误"),
//     NOT_LOGIN(-7, "还没登陆！");
// 
//     ResultEnum(Integer code, String message) {
//         this.code = code;
//         this.message = message;
//     }
// 
//     public Integer getCode() {
//         return code;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     @Override
//     public String toString() {
//         return "ResultEnum{" +
//                 "code=" + code +
//                 ", message='" + message + '\'' +
//                 '}';
//     }
// 
//     Integer code;
//     String message;
// }
// 
// Path: src/main/java/cn/niriqiang/blog/exception/ArticleException.java
// public class ArticleException extends Exception {
// 
//     public ArticleException(ResultEnum resultEnum) {
//         super(resultEnum);
//     }
// 
//     public ArticleException(String message, Integer code) {
//         super(message, code);
//     }
// 
// }
// 
// Path: src/main/java/cn/niriqiang/blog/exception/TagException.java
// public class TagException extends Exception {
// 
//     public TagException(ResultEnum resultEnum) {
//         super(resultEnum);
//     }
// 
//     public TagException(String message, Integer code) {
//         super(message, code);
//     }
// }
// 
// Path: src/main/java/cn/niriqiang/blog/util/ResultUtil.java
// public class ResultUtil {
//     public static <T> Result<T> success(ResultEnum resultEnum, T t) {
//         return new Result(resultEnum.getCode(), resultEnum.getMessage(), t);
//     }
// 
//     public static Result error(Integer code, String message) {
//         return new Result(code, message);
//     }
// 
//     public static Result error(ResultEnum resultEnum) {
//         return new Result(resultEnum.getCode(), resultEnum.getMessage());
//     }
// }


import cn.niriqiang.blog.domain.*;
import cn.niriqiang.blog.dto.Result;
import cn.niriqiang.blog.enums.ResultEnum;
import cn.niriqiang.blog.exception.ArticleException;
import cn.niriqiang.blog.exception.TagException;
import cn.niriqiang.blog.util.ResultUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
    }

    public Result findOne(int id) {
        Article article = mapper.findOne(id);
        if (article == null) {
            throw new ArticleException(ResultEnum.NOT_FOUND);
        }
        Set<Tag> tags = findTag(article);
        article.setArticleTags(tags);
        return ResultUtil.success(ResultEnum.OK, article);
    }

    public Result updateArticle(Article article) {
        Article result = (Article) findOne(article.getId()).getData();
//        先将之前的全部删除之前的
        Set<Tag> before = result.getArticleTags();
        if (before.size() != 0) {
            ArticleTags articleTags = new ArticleTags();
            articleTags.setArticleId(article.getId());
            articleTagsMapper.delete(articleTags);
        }
//        之后的全部添加
        Set<Tag> after = article.getArticleTags();
        if (after.size() != 0) {
            insertArticleTags(article.getId(), after);
        }

//        修改修改时间
        article.setUpdateTime(new Date());
        if (mapper.update(article) == 1) {
// Path: src/main/java/cn/niriqiang/blog/dto/Result.java
// public class Result<T> {
// 
// 
//     private Integer code;
// 
//     private String message;
// 
//     private T data;
// 
//     @Override
//     public String toString() {
//         return "Result{" +
//                 "code=" + code +
//                 ", message='" + message + '\'' +
//                 ", data=" + data +
//                 '}';
//     }
// 
//     public Result(Integer code, String message) {
//         this.code = code;
//         this.message = message;
//     }
// 
//     public Result(Integer code, String message, T data) {
//         this.code = code;
//         this.message = message;
//         this.data = data;
//     }
// 
//     public Integer getCode() {
//         return code;
//     }
// 
//     public void setCode(Integer code) {
//         this.code = code;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public T getData() {
//         return data;
//     }
// 
//     public void setData(T data) {
//         this.data = data;
//     }
// }
// 
// Path: src/main/java/cn/niriqiang/blog/enums/ResultEnum.java
// @ApiModel
// public enum ResultEnum {
//     OK(200, "成功"),
//     NOT_BLANK(0, "不能为空"),
//     UNKNOW_ERROR(-1, "未知错误"),
//     NOT_FOUND(-2, "目标未找到"),
//     ADD_EXITS(-3, "目标已存在"),
//     DELETE_FALSE(-4, "不能删除相关文章还存在的分类"),
//     CURRENT_PAGE_NOT_NULL(-5, "页码不能为空"),
//     ERROR_NAME_PW(-6, "用户名密码错误"),
//     NOT_LOGIN(-7, "还没登陆！");
// 
//     ResultEnum(Integer code, String message) {
//         this.code = code;
//         this.message = message;
//     }
// 
//     public Integer getCode() {
//         return code;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     @Override
//     public String toString() {
//         return "ResultEnum{" +
//                 "code=" + code +
//                 ", message='" + message + '\'' +
//                 '}';
//     }
// 
//     Integer code;
//     String message;
// }
// 
// Path: src/main/java/cn/niriqiang/blog/exception/ArticleException.java
// public class ArticleException extends Exception {
// 
//     public ArticleException(ResultEnum resultEnum) {
//         super(resultEnum);
//     }
// 
//     public ArticleException(String message, Integer code) {
//         super(message, code);
//     }
// 
// }
// 
// Path: src/main/java/cn/niriqiang/blog/exception/TagException.java
// public class TagException extends Exception {
// 
//     public TagException(ResultEnum resultEnum) {
//         super(resultEnum);
//     }
// 
//     public TagException(String message, Integer code) {
//         super(message, code);
//     }
// }
// 
// Path: src/main/java/cn/niriqiang/blog/util/ResultUtil.java
// public class ResultUtil {
//     public static <T> Result<T> success(ResultEnum resultEnum, T t) {
//         return new Result(resultEnum.getCode(), resultEnum.getMessage(), t);
//     }
// 
//     public static Result error(Integer code, String message) {
//         return new Result(code, message);
//     }
// 
//     public static Result error(ResultEnum resultEnum) {
//         return new Result(resultEnum.getCode(), resultEnum.getMessage());
//     }
// }


// Path: src/main/java/cn/niriqiang/blog/service/ArticleService.java
import cn.niriqiang.blog.domain.*;
import cn.niriqiang.blog.dto.Result;
import cn.niriqiang.blog.enums.ResultEnum;
import cn.niriqiang.blog.exception.ArticleException;
import cn.niriqiang.blog.exception.TagException;
import cn.niriqiang.blog.util.ResultUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

    }

    public Result findOne(int id) {
        Article article = mapper.findOne(id);
        if (article == null) {
            throw new ArticleException(ResultEnum.NOT_FOUND);
        }
        Set<Tag> tags = findTag(article);
        article.setArticleTags(tags);
        return ResultUtil.success(ResultEnum.OK, article);
    }

    public Result updateArticle(Article article) {
        Article result = (Article) findOne(article.getId()).getData();
//        先将之前的全部删除之前的
        Set<Tag> before = result.getArticleTags();
        if (before.size() != 0) {
            ArticleTags articleTags = new ArticleTags();
            articleTags.setArticleId(article.getId());
            articleTagsMapper.delete(articleTags);
        }
//        之后的全部添加
        Set<Tag> after = article.getArticleTags();
        if (after.size() != 0) {
            insertArticleTags(article.getId(), after);
        }

//        修改修改时间
        article.setUpdateTime(new Date());
        if (mapper.update(article) == 1) {
            return ResultUtil.success(ResultEnum.OK, article);