[feat]开发文章分类和文章
This commit is contained in:
parent
cc68b15b40
commit
7429692522
@ -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
|
||||
|
||||
|
||||
|
||||
|
@ -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<IPage<ArticleCategoryVO>> page(@RequestBody ArticleCategoryBO bo, @RequestBody Page page) {
|
||||
Page<ArticleCategory> pages = service.page(page, bo.toWrapper());
|
||||
return R.ok(convert.toVO(pages));
|
||||
}
|
||||
|
||||
@Tag(name = "查询列表")
|
||||
@PostMapping("/list")
|
||||
public R< List<ArticleCategoryVO>> list(@RequestBody ArticleCategoryBO bo, @RequestBody Page page) {
|
||||
List<ArticleCategory> 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<ArticleCategoryVO> 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<Object> remove(@PathVariable Long id) {
|
||||
return R.ok(service.removeById(id));
|
||||
}
|
||||
}
|
@ -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<IPage<ArticleVO>> page(@RequestBody ArticleBO bo, @RequestBody Page page) {
|
||||
Page<Article> pages = service.page(page, bo.toWrapper());
|
||||
return R.ok(convert.toVO(pages));
|
||||
}
|
||||
|
||||
@Tag(name = "查询列表")
|
||||
@PostMapping("/list")
|
||||
public R< List<ArticleVO>> list(@RequestBody ArticleBO bo, @RequestBody Page page) {
|
||||
List<ArticleVO> 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<ArticleVO> 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<Object> remove(@PathVariable Long id) {
|
||||
return R.ok(service.removeById(id));
|
||||
}
|
||||
|
||||
|
||||
@Tag(name = "轮播列表")
|
||||
@PostMapping("/carousel")
|
||||
public R< List<ArticleVO>> carousel(@RequestBody ArticleBO bo, @RequestBody Page page) {
|
||||
bo.setType(1);//轮播图
|
||||
List<ArticleVO> articleList = service.selectVoList( bo.toWrapper());
|
||||
return R.ok(articleList);
|
||||
}
|
||||
|
||||
}
|
@ -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<ArticleCategoryVO, ArticleCategoryBO, ArticleCategory> {
|
||||
}
|
@ -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<ArticleVO, ArticleBO, Article> {
|
||||
}
|
@ -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<Article> {
|
||||
|
||||
/**
|
||||
* 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<Article> 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);
|
||||
}
|
||||
}
|
@ -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<ArticleCategory> {
|
||||
|
||||
@TableId
|
||||
private Long id;
|
||||
private String name;
|
||||
|
||||
private String parentId;
|
||||
|
||||
private Integer sort;
|
||||
|
||||
private Integer level;
|
||||
|
||||
private String type;
|
||||
|
||||
@Override
|
||||
public LambdaQueryWrapper<ArticleCategory> 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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
@ -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<ArticleCategory, ArticleCategoryBO> {
|
||||
|
||||
}
|
@ -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<Article> {
|
||||
|
||||
ArticleVO selectVoById(Serializable id);
|
||||
List<ArticleVO> selectVoList(@Param("ew") Wrapper<Article> queryWrapper);
|
||||
Page<ArticleVO> selectVoList(IPage<ArticleVO> page, @Param("ew") Wrapper<Article> queryWrapper);
|
||||
}
|
@ -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<ArticleCategory> {
|
||||
|
||||
|
||||
}
|
@ -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<Article> {
|
||||
|
||||
|
||||
List<ArticleVO> selectVoList(Wrapper<Article> queryWrapper);
|
||||
|
||||
Page<ArticleVO> selectVoPage(Page<ArticleVO> page,Wrapper<Article>queryWrapper);
|
||||
}
|
@ -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<ArticleCategoryMapper, ArticleCategory> implements IArticleCategoryService {
|
||||
|
||||
}
|
@ -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<ArticleMapper, Article> implements IArticleService {
|
||||
|
||||
@Override
|
||||
public List<ArticleVO> selectVoList(Wrapper<Article> queryWrapper) {
|
||||
return baseMapper.selectVoList(queryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<ArticleVO> selectVoPage(Page<ArticleVO> page, Wrapper<Article> queryWrapper) {
|
||||
return baseMapper.selectVoList(page,queryWrapper);
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
|
||||
<mapper namespace="com.wzj.soopin.content.mapper.ArticleMapper">
|
||||
|
||||
|
||||
|
||||
<select id="selectVoById" resultType="com.wzj.soopin.content.domain.vo.ArticleVO">
|
||||
select a.* ,b.name as category_name from cont_article a left join cont_article_category b on a.category_id=b.id
|
||||
WHERE id = #{id}
|
||||
ORDER BY create_time DESC
|
||||
|
||||
</select>
|
||||
|
||||
<select id="selectVoList" resultType="com.wzj.soopin.content.domain.vo.ArticleVO">
|
||||
select a.*,b.name as category_name from (select * from cont_article
|
||||
${ew.customSqlSegment} ) a
|
||||
left join cont_article_category b on a.category_id=b.id
|
||||
order by a.create_time desc
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
@ -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
|
||||
|
79
script/docker/docker.txt
Normal file
79
script/docker/docker.txt
Normal file
@ -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
|
@ -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;
|
||||
# }
|
||||
#}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user