144 lines
4.5 KiB
Java
144 lines
4.5 KiB
Java
|
|
package com.boot.security.server.controller;
|
||
|
|
|
||
|
|
import java.util.List;
|
||
|
|
|
||
|
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
||
|
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
||
|
|
import org.springframework.web.bind.annotation.PathVariable;
|
||
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
||
|
|
import org.springframework.web.bind.annotation.PutMapping;
|
||
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
||
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||
|
|
import org.springframework.web.bind.annotation.RestController;
|
||
|
|
|
||
|
|
import com.zw.admin.server.annotation.LogAnnotation;
|
||
|
|
import com.zw.admin.server.dao.NoticeDao;
|
||
|
|
import com.zw.admin.server.dto.NoticeReadVO;
|
||
|
|
import com.zw.admin.server.dto.NoticeVO;
|
||
|
|
import com.zw.admin.server.model.Notice;
|
||
|
|
import com.zw.admin.server.model.Notice.Status;
|
||
|
|
import com.zw.admin.server.model.User;
|
||
|
|
import com.zw.admin.server.page.table.PageTableHandler;
|
||
|
|
import com.zw.admin.server.page.table.PageTableHandler.CountHandler;
|
||
|
|
import com.zw.admin.server.page.table.PageTableHandler.ListHandler;
|
||
|
|
import com.zw.admin.server.page.table.PageTableRequest;
|
||
|
|
import com.zw.admin.server.page.table.PageTableResponse;
|
||
|
|
import com.zw.admin.server.utils.UserUtil;
|
||
|
|
|
||
|
|
import io.swagger.annotations.Api;
|
||
|
|
import io.swagger.annotations.ApiOperation;
|
||
|
|
|
||
|
|
@Api(tags = "公告")
|
||
|
|
@RestController
|
||
|
|
@RequestMapping("/notices")
|
||
|
|
public class NoticeController {
|
||
|
|
|
||
|
|
@Autowired
|
||
|
|
private NoticeDao noticeDao;
|
||
|
|
|
||
|
|
@LogAnnotation
|
||
|
|
@PostMapping
|
||
|
|
@ApiOperation(value = "保存公告")
|
||
|
|
@RequiresPermissions("notice:add")
|
||
|
|
public Notice saveNotice(@RequestBody Notice notice) {
|
||
|
|
noticeDao.save(notice);
|
||
|
|
|
||
|
|
return notice;
|
||
|
|
}
|
||
|
|
|
||
|
|
@GetMapping("/{id}")
|
||
|
|
@ApiOperation(value = "根据id获取公告")
|
||
|
|
@RequiresPermissions("notice:query")
|
||
|
|
public Notice get(@PathVariable Long id) {
|
||
|
|
return noticeDao.getById(id);
|
||
|
|
}
|
||
|
|
|
||
|
|
@GetMapping(params = "id")
|
||
|
|
public NoticeVO readNotice(Long id) {
|
||
|
|
NoticeVO vo = new NoticeVO();
|
||
|
|
|
||
|
|
Notice notice = noticeDao.getById(id);
|
||
|
|
if (notice == null || notice.getStatus() == Status.DRAFT) {
|
||
|
|
return vo;
|
||
|
|
}
|
||
|
|
vo.setNotice(notice);
|
||
|
|
|
||
|
|
noticeDao.saveReadRecord(notice.getId(), UserUtil.getCurrentUser().getId());
|
||
|
|
|
||
|
|
List<User> users = noticeDao.listReadUsers(id);
|
||
|
|
vo.setUsers(users);
|
||
|
|
|
||
|
|
return vo;
|
||
|
|
}
|
||
|
|
|
||
|
|
@LogAnnotation
|
||
|
|
@PutMapping
|
||
|
|
@ApiOperation(value = "修改公告")
|
||
|
|
@RequiresPermissions("notice:add")
|
||
|
|
public Notice updateNotice(@RequestBody Notice notice) {
|
||
|
|
Notice no = noticeDao.getById(notice.getId());
|
||
|
|
if (no.getStatus() == Status.PUBLISH) {
|
||
|
|
throw new IllegalArgumentException("发布状态的不能修改");
|
||
|
|
}
|
||
|
|
noticeDao.update(notice);
|
||
|
|
|
||
|
|
return notice;
|
||
|
|
}
|
||
|
|
|
||
|
|
@GetMapping
|
||
|
|
@ApiOperation(value = "公告管理列表")
|
||
|
|
@RequiresPermissions("notice:query")
|
||
|
|
public PageTableResponse<Notice> listNotice(PageTableRequest request) {
|
||
|
|
return PageTableHandler.<Notice> builder().countHandler(new CountHandler() {
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public int count(PageTableRequest request) {
|
||
|
|
return noticeDao.count(request.getParams());
|
||
|
|
}
|
||
|
|
}).listHandler(new ListHandler<Notice>() {
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public List<Notice> list(PageTableRequest request) {
|
||
|
|
return noticeDao.list(request.getParams(), request.getOffset(), request.getLimit());
|
||
|
|
}
|
||
|
|
}).build().handle(request);
|
||
|
|
}
|
||
|
|
|
||
|
|
@LogAnnotation
|
||
|
|
@DeleteMapping("/{id}")
|
||
|
|
@ApiOperation(value = "删除公告")
|
||
|
|
@RequiresPermissions(value = { "notice:del" })
|
||
|
|
public void delete(@PathVariable Long id) {
|
||
|
|
noticeDao.delete(id);
|
||
|
|
}
|
||
|
|
|
||
|
|
@ApiOperation(value = "未读公告数")
|
||
|
|
@GetMapping("/count-unread")
|
||
|
|
public Integer countUnread() {
|
||
|
|
User user = UserUtil.getCurrentUser();
|
||
|
|
return noticeDao.countUnread(user.getId());
|
||
|
|
}
|
||
|
|
|
||
|
|
@GetMapping("/published")
|
||
|
|
@ApiOperation(value = "公告列表")
|
||
|
|
public PageTableResponse<NoticeReadVO> listNoticeReadVO(PageTableRequest request) {
|
||
|
|
request.getParams().put("userId", UserUtil.getCurrentUser().getId());
|
||
|
|
|
||
|
|
return PageTableHandler.<NoticeReadVO> builder().countHandler(new CountHandler() {
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public int count(PageTableRequest request) {
|
||
|
|
return noticeDao.countNotice(request.getParams());
|
||
|
|
}
|
||
|
|
}).listHandler(new ListHandler<NoticeReadVO>() {
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public List<NoticeReadVO> list(PageTableRequest request) {
|
||
|
|
return noticeDao.listNotice(request.getParams(), request.getOffset(), request.getLimit());
|
||
|
|
}
|
||
|
|
}).build().handle(request);
|
||
|
|
}
|
||
|
|
}
|