mitao
2024-06-12 0d4f7cd29a978594453b102d4a767d64085df29d
提交【管理后台】-资讯管理相关代码
1个文件已删除
7个文件已添加
20个文件已修改
690 ■■■■ 已修改文件
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/ArticleStatusEnum.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/AuditStatusEnum.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/MgtArticleCommentsController.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/MgtArticleController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/MgtSensitiveWordsController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/dto/MgtArticleCommentsQuery.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/dto/MgtArticleDTO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/dto/MgtSensitiveWordsQuery.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/vo/MgtArticleCommentsVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/vo/MgtArticleVO.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/vo/MgtSensitiveWordsVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/domain/Article.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/domain/ArticleComments.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/handler/MyMetaObjectHandler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/IArticleCommentsService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/IArticleService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/ISensitiveWordsService.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/ArticleCommentsServiceImpl.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/ArticleServiceImpl.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/SensitiveWordsServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtMemberAddressController.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtMemberController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtMemberLevelController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/dto/MgtMemberLevelDTO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/dto/MgtMemberLevelDetailDTO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberLevelService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberLevelServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberPointsServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/ArticleStatusEnum.java
@@ -10,7 +10,7 @@
@AllArgsConstructor
public enum ArticleStatusEnum {
    /*状态 1=待审核 2=已通过 3=已拒绝 4被举报*/
    /*状态 1=待审核 2=已通过 3=已拒绝 */
    TO_BE_REVIEWED(1, "待审核"),
    PASSED(2, "已通过"),
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/AuditStatusEnum.java
@@ -14,8 +14,7 @@
    TO_BE_REVIEWED(1, "待审核"),
    PASSED(2, "已通过"),
    REJECTED(3, "已拒绝"),
    REPORTED(4, "被举报");
    REJECTED(3, "已拒绝");
    @EnumValue
    private final int code;
    @JsonValue
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/MgtArticleCommentsController.java
New file
@@ -0,0 +1,70 @@
package com.ruoyi.article.controller.management;
import com.ruoyi.article.controller.forepart.dto.ArticleCommentsDTO;
import com.ruoyi.article.controller.management.dto.MgtArticleCommentsQuery;
import com.ruoyi.article.controller.management.vo.MgtArticleCommentsVO;
import com.ruoyi.article.service.IArticleCommentsService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.page.PageDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
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;
/**
 * <p>
 * 资讯评论回复表 前端控制器
 * </p>
 *
 * @author mitao
 * @since 2024-05-16
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/mgt/article-comments")
@Api(value = "管理后台-资讯评论回复相关接口", tags = "管理后台-资讯评论回复相关接口")
public class MgtArticleCommentsController {
    private final IArticleCommentsService articleCommentsService;
    @PostMapping("/delMemberArticleComments")
    @ApiOperation(value = "用户端-删除用户评论/回复")
    public R delMemberArticleComments(@RequestBody ArticleCommentsDTO articleCommentsDTO) {
        articleCommentsService.delMemberArticleComments(articleCommentsDTO);
        return R.ok();
    }
    /**
     * 查看详情-评论详情
     *
     * @param query 资讯评论回复查询对象
     * @return PageDTO<MgtArticleCommentsVO>
     */
    @ApiOperation(value = "查看详情-评论详情")
    @PostMapping("/page")
    public R<PageDTO<MgtArticleCommentsVO>> getArticleCommentsPage(
            @Validated @RequestBody MgtArticleCommentsQuery query) {
        return R.ok(articleCommentsService.getArticleCommentsPage(query));
    }
    /**
     * 删除评论
     *
     * @param id 评论id
     */
    @ApiOperation("删除评论")
    @DeleteMapping("/{id}")
    public R<?> delArticleComments(
            @ApiParam(name = "id", value = "评论id", required = true) @PathVariable("id") Long id) {
        articleCommentsService.delArticleComments(id);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/MgtArticleController.java
@@ -1,6 +1,7 @@
package com.ruoyi.article.controller.management;
import com.ruoyi.article.controller.management.dto.MgtArticleDTO;
import com.ruoyi.article.controller.management.dto.MgtArticleQuery;
import com.ruoyi.article.controller.management.vo.MgtArticleVO;
import com.ruoyi.article.service.IArticleService;
@@ -8,9 +9,13 @@
import com.ruoyi.common.core.utils.page.PageDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -43,5 +48,43 @@
        return R.ok(articleService.getArticlePage(query));
    }
    /**
     * 添加/编辑资讯
     *
     * @param dto 管理后台-资讯传输对象
     */
    @ApiOperation(value = "添加/编辑资讯")
    @PostMapping("/save")
    public R<?> saveArticle(@Validated @RequestBody MgtArticleDTO dto) {
        articleService.saveArticle(dto);
        return R.ok();
    }
    /**
     * 处理举报
     *
     * @param id 资讯id
     */
    @ApiOperation(value = "处理举报")
    @PutMapping("/handle-report/{id}")
    public R<?> handleReport(
            @ApiParam(name = "id", value = "资讯id", required = true) @PathVariable("id") Long id) {
        articleService.handleReport(id);
        return R.ok();
    }
    /**
     * 查看详情
     *
     * @param id 资讯id
     * @return MgtArticleVO
     */
    @ApiOperation(value = "查看详情")
    @GetMapping("/detail/{id}")
    public R<MgtArticleVO> getDetail(
            @ApiParam(name = "id", value = "资讯id", required = true) @PathVariable("id") Long id) {
        return R.ok(articleService.getDetail(id));
    }
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/MgtSensitiveWordsController.java
@@ -1,9 +1,17 @@
package com.ruoyi.article.controller.management;
import com.ruoyi.article.controller.management.dto.MgtSensitiveWordsQuery;
import com.ruoyi.article.controller.management.vo.MgtSensitiveWordsVO;
import com.ruoyi.article.service.ISensitiveWordsService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.page.PageDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
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;
@@ -16,12 +24,24 @@
 * @since 2024-05-16
 */
@RestController
@RequestMapping("/sensitive-words")
@RequestMapping("/mgt/sensitive-words")
@RequiredArgsConstructor
@Api(value = "管理后台-敏感词管理相关接口", tags = "管理后台-敏感词管理相关接口")
public class MgtSensitiveWordsController {
    private final ISensitiveWordsService sensitiveWordsService;
    /**
     * 获取敏感词列表的分页数据
     *
     * @param query 管理后台-敏感词查询对象
     * @return PageDTO<MgtSensitiveWordsVO>
     */
    @ApiOperation("获取敏感词列表的分页数据")
    @PostMapping("/page")
    public R<PageDTO<MgtSensitiveWordsVO>> getSensitiveWordsPage(
            @Validated @RequestBody MgtSensitiveWordsQuery query) {
        return R.ok(sensitiveWordsService.getSensitiveWordsPage(query));
    }
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/dto/MgtArticleCommentsQuery.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.article.controller.management.dto;
import com.ruoyi.common.core.web.page.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * @author mitao
 * @date 2024/6/12
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "资讯评论回复查询对象", description = "资讯评论回复查询对象")
public class MgtArticleCommentsQuery extends BasePage {
    private static final long serialVersionUID = -5273257330099726767L;
    @ApiModelProperty(value = "资讯id")
    @NotNull(message = "资讯id不能为空")
    private Long articleId;
    @ApiModelProperty(value = "发布人")
    private String nickname;
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/dto/MgtArticleDTO.java
New file
@@ -0,0 +1,36 @@
package com.ruoyi.article.controller.management.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import javax.validation.constraints.NotBlank;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/6/12
 */
@Data
@ApiModel(value = "管理后台-资讯传输对象", description = "管理后台-资讯传输对象")
public class MgtArticleDTO implements Serializable {
    private static final long serialVersionUID = 5753062638043360603L;
    @ApiModelProperty(value = "资讯id", notes = "更新必传,添加不传")
    private Long id;
    @ApiModelProperty(value = "资讯标题")
    @NotBlank(message = "资讯标题不能为空")
    private String title;
    @ApiModelProperty(value = "资讯内容")
    @NotBlank(message = "资讯内容不能为空")
    private String content;
    @ApiModelProperty(value = "资讯图片  ['a','b','c','d','e']")
    @NotBlank(message = "资讯图片不能为空")
    private String images;
    @ApiModelProperty(value = "资讯视频")
    private String videoUrl;
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/dto/MgtSensitiveWordsQuery.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.article.controller.management.dto;
import com.ruoyi.common.core.web.page.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * @author mitao
 * @date 2024/6/12
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "管理后台-敏感词查询对象", description = "管理后台-敏感词查询对象")
public class MgtSensitiveWordsQuery extends BasePage {
    private static final long serialVersionUID = 821139236744918828L;
    @ApiModelProperty(value = "敏感词")
    private String word;
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/vo/MgtArticleCommentsVO.java
New file
@@ -0,0 +1,39 @@
package com.ruoyi.article.controller.management.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/6/12
 */
@Data
@ApiModel(value = "资讯评论视图对象", description = "资讯评论视图对象")
public class MgtArticleCommentsVO implements Serializable {
    private static final long serialVersionUID = -1559372355057590070L;
    @ApiModelProperty(value = "资讯评论id")
    private Long id;
    @ApiModelProperty(value = "评论id")
    private Long replyId;
    @ApiModelProperty(value = "会员id")
    private Long memberId;
    @ApiModelProperty(value = "发布人")
    private String nickname;
    @ApiModelProperty(value = "联系电话")
    private String phone;
    @ApiModelProperty(value = "评论内容")
    private String content;
    @ApiModelProperty(value = "发布时间")
    private LocalDateTime createTime;
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/vo/MgtArticleVO.java
@@ -37,7 +37,7 @@
    @ApiModelProperty(value = "资讯视频")
    private String videoUrl;
    @ApiModelProperty(value = "状态 1=待审核 2=已通过 3=已拒绝 4被举报")
    @ApiModelProperty(value = "状态 1=待审核 2=已通过 3=已拒绝")
    private AuditStatusEnum status;
    @ApiModelProperty(value = "举报用户")
@@ -73,4 +73,6 @@
    @ApiModelProperty(value = "上架状态 上架中 已下架")
    private ListingStatusEnum listingStatus;
    @ApiModelProperty(value = "是否被举报")
    private Boolean reported;
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/vo/MgtSensitiveWordsVO.java
New file
@@ -0,0 +1,29 @@
package com.ruoyi.article.controller.management.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/6/12
 */
@Data
@ApiModel(value = "管理后台-敏感词视图对象", description = "管理后台-敏感词视图对象")
public class MgtSensitiveWordsVO implements Serializable {
    private static final long serialVersionUID = -4798653916602479053L;
    @ApiModelProperty(value = "敏感词id")
    private Long id;
    @ApiModelProperty(value = "敏感词")
    private String word;
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/domain/Article.java
@@ -53,11 +53,11 @@
    @ApiModelProperty(value = "资讯视频")
    private String videoUrl;
    @ApiModelProperty(value = "状态 1=待审核 2=已通过 3=已拒绝 4被举报")
    @ApiModelProperty(value = "状态 1=待审核 2=已通过 3=已拒绝")
    private AuditStatusEnum status;
    @ApiModelProperty(value = "举报用户")
    private String reportBy;
    @ApiModelProperty(value = "举报用户id")
    private Long reportBy;
    @ApiModelProperty(value = "举报时间")
    private LocalDateTime reportedTime;
@@ -100,4 +100,6 @@
    @ApiModelProperty(value = "上架状态 上架中 已下架")
    private ListingStatusEnum listingStatus;
    
    @ApiModelProperty(value = "是否被举报")
    private Boolean reported;
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/domain/ArticleComments.java
@@ -73,6 +73,7 @@
    @ApiModelProperty(value = "1 评论,2 是回复")
    private  Integer type;
    @ApiModelProperty(value = "点赞数")
    private Integer likeCount;
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/handler/MyMetaObjectHandler.java
@@ -21,7 +21,7 @@
    public void insertFill(MetaObject metaObject) {
        // 获取当前登录用户
        Long userId = SecurityUtils.getUserId();
        fillValue("createBy", userId, metaObject);
        fillValue("createBy", userId.toString(), metaObject);
        fillValue("createTime", LocalDateTime.now(), metaObject);
    }
@@ -29,7 +29,7 @@
    public void updateFill(MetaObject metaObject) {
        // 获取当前登录用户
        Long userId = SecurityUtils.getUserId();
        fillValue("updateBy", userId, metaObject);
        fillValue("updateBy", userId.toString(), metaObject);
        fillValue("updateTime", LocalDateTime.now(), metaObject);
    }
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/IArticleCommentsService.java
@@ -2,7 +2,10 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.article.controller.forepart.dto.ArticleCommentsDTO;
import com.ruoyi.article.controller.management.dto.MgtArticleCommentsQuery;
import com.ruoyi.article.controller.management.vo.MgtArticleCommentsVO;
import com.ruoyi.article.domain.ArticleComments;
import com.ruoyi.common.core.utils.page.PageDTO;
/**
 * <p>
@@ -18,4 +21,13 @@
    void delMemberArticleComments(ArticleCommentsDTO articleCommentsDTO);
    /**
     * 查看详情-评论详情
     *
     * @param query 资讯评论回复查询对象
     * @return PageDTO<MgtArticleCommentsVO>
     */
    PageDTO<MgtArticleCommentsVO> getArticleCommentsPage(MgtArticleCommentsQuery query);
    void delArticleComments(Long id);
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/IArticleService.java
@@ -4,6 +4,7 @@
import com.ruoyi.article.controller.forepart.dto.ArticleDTO;
import com.ruoyi.article.controller.forepart.vo.ArticleCommentsVO;
import com.ruoyi.article.controller.forepart.vo.ArticleVO;
import com.ruoyi.article.controller.management.dto.MgtArticleDTO;
import com.ruoyi.article.controller.management.dto.MgtArticleQuery;
import com.ruoyi.article.controller.management.vo.MgtArticleVO;
import com.ruoyi.article.domain.Article;
@@ -32,5 +33,33 @@
    PageDTO<ArticleCommentsVO> getArticleCommentsList(ArticleDTO articleDTO);
    void getReport(ArticleDTO articleDTO);
    /**
     * 获取资讯列表的分页数据
     *
     * @param query 资讯管理查询条件
     * @return PageDTO<ArticleVO>
     */
    PageDTO<MgtArticleVO> getArticlePage(MgtArticleQuery query);
    /**
     * "添加/编辑资讯
     *
     * @param dto 管理后台-资讯传输对象
     */
    void saveArticle(MgtArticleDTO dto);
    /**
     * 处理举报
     *
     * @param id 资讯id
     */
    void handleReport(Long id);
    /**
     * 查看详情
     *
     * @param id 资讯id
     * @return MgtArticleVO
     */
    MgtArticleVO getDetail(Long id);
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/ISensitiveWordsService.java
@@ -1,12 +1,14 @@
package com.ruoyi.article.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.article.controller.management.dto.MgtSensitiveWordsQuery;
import com.ruoyi.article.controller.management.vo.MgtSensitiveWordsVO;
import com.ruoyi.article.domain.SensitiveWords;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.system.api.domain.dto.judgeSensitiveWordsDTO;
import com.ruoyi.system.api.domain.vo.judgeSensitiveWordsVO;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import org.springframework.web.bind.annotation.RequestBody;
/**
 * <p>
@@ -21,4 +23,11 @@
    judgeSensitiveWordsVO judgeSensitiveWordsList(@RequestBody judgeSensitiveWordsDTO SensitiveWordsDTO);
    /**
     * 获取敏感词列表的分页数据
     *
     * @param query 管理后台-敏感词查询对象
     * @return PageDTO<MgtSensitiveWordsVO>
     */
    PageDTO<MgtSensitiveWordsVO> getSensitiveWordsPage(MgtSensitiveWordsQuery query);
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/ArticleCommentsServiceImpl.java
@@ -1,16 +1,31 @@
package com.ruoyi.article.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.article.controller.forepart.dto.ArticleCommentsDTO;
import com.ruoyi.article.controller.management.dto.MgtArticleCommentsQuery;
import com.ruoyi.article.controller.management.vo.MgtArticleCommentsVO;
import com.ruoyi.article.domain.Article;
import com.ruoyi.article.domain.ArticleComments;
import com.ruoyi.article.controller.forepart.dto.ArticleCommentsDTO;
import com.ruoyi.article.mapper.ArticleCommentsMapper;
import com.ruoyi.article.mapper.ArticleMapper;
import com.ruoyi.article.service.IArticleCommentsService;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.exception.ServiceException;
import org.springframework.stereotype.Service;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.system.api.domain.Member;
import com.ruoyi.system.api.domain.dto.MemberDTO;
import com.ruoyi.system.api.feignClient.MemberClient;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
 * <p>
@@ -26,7 +41,8 @@
    @Resource
    private ArticleMapper articleMapper;
    @Resource
    private MemberClient memberClient;
    @Override
    public void saveMemberArticleComments(ArticleCommentsDTO articleCommentsDTO) {
        ArticleComments articleComments=new ArticleComments();
@@ -65,4 +81,77 @@
        this.removeById(articleCommentsDTO.getId());
    }
    /**
     * 查看详情-评论详情
     *
     * @param query 资讯评论回复查询对象
     * @return PageDTO<MgtArticleCommentsVO>
     */
    @Override
    public PageDTO<MgtArticleCommentsVO> getArticleCommentsPage(MgtArticleCommentsQuery query) {
        PageDTO<MgtArticleCommentsVO> result;
        Set<Long> memberIdSet = null;
        if (StringUtils.isNotBlank(query.getNickname())) {
            MemberDTO memberDTO = new MemberDTO();
            memberDTO.setNickname(query.getNickname());
            List<Member> data = memberClient.getMemberListByCondition(memberDTO,
                    SecurityConstants.INNER).getData();
            if (StringUtils.isNotEmpty(data)) {
                memberIdSet = data.stream().map(Member::getId)
                        .collect(Collectors.toSet());
            }
        }
        Page<ArticleComments> page = this.lambdaQuery()
                .eq(ArticleComments::getArticleId, query.getArticleId())
                .in(StringUtils.isNotEmpty(memberIdSet), ArticleComments::getMemberId, memberIdSet)
                .page(new Page<>(query.getPageCurr(), query.getPageSize()));
        if (StringUtils.isEmpty(page.getRecords())) {
            result = PageDTO.empty(page);
        } else {
            PageDTO<MgtArticleCommentsVO> pageVO = PageDTO.of(page,
                    MgtArticleCommentsVO.class);// 获取会员信息
            Set<Long> memIdSet = pageVO.getList().stream().map(MgtArticleCommentsVO::getMemberId)
                    .collect(Collectors.toSet());
            List<Member> memberList = memberClient.getMemberListByIds(memIdSet,
                    SecurityConstants.INNER).getData();
            Map<Long, Member> memberMap = memberList.stream()
                    .collect(Collectors.toMap(Member::getId, Function.identity()));
            pageVO.getList().forEach(item -> {
                Member member = memberMap.get(item.getMemberId());
                if (StringUtils.isNotNull(member)) {
                    item.setNickname(member.getNickname());
                    item.setPhone(member.getPhone());
                }
            });
            result = pageVO;
        }
        return result;
    }
    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void delArticleComments(Long id) {
        ArticleComments articleComments = this.getById(id);
        if (StringUtils.isNull(articleComments)) {
            throw new ServiceException("评论不存在");
        }
        // 查询资讯
        Article article = articleMapper.selectById(articleComments.getArticleId());
        if (articleComments.getType() == 2) {
            this.removeById(id);
            article.setCommentCount(Math.max(article.getCommentCount() - 1, 0));
        } else if (articleComments.getType() == 1) {
            List<ArticleComments> list = this.lambdaQuery().eq(ArticleComments::getReplyId, id)
                    .list();
            List<Long> commentsIds = list.stream().map(ArticleComments::getId)
                    .collect(Collectors.toList());
            commentsIds.add(articleComments.getId());
            this.removeByIds(commentsIds);
            article.setCommentCount(Math.max((article.getCommentCount() - list.size()), 0));
        }
        articleMapper.updateById(article);
    }
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/ArticleServiceImpl.java
@@ -8,6 +8,7 @@
import com.ruoyi.article.controller.forepart.dto.ArticleDTO;
import com.ruoyi.article.controller.forepart.vo.ArticleCommentsVO;
import com.ruoyi.article.controller.forepart.vo.ArticleVO;
import com.ruoyi.article.controller.management.dto.MgtArticleDTO;
import com.ruoyi.article.controller.management.dto.MgtArticleQuery;
import com.ruoyi.article.controller.management.vo.MgtArticleVO;
import com.ruoyi.article.domain.Article;
@@ -23,8 +24,9 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.enums.ArticleTypeEnum;
import com.ruoyi.common.core.enums.AuditStatusEnum;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.system.api.domain.Member;
import com.ruoyi.system.api.domain.SysUser;
@@ -156,10 +158,8 @@
    @Override
    public ArticleVO getMemberArticleInfo(ArticleDTO articleDTO) {
        Article article=this.getById(articleDTO.getId());
        ArticleVO articleVO=new ArticleVO();
        BeanUtils.copyProperties(article, articleVO);
        ArticleVO articleVO = BeanUtils.copyBean(article,
                ArticleVO.class);
        R<Member> membeOne = memberClient.getMembeOne(articleVO.getMemberId(),
                SecurityConstants.INNER);
        Member data = membeOne.getData();
@@ -278,11 +278,18 @@
        R<Member> membeOne = memberClient.getMembeOne(articleDTO.getMemberId(),
                SecurityConstants.INNER);
        Member data = membeOne.getData();
        article.setReportBy(data.getNickname());
        article.setReportBy(data.getId());
        article.setReportedTime(LocalDateTime.now());
        article.setReported(Boolean.TRUE);
        this.saveOrUpdate(article);
    }
    /**
     * 获取资讯列表的分页数据
     *
     * @param query 资讯管理查询条件
     * @return PageDTO<ArticleVO>
     */
    @Override
    public PageDTO<MgtArticleVO> getArticlePage(MgtArticleQuery query) {
        // 构建查询条件
@@ -372,4 +379,57 @@
        }
        return pageVO;
    }
    /**
     * "添加/编辑资讯
     *
     * @param dto 管理后台-资讯传输对象
     */
    @Override
    public void saveArticle(MgtArticleDTO dto) {
        Article article = BeanUtils.copyBean(dto, Article.class);
        if (StringUtils.isNull(article.getId())) {
            article.setStatus(AuditStatusEnum.PASSED);
            this.save(article);
        } else {
            Article articleById = this.getById(article.getId());
            if (StringUtils.isNull(articleById)) {
                throw new ServiceException("资讯不存在");
            }
            this.updateById(article);
        }
    }
    /**
     * 处理举报
     *
     * @param id 资讯id
     */
    @Override
    public void handleReport(Long id) {
        Article article = this.getById(id);
        if (StringUtils.isNull(article)) {
            throw new ServiceException("资讯不存在");
        }
        if (Boolean.FALSE.equals(article.getReported())) {
            throw new ServiceException("该资讯未举报");
        }
        article.setReported(Boolean.FALSE);
        this.updateById(article);
    }
    /**
     * 查看详情
     *
     * @param id 资讯id
     * @return MgtArticleVO
     */
    @Override
    public MgtArticleVO getDetail(Long id) {
        Article article = this.getById(id);
        if (StringUtils.isNull(article)) {
            throw new ServiceException("资讯不存在");
        }
        return BeanUtils.copyBean(article, MgtArticleVO.class);
    }
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/SensitiveWordsServiceImpl.java
@@ -3,18 +3,17 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.article.controller.management.dto.MgtSensitiveWordsQuery;
import com.ruoyi.article.controller.management.vo.MgtSensitiveWordsVO;
import com.ruoyi.article.domain.SensitiveWords;
import com.ruoyi.article.mapper.SensitiveWordsMapper;
import com.ruoyi.article.service.ISensitiveWordsService;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import javax.annotation.Resource;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.system.api.domain.dto.judgeSensitiveWordsDTO;
import com.ruoyi.system.api.domain.vo.judgeSensitiveWordsVO;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.springframework.stereotype.Service;
/**
@@ -55,5 +54,14 @@
         return SensitiveWordsVO;
    }
    /**
     * 获取敏感词列表的分页数据
     *
     * @param query 管理后台-敏感词查询对象
     * @return PageDTO<MgtSensitiveWordsVO>
     */
    @Override
    public PageDTO<MgtSensitiveWordsVO> getSensitiveWordsPage(MgtSensitiveWordsQuery query) {
        return null;
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtMemberAddressController.java
File was deleted
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtMemberController.java
@@ -7,6 +7,7 @@
import com.ruoyi.member.controller.management.vo.MgtMemberPointsVO;
import com.ruoyi.member.controller.management.vo.MgtMemberVO;
import com.ruoyi.member.service.IMemberService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
@@ -24,6 +25,7 @@
@RestController
@RequestMapping("/mgt/member")
@RequiredArgsConstructor
@Api(value = "管理后台-会员管理相关接口", tags = "管理后台-会员管理相关接口")
public class MgtMemberController {
    private final IMemberService memberService;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtMemberLevelController.java
@@ -5,9 +5,9 @@
import com.ruoyi.member.controller.management.dto.MgtMemberLevelDTO;
import com.ruoyi.member.controller.management.vo.MgtMemberLevelVO;
import com.ruoyi.member.service.IMemberLevelService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import javax.validation.constraints.NotEmpty;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
@@ -24,10 +24,10 @@
 * @author mitao
 * @since 2024-05-16
 */
@Validated
@RestController
@RequestMapping("/mgt/member-level")
@RequiredArgsConstructor
@Api(value = "管理后台-会员等级相关接口", tags = "管理后台-会员等级相关接口")
public class MgtMemberLevelController {
    private final IMemberLevelService memberLevelService;
@@ -46,13 +46,12 @@
    /**
     * 保存会员等级配置
     *
     * @param memberLevelDTOList 会员等级配置列表
     * @param dto 会员等级配置列表
     */
    @ApiOperation("保存会员等级配置")
    @PostMapping("/save")
    public R<?> saveOrUpdateMemberLevel(
            @RequestBody @NotEmpty(message = "会员等级不能为空") List<MgtMemberLevelDTO> memberLevelDTOList) {
        memberLevelService.saveOrUpdateMemberLevel(memberLevelDTOList);
    public R<?> saveOrUpdateMemberLevel(@Validated @RequestBody MgtMemberLevelDTO dto) {
        memberLevelService.saveOrUpdateMemberLevel(dto);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/dto/MgtMemberLevelDTO.java
@@ -2,23 +2,19 @@
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import javax.validation.constraints.NotNull;
import java.util.List;
import javax.validation.Valid;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/6/12
 */
@Data
@ApiModel("会员等级数据传输对象对象")
public class MgtMemberLevelDTO implements Serializable {
@ApiModel("会员等级数据传输对象")
public class MgtMemberLevelDTO {
    private static final long serialVersionUID = 841295965476674650L;
    @ApiModelProperty(value = "会员等级")
    @NotNull(message = "会员等级不能为空")
    private Integer level;
    @ApiModelProperty(value = "累计消费")
    @NotNull(message = "累计消费不能为空")
    private BigDecimal cumulativeConsumption;
    @ApiModelProperty("会员等级列表")
    @Valid
    List<MgtMemberLevelDetailDTO> memberLevelDTOList;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/dto/MgtMemberLevelDetailDTO.java
New file
@@ -0,0 +1,24 @@
package com.ruoyi.member.controller.management.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import javax.validation.constraints.NotNull;
import lombok.Data;
@Data
@ApiModel("会员等级数据传输对象对象")
public class MgtMemberLevelDetailDTO implements Serializable {
    private static final long serialVersionUID = 841295965476674650L;
    @ApiModelProperty(value = "会员等级")
    @NotNull(message = "会员等级不能为空")
    private Integer level;
    @ApiModelProperty(value = "累计消费")
    @NotNull(message = "累计消费不能为空")
    private BigDecimal cumulativeConsumption;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberLevelService.java
@@ -26,7 +26,7 @@
    /**
     * 保存会员等级配置
     *
     * @param memberLevelDTOList 会员等级配置列表
     * @param dto 会员等级配置列表
     */
    void saveOrUpdateMemberLevel(List<MgtMemberLevelDTO> memberLevelDTOList);
    void saveOrUpdateMemberLevel(MgtMemberLevelDTO dto);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberLevelServiceImpl.java
@@ -11,7 +11,6 @@
import com.ruoyi.member.mapper.MemberLevelMapper;
import com.ruoyi.member.mapper.MemberMapper;
import com.ruoyi.member.service.IMemberLevelService;
import com.ruoyi.member.service.IMemberService;
import com.ruoyi.member.service.async.AsyncMethodService;
import com.ruoyi.system.api.domain.Member;
import java.util.List;
@@ -66,12 +65,13 @@
    /**
     * 保存会员等级配置
     *
     * @param memberLevelDTOList 会员等级配置列表
     * @param dto 会员等级配置列表
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void saveOrUpdateMemberLevel(List<MgtMemberLevelDTO> memberLevelDTOList) {
        List<MemberLevel> memberLevels = BeanUtils.copyList(memberLevelDTOList, MemberLevel.class);
    public void saveOrUpdateMemberLevel(MgtMemberLevelDTO dto) {
        List<MemberLevel> memberLevels = BeanUtils.copyList(dto.getMemberLevelDTOList(),
                MemberLevel.class);
        this.saveOrUpdateBatch(memberLevels);
        asyncMethodService.handleMemberLevel(memberLevels);
    }
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberPointsServiceImpl.java
@@ -64,6 +64,7 @@
                .eq(StringUtils.isNotNull(query.getPointsStatus()), MemberPoints::getPointsStatus,
                        query.getPointsStatus())
                .in(StringUtils.isNotEmpty(memberIdSet), MemberPoints::getMemberId, memberIdSet)
                .orderByDesc(MemberPoints::getCreateTime)
                .page(new Page<>(query.getPageCurr(), query.getPageSize()));
        if (StringUtils.isEmpty(page.getRecords())) {
            return PageDTO.empty(page);