From 74296925220f8cbe4faeba3dc7109b74b1ce89fd Mon Sep 17 00:00:00 2001 From: wangqx Date: Thu, 14 Aug 2025 15:54:17 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=E5=BC=80=E5=8F=91=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E5=92=8C=E6=96=87=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 4 + .../controller/ArticleCategoryController.java | 79 ++++++++ .../content/controller/ArticleController.java | 89 +++++++++ .../convert/ArticleCategoryConvert.java | 19 ++ .../content/convert/ArticleConvert.java | 19 ++ .../soopin/content/domain/bo/ArticleBO.java | 90 +++++++++ .../content/domain/bo/ArticleCategoryBO.java | 43 ++++ .../wzj/soopin/content/domain/po/Article.java | 56 ++++++ .../content/domain/po/ArticleCategory.java | 43 ++++ .../content/domain/vo/ArticleCategoryVO.java | 49 +++++ .../soopin/content/domain/vo/ArticleVO.java | 77 +++++++ .../content/mapper/ArticleCategoryMapper.java | 11 + .../soopin/content/mapper/ArticleMapper.java | 21 ++ .../service/IArticleCategoryService.java | 11 + .../content/service/IArticleService.java | 20 ++ .../impl/ArticleCategoryServiceImpl.java | 21 ++ .../service/impl/ArticleServiceImpl.java | 36 ++++ .../mapper/content/ArticleMapper.xml | 23 +++ script/docker/docker-compose.yml | 46 ++++- script/docker/docker.txt | 79 ++++++++ script/docker/nginx/conf/nginx.conf | 188 ++++++++++-------- 21 files changed, 938 insertions(+), 86 deletions(-) create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/ArticleCategoryController.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/ArticleController.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/ArticleCategoryConvert.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/ArticleConvert.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/ArticleBO.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/ArticleCategoryBO.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Article.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/ArticleCategory.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ArticleCategoryVO.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ArticleVO.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/ArticleCategoryMapper.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/ArticleMapper.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IArticleCategoryService.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IArticleService.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/ArticleCategoryServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/ArticleServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/ArticleMapper.xml create mode 100644 script/docker/docker.txt diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 3b59eced4..8bdd06d52 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -185,6 +185,10 @@ tenant: - sys_commission_rate_range - oms_red_packet - oms_red_packet_receive + - commission_template + - commission_rate_range + - cont_article + - cont_article_category diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/ArticleCategoryController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/ArticleCategoryController.java new file mode 100644 index 000000000..ff939c3e1 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/ArticleCategoryController.java @@ -0,0 +1,79 @@ +package com.wzj.soopin.content.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wzj.soopin.content.convert.ArticleCategoryConvert; +import com.wzj.soopin.content.convert.ArticleConvert; +import com.wzj.soopin.content.domain.bo.ArticleBO; +import com.wzj.soopin.content.domain.bo.ArticleCategoryBO; +import com.wzj.soopin.content.domain.po.Article; +import com.wzj.soopin.content.domain.po.ArticleCategory; +import com.wzj.soopin.content.domain.vo.ArticleCategoryVO; +import com.wzj.soopin.content.domain.vo.ArticleVO; +import com.wzj.soopin.content.service.IArticleCategoryService; +import com.wzj.soopin.content.service.IArticleService; +import com.wzj.soopin.member.domain.bo.TenantForbiddenBO; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 用户封禁 + */ +@Tag(name = "文章分类管理") +@RestController +@RequestMapping("/content/article/category") +@RequiredArgsConstructor +public class ArticleCategoryController { + + private final IArticleCategoryService service; + private final ArticleCategoryConvert convert; + + @Tag(name = "查询列表") + @PostMapping("/page") + public R> page(@RequestBody ArticleCategoryBO bo, @RequestBody Page page) { + Page pages = service.page(page, bo.toWrapper()); + return R.ok(convert.toVO(pages)); + } + + @Tag(name = "查询列表") + @PostMapping("/list") + public R< List> list(@RequestBody ArticleCategoryBO bo, @RequestBody Page page) { + List articleList = service.list( bo.toWrapper()); + return R.ok(convert.toVO(articleList)); + } + + @Tag(name = "新增") + @Log(title = "新增 ", businessType = BusinessType.INSERT) + @PostMapping("/add") + public R add(@RequestBody ArticleCategoryBO bo) { + return R.ok(service.save(convert.toPo(bo))); + } + + @Tag(name = "详情") + @GetMapping(value = "/{id}") + public R getInfo(@PathVariable("id") Long id) { + return R.ok(convert.toVO(service.getById(id))); + } + + @Tag(name = ("处理")) + @Log(title = "修改", businessType = BusinessType.UPDATE) + @PostMapping("/update") + public R update(@RequestBody ArticleCategoryBO bo) { + service.save(convert.toPo(bo)); + return R.ok(); + } + + + @Tag(name = "删除") + @Log(title = "删除", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public R remove(@PathVariable Long id) { + return R.ok(service.removeById(id)); + } +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/ArticleController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/ArticleController.java new file mode 100644 index 000000000..73e8fb72f --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/ArticleController.java @@ -0,0 +1,89 @@ +package com.wzj.soopin.content.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wzj.soopin.content.convert.ArticleConvert; +import com.wzj.soopin.content.domain.bo.ArticleBO; +import com.wzj.soopin.content.domain.po.Article; +import com.wzj.soopin.content.domain.vo.ArticleVO; +import com.wzj.soopin.content.service.IArticleCategoryService; +import com.wzj.soopin.content.service.IArticleService; +import com.wzj.soopin.member.convert.TenantForbiddenConvert; +import com.wzj.soopin.member.domain.bo.TenantForbiddenBO; +import com.wzj.soopin.member.domain.po.TenantForbidden; +import com.wzj.soopin.member.domain.vo.TenantForbiddenVO; +import com.wzj.soopin.member.service.ITenantForbiddenService; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 用户封禁 + */ +@Tag(name = "内容管理") +@RestController +@RequestMapping("/content/article") +@RequiredArgsConstructor +public class ArticleController { + + private final IArticleService service; + private final ArticleConvert convert; + + @Tag(name = "查询列表") + @PostMapping("/page") + public R> page(@RequestBody ArticleBO bo, @RequestBody Page page) { + Page
pages = service.page(page, bo.toWrapper()); + return R.ok(convert.toVO(pages)); + } + + @Tag(name = "查询列表") + @PostMapping("/list") + public R< List> list(@RequestBody ArticleBO bo, @RequestBody Page page) { + List articleList = service.selectVoList( bo.toWrapper()); + return R.ok(articleList); + } + + @Tag(name = "新增") + @Log(title = "新增 ", businessType = BusinessType.INSERT) + @PostMapping("/add") + public R add(@RequestBody ArticleBO bo) { + return R.ok(service.save(convert.toPo(bo))); + } + + @Tag(name = "详情") + @GetMapping(value = "/{id}") + public R getInfo(@PathVariable("id") Long id) { + return R.ok(convert.toVO(service.getById(id))); + } + + @Tag(name = ("处理")) + @Log(title = "修改", businessType = BusinessType.UPDATE) + @PostMapping("/update") + public R update(@RequestBody ArticleBO bo) { + service.save(convert.toPo(bo)); + return R.ok(); + } + + + @Tag(name = "删除") + @Log(title = "删除", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public R remove(@PathVariable Long id) { + return R.ok(service.removeById(id)); + } + + + @Tag(name = "轮播列表") + @PostMapping("/carousel") + public R< List> carousel(@RequestBody ArticleBO bo, @RequestBody Page page) { + bo.setType(1);//轮播图 + List articleList = service.selectVoList( bo.toWrapper()); + return R.ok(articleList); + } + +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/ArticleCategoryConvert.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/ArticleCategoryConvert.java new file mode 100644 index 000000000..2c4430191 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/ArticleCategoryConvert.java @@ -0,0 +1,19 @@ +package com.wzj.soopin.content.convert; + +import com.wzj.soopin.content.domain.bo.ArticleCategoryBO; +import com.wzj.soopin.content.domain.po.ArticleCategory; +import com.wzj.soopin.content.domain.vo.ArticleCategoryVO; +import com.wzj.soopin.member.domain.bo.FansBO; +import com.wzj.soopin.member.domain.po.Fans; +import com.wzj.soopin.member.domain.vo.FansVO; +import org.dromara.common.web.core.BaseConverter; +import org.mapstruct.Mapper; + +/** + * 粉丝与关注 DO <=> VO / BO + * + * @author zcc + */ +@Mapper(componentModel = "spring",uses = BaseConverter.class) +public interface ArticleCategoryConvert extends BaseConverter { +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/ArticleConvert.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/ArticleConvert.java new file mode 100644 index 000000000..419987d22 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/convert/ArticleConvert.java @@ -0,0 +1,19 @@ +package com.wzj.soopin.content.convert; + +import com.wzj.soopin.content.domain.bo.ArticleBO; +import com.wzj.soopin.content.domain.po.Article; +import com.wzj.soopin.content.domain.vo.ArticleVO; +import com.wzj.soopin.member.domain.bo.FansBO; +import com.wzj.soopin.member.domain.po.Fans; +import com.wzj.soopin.member.domain.vo.FansVO; +import org.dromara.common.web.core.BaseConverter; +import org.mapstruct.Mapper; + +/** + * 粉丝与关注 DO <=> VO / BO + * + * @author zcc + */ +@Mapper(componentModel = "spring",uses = BaseConverter.class) +public interface ArticleConvert extends BaseConverter { +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/ArticleBO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/ArticleBO.java new file mode 100644 index 000000000..5a389d476 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/ArticleBO.java @@ -0,0 +1,90 @@ +package com.wzj.soopin.content.domain.bo; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.wzj.soopin.content.domain.po.Article; +import io.swagger.annotations.ApiModel; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.dromara.common.core.domain.BaseBO; +import org.dromara.common.core.domain.model.BaseAudit; + +/** + * 文章DO + * + * @author Bulbasaur + * @since 2020/12/10 17:42 + */ +@Data +@TableName("cont_article") +@ApiModel(value = "文章") +public class ArticleBO extends BaseBO
{ + + /** + * id + */ + @Schema(description = "id") + private Long id; + /** + * 标题 + */ + @Schema(description = "标题") + private String title; + + /** + * 分类id + */ + @Schema(description = "分类id") + private Long categoryId; + + /** + * 排序 + */ + @Schema(description = "排序") + private Integer sort; + + /** + * 内容 + */ + @Schema(description = "内容") + private String content; + + /** + * 状态 + */ + @Schema(description = "状态") + private Integer status; + /** + * 类型 + */ + @Schema(description = "类型") + private Integer type; + /** + * 图片 + */ + @Schema(description = "图片") + private String images; + /** + * 链接 + */ + @Schema(description = "链接") + private String url; + /** + * 备注 + */ + @Schema(description = "备注") + private String remark; + + @Override + public LambdaQueryWrapper
toWrapper() { + return super.toWrapper().eq(id!=null, Article::getId, id) + .eq(title!=null, Article::getTitle, title) + .eq(categoryId!=null, Article::getCategoryId, categoryId) + .eq(sort!=null, Article::getSort, sort) + .eq(content!=null, Article::getContent, content) + .eq(status!=null, Article::getStatus, status) + .eq(type!=null, Article::getType, type) + .eq(images!=null, Article::getImages, images) + .eq(url!=null, Article::getUrl, url); + } +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/ArticleCategoryBO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/ArticleCategoryBO.java new file mode 100644 index 000000000..248a18d04 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/ArticleCategoryBO.java @@ -0,0 +1,43 @@ +package com.wzj.soopin.content.domain.bo; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.wzj.soopin.content.domain.po.ArticleCategory; +import lombok.Data; +import org.dromara.common.core.domain.BaseBO; +import org.dromara.common.core.domain.model.BaseAudit; + +/** + * 文章分类 + * + * @author pikachu + * @author Bulbasaur + * @since 2020/12/10 17:42 + */ +@Data +@TableName("cont_article_category") +public class ArticleCategoryBO extends BaseBO { + + @TableId + private Long id; + private String name; + + private String parentId; + + private Integer sort; + + private Integer level; + + private String type; + + @Override + public LambdaQueryWrapper toWrapper() { + return super.toWrapper().eq(id!=null, ArticleCategory::getId, id) + .eq(name!=null, ArticleCategory::getName, name) + .eq(parentId!=null, ArticleCategory::getParentId, parentId) + .eq(sort!=null, ArticleCategory::getSort, sort) + .eq(level!=null, ArticleCategory::getLevel, level) + .eq(type!=null, ArticleCategory::getType, type); + } +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Article.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Article.java new file mode 100644 index 000000000..d3e612ee3 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Article.java @@ -0,0 +1,56 @@ +package com.wzj.soopin.content.domain.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.dromara.common.core.domain.model.BaseAudit; + +/** + * 文章DO + * + * @author Bulbasaur + * @since 2020/12/10 17:42 + */ +@Data +@TableName("cont_article") +@Schema(description="文章") +public class Article extends BaseAudit { + + @TableId + private Long id; + /** + * 标题 + */ + private String title; + /** + * 分类ID + */ + private Long categoryId; + /** + * 排序 + */ + private Integer sort; + /** + * 内容 + */ + private String content; + /** + * 状态 + */ + private Integer status; + /** + * 类型 + */ + private Integer type; + /** + * 图片 + */ + private String images; + /** + * 链接 + */ + private String url; +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/ArticleCategory.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/ArticleCategory.java new file mode 100644 index 000000000..84e3c60dc --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/ArticleCategory.java @@ -0,0 +1,43 @@ +package com.wzj.soopin.content.domain.po; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.models.security.SecurityScheme; +import lombok.Data; +import org.dromara.common.core.domain.model.BaseAudit; + +/** + * 文章分类 + * + * @author pikachu + * @author Bulbasaur + * @since 2020/12/10 17:42 + */ +@Data +@TableName("cont_article_category") +public class ArticleCategory extends BaseAudit { + + @TableId + private Long id; + /** + * 名称 + */ + private String name; + /** + * 父id + */ + private Long parentId; + /** + * 排序 + */ + private Integer sort; + /** + * 层级 + */ + private Integer level; + /** + * 类型 + */ + private Integer type; + +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ArticleCategoryVO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ArticleCategoryVO.java new file mode 100644 index 000000000..cadc0b04a --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ArticleCategoryVO.java @@ -0,0 +1,49 @@ +package com.wzj.soopin.content.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.dromara.common.core.domain.model.BaseAudit; + +/** + * 文章分类 + * + * @author pikachu + * @author Bulbasaur + * @since 2020/12/10 17:42 + */ +@Data +@TableName("cont_article_category") +@Schema(description="文章分类") +public class ArticleCategoryVO extends BaseAudit { + + @TableId + private Long id; + /** + * 名称 + */ + @Schema(description = "名称") + private String name; + /** + * 父id + */ + @Schema(description = "父id") + private Long parentId; + /** + * 排序 + */ + @Schema(description = "排序") + private Integer sort; + /** + * 层级 + */ + @Schema(description = "层级") + private Integer level; + /** + * 类型 + */ + @Schema(description = "类型") + private Integer type; + +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ArticleVO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ArticleVO.java new file mode 100644 index 000000000..575c3cfd2 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ArticleVO.java @@ -0,0 +1,77 @@ +package com.wzj.soopin.content.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.dromara.common.core.domain.model.BaseAudit; + +/** + * 文章DO + * + * @author Bulbasaur + * @since 2020/12/10 17:42 + */ +@Data +@TableName("cont_article") +@ApiModel(value = "文章") +public class ArticleVO extends BaseAudit { + + /** + * 标题 + */ + @Schema(description = "id") + private Long id; + @Schema(description = "标题") + private String title; + /** + * 摘要 + */ + @Schema(description = "摘要") + private String summary; + /** + * 分类 + */ + @Schema(description = "分类") + private Long categoryId; + /** + * 分类名称 + */ + @Schema(description = "分类名称") + private String categoryName; + /** + * 标签 + */ + @Schema(description = "标签") + private String tags; + /** + * 排序 + */ + @Schema(description = "排序") + private Integer sort; + /** + * 内容 + */ + @Schema(description = "内容") + private String content; + /** + * 状态 + */ + @Schema(description = "状态") + private Integer status; + /** + * 类型 + */ + @Schema(description = "类型") + private Integer type; + /** + * 图片 + */ + @Schema(description = "图片") + private String images; + /** + * 链接 + */ + @Schema(description = "链接") + private String url; +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/ArticleCategoryMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/ArticleCategoryMapper.java new file mode 100644 index 000000000..d7703d30c --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/ArticleCategoryMapper.java @@ -0,0 +1,11 @@ +package com.wzj.soopin.content.mapper; + + +import com.wzj.soopin.content.domain.bo.ArticleCategoryBO; +import com.wzj.soopin.content.domain.po.ArticleCategory; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + + +public interface ArticleCategoryMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/ArticleMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/ArticleMapper.java new file mode 100644 index 000000000..e681e1a48 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/ArticleMapper.java @@ -0,0 +1,21 @@ +package com.wzj.soopin.content.mapper; + + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wzj.soopin.content.domain.po.Article; +import com.wzj.soopin.content.domain.vo.ArticleVO; +import org.apache.ibatis.annotations.Param; + +import java.io.Serializable; +import java.util.List; + + +public interface ArticleMapper extends BaseMapper
{ + + ArticleVO selectVoById(Serializable id); + List selectVoList(@Param("ew") Wrapper
queryWrapper); + Page selectVoList(IPage page, @Param("ew") Wrapper
queryWrapper); +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IArticleCategoryService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IArticleCategoryService.java new file mode 100644 index 000000000..4a2206623 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IArticleCategoryService.java @@ -0,0 +1,11 @@ +package com.wzj.soopin.content.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.wzj.soopin.content.domain.po.ArticleCategory; +import com.wzj.soopin.member.domain.po.MemberForbidden; + +public interface IArticleCategoryService extends IService { + + +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IArticleService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IArticleService.java new file mode 100644 index 000000000..60e2c5070 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IArticleService.java @@ -0,0 +1,20 @@ +package com.wzj.soopin.content.service; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.wzj.soopin.content.domain.bo.ArticleBO; +import com.wzj.soopin.content.domain.po.Article; +import com.wzj.soopin.content.domain.vo.ArticleVO; +import com.wzj.soopin.member.domain.po.MemberForbidden; + +import java.util.List; + +public interface IArticleService extends IService
{ + + + List selectVoList(Wrapper
queryWrapper); + + Page selectVoPage(Page page,Wrapper
queryWrapper); +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/ArticleCategoryServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/ArticleCategoryServiceImpl.java new file mode 100644 index 000000000..8049ab135 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/ArticleCategoryServiceImpl.java @@ -0,0 +1,21 @@ +package com.wzj.soopin.content.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wzj.soopin.content.domain.po.ArticleCategory; +import com.wzj.soopin.content.mapper.ArticleCategoryMapper; +import com.wzj.soopin.content.service.IArticleCategoryService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 店铺封禁 + * + * @author zcc + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class ArticleCategoryServiceImpl extends ServiceImpl implements IArticleCategoryService { + +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/ArticleServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/ArticleServiceImpl.java new file mode 100644 index 000000000..17e253c6e --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/ArticleServiceImpl.java @@ -0,0 +1,36 @@ +package com.wzj.soopin.content.service.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wzj.soopin.content.domain.bo.ArticleBO; +import com.wzj.soopin.content.domain.po.Article; +import com.wzj.soopin.content.domain.vo.ArticleVO; +import com.wzj.soopin.content.mapper.ArticleMapper; +import com.wzj.soopin.content.service.IArticleService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 店铺封禁 + * + * @author zcc + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class ArticleServiceImpl extends ServiceImpl implements IArticleService { + + @Override + public List selectVoList(Wrapper
queryWrapper) { + return baseMapper.selectVoList(queryWrapper); + } + + @Override + public Page selectVoPage(Page page, Wrapper
queryWrapper) { + return baseMapper.selectVoList(page,queryWrapper); + } +} diff --git a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/ArticleMapper.xml b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/ArticleMapper.xml new file mode 100644 index 000000000..eb234bbbc --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/ArticleMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + diff --git a/script/docker/docker-compose.yml b/script/docker/docker-compose.yml index fb35cae6f..c6fc24b12 100644 --- a/script/docker/docker-compose.yml +++ b/script/docker/docker-compose.yml @@ -108,7 +108,7 @@ services: # 配置文件 - /docker/server1/logs/:/ruoyi/server/logs/ # skywalking 探针 -# - /docker/skywalking/agent/:/ruoyi/skywalking/agent + # - /docker/skywalking/agent/:/ruoyi/skywalking/agent privileged: true network_mode: "host" @@ -123,7 +123,7 @@ services: # 配置文件 - /docker/server2/logs/:/ruoyi/server/logs/ # skywalking 探针 -# - /docker/skywalking/agent/:/ruoyi/skywalking/agent + # - /docker/skywalking/agent/:/ruoyi/skywalking/agent privileged: true network_mode: "host" @@ -152,3 +152,45 @@ services: - /docker/snailjob/logs/:/ruoyi/snailjob/logs privileged: true network_mode: "host" + elasticsearch: + image: elasticsearch:7.14.0 + + + + + container_name: elasticsearch + environment: + - discovery.type=single-node + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + ports: + - "9200:9200" + volumes: + - esdata:/usr/share/elasticsearch/data + networks: + - efk-network + + fluentd: + image: fluent/fluentd:v1.12-debian-1 + container_name: fluentd + volumes: + - ./fluentd/conf:/fluentd/etc + - ./fluentd/log:/fluentd/log + ports: + - "24224:24224" + - "24224:24224/udp" + depends_on: + - elasticsearch + networks: + - efk-network + + kibana: + image: kibana:7.14.0 + container_name: kibana + ports: + - "5601:5601" + environment: + - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 + depends_on: + - elasticsearch + networks: + - efk-network diff --git a/script/docker/docker.txt b/script/docker/docker.txt new file mode 100644 index 000000000..446c90735 --- /dev/null +++ b/script/docker/docker.txt @@ -0,0 +1,79 @@ +docker run -d --name gitlab-runner --restart always \ + -v /var/local/gitlab-runner/config:/etc/gitlab-runner \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /var/local/docker/cicd:/home/docker/cicd \ + -v /var/local/maven/repository:/home/maven/repository \ + gitlab/gitlab-runner:latest + + + +//创建mysql +docker run -d \ + --name mysql \ + --restart always \ + -p 13306:3306 \ + -e MYSQL_ROOT_PASSWORD=K9p@rS32qL7z \ + -e TZ=Asia/Shanghai \ + -v /var/local/docker/mysql/data:/var/lib/mysql \ + -v /var/local/docker/mysql/conf:/etc/mysql/conf.d \ + mysql:8.0 \ + --lower_case_table_names=1 + + + //创建redis + docker run -d \ + --name redis \ + --restart always \ + -p 16379:6379 \ + -v /var/local/docker/redis/data:/data \ + -v /var/local/docker/redis/conf:/usr/local/etc/redis \ + redis:latest \ + redis-server /usr/local/etc/redis/redis.conf --requirepass "e4ea0caebfd2" + + //创建nginx + docker run -d \ + --name nginx \ + --env TZ=Asia/Shanghai \ + -p 8000:80 \ + -p 7443:443 \ + -v /var/local/docker/nginx/cert:/etc/nginx/cert \ + -v /var/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ + -v /var/local/docker/nginx/html:/etc/nginx/html \ + -v /var/local/docker/nginx/log:/var/log/nginx \ + -v /var/local/docker/nginx/upload:/var/upload/files \ + --privileged \ + --network host \ + nginx + //创建java + docker run -d \ + --name java \ + --restart always \ + -p 8880:8080 \ + -v /var/local/docker/java/data:/java \ + -v /var/local/docker/java/logs:/logs \ + -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ + -e TZ=Asia/Shanghai \ + -e JAVA_OPTS="-Xms512m -Xmx800m \ + -XX:+UseContainerSupport \ + -XX:MaxMetaspaceSize=256m \ + -XX:+HeapDumpOnOutOfMemoryError \ + -XX:HeapDumpPath=/var/log/java-app/heapdump.hprof \ + -Dlogging.file.path=/var/log/java-app \ + -Dfile.encoding=UTF-8" \ + --health-interval=30s \ + --health-timeout=5s \ + --health-retries=3 \ + bellsoft/liberica-openjdk-debian:17.0.11-cds \ + java $JAVA_OPTS -Djdk.internal.platform.CgroupMetrics.enabled=false -jar /java/ruoyi-admin.jar + + //es + +docker run -d \ + --name es \ + --restart always \ + -p 19200:9200 \ + -p 19300:9300 \ + -e "discovery.type=single-node" \ + -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ + -v /var/local/docker/elasticsearch/data:/usr/share/elasticsearch/data \ + elasticsearch:7.17.0 diff --git a/script/docker/nginx/conf/nginx.conf b/script/docker/nginx/conf/nginx.conf index 22b074f1d..78e3a9494 100644 --- a/script/docker/nginx/conf/nginx.conf +++ b/script/docker/nginx/conf/nginx.conf @@ -1,117 +1,137 @@ + +#user nobody; worker_processes 1; -error_log /var/log/nginx/error.log warn; -pid /var/run/nginx.pid; +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +#pid logs/nginx.pid; + events { worker_connections 1024; } + http { include mime.types; default_type application/octet-stream; + + #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + # '$status $body_bytes_sent "$http_referer" ' + # '"$http_user_agent" "$http_x_forwarded_for"'; + + #access_log logs/access.log main; + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; keepalive_timeout 65; - # 限制body大小 - client_max_body_size 100m; - # 开启静态资源压缩 - gzip_static on; - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - access_log /var/log/nginx/access.log main; - - upstream server { - ip_hash; - server 127.0.0.1:8080; - server 127.0.0.1:8081; - } - - upstream monitor-admin { - server 127.0.0.1:9090; - } - - upstream snailjob-server { - server 127.0.0.1:8800; - } + #gzip on; server { - listen 80; + listen 8000; server_name localhost; - # https配置参考 start - #listen 443 ssl; + #charset koi8-r; - # 证书直接存放 /docker/nginx/cert/ 目录下即可 更改证书名称即可 无需更改证书路径 - #ssl on; - #ssl_certificate /etc/nginx/cert/xxx.local.crt; # /etc/nginx/cert/ 为docker映射路径 不允许更改 - #ssl_certificate_key /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改 - #ssl_session_timeout 5m; - #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; - #ssl_protocols TLSv1 TLSv1.1 TLSv1.2; - #ssl_prefer_server_ciphers on; - # https配置参考 end - - # 演示环境配置 拦截除 GET POST 之外的所有请求 - # if ($request_method !~* GET|POST) { - # rewrite ^/(.*)$ /403; - # } - - # location = /403 { - # default_type application/json; - # return 200 '{"msg":"演示模式,不允许操作","code":500}'; - # } - - # 限制外网访问内网 actuator 相关路径 - location ~ ^(/[^/]*)?/actuator.*(/.*)?$ { - return 403; - } + #access_log logs/host.access.log main; location / { - root /usr/share/nginx/html; # docker映射路径 不允许更改 - try_files $uri $uri/ /index.html; + root html ; index index.html index.htm; + try_files $uri $uri/ /index.html; } - - location /prod-api/ { - proxy_set_header Host $http_host; + location /dev { + root dist ; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + location /dev-api/ { + proxy_pass http://192.168.1.65:8880/; + proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_read_timeout 86400s; - # sse 与 websocket参数 - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_buffering off; - proxy_cache off; - proxy_pass http://server/; + proxy_set_header X-Forwarded-Proto $scheme; + } + location /upload/file/ { + alias /var/local/upload/file/; + add_header Access-Control-Allow-Origin *; + add_header Access-Control-Allow-Methods 'GET, POST'; # 允许的HTTP方法 + add_header Access-Control-Allow-Headers 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; + add_header Access-Control-Expose-Headers 'Content-Length,Content-Range'; } - # https 会拦截内链所有的 http 请求 造成功能无法使用 - # 解决方案1 将 admin 服务 也配置成 https - # 解决方案2 将菜单配置为外链访问 走独立页面 http 访问 - location /admin/ { - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header REMOTE-HOST $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_pass http://monitor-admin/admin/; - } - - location /snail-job/ { - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header REMOTE-HOST $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_pass http://snailjob-server/snail-job/; - } + #error_page 404 /404.html; + # redirect server error pages to the static page /50x.html + # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } + + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + #location ~ \.php$ { + # root html; + # fastcgi_pass 127.0.0.1:9000; + # fastcgi_index index.php; + # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; + # include fastcgi_params; + #} + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} } + + + # another virtual host using mix of IP-, name-, and port-based configuration + # + #server { + # listen 8000; + # listen somename:8080; + # server_name somename alias another.alias; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + + + # HTTPS server + # + #server { + # listen 443 ssl; + # server_name localhost; + + # ssl_certificate cert.pem; + # ssl_certificate_key cert.key; + + # ssl_session_cache shared:SSL:1m; + # ssl_session_timeout 5m; + + # ssl_ciphers HIGH:!aNULL:!MD5; + # ssl_prefer_server_ciphers on; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + }