🔧 简化 notice 模块的 VO

This commit is contained in:
YunaiV 2023-12-02 20:07:50 +08:00
parent ce42bf7826
commit 27710435b2
9 changed files with 58 additions and 101 deletions

View File

@ -4,17 +4,16 @@ import cn.hutool.core.lang.Assert;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi; import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeRespVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeRespVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO;
import cn.iocoder.yudao.module.system.convert.notice.NoticeConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
import cn.iocoder.yudao.module.system.service.notice.NoticeService; import cn.iocoder.yudao.module.system.service.notice.NoticeService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -39,16 +38,16 @@ public class NoticeController {
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建通知公告") @Operation(summary = "创建通知公告")
@PreAuthorize("@ss.hasPermission('system:notice:create')") @PreAuthorize("@ss.hasPermission('system:notice:create')")
public CommonResult<Long> createNotice(@Valid @RequestBody NoticeCreateReqVO reqVO) { public CommonResult<Long> createNotice(@Valid @RequestBody NoticeSaveReqVO createReqVO) {
Long noticeId = noticeService.createNotice(reqVO); Long noticeId = noticeService.createNotice(createReqVO);
return success(noticeId); return success(noticeId);
} }
@PutMapping("/update") @PutMapping("/update")
@Operation(summary = "修改通知公告") @Operation(summary = "修改通知公告")
@PreAuthorize("@ss.hasPermission('system:notice:update')") @PreAuthorize("@ss.hasPermission('system:notice:update')")
public CommonResult<Boolean> updateNotice(@Valid @RequestBody NoticeUpdateReqVO reqVO) { public CommonResult<Boolean> updateNotice(@Valid @RequestBody NoticeSaveReqVO updateReqVO) {
noticeService.updateNotice(reqVO); noticeService.updateNotice(updateReqVO);
return success(true); return success(true);
} }
@ -64,8 +63,9 @@ public class NoticeController {
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获取通知公告列表") @Operation(summary = "获取通知公告列表")
@PreAuthorize("@ss.hasPermission('system:notice:query')") @PreAuthorize("@ss.hasPermission('system:notice:query')")
public CommonResult<PageResult<NoticeRespVO>> getNoticePage(@Validated NoticePageReqVO reqVO) { public CommonResult<PageResult<NoticeRespVO>> getNoticePage(@Validated NoticePageReqVO pageReqVO) {
return success(NoticeConvert.INSTANCE.convertPage(noticeService.getNoticePage(reqVO))); PageResult<NoticeDO> pageResult = noticeService.getNoticePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, NoticeRespVO.class));
} }
@GetMapping("/get") @GetMapping("/get")
@ -73,7 +73,8 @@ public class NoticeController {
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('system:notice:query')") @PreAuthorize("@ss.hasPermission('system:notice:query')")
public CommonResult<NoticeRespVO> getNotice(@RequestParam("id") Long id) { public CommonResult<NoticeRespVO> getNotice(@RequestParam("id") Long id) {
return success(NoticeConvert.INSTANCE.convert(noticeService.getNotice(id))); NoticeDO notice = noticeService.getNotice(id);
return success(BeanUtils.toBean(notice, NoticeRespVO.class));
} }
@PostMapping("/push") @PostMapping("/push")

View File

@ -1,11 +0,0 @@
package cn.iocoder.yudao.module.system.controller.admin.notice.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Schema(description = "管理后台 - 通知公告创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class NoticeCreateReqVO extends NoticeBaseVO {
}

View File

@ -2,18 +2,28 @@ package cn.iocoder.yudao.module.system.controller.admin.notice.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Schema(description = "管理后台 - 通知公告信息 Response VO") @Schema(description = "管理后台 - 通知公告信息 Response VO")
@Data @Data
@EqualsAndHashCode(callSuper = true) public class NoticeRespVO {
public class NoticeRespVO extends NoticeBaseVO {
@Schema(description = "通知公告序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") @Schema(description = "通知公告序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id; private Long id;
@Schema(description = "公告标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "小博主")
private String title;
@Schema(description = "公告类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "小博主")
private Integer type;
@Schema(description = "公告内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "半生编码")
private String content;
@Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer status;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
private LocalDateTime createTime; private LocalDateTime createTime;

View File

@ -7,12 +7,13 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
/** @Schema(description = "管理后台 - 通知公告创建/修改 Request VO")
* 通知公告 Base VO提供给添加修改详细的子 VO 使用
* 如果子 VO 存在差异的字段请不要添加到这里影响 Swagger 文档生成
*/
@Data @Data
public class NoticeBaseVO { public class NoticeSaveReqVO {
@Schema(description = "岗位公告编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@NotNull(message = "岗位公告编号不能为空")
private Long id;
@Schema(description = "公告标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "小博主") @Schema(description = "公告标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "小博主")
@NotBlank(message = "公告标题不能为空") @NotBlank(message = "公告标题不能为空")

View File

@ -1,18 +0,0 @@
package cn.iocoder.yudao.module.system.controller.admin.notice.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 岗位公告更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
public class NoticeUpdateReqVO extends NoticeBaseVO {
@Schema(description = "岗位公告编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@NotNull(message = "岗位公告编号不能为空")
private Long id;
}

View File

@ -1,24 +0,0 @@
package cn.iocoder.yudao.module.system.convert.notice;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeRespVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@Mapper
public interface NoticeConvert {
NoticeConvert INSTANCE = Mappers.getMapper(NoticeConvert.class);
PageResult<NoticeRespVO> convertPage(PageResult<NoticeDO> page);
NoticeRespVO convert(NoticeDO bean);
NoticeDO convert(NoticeUpdateReqVO bean);
NoticeDO convert(NoticeCreateReqVO bean);
}

View File

@ -1,9 +1,8 @@
package cn.iocoder.yudao.module.system.service.notice; package cn.iocoder.yudao.module.system.service.notice;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
/** /**
@ -12,29 +11,29 @@ import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
public interface NoticeService { public interface NoticeService {
/** /**
* 创建岗位公告公告 * 创建通知公告
* *
* @param reqVO 岗位公告公告信息 * @param createReqVO 通知公告
* @return 岗位公告公告编号 * @return 编号
*/ */
Long createNotice(NoticeCreateReqVO reqVO); Long createNotice(NoticeSaveReqVO createReqVO);
/** /**
* 更新岗位公告公告 * 更新通知公告
* *
* @param reqVO 岗位公告公告信息 * @param reqVO 通知公告
*/ */
void updateNotice(NoticeUpdateReqVO reqVO); void updateNotice(NoticeSaveReqVO reqVO);
/** /**
* 删除岗位公告公告信息 * 删除通知公告
* *
* @param id 岗位公告公告编号 * @param id 编号
*/ */
void deleteNotice(Long id); void deleteNotice(Long id);
/** /**
* 获得岗位公告公告分页列表 * 获得通知公告分页列表
* *
* @param reqVO 分页条件 * @param reqVO 分页条件
* @return 部门分页列表 * @return 部门分页列表
@ -42,10 +41,10 @@ public interface NoticeService {
PageResult<NoticeDO> getNoticePage(NoticePageReqVO reqVO); PageResult<NoticeDO> getNoticePage(NoticePageReqVO reqVO);
/** /**
* 获得岗位公告公告信息 * 获得通知公告
* *
* @param id 岗位公告公告编号 * @param id 编号
* @return 岗位公告公告信息 * @return 通知公告
*/ */
NoticeDO getNotice(Long id); NoticeDO getNotice(Long id);

View File

@ -1,10 +1,9 @@
package cn.iocoder.yudao.module.system.service.notice; package cn.iocoder.yudao.module.system.service.notice;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReqVO; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO;
import cn.iocoder.yudao.module.system.convert.notice.NoticeConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper; import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
@ -27,18 +26,18 @@ public class NoticeServiceImpl implements NoticeService {
private NoticeMapper noticeMapper; private NoticeMapper noticeMapper;
@Override @Override
public Long createNotice(NoticeCreateReqVO reqVO) { public Long createNotice(NoticeSaveReqVO createReqVO) {
NoticeDO notice = NoticeConvert.INSTANCE.convert(reqVO); NoticeDO notice = BeanUtils.toBean(createReqVO, NoticeDO.class);
noticeMapper.insert(notice); noticeMapper.insert(notice);
return notice.getId(); return notice.getId();
} }
@Override @Override
public void updateNotice(NoticeUpdateReqVO reqVO) { public void updateNotice(NoticeSaveReqVO updateReqVO) {
// 校验是否存在 // 校验是否存在
validateNoticeExists(reqVO.getId()); validateNoticeExists(updateReqVO.getId());
// 更新通知公告 // 更新通知公告
NoticeDO updateObj = NoticeConvert.INSTANCE.convert(reqVO); NoticeDO updateObj = BeanUtils.toBean(updateReqVO, NoticeDO.class);
noticeMapper.updateById(updateObj); noticeMapper.updateById(updateObj);
} }

View File

@ -3,9 +3,8 @@ package cn.iocoder.yudao.module.system.service.notice;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper; import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -72,14 +71,15 @@ class NoticeServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testCreateNotice_success() { public void testCreateNotice_success() {
// 准备参数 // 准备参数
NoticeCreateReqVO reqVO = randomPojo(NoticeCreateReqVO.class); NoticeSaveReqVO reqVO = randomPojo(NoticeSaveReqVO.class)
.setId(null); // 避免 id 被赋值
// 调用 // 调用
Long noticeId = noticeService.createNotice(reqVO); Long noticeId = noticeService.createNotice(reqVO);
// 校验插入属性是否正确 // 校验插入属性是否正确
assertNotNull(noticeId); assertNotNull(noticeId);
NoticeDO notice = noticeMapper.selectById(noticeId); NoticeDO notice = noticeMapper.selectById(noticeId);
assertPojoEquals(reqVO, notice); assertPojoEquals(reqVO, notice, "id");
} }
@Test @Test
@ -89,7 +89,7 @@ class NoticeServiceImplTest extends BaseDbUnitTest {
noticeMapper.insert(dbNoticeDO); noticeMapper.insert(dbNoticeDO);
// 准备更新参数 // 准备更新参数
NoticeUpdateReqVO reqVO = randomPojo(NoticeUpdateReqVO.class, o -> o.setId(dbNoticeDO.getId())); NoticeSaveReqVO reqVO = randomPojo(NoticeSaveReqVO.class, o -> o.setId(dbNoticeDO.getId()));
// 更新 // 更新
noticeService.updateNotice(reqVO); noticeService.updateNotice(reqVO);