cy 3 лет назад
Родитель
Сommit
61c2ece74a
17 измененных файлов с 309 добавлено и 101 удалено
  1. 39 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/config/RedisConfig.java
  2. 40 57
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsArticleController.java
  3. 18 2
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsAuthRecordController.java
  4. 3 6
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsArticleDao.java
  5. 1 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsAuthRecordDao.java
  6. 11 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsAuthRecordSearch.java
  7. 6 3
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsArticle.java
  8. 7 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsAuthRecord.java
  9. 23 6
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsArticleService.java
  10. 8 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsAuthRecordService.java
  11. 0 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsConfigLabelService.java
  12. 107 4
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsArticleServiceImpl.java
  13. 27 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsAuthRecordServiceImpl.java
  14. 8 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/valid/OtherGroup.java
  15. 0 11
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/vo/BbsAuthRecordVo.java
  16. 7 7
      cooleshow-bbs/src/main/resources/config/mybatis/BbsArticleMapper.xml
  17. 4 2
      cooleshow-bbs/src/main/resources/config/mybatis/BbsAuthRecordMapper.xml

+ 39 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/config/RedisConfig.java

@@ -0,0 +1,39 @@
+package com.yonge.cooleshow.bbs.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+    @Bean
+    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
+        //为了开发方便一般直接使用 <String, Object>
+        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
+        template.setConnectionFactory(factory);
+        //Json序列化配置
+        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+        ObjectMapper om = new ObjectMapper();
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(om);
+        //String 的序列化
+        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+        // key采用String的序列化方式
+        template.setKeySerializer(stringRedisSerializer);
+        // hash的key也采用String的序列化方式
+        template.setHashKeySerializer(stringRedisSerializer);
+        // value序列化方式采用jackson
+        template.setValueSerializer(jackson2JsonRedisSerializer);
+        // hash的value序列化方式采用jackson
+        template.setHashValueSerializer(jackson2JsonRedisSerializer);
+        template.afterPropertiesSet();
+        return template;
+    }
+}

+ 40 - 57
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsArticleController.java

@@ -5,25 +5,27 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
 import com.yonge.cooleshow.bbs.valid.AddGroup;
+import com.yonge.cooleshow.bbs.valid.OtherGroup;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 import com.yonge.toolset.mybatis.support.PageUtil;
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
-
 import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.service.BbsArticleService;
 
+import java.util.List;
+import java.util.Map;
+
 @RestController
 @RequestMapping("/bbsArticle")
 @Api(value = "文章", tags = "文章")
@@ -34,7 +36,7 @@ public class BbsArticleController extends BaseController {
     private BbsArticleService bbsArticleService;
 
     @PostMapping("/addArticle")
-    @ApiOperation(value = "发布文章")
+    @ApiOperation(value = "详情-发布文章")
     public HttpResponseResult addArticle(@Validated(AddGroup.class) @RequestBody BbsArticle bbsArticle) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
@@ -45,66 +47,47 @@ public class BbsArticleController extends BaseController {
         return succeed();
     }
 
-    /**
-     * 查询单条
-     */
-    @GetMapping("/detail/{id}")
-    @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<BbsArticleVo> detail(@PathVariable("id") Long id) {
-        return succeed(bbsArticleService.detail(id));
-    }
-
-    /**
-     * 查询分页
-     */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入bbsArticleSearch")
-    public HttpResponseResult<PageInfo<BbsArticleVo>> page(@RequestBody BbsArticleSearch query) {
-        IPage<BbsArticleVo> pages = bbsArticleService.selectPage(PageUtil.getPage(query), query);
-        return succeed(PageUtil.pageInfo(pages));
-
+    @PostMapping("/updateArticle")
+    @ApiOperation(value = "详情-修改文章")
+    public HttpResponseResult updateArticle(@Validated(UpdateGroup.class) @RequestBody BbsArticle bbsArticle) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        bbsArticleService.updateArticle(bbsArticle, user.getId());
+        return succeed();
     }
 
-    /**
-     * 修改
-     */
-    @PostMapping("/update")
-    @ApiOperation(value = "修改", notes = "传入bbsArticle")
-    public HttpResponseResult update(@Valid @RequestBody BbsArticle bbsArticle) {
-        return status(bbsArticleService.updateById(bbsArticle));
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ids", dataType = "List", value = "文章id集合"),
+    })
+    @PostMapping("/deleteArticle")
+    @ApiOperation(value = "详情-删除文章")
+    public HttpResponseResult deleteArticle(@RequestBody Map<String, List<Long>> ids) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        bbsArticleService.deleteArticle(ids, user);
+        return succeed();
     }
 
-    /**
-     * 新增或修改
-     */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入bbsArticle")
-    public HttpResponseResult submit(@Valid @RequestBody BbsArticle bbsArticle) {
-        return status(bbsArticleService.saveOrUpdate(bbsArticle));
+    @PostMapping("/top")
+    @ApiOperation(value = "后台管理-置顶文章")
+    public HttpResponseResult articleTop(@Validated(OtherGroup.class) @RequestBody BbsArticle article) {
+        bbsArticleService.articleTop(article);
+        return succeed();
     }
 
     /**
-     * 删除
+     * 首页
      */
-    @PostMapping("/remove")
-    @ApiOperation(value = "逻辑删除", notes = "传入ids")
-    public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-            return failed("参数不能为空");
-        }
-        return status(bbsArticleService.removeByIds(StringUtil.toLongList(ids)));
+    @PostMapping("/home")
+    @ApiOperation(value = "首页", notes = "传入bbsArticleSearch")
+    public HttpResponseResult<PageInfo<BbsArticleVo>> home(@RequestBody BbsArticleSearch query) {
+        query.setDelFlag(false);
+        query.setStatus(ArticleEnum.PASS);
+        IPage<BbsArticleVo> pages = bbsArticleService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
     }
-
-
-	/**
-	 * 首页
-	 */
-	@PostMapping("/home")
-	@ApiOperation(value = "首页", notes = "传入bbsArticleSearch")
-	public HttpResponseResult<PageInfo<BbsArticleVo>> home(@RequestBody BbsArticleSearch query) {
-		query.setDelFlag(false);
-		query.setStatus(ArticleEnum.PASS);
-		IPage<BbsArticleVo> pages = bbsArticleService.selectPage(PageUtil.getPage(query), query);
-		return succeed(PageUtil.pageInfo(pages));
-	}
 }

+ 18 - 2
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsAuthRecordController.java

@@ -2,8 +2,11 @@ package com.yonge.cooleshow.bbs.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.bbs.dto.search.BbsAuthRecordSearch;
+import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
 import com.yonge.cooleshow.bbs.service.BbsAuthRecordService;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
 import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -12,9 +15,10 @@ import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-
 @RestController
 @RequestMapping("/bbsAuthRecord")
 @Api(value = "文章审核", tags = "文章审核")
@@ -25,9 +29,21 @@ public class BbsAuthRecordController extends BaseController {
     private BbsAuthRecordService bbsAuthRecordService;
 
     @PostMapping("/page")
-    @ApiOperation(value = "查询文章审核列表")
+    @ApiOperation(value = "后台管理-审核-查询文章审核列表")
     public HttpResponseResult<PageInfo<BbsAuthRecordVo>> page(@RequestBody BbsAuthRecordSearch query) {
         IPage<BbsAuthRecordVo> pages = bbsAuthRecordService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
     }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "后台管理-审核-修改文章审核状态")
+    public HttpResponseResult<PageInfo<BbsAuthRecordVo>> updateAuditState(@Validated(UpdateGroup.class) @RequestBody BbsAuthRecord record) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        record.setVerifyUserId(user.getId());
+        bbsAuthRecordService.updateAuditState(record);
+        return succeed();
+    }
 }

+ 3 - 6
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsArticleDao.java

@@ -9,7 +9,6 @@ import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 
-
 public interface BbsArticleDao extends BaseMapper<BbsArticle> {
     /**
      * 发布文章
@@ -19,13 +18,11 @@ public interface BbsArticleDao extends BaseMapper<BbsArticle> {
     void addArticle(BbsArticle bbsArticle);
 
     /**
-     * 查询详情
+     * 删除文章
      *
-     * @author liweifan
-     * @date 2022-06-09 17:27:11
-     * @return: com.yonge.cooleshow.bbs.vo.BbsArticleVo
+     * @param list
      */
-    BbsArticleVo detail(@Param("id") Long id);
+    void deleteArticle(List<Long> list);
 
     /**
      * 分页查询

+ 1 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsAuthRecordDao.java

@@ -12,6 +12,7 @@ import java.util.List;
 public interface BbsAuthRecordDao extends BaseMapper<BbsAuthRecord> {
     /**
      * 查询文章审核列表
+     *
      * @param page
      * @param bbsArticle
      * @return

+ 11 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsAuthRecordSearch.java

@@ -20,6 +20,9 @@ public class BbsAuthRecordSearch extends QueryInfo {
     @ApiModelProperty(value = "审核中:DOING,通过:PASS,驳回:REJECT")
     private ArticleEnum auditState;
 
+    @ApiModelProperty("0:正常 1:删除")
+    private Boolean delFlag;
+
     @ApiModelProperty(value = "开始时间")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@@ -56,6 +59,14 @@ public class BbsAuthRecordSearch extends QueryInfo {
         this.auditState = auditState;
     }
 
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
     public Date getStartTime() {
         return startTime;
     }

+ 6 - 3
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsArticle.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
 import com.yonge.cooleshow.bbs.enums.YesOrNoEnum;
 import com.yonge.cooleshow.bbs.valid.AddGroup;
+import com.yonge.cooleshow.bbs.valid.OtherGroup;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -28,6 +30,7 @@ public class BbsArticle implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(value = "id_", type = IdType.AUTO)
+    @NotNull(groups = {UpdateGroup.class,OtherGroup.class}, message = "文章id不能为空")
     private Long id;
 
     @ApiModelProperty("发布者id")
@@ -36,17 +39,17 @@ public class BbsArticle implements Serializable {
 
     @ApiModelProperty("文章标题")
     @TableField(value = "title_")
-    @NotBlank(groups = {AddGroup.class},message = "标题不能为空")
+    @NotBlank(groups = {AddGroup.class}, message = "标题不能为空")
     private String title;
 
     @ApiModelProperty("文章内容")
     @TableField(value = "content_")
-    @NotBlank(groups = {AddGroup.class},message = "内容不能为空")
+    @NotBlank(groups = {AddGroup.class}, message = "内容不能为空")
     private String content;
 
     @ApiModelProperty("标签id")
     @TableField(value = "label_id_")
-    @NotNull(groups = {AddGroup.class},message = "标签id不能为空")
+    @NotNull(groups = {AddGroup.class}, message = "标签id不能为空")
     private Integer labelId;
 
     @ApiModelProperty("标签名称(冗余字段)")

+ 7 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsAuthRecord.java

@@ -6,10 +6,13 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -21,18 +24,21 @@ public class BbsAuthRecord implements Serializable {
 
     @ApiModelProperty("文章id")
     @TableField(value = "article_id_")
+    @NotNull(groups = {UpdateGroup.class}, message = "文章id不能为空")
     private Long articleId;
 
-    @ApiModelProperty("审核id")
+    @ApiModelProperty("审核id")
     @TableField(value = "verify_user_id_")
     private Long verifyUserId;
 
     @ApiModelProperty("审核中:DOING,通过:PASS,驳回:REJECT")
     @TableField(value = "audit_state_")
+    @NotNull(groups = {UpdateGroup.class}, message = "审核状态不能为空")
     private ArticleEnum auditState;
 
     @ApiModelProperty("审核理由")
     @TableField(value = "reason_")
+    @NotBlank(groups = {UpdateGroup.class}, message = "审核理由不能为空")
     private String reason;
 
     @TableField(value = "created_time_")

+ 23 - 6
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsArticleService.java

@@ -2,10 +2,14 @@ package com.yonge.cooleshow.bbs.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.entity.BbsArticle;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 文章 服务类
  *
@@ -13,21 +17,34 @@ import com.yonge.cooleshow.bbs.entity.BbsArticle;
  * @date 2022-06-09
  */
 public interface BbsArticleService extends IService<BbsArticle> {
-
     /**
-     * 发布文章
+     * 详情-发布文章
      *
      * @param bbsArticle
      */
     void addArticle(BbsArticle bbsArticle);
 
     /**
-     * 查询详情
+     * 详情-修改文章
      *
-     * @author liweifan
-     * @date 2022-06-09
+     * @param bbsArticle
+     */
+    void updateArticle(BbsArticle bbsArticle, Long userId);
+
+    /**
+     * 详情-删除文章
+     *
+     * @param ids
+     * @param user
+     */
+    void deleteArticle(Map<String, List<Long>> ids, SysUser user);
+
+    /**
+     * 后台管理-置顶文章
+     *
+     * @param article
      */
-    BbsArticleVo detail(Long id);
+    void articleTop(BbsArticle article);
 
     /**
      * 分页查询

+ 8 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsAuthRecordService.java

@@ -8,11 +8,18 @@ import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
 
 public interface BbsAuthRecordService extends IService<BbsAuthRecord> {
     /**
-     * 查询文章审核列表
+     * 后台管理-审核-查询文章审核列表
      *
      * @param page
      * @param query
      * @return
      */
     IPage<BbsAuthRecordVo> selectPage(IPage<BbsAuthRecordVo> page, BbsAuthRecordSearch query);
+
+    /**
+     * 后台管理-审核-修改文章审核状态
+     *
+     * @param record
+     */
+    void updateAuditState(BbsAuthRecord record);
 }

+ 0 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsConfigLabelService.java

@@ -15,7 +15,6 @@ import java.util.List;
  * @date 2022-06-09
  */
 public interface BbsConfigLabelService extends IService<BbsConfigLabel> {
-
     /**
      * 查询详情
      *

+ 107 - 4
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsArticleServiceImpl.java

@@ -1,8 +1,17 @@
 package com.yonge.cooleshow.bbs.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.bbs.dao.BbsAuthRecordDao;
+import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
+import com.yonge.cooleshow.bbs.enums.YesOrNoEnum;
+import com.yonge.toolset.base.exception.BizException;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -11,23 +20,117 @@ import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.dao.BbsArticleDao;
 import com.yonge.cooleshow.bbs.service.BbsArticleService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class BbsArticleServiceImpl extends ServiceImpl<BbsArticleDao, BbsArticle> implements BbsArticleService {
     private final static Logger log = LoggerFactory.getLogger(BbsArticleServiceImpl.class);
 
+    @Autowired
+    private BbsAuthRecordDao authRecordDao;
+
+    /**
+     * @Description: 详情-发布文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void addArticle(BbsArticle bbsArticle) {
         //状态为null,默认审核中,否则为草稿
         if (bbsArticle.getStatus() == null) {
             bbsArticle.setStatus(ArticleEnum.DOING);
-        } else bbsArticle.setStatus(ArticleEnum.DRAFT);
-        baseMapper.addArticle(bbsArticle);
+            baseMapper.addArticle(bbsArticle);
+
+            //新增审核记录
+            BbsAuthRecord authRecord = new BbsAuthRecord();
+            authRecord.setVerifyUserId(bbsArticle.getUserId());
+            authRecord.setArticleId(bbsArticle.getId());
+            authRecord.setAuditState(ArticleEnum.DOING);
+            authRecordDao.insert(authRecord);
+        } else {
+            bbsArticle.setStatus(ArticleEnum.DRAFT);
+            baseMapper.addArticle(bbsArticle);
+        }
+    }
+
+    /**
+     * @Description: 详情-修改文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateArticle(BbsArticle bbsArticle, Long userId) {
+        BbsArticle article = baseMapper.selectById(bbsArticle.getId());
+        if (article == null) {
+            throw new BizException("文章不存在");
+        }
+        if (!userId.equals(article.getUserId())) {
+            throw new BizException("只能修改自己的文章");
+        }
+
+        bbsArticle.setStatus(ArticleEnum.DOING);
+        baseMapper.updateById(bbsArticle);
+
+        //删除原审核记录
+        authRecordDao.delete(Wrappers.<BbsAuthRecord>lambdaQuery()
+                .eq(BbsAuthRecord::getArticleId, bbsArticle.getId())
+                .eq(BbsAuthRecord::getAuditState, ArticleEnum.DOING));
+
+        //新增审核记录
+        BbsAuthRecord authRecord = new BbsAuthRecord();
+        authRecord.setVerifyUserId(bbsArticle.getUserId());
+        authRecord.setArticleId(bbsArticle.getId());
+        authRecord.setAuditState(ArticleEnum.DOING);
+        authRecordDao.insert(authRecord);
+    }
+
+    /**
+     * @Description: 详情-删除文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteArticle(Map<String, List<Long>> ids, SysUser user) {
+        List<Long> list = ids.get("ids");
+        if (CollectionUtils.isEmpty(list)) {
+            throw new BizException("文章id不能为空");
+        }
+
+        //当前用户为管理员
+        if (user.getUserType().contains(SysUserType.SYSTEM.getCode())) {
+            baseMapper.deleteArticle(list);
+        } else {
+            List<BbsArticle> articles = baseMapper.selectBatchIds(list);
+            List<Long> idList = articles.stream().map(BbsArticle::getUserId).distinct().collect(Collectors.toList());
+            if (idList.size() != 1 || !user.getId().equals(idList.get(0))) {
+                throw new BizException("无法删除他人文章");
+            }
+            baseMapper.deleteArticle(list);
+        }
     }
 
+    /**
+     * @Description: 后台管理-置顶文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
     @Override
-    public BbsArticleVo detail(Long id) {
-        return baseMapper.detail(id);
+    @Transactional(rollbackFor = Exception.class)
+    public void articleTop(BbsArticle article) {
+        BbsArticle bbsArticle = baseMapper.selectById(article.getId());
+        YesOrNoEnum topFlag = bbsArticle.getTopFlag();
+        if (topFlag.getCode() == 0) {
+            article.setTopFlag(YesOrNoEnum.YES);//未置顶 -> 置顶
+        } else {
+            article.setTopFlag(YesOrNoEnum.NO);//置顶 -> 未置顶
+        }
+        baseMapper.updateById(article);
     }
 
     @Override

+ 27 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsAuthRecordServiceImpl.java

@@ -1,22 +1,49 @@
 package com.yonge.cooleshow.bbs.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.bbs.dao.BbsArticleDao;
 import com.yonge.cooleshow.bbs.dao.BbsAuthRecordDao;
 import com.yonge.cooleshow.bbs.dto.search.BbsAuthRecordSearch;
+import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
 import com.yonge.cooleshow.bbs.service.BbsAuthRecordService;
 import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 @Service
 public class BbsAuthRecordServiceImpl extends ServiceImpl<BbsAuthRecordDao, BbsAuthRecord> implements BbsAuthRecordService {
     private final static Logger log = LoggerFactory.getLogger(BbsAuthRecordServiceImpl.class);
 
+    @Autowired
+    private BbsArticleDao bbsArticleDao;
+
+    /**
+     * @Description: 后台管理-审核-查询文章审核列表
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
     @Override
     public IPage<BbsAuthRecordVo> selectPage(IPage<BbsAuthRecordVo> page, BbsAuthRecordSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
+
+    /**
+     * @Description: 后台管理-审核-修改文章审核状态
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateAuditState(BbsAuthRecord record) {
+        bbsArticleDao.update(null, Wrappers.<BbsArticle>lambdaUpdate()
+                .eq(BbsArticle::getId, record.getArticleId())
+                .set(BbsArticle::getStatus, record.getAuditState()));
+        baseMapper.insert(record);
+    }
 }

+ 8 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/valid/OtherGroup.java

@@ -0,0 +1,8 @@
+package com.yonge.cooleshow.bbs.valid;
+
+/**
+ * @author: cy
+ * @date: 2022/3/31 09:54
+ */
+public interface OtherGroup {
+}

+ 0 - 11
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/vo/BbsAuthRecordVo.java

@@ -34,9 +34,6 @@ public class BbsAuthRecordVo implements Serializable {
     @ApiModelProperty("标签名")
     private String labelName;
 
-    @ApiModelProperty("文章当前状态 审核中:DOING,通过:PASS,驳回:REJECT")
-    private ArticleEnum status;
-
     @ApiModelProperty("是否可评论 0:不可评论 1:可评论")
     private YesOrNoEnum replyFlag;
 
@@ -119,14 +116,6 @@ public class BbsAuthRecordVo implements Serializable {
         this.labelName = labelName;
     }
 
-    public ArticleEnum getStatus() {
-        return status;
-    }
-
-    public void setStatus(ArticleEnum status) {
-        this.status = status;
-    }
-
     public YesOrNoEnum getReplyFlag() {
         return replyFlag;
     }

+ 7 - 7
cooleshow-bbs/src/main/resources/config/mybatis/BbsArticleMapper.xml

@@ -42,17 +42,17 @@
         , t.del_flag_ as delFlag
         </sql>
 
-    <insert id="addArticle">
+    <insert id="addArticle" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO bbs_article
         (user_id_,title_,content_,label_id_,label_name_,status_,reply_flag_)
         VALUES(#{userId},#{title},#{content},#{labelId},#{labelName},#{status},#{replyFlag})
     </insert>
-    <select id="detail" resultType="com.yonge.cooleshow.bbs.vo.BbsArticleVo">
-        SELECT
-            <include refid="baseColumns"/>
-        FROM bbs_article t
-        where t.id_ = #{id}
-    </select>
+    <update id="deleteArticle" parameterType="java.util.List">
+        UPDATE bbs_article SET del_flag_=1 WHERE id_ IN
+        <foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </update>
     <select id="selectPage" resultType="com.yonge.cooleshow.bbs.vo.BbsArticleVo">
 		SELECT         
         	<include refid="baseColumns" />

+ 4 - 2
cooleshow-bbs/src/main/resources/config/mybatis/BbsAuthRecordMapper.xml

@@ -11,7 +11,6 @@
         u.phone_ AS phone,
         a.label_id_ AS labelId,
         l.label_name_ AS labelName,
-        a.status_ AS `status`,
         a.reply_flag_ AS replyFlag,
         a.created_time_ AS articleCreatedTime,
         r.audit_state_ AS auditState,
@@ -34,7 +33,10 @@
             AND a.label_id_ = #{param.labelId}
         </if>
         <if test="param.auditState !=null">
-            AND a.status_ = #{param.auditState}
+            AND r.audit_state_ = #{param.auditState}
+        </if>
+        <if test="param.delFlag !=null">
+            AND a.del_flag_ = #{param.delFlag}
         </if>
         <if test="param.startTime !=null">
             <![CDATA[AND a.created_time_ >= #{param.startTime} ]]>