package cn.lihu.jh.module.system.controller.admin.notice; 
 | 
  
 | 
import cn.hutool.core.lang.Assert; 
 | 
import cn.lihu.jh.framework.common.enums.UserTypeEnum; 
 | 
import cn.lihu.jh.framework.common.pojo.CommonResult; 
 | 
import cn.lihu.jh.framework.common.pojo.PageResult; 
 | 
import cn.lihu.jh.framework.common.util.object.BeanUtils; 
 | 
import cn.lihu.jh.module.infra.api.websocket.WebSocketSenderApi; 
 | 
import cn.lihu.jh.module.system.controller.admin.notice.vo.NoticePageReqVO; 
 | 
import cn.lihu.jh.module.system.controller.admin.notice.vo.NoticeRespVO; 
 | 
import cn.lihu.jh.module.system.controller.admin.notice.vo.NoticeSaveReqVO; 
 | 
import cn.lihu.jh.module.system.dal.dataobject.notice.NoticeDO; 
 | 
import cn.lihu.jh.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 org.springframework.security.access.prepost.PreAuthorize; 
 | 
import org.springframework.validation.annotation.Validated; 
 | 
import org.springframework.web.bind.annotation.*; 
 | 
  
 | 
import javax.annotation.Resource; 
 | 
import javax.validation.Valid; 
 | 
  
 | 
import static cn.lihu.jh.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<Long> 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<Boolean> 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<Boolean> deleteNotice(@RequestParam("id") Long id) { 
 | 
        noticeService.deleteNotice(id); 
 | 
        return success(true); 
 | 
    } 
 | 
  
 | 
    @GetMapping("/page") 
 | 
    @Operation(summary = "获取通知公告列表") 
 | 
    @PreAuthorize("@ss.hasPermission('system:notice:query')") 
 | 
    public CommonResult<PageResult<NoticeRespVO>> getNoticePage(@Validated NoticePageReqVO pageReqVO) { 
 | 
        PageResult<NoticeDO> pageResult = noticeService.getNoticePage(pageReqVO); 
 | 
        return success(BeanUtils.toBean(pageResult, NoticeRespVO.class)); 
 | 
    } 
 | 
  
 | 
    @GetMapping("/get") 
 | 
    @Operation(summary = "获得通知公告") 
 | 
    @Parameter(name = "id", description = "编号", required = true, example = "1024") 
 | 
    @PreAuthorize("@ss.hasPermission('system:notice:query')") 
 | 
    public CommonResult<NoticeRespVO> 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<Boolean> 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); 
 | 
    } 
 | 
  
 | 
} 
 |