栏目管理

main
hehang 9 months ago
parent c32ede3682
commit f27ee2a5bf
  1. 2
      website-module-system/website-module-system-api/src/main/java/com/cjy/website/module/system/enums/ErrorCodeConstants.java
  2. 104
      website-module-system/website-module-system-biz/src/main/java/com/cjy/website/module/system/controller/admin/columninfo/ColumnInfoController.java
  3. 30
      website-module-system/website-module-system-biz/src/main/java/com/cjy/website/module/system/controller/admin/columninfo/vo/ColumnInfoPageReqVO.java
  4. 62
      website-module-system/website-module-system-biz/src/main/java/com/cjy/website/module/system/controller/admin/columninfo/vo/ColumnInfoRespIndexVO.java
  5. 45
      website-module-system/website-module-system-biz/src/main/java/com/cjy/website/module/system/controller/admin/columninfo/vo/ColumnInfoRespVO.java
  6. 46
      website-module-system/website-module-system-biz/src/main/java/com/cjy/website/module/system/controller/admin/columninfo/vo/ColumnInfoSaveReqVO.java
  7. 74
      website-module-system/website-module-system-biz/src/main/java/com/cjy/website/module/system/dal/dataobject/columninfo/ColumnInfoDO.java
  8. 29
      website-module-system/website-module-system-biz/src/main/java/com/cjy/website/module/system/dal/mysql/columninfo/ColumnInfoMapper.java
  9. 55
      website-module-system/website-module-system-biz/src/main/java/com/cjy/website/module/system/service/columninfo/ColumnInfoService.java
  10. 72
      website-module-system/website-module-system-biz/src/main/java/com/cjy/website/module/system/service/columninfo/ColumnInfoServiceImpl.java
  11. 12
      website-module-system/website-module-system-biz/src/main/resources/mapper/columninfo/ColumnInfoMapper.xml
  12. 3
      website-server/src/main/resources/application.yaml

@ -164,4 +164,6 @@ public interface ErrorCodeConstants {
// ========== 站内信发送 1-002-028-000 ==========
ErrorCode NOTIFY_SEND_TEMPLATE_PARAM_MISS = new ErrorCode(1_002_028_000, "模板参数({})缺失");
ErrorCode COLUMN_INFO_NOT_EXISTS = new ErrorCode(1001, "栏目管理不存在");
}

@ -0,0 +1,104 @@
package com.cjy.website.module.system.controller.admin.columninfo;
import com.cjy.website.module.system.controller.admin.columninfo.vo.ColumnInfoPageReqVO;
import com.cjy.website.module.system.controller.admin.columninfo.vo.ColumnInfoRespIndexVO;
import com.cjy.website.module.system.controller.admin.columninfo.vo.ColumnInfoRespVO;
import com.cjy.website.module.system.controller.admin.columninfo.vo.ColumnInfoSaveReqVO;
import com.cjy.website.module.system.dal.dataobject.columninfo.ColumnInfoDO;
import com.cjy.website.module.system.service.columninfo.ColumnInfoService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.annotation.security.PermitAll;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.cjy.website.framework.common.pojo.PageParam;
import com.cjy.website.framework.common.pojo.PageResult;
import com.cjy.website.framework.common.pojo.CommonResult;
import com.cjy.website.framework.common.util.object.BeanUtils;
import static com.cjy.website.framework.common.pojo.CommonResult.success;
import com.cjy.website.framework.excel.core.util.ExcelUtils;
import com.cjy.website.framework.apilog.core.annotation.ApiAccessLog;
import static com.cjy.website.framework.apilog.core.enums.OperateTypeEnum.*;
@Tag(name = "管理后台 - 栏目管理")
@RestController
@RequestMapping("/cjy/column-info")
@Validated
public class ColumnInfoController {
@Resource
private ColumnInfoService columnInfoService;
@PostMapping("/create")
@Operation(summary = "创建栏目管理")
@PreAuthorize("@ss.hasPermission('cjy:column-info:create')")
public CommonResult<Integer> createColumnInfo(@Valid @RequestBody ColumnInfoSaveReqVO createReqVO) {
return success(columnInfoService.createColumnInfo(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新栏目管理")
@PreAuthorize("@ss.hasPermission('cjy:column-info:update')")
public CommonResult<Boolean> updateColumnInfo(@Valid @RequestBody ColumnInfoSaveReqVO updateReqVO) {
columnInfoService.updateColumnInfo(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除栏目管理")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('cjy:column-info:delete')")
public CommonResult<Boolean> deleteColumnInfo(@RequestParam("id") Integer id) {
columnInfoService.deleteColumnInfo(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得栏目管理")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('cjy:column-info:query')")
public CommonResult<ColumnInfoRespVO> getColumnInfo(@RequestParam("id") Integer id) {
ColumnInfoDO columnInfo = columnInfoService.getColumnInfo(id);
return success(BeanUtils.toBean(columnInfo, ColumnInfoRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得栏目管理分页")
public CommonResult<PageResult<ColumnInfoRespVO>> getColumnInfoPage(ColumnInfoPageReqVO pageReqVO) {
PageResult<ColumnInfoDO> pageResult = columnInfoService.getColumnInfoPage(pageReqVO);
PageResult<ColumnInfoRespVO> columnInfoRespVOPageResult = BeanUtils.toBean(pageResult, ColumnInfoRespVO.class);
System.out.println(columnInfoRespVOPageResult);
return success(BeanUtils.toBean(pageResult, ColumnInfoRespVO.class));
}
@GetMapping("/list")
@Operation(summary = "前端查询栏目管理分页")
@PermitAll
public CommonResult<PageResult<ColumnInfoRespIndexVO>> getColumnInfoListPage(@Valid ColumnInfoPageReqVO pageReqVO) {
PageResult<ColumnInfoDO> pageResult = columnInfoService.getColumnInfoPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ColumnInfoRespIndexVO.class));
}
@GetMapping("/getDetail")
@Operation(summary = "获得栏目管理详情")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PermitAll
public CommonResult<ColumnInfoRespIndexVO> getColumnInfoIndex(@RequestParam("id") Integer id) {
ColumnInfoDO columnInfo = columnInfoService.getColumnInfo(id);
return success(BeanUtils.toBean(columnInfo, ColumnInfoRespIndexVO.class));
}
}

@ -0,0 +1,30 @@
package com.cjy.website.module.system.controller.admin.columninfo.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.cjy.website.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotEmpty;
import java.time.LocalDateTime;
import static com.cjy.website.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 栏目管理分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ColumnInfoPageReqVO extends PageParam {
@Schema(description = "模块类型", example = "2")
@NotEmpty(message = "模块类型不能为空")
private String type;
@Schema(description = "标题")
private String title;
@Schema(description = "副标题")
private String subtitle;
}

@ -0,0 +1,62 @@
package com.cjy.website.module.system.controller.admin.columninfo.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.cjy.website.framework.excel.core.annotations.DictFormat;
import com.cjy.website.framework.excel.core.convert.DictConvert;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 栏目管理 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ColumnInfoRespIndexVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15373")
@ExcelProperty("主键")
private Integer id;
@Schema(description = "模块类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty(value = "模块类型", converter = DictConvert.class)
@DictFormat("column_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String type;
@Schema(description = "资讯类型(只有动态资讯模块填写)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@DictFormat("info_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String infoType;
@Schema(description = "标题")
@ExcelProperty("标题")
private String title;
@Schema(description = "副标题")
@ExcelProperty("副标题")
private String subtitle;
@Schema(description = "跳转链接", example = "https://www.iocoder.cn")
@ExcelProperty("跳转链接")
private String url;
@Schema(description = "简介")
private String introduction;
@Schema(description = "logo")
private String logo;
@Schema(description = "图库")
private String image;
@Schema(description = "内容")
private String content;
@Schema(description = "是否推荐(0否 1是)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer recommend;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,45 @@
package com.cjy.website.module.system.controller.admin.columninfo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import com.cjy.website.framework.excel.core.annotations.DictFormat;
import com.cjy.website.framework.excel.core.convert.DictConvert;
@Schema(description = "管理后台 - 栏目管理 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ColumnInfoRespVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15373")
@ExcelProperty("主键")
private Integer id;
@Schema(description = "模块类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty(value = "模块类型", converter = DictConvert.class)
@DictFormat("column_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String type;
@Schema(description = "标题")
@ExcelProperty("标题")
private String title;
@Schema(description = "副标题")
@ExcelProperty("副标题")
private String subtitle;
@Schema(description = "跳转链接", example = "https://www.iocoder.cn")
@ExcelProperty("跳转链接")
private String url;
@Schema(description = "是否推荐(0否 1是)")
private Integer recommend;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,46 @@
package com.cjy.website.module.system.controller.admin.columninfo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 栏目管理新增/修改 Request VO")
@Data
public class ColumnInfoSaveReqVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15373")
private Integer id;
@Schema(description = "模块类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotEmpty(message = "模块类型不能为空")
private String type;
@Schema(description = "资讯类型(只有动态资讯模块填写)", example = "1")
private String infoType;
@Schema(description = "标题")
private String title;
@Schema(description = "副标题")
private String subtitle;
@Schema(description = "跳转链接", example = "https://www.iocoder.cn")
private String url;
@Schema(description = "简介")
private String introduction;
@Schema(description = "logo")
private String logo;
@Schema(description = "图库")
private String image;
@Schema(description = "内容")
private String content;
@Schema(description = "是否推荐(0否 1是)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer recommend;
}

@ -0,0 +1,74 @@
package com.cjy.website.module.system.dal.dataobject.columninfo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.cjy.website.framework.mybatis.core.dataobject.BaseDO;
/**
* 栏目管理 DO
*
* @author 芋道源码
*/
@TableName("cjy_column_info")
@KeySequence("cjy_column_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ColumnInfoDO extends BaseDO {
/**
* 主键
*/
@TableId
private Integer id;
/**
* 模块类型
*
* 枚举 {@link TODO column_type 对应的类}
*/
private String type;
/**
* 资讯类型只有动态资讯模块填写
*
* 枚举 {@link TODO info_type 对应的类}
*/
private String infoType;
/**
* 标题
*/
private String title;
/**
* 副标题
*/
private String subtitle;
/**
* 跳转链接
*/
private String url;
/**
* 简介
*/
private String introduction;
/**
* logo
*/
private String logo;
/**
* 图库
*/
private String image;
/**
* 内容
*/
private String content;
private Integer recommend;
}

@ -0,0 +1,29 @@
package com.cjy.website.module.system.dal.mysql.columninfo;
import java.util.*;
import com.cjy.website.framework.common.pojo.PageResult;
import com.cjy.website.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cjy.website.framework.mybatis.core.mapper.BaseMapperX;
import com.cjy.website.module.system.controller.admin.columninfo.vo.ColumnInfoPageReqVO;
import com.cjy.website.module.system.dal.dataobject.columninfo.ColumnInfoDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 栏目管理 Mapper
*
* @author 芋道源码
*/
@Mapper
public interface ColumnInfoMapper extends BaseMapperX<ColumnInfoDO> {
default PageResult<ColumnInfoDO> selectPage(ColumnInfoPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ColumnInfoDO>()
.eqIfPresent(ColumnInfoDO::getType, reqVO.getType())
.eqIfPresent(ColumnInfoDO::getTitle, reqVO.getTitle())
.eqIfPresent(ColumnInfoDO::getSubtitle, reqVO.getSubtitle())
.orderByDesc(ColumnInfoDO::getRecommend)
.orderByDesc(ColumnInfoDO::getCreateTime));
}
}

@ -0,0 +1,55 @@
package com.cjy.website.module.system.service.columninfo;
import javax.validation.*;
import com.cjy.website.framework.common.pojo.PageResult;
import com.cjy.website.module.system.controller.admin.columninfo.vo.ColumnInfoPageReqVO;
import com.cjy.website.module.system.controller.admin.columninfo.vo.ColumnInfoSaveReqVO;
import com.cjy.website.module.system.dal.dataobject.columninfo.ColumnInfoDO;
/**
* 栏目管理 Service 接口
*
* @author 芋道源码
*/
public interface ColumnInfoService {
/**
* 创建栏目管理
*
* @param createReqVO 创建信息
* @return 编号
*/
Integer createColumnInfo(@Valid ColumnInfoSaveReqVO createReqVO);
/**
* 更新栏目管理
*
* @param updateReqVO 更新信息
*/
void updateColumnInfo(@Valid ColumnInfoSaveReqVO updateReqVO);
/**
* 删除栏目管理
*
* @param id 编号
*/
void deleteColumnInfo(Integer id);
/**
* 获得栏目管理
*
* @param id 编号
* @return 栏目管理
*/
ColumnInfoDO getColumnInfo(Integer id);
/**
* 获得栏目管理分页
*
* @param pageReqVO 分页查询
* @return 栏目管理分页
*/
PageResult<ColumnInfoDO> getColumnInfoPage(ColumnInfoPageReqVO pageReqVO);
}

@ -0,0 +1,72 @@
package com.cjy.website.module.system.service.columninfo;
import com.cjy.website.module.system.controller.admin.columninfo.vo.ColumnInfoPageReqVO;
import com.cjy.website.module.system.controller.admin.columninfo.vo.ColumnInfoSaveReqVO;
import com.cjy.website.module.system.dal.dataobject.columninfo.ColumnInfoDO;
import com.cjy.website.module.system.dal.mysql.columninfo.ColumnInfoMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import com.cjy.website.framework.common.pojo.PageResult;
import com.cjy.website.framework.common.util.object.BeanUtils;
import static com.cjy.website.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cjy.website.module.system.enums.ErrorCodeConstants.COLUMN_INFO_NOT_EXISTS;
/**
* 栏目管理 Service 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class ColumnInfoServiceImpl implements ColumnInfoService {
@Resource
private ColumnInfoMapper columnInfoMapper;
@Override
public Integer createColumnInfo(ColumnInfoSaveReqVO createReqVO) {
// 插入
ColumnInfoDO columnInfo = BeanUtils.toBean(createReqVO, ColumnInfoDO.class);
columnInfoMapper.insert(columnInfo);
// 返回
return columnInfo.getId();
}
@Override
public void updateColumnInfo(ColumnInfoSaveReqVO updateReqVO) {
// 校验存在
validateColumnInfoExists(updateReqVO.getId());
// 更新
ColumnInfoDO updateObj = BeanUtils.toBean(updateReqVO, ColumnInfoDO.class);
columnInfoMapper.updateById(updateObj);
}
@Override
public void deleteColumnInfo(Integer id) {
// 校验存在
validateColumnInfoExists(id);
// 删除
columnInfoMapper.deleteById(id);
}
private void validateColumnInfoExists(Integer id) {
if (columnInfoMapper.selectById(id) == null) {
throw exception(COLUMN_INFO_NOT_EXISTS);
}
}
@Override
public ColumnInfoDO getColumnInfo(Integer id) {
return columnInfoMapper.selectById(id);
}
@Override
public PageResult<ColumnInfoDO> getColumnInfoPage(ColumnInfoPageReqVO pageReqVO) {
return columnInfoMapper.selectPage(pageReqVO);
}
}

@ -0,0 +1,12 @@
<?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.cjy.website.module.system.dal.mysql.columninfo.ColumnInfoMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -221,6 +221,7 @@ website:
security:
permit-all_urls:
- /admin-api/mp/open/** # 微信公众号开放平台,微信回调接口,不需要登录
- /admin-api/infra/file/** # 微信公众号开放平台,微信回调接口,不需要登录
websocket:
enable: true # websocket的开关
path: /infra/ws # 路径
@ -248,7 +249,7 @@ website:
front-type: 20 # 前端模版的类型,参见 CodegenFrontTypeEnum 枚举类
unit-test-enable: false # 是否生成单元测试
tenant: # 多租户相关配置项
enable: true
enable: false
ignore-urls:
- /admin-api/system/tenant/get-id-by-name # 基于名字获取租户,不许带租户编号
- /admin-api/system/tenant/get-by-website # 基于域名获取租户,不许带租户编号

Loading…
Cancel
Save