Browse Source

消息列表

master
刘力 3 years ago
parent
commit
5ff0e053ca
  1. 16
      system/src/main/java/com/storeroom/modules/system/controller/NoticeController.java
  2. 26
      system/src/main/java/com/storeroom/modules/system/controller/UserController.java
  3. 11
      system/src/main/java/com/storeroom/modules/system/domain/Notice.java
  4. 16
      system/src/main/java/com/storeroom/modules/system/domain/NoticeUsers.java
  5. 9
      system/src/main/java/com/storeroom/modules/system/repository/NoticeUsersRepository.java
  6. 27
      system/src/main/java/com/storeroom/modules/system/service/NoticeService.java
  7. 2
      system/src/main/java/com/storeroom/modules/system/service/dto/NoticeQueryCriteria.java
  8. 21
      system/src/main/java/com/storeroom/modules/system/service/dto/NoticeUserCriteria.java
  9. 52
      system/src/main/java/com/storeroom/modules/system/service/impl/NoticeServiceImpl.java

16
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<Object> 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);
}
}

26
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<Object> findNotice(NoticeUserCriteria criteria, Pageable pageable) {
criteria.setUserId(SecurityUtils.getCurrentUserId());
return ApiResponse.success(noticeService.queryNoticeUser(criteria, pageable));
}
@Log("修改消息状态")
@ApiOperation("修改阅读状态")
@PutMapping("/isread")
public ApiResponse<Object> updateReadState(@RequestBody Set<String> ids) {
if (ObjectUtils.isEmpty(ids)) {
throw new BaseException("id不能为空");
}
noticeService.updateNoticeUserState(ids);
return ApiResponse.success(ResponseStatus.SUCCESS);
}
/**
* 如果当前用户的角色级别低于创建用户的角色级别则抛出权限不足的错误

11
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> 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);
}
}

16
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);
}
}

9
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<NoticeUsers, String>, JpaSpecificationExecutor<NoticeUsers> {
import java.util.List;
public interface NoticeUsersRepository extends JpaRepository<NoticeUsers, String>, JpaSpecificationExecutor<NoticeUsers> {
/**
* 根据用户id 查询
* @param id
* @return
*/
List<NoticeUsers> findByUserId(Long id);
}

27
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<String> ids);
/**
* 删除
* 获取用户通知信息
*
* @param notice /
* @param id
* @return
*/
void deleteNotice(Notice notice);
Object queryNoticeUser(NoticeUserCriteria criteria, Pageable pageable);
/**
* 批量删除
*
* @param ids id
* 修改阅读状态
* @param id
*/
void deleteByIds(Set<String> ids);
void updateNoticeUserState(Set<String> id);
}

2
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;

21
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<Timestamp> createTime;
}

52
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<Long> 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<String> 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<String> 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<NoticeUsers> noticeUsersList = noticeUsersRepository.findByUserId(criteria.getUserId());
noticeUsersList.sort(Comparator.comparing(NoticeUsers::getIsRead));
List<Notice> 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<Notice> objectPage = new PageImpl<>(noticeList.subList(start, end), pageable, noticeList.size());
return PageUtil.toPage(objectPage);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteByIds(Set<String> ids) {
noticeRepository.deleteAllById(ids);
public void updateNoticeUserState(Set<String> ids) {
for (String id : ids) {
NoticeUsers noticeUsers = noticeUsersRepository.findById(id).orElseGet(NoticeUsers::new);
if (!noticeUsers.getIsRead()) {
noticeUsers.setIsRead(true);
}
noticeUsersRepository.save(noticeUsers);
}
}
}
Loading…
Cancel
Save