package cn.iocoder.yudao.module.wxcp.controller.admin.notice; 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.module.wxcp.controller.admin.notice.vo.WxCpNoticePageReqVO; import cn.iocoder.yudao.module.wxcp.controller.admin.notice.vo.WxCpNoticeRespVO; import cn.iocoder.yudao.module.wxcp.controller.admin.notice.vo.WxCpNoticeSaveReqVO; import cn.iocoder.yudao.module.wxcp.controller.admin.vo.WxCpPushReqVO; import cn.iocoder.yudao.module.wxcp.controller.admin.vo.WxCpPushResultVO; import cn.iocoder.yudao.module.wxcp.dal.dataobject.notice.WxCpNoticeDO; import cn.iocoder.yudao.module.wxcp.enums.activity.WxCpPushScopeEnum; import cn.iocoder.yudao.module.wxcp.enums.notice.WxCpNoticeStatusEnum; import cn.iocoder.yudao.module.wxcp.service.notice.WxCpNoticeService; 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.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; /** * 管理后台 - 企业微信通知 * * @author 超级管理员 */ @Tag(name = "管理后台 - 企业微信通知") @RestController @RequestMapping("/wxcp/notice") @Validated public class WxCpNoticeController { @Resource private WxCpNoticeService noticeService; @PostMapping("/create") @Operation(summary = "创建通知") @PreAuthorize("@ss.hasPermission('wxcp:notice:create')") public CommonResult createNotice(@Valid @RequestBody WxCpNoticeSaveReqVO createReqVO) { return success(noticeService.createNotice(createReqVO)); } @PutMapping("/update") @Operation(summary = "修改通知") @PreAuthorize("@ss.hasPermission('wxcp:notice:update')") public CommonResult updateNotice(@Valid @RequestBody WxCpNoticeSaveReqVO updateReqVO) { noticeService.updateNotice(updateReqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除通知") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('wxcp:notice:delete')") public CommonResult deleteNotice(@RequestParam("id") Long id) { noticeService.deleteNotice(id); return success(true); } @GetMapping("/get") @Operation(summary = "获得通知") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('wxcp:notice:query')") public CommonResult getNotice(@RequestParam("id") Long id) { WxCpNoticeDO notice = noticeService.getNotice(id); return success(buildRespVO(notice)); } @GetMapping("/page") @Operation(summary = "获得通知分页") @PreAuthorize("@ss.hasPermission('wxcp:notice:query')") public CommonResult> getNoticePage(@Valid WxCpNoticePageReqVO pageReqVO) { PageResult pageResult = noticeService.getNoticePage(pageReqVO); return success(BeanUtils.toBean(pageResult, WxCpNoticeRespVO.class, this::fillNames)); } @PutMapping("/publish") @Operation(summary = "发布通知") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('wxcp:notice:update')") public CommonResult publishNotice(@RequestParam("id") Long id) { noticeService.publishNotice(id); return success(true); } @PutMapping("/revoke") @Operation(summary = "撤回通知") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('wxcp:notice:update')") public CommonResult revokeNotice(@RequestParam("id") Long id) { noticeService.revokeNotice(id); return success(true); } @PostMapping("/push") @Operation(summary = "推送通知给企业微信成员", description = "支持覆盖推送范围与目标;不传则沿用通知上已配置的值") @PreAuthorize("@ss.hasPermission('wxcp:notice:push')") public CommonResult pushNotice(@Valid @RequestBody WxCpPushReqVO pushReqVO) { return success(noticeService.pushNotice(pushReqVO)); } // ==================== 转换辅助 ==================== private WxCpNoticeRespVO buildRespVO(WxCpNoticeDO notice) { if (notice == null) { return null; } WxCpNoticeRespVO vo = BeanUtils.toBean(notice, WxCpNoticeRespVO.class); fillNames(vo); return vo; } private void fillNames(WxCpNoticeRespVO vo) { WxCpNoticeStatusEnum status = WxCpNoticeStatusEnum.valueOf(vo.getStatus()); vo.setStatusName(status != null ? status.getName() : null); WxCpPushScopeEnum scope = WxCpPushScopeEnum.valueOf(vo.getPushScope()); vo.setPushScopeName(scope != null ? scope.getName() : null); } }