package cn.iocoder.yudao.module.system.controller.admin.notice; import cn.hutool.core.lang.Assert; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeImportExcelVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeImportReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeImportRespVO; 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.NoticeSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import cn.iocoder.yudao.module.system.service.notice.NoticeService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.util.Arrays; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 通知公告") @RestController @RequestMapping("/system/notice") @Validated public class NoticeController { @Resource private NoticeService noticeService; @Resource private WebSocketSenderApi webSocketSenderApi; @PostMapping("/create") @Operation(summary = "创建通知公告") @PreAuthorize("@ss.hasPermission('system:notice:create')") public CommonResult createNotice(@Valid @RequestBody NoticeSaveReqVO createReqVO) { Long noticeId = noticeService.createNotice(createReqVO); return success(noticeId); } @PutMapping("/update") @Operation(summary = "修改通知公告") @PreAuthorize("@ss.hasPermission('system:notice:update')") public CommonResult updateNotice(@Valid @RequestBody NoticeSaveReqVO updateReqVO) { noticeService.updateNotice(updateReqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除通知公告") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('system:notice:delete')") public CommonResult deleteNotice(@RequestParam("id") Long id) { noticeService.deleteNotice(id); return success(true); } @DeleteMapping("/delete-list") @Operation(summary = "批量删除通知公告") @Parameter(name = "ids", description = "编号列表", required = true) @PreAuthorize("@ss.hasPermission('system:notice:delete')") public CommonResult deleteNoticeList(@RequestParam("ids") List ids) { noticeService.deleteNoticeList(ids); return success(true); } @GetMapping("/page") @Operation(summary = "获取通知公告列表") public CommonResult> getNoticePage(@Validated NoticePageReqVO pageReqVO) { PageResult pageResult = noticeService.getNoticePage(pageReqVO); return success(BeanUtils.toBean(pageResult, NoticeRespVO.class)); } @GetMapping("/get") @Operation(summary = "获得通知公告") @Parameter(name = "id", description = "编号", required = true, example = "1024") public CommonResult getNotice(@RequestParam("id") Long id) { NoticeDO notice = noticeService.getNotice(id); return success(BeanUtils.toBean(notice, NoticeRespVO.class)); } @PostMapping("/push") @Operation(summary = "推送通知公告", description = "只发送给 websocket 连接在线的用户") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('system:notice:update')") public CommonResult push(@RequestParam("id") Long id) { NoticeDO notice = noticeService.getNotice(id); Assert.notNull(notice, "公告不能为空"); // 通过 websocket 推送给在线的用户 webSocketSenderApi.sendObject(UserTypeEnum.ADMIN.getValue(), "notice-push", notice); return success(true); } @GetMapping("/get-import-template") @Operation(summary = "获得导入通知公告模板") public void importTemplate(HttpServletResponse response) throws IOException { // 手动创建导出 demo List list = Arrays.asList( NoticeImportExcelVO.builder().title("示例公告").type(1).content("公告内容") .status(0).build() ); // 输出 ExcelUtils.write(response, "通知公告导入模板.xls", "通知公告列表", NoticeImportExcelVO.class, list); } @PostMapping("/import") @Operation(summary = "导入通知公告") @PreAuthorize("@ss.hasPermission('system:notice:import')") public CommonResult importExcel(@Valid NoticeImportReqVO importReqVO) throws Exception { List list = ExcelUtils.read(importReqVO.getFile(), NoticeImportExcelVO.class); return success(noticeService.importNoticeList(list, importReqVO)); } }