diff --git a/system/src/main/java/com/storeroom/modules/system/controller/NoticeController.java b/system/src/main/java/com/storeroom/modules/system/controller/NoticeController.java index 6156eb7..297c7bc 100644 --- a/system/src/main/java/com/storeroom/modules/system/controller/NoticeController.java +++ b/system/src/main/java/com/storeroom/modules/system/controller/NoticeController.java @@ -4,6 +4,8 @@ package com.storeroom.modules.system.controller; import com.storeroom.annotaion.rest.AnonymousDeleteMapping; import com.storeroom.annotaion.rest.AnonymousGetMapping; import com.storeroom.annotaion.rest.AnonymousPostMapping; +import com.storeroom.annotaion.rest.AnonymousPutMapping; +import com.storeroom.annotation.Log; import com.storeroom.exception.BaseException; import com.storeroom.modules.system.service.NoticeService; import com.storeroom.modules.system.service.dto.NoticeDto; @@ -16,9 +18,7 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.util.ObjectUtils; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.Set; @@ -33,11 +33,11 @@ public class NoticeController { @ApiOperation("添加通知信息") - @AnonymousPostMapping("create") + @PostMapping("create") public ApiResponse create(@RequestBody NoticeDto noticeDto) { - if (!StringUtils.isEmpty(noticeDto.getId())) { - throw new BaseException("id不为空"); - } +// if (!StringUtils.isEmpty(noticeDto.getId())) { +// throw new BaseException("id不为空"); +// } if (!ObjectUtils.isEmpty(noticeDto.getDeviceInfoId())) { noticeService.createDeviceNotice(noticeDto); return ApiResponse.success(ResponseStatus.SUCCESS); @@ -64,4 +64,6 @@ public class NoticeController { noticeService.deleteByIds(ids); return ApiResponse.success(ResponseStatus.SUCCESS); } + + } diff --git a/system/src/main/java/com/storeroom/modules/system/controller/UserController.java b/system/src/main/java/com/storeroom/modules/system/controller/UserController.java index 8c7e97a..c14d19c 100644 --- a/system/src/main/java/com/storeroom/modules/system/controller/UserController.java +++ b/system/src/main/java/com/storeroom/modules/system/controller/UserController.java @@ -6,14 +6,12 @@ import com.storeroom.annotaion.rest.AnonymousGetMapping; import com.storeroom.annotation.Log; import com.storeroom.config.RsaProperties; import com.storeroom.exception.BaseException; +import com.storeroom.modules.system.service.*; +import com.storeroom.modules.system.service.dto.NoticeUserCriteria; import com.storeroom.utils.enums.ResponseStatus; import com.storeroom.modules.system.domain.Dept; import com.storeroom.modules.system.domain.User; import com.storeroom.modules.system.domain.vo.UserPassVo; -import com.storeroom.modules.system.service.DataService; -import com.storeroom.modules.system.service.DeptService; -import com.storeroom.modules.system.service.RoleService; -import com.storeroom.modules.system.service.UserService; import com.storeroom.modules.system.service.dto.RoleSmallDto; import com.storeroom.modules.system.service.dto.UserDto; import com.storeroom.modules.system.service.dto.UserQueryCriteria; @@ -53,6 +51,7 @@ public class UserController { private final DataService dataService; private final DeptService deptService; private final RoleService roleService; + private final NoticeService noticeService; @ApiOperation("导出用户数据") @@ -167,6 +166,25 @@ public class UserController { return ApiResponse.success(userService.queryAll()); } + @GetMapping("notice") + @ApiOperation("获取消息列表") + public ApiResponse findNotice(NoticeUserCriteria criteria, Pageable pageable) { + criteria.setUserId(SecurityUtils.getCurrentUserId()); + return ApiResponse.success(noticeService.queryNoticeUser(criteria, pageable)); + } + + @Log("修改消息状态") + @ApiOperation("修改阅读状态") + @PutMapping("/isread") + public ApiResponse updateReadState(@RequestBody Set ids) { + if (ObjectUtils.isEmpty(ids)) { + throw new BaseException("id不能为空"); + } + noticeService.updateNoticeUserState(ids); + return ApiResponse.success(ResponseStatus.SUCCESS); + + } + /** * 如果当前用户的角色级别低于创建用户的角色级别,则抛出权限不足的错误 diff --git a/system/src/main/java/com/storeroom/modules/system/domain/Notice.java b/system/src/main/java/com/storeroom/modules/system/domain/Notice.java index 308d51c..eb5e811 100644 --- a/system/src/main/java/com/storeroom/modules/system/domain/Notice.java +++ b/system/src/main/java/com/storeroom/modules/system/domain/Notice.java @@ -28,10 +28,6 @@ public class Notice extends BaseEntity implements Serializable { @ApiModelProperty(value = "id", hidden = true) private String id; - @Column(name = "notice_title") - @ApiModelProperty(value = "公告标题") - private String noticeTitle; - @Column(name = "notice_type") @ApiModelProperty(value = "公告类型(1通知 2公告)") private Integer noticeType; @@ -55,19 +51,16 @@ public class Notice extends BaseEntity implements Serializable { private Set noticeDevices; - - - @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Notice notice = (Notice) o; - return Objects.equals(id, notice.id) && Objects.equals(noticeTitle, notice.noticeTitle) && Objects.equals(noticeType, notice.noticeType) && Objects.equals(noticeContent, notice.noticeContent) && Objects.equals(status, notice.status); + return Objects.equals(id, notice.id) && Objects.equals(noticeType, notice.noticeType) && Objects.equals(noticeContent, notice.noticeContent) && Objects.equals(status, notice.status) && Objects.equals(pushType, notice.pushType) && Objects.equals(noticeUsers, notice.noticeUsers) && Objects.equals(noticeDevices, notice.noticeDevices); } @Override public int hashCode() { - return Objects.hash(id, noticeTitle, noticeType, noticeContent, status); + return Objects.hash(id, noticeType, noticeContent, status, pushType, noticeUsers, noticeDevices); } } diff --git a/system/src/main/java/com/storeroom/modules/system/domain/NoticeUsers.java b/system/src/main/java/com/storeroom/modules/system/domain/NoticeUsers.java index 5504ccb..fdd62e1 100644 --- a/system/src/main/java/com/storeroom/modules/system/domain/NoticeUsers.java +++ b/system/src/main/java/com/storeroom/modules/system/domain/NoticeUsers.java @@ -9,12 +9,13 @@ import lombok.Setter; import javax.persistence.*; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.Objects; @Entity @Getter @Setter @Table(name = "sys_notice_users") -public class NoticeUsers implements Serializable { +public class NoticeUsers extends BaseEntity implements Serializable { @Id @Column(name = "id") @@ -39,5 +40,16 @@ public class NoticeUsers implements Serializable { @ApiModelProperty(value = "推送人") private String pushUserName; - + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + NoticeUsers that = (NoticeUsers) o; + return Objects.equals(id, that.id) && Objects.equals(noticeId, that.noticeId) && Objects.equals(userId, that.userId) && Objects.equals(isRead, that.isRead) && Objects.equals(pushUserName, that.pushUserName); + } + + @Override + public int hashCode() { + return Objects.hash(id, noticeId, userId, isRead, pushUserName); + } } diff --git a/system/src/main/java/com/storeroom/modules/system/repository/NoticeUsersRepository.java b/system/src/main/java/com/storeroom/modules/system/repository/NoticeUsersRepository.java index 6c60a28..24ccb3e 100644 --- a/system/src/main/java/com/storeroom/modules/system/repository/NoticeUsersRepository.java +++ b/system/src/main/java/com/storeroom/modules/system/repository/NoticeUsersRepository.java @@ -4,7 +4,14 @@ import com.storeroom.modules.system.domain.NoticeUsers; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -public interface NoticeUsersRepository extends JpaRepository, JpaSpecificationExecutor { +import java.util.List; +public interface NoticeUsersRepository extends JpaRepository, JpaSpecificationExecutor { + /** + * 根据用户id 查询 + * @param id + * @return + */ + List findByUserId(Long id); } diff --git a/system/src/main/java/com/storeroom/modules/system/service/NoticeService.java b/system/src/main/java/com/storeroom/modules/system/service/NoticeService.java index c7cf5c3..d90977a 100644 --- a/system/src/main/java/com/storeroom/modules/system/service/NoticeService.java +++ b/system/src/main/java/com/storeroom/modules/system/service/NoticeService.java @@ -1,10 +1,14 @@ package com.storeroom.modules.system.service; import com.storeroom.modules.system.domain.Notice; +import com.storeroom.modules.system.domain.NoticeUsers; import com.storeroom.modules.system.service.dto.NoticeDto; import com.storeroom.modules.system.service.dto.NoticeQueryCriteria; +import com.storeroom.modules.system.service.dto.NoticeUserCriteria; +import org.quartz.JobKey; import org.springframework.data.domain.Pageable; +import java.util.List; import java.util.Set; public interface NoticeService { @@ -20,12 +24,14 @@ public interface NoticeService { /** * 创建通知消息 + * * @param notice */ void createNotice(NoticeDto notice); /** * 创建设备通知 + * * @param notice */ void createDeviceNotice(NoticeDto notice); @@ -39,23 +45,26 @@ public interface NoticeService { Object queryAll(NoticeQueryCriteria criteria, Pageable pageable); /** - * 修改 + * 批量删除 + * + * @param ids id */ - void updateNotice(Notice notice); + void deleteByIds(Set ids); /** - * 删除 + * 获取用户通知信息 * - * @param notice / + * @param id + * @return */ - void deleteNotice(Notice notice); + Object queryNoticeUser(NoticeUserCriteria criteria, Pageable pageable); /** - * 批量删除 - * - * @param ids id + * 修改阅读状态 + * @param id */ - void deleteByIds(Set ids); + void updateNoticeUserState(Set id); + } diff --git a/system/src/main/java/com/storeroom/modules/system/service/dto/NoticeQueryCriteria.java b/system/src/main/java/com/storeroom/modules/system/service/dto/NoticeQueryCriteria.java index 5f41b12..04d19ea 100644 --- a/system/src/main/java/com/storeroom/modules/system/service/dto/NoticeQueryCriteria.java +++ b/system/src/main/java/com/storeroom/modules/system/service/dto/NoticeQueryCriteria.java @@ -19,6 +19,8 @@ public class NoticeQueryCriteria implements Serializable { @Query private Integer status; + + @Query private Integer noticeType; diff --git a/system/src/main/java/com/storeroom/modules/system/service/dto/NoticeUserCriteria.java b/system/src/main/java/com/storeroom/modules/system/service/dto/NoticeUserCriteria.java new file mode 100644 index 0000000..653e3dd --- /dev/null +++ b/system/src/main/java/com/storeroom/modules/system/service/dto/NoticeUserCriteria.java @@ -0,0 +1,21 @@ +package com.storeroom.modules.system.service.dto; + +import com.storeroom.annotaion.Query; +import lombok.Data; + +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.List; + + +@Data +public class NoticeUserCriteria implements Serializable { + + + @Query + private Long userId; + + + @Query(type = Query.Type.BETWEEN) + private List createTime; +} diff --git a/system/src/main/java/com/storeroom/modules/system/service/impl/NoticeServiceImpl.java b/system/src/main/java/com/storeroom/modules/system/service/impl/NoticeServiceImpl.java index 8e9eb29..a89bf73 100644 --- a/system/src/main/java/com/storeroom/modules/system/service/impl/NoticeServiceImpl.java +++ b/system/src/main/java/com/storeroom/modules/system/service/impl/NoticeServiceImpl.java @@ -1,6 +1,7 @@ package com.storeroom.modules.system.service.impl; +import com.storeroom.exception.BaseException; import com.storeroom.modules.device.domain.DeviceInfo; import com.storeroom.modules.device.repository.DeviceInfoRepository; import com.storeroom.modules.system.domain.Notice; @@ -12,11 +13,12 @@ import com.storeroom.modules.system.repository.NoticeUsersRepository; import com.storeroom.modules.system.service.NoticeService; import com.storeroom.modules.system.service.dto.NoticeDto; import com.storeroom.modules.system.service.dto.NoticeQueryCriteria; +import com.storeroom.modules.system.service.dto.NoticeUserCriteria; import com.storeroom.utils.*; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; -import org.hibernate.validator.constraints.UniqueElements; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -41,14 +43,18 @@ public class NoticeServiceImpl implements NoticeService { @Override @Transactional(rollbackFor = Exception.class) public void createNotice(NoticeDto noticeDto) { - noticeDto.setId(NanoIdUtils.randomNanoId()); Notice noticeEntity = new Notice(); - noticeEntity.setId(noticeDto.getId()); + if (StringUtils.isEmpty(noticeDto.getId())) { + noticeDto.setId(NanoIdUtils.randomNanoId()); + noticeEntity.setId(noticeDto.getId()); + } else { + noticeEntity.setId(noticeDto.getId()); + } noticeEntity.setNoticeContent(noticeDto.getNoticeContent()); - noticeEntity.setNoticeTitle(noticeDto.getNoticeTitle()); + //noticeEntity.setNoticeTitle(noticeDto.getNoticeTitle()); noticeEntity.setStatus(false); noticeEntity.setPushType(noticeDto.getPushType()); - + noticeEntity.setNoticeType(noticeDto.getNoticeType()); Set deviceInfos = noticeDto.getUserId(); String pushUser = SecurityUtils.getCurrentUsername(); @@ -81,7 +87,7 @@ public class NoticeServiceImpl implements NoticeService { Notice noticeEntity = new Notice(); noticeEntity.setId(noticeDto.getId()); noticeEntity.setNoticeContent(noticeDto.getNoticeContent()); - noticeEntity.setNoticeTitle(noticeDto.getNoticeTitle()); + //noticeEntity.setNoticeTitle(noticeDto.getNoticeTitle()); noticeEntity.setStatus(false); noticeEntity.setPushType(noticeDto.getPushType()); Set deviceInfos = noticeDto.getDeviceInfoId(); @@ -112,20 +118,38 @@ public class NoticeServiceImpl implements NoticeService { return PageUtil.toPage(page); } - @Override - public void updateNotice(Notice notice) { + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByIds(Set ids) { + noticeRepository.deleteAllById(ids); } @Override - @Transactional(rollbackFor = Exception.class) - public void deleteNotice(Notice notice) { - noticeRepository.delete(notice); + public Object queryNoticeUser(NoticeUserCriteria criteria, Pageable pageable) { + List noticeUsersList = noticeUsersRepository.findByUserId(criteria.getUserId()); + noticeUsersList.sort(Comparator.comparing(NoticeUsers::getIsRead)); + List noticeList = new ArrayList<>(); + for (NoticeUsers noticeUsers : noticeUsersList) { + Notice notice = noticeRepository.findById(noticeUsers.getNoticeId()).orElseGet(Notice::new); + noticeList.add(notice); + } + int start = (int) pageable.getOffset(); + int end = Math.min((start + pageable.getPageSize()), noticeList.size()); + Page objectPage = new PageImpl<>(noticeList.subList(start, end), pageable, noticeList.size()); + return PageUtil.toPage(objectPage); } @Override - @Transactional(rollbackFor = Exception.class) - public void deleteByIds(Set ids) { - noticeRepository.deleteAllById(ids); + public void updateNoticeUserState(Set ids) { + for (String id : ids) { + NoticeUsers noticeUsers = noticeUsersRepository.findById(id).orElseGet(NoticeUsers::new); + if (!noticeUsers.getIsRead()) { + noticeUsers.setIsRead(true); + } + noticeUsersRepository.save(noticeUsers); + } } + + }