refactor: 优化消息获取
This commit is contained in:
parent
7b265657b6
commit
46f82370c4
|
@ -3,10 +3,8 @@ package cn.bunny.common.generator.generator;
|
|||
import cn.bunny.common.generator.entity.BaseField;
|
||||
import cn.bunny.common.generator.entity.BaseResultMap;
|
||||
import cn.bunny.common.generator.utils.GeneratorCodeUtils;
|
||||
import cn.bunny.dao.dto.system.message.MessageDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageUpdateDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageReceivedDto;
|
||||
import cn.bunny.dao.entity.system.Message;
|
||||
import cn.bunny.dao.vo.system.message.MessageVo;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.google.common.base.CaseFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
@ -51,10 +49,10 @@ public class WebGeneratorCode {
|
|||
|
||||
public static void main(String[] args) throws Exception {
|
||||
Class<?> originalClass = Message.class;
|
||||
Class<?> dtoClass = MessageDto.class;
|
||||
Class<?> addDtoClass = MessageDto.class;
|
||||
Class<?> updateDtoClass = MessageUpdateDto.class;
|
||||
Class<?> voClass = MessageVo.class;
|
||||
Class<?> dtoClass = MessageReceivedDto.class;
|
||||
Class<?> addDtoClass = MessageReceivedDto.class;
|
||||
// Class<?> updateDtoClass = MessageUpdateDto.class;
|
||||
// Class<?> voClass = MessageVo.class;
|
||||
|
||||
// 设置velocity资源加载器
|
||||
Properties prop = new Properties();
|
||||
|
|
|
@ -10,7 +10,7 @@ import lombok.NoArgsConstructor;
|
|||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@Schema(name = "MessageDto对象", title = "系统消息", description = "系统消息")
|
||||
@Schema(name = "MessageDto对象", title = "消息查询", description = "消息查询")
|
||||
public class MessageDto {
|
||||
|
||||
@Schema(name = "title", title = "消息标题")
|
||||
|
@ -22,19 +22,13 @@ public class MessageDto {
|
|||
@Schema(name = "messageType", title = "消息类型")
|
||||
private String messageType;
|
||||
|
||||
@Schema(name = "content", title = "消息内容")
|
||||
private String content;
|
||||
|
||||
@Schema(name = "editorType", title = "编辑器类型")
|
||||
private String editorType;
|
||||
|
||||
@Schema(name = "status", title = "0:未读 1:已读")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(name = "level", title = "消息等级")
|
||||
private String level;
|
||||
|
||||
@Schema(name = "extra", title = "消息等级详情")
|
||||
private String extra;
|
||||
|
||||
@Schema(name = "editorType", title = "编辑器类型")
|
||||
private String editorType;
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package cn.bunny.dao.dto.system.message;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@Schema(name = "MessageReceivedDto对象", title = "用户消息查询", description = "用户消息查询")
|
||||
public class MessageReceivedDto {
|
||||
|
||||
@Schema(name = "title", title = "消息标题")
|
||||
private String title;
|
||||
|
||||
@Schema(name = "sendNickname", title = "发送人用户昵称")
|
||||
private String sendNickname;
|
||||
|
||||
@Schema(name = "messageType", title = "消息类型")
|
||||
private String messageType;
|
||||
|
||||
@Schema(name = "level", title = "消息等级")
|
||||
private String level;
|
||||
|
||||
@Schema(name = "extra", title = "消息等级详情")
|
||||
private String extra;
|
||||
|
||||
@Schema(name = "status", title = "0:未读 1:已读")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(name = "editorType", title = "编辑器类型")
|
||||
private String editorType;
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package cn.bunny.dao.dto.system.message;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@Schema(name = "MessageReceivedDto对象", title = "用户消息查询", description = "用户消息查询")
|
||||
public class MessageReceivedUpdateDto {
|
||||
|
||||
@Schema(name = "ids", title = "消息接受id")
|
||||
private List<Long> ids;
|
||||
|
||||
@Schema(name = "status", title = "0:未读 1:已读")
|
||||
private Boolean status;
|
||||
|
||||
}
|
|
@ -58,9 +58,6 @@ public class MessageUpdateDto {
|
|||
@NotNull(message = "编辑器类型 不能为空")
|
||||
private String editorType;
|
||||
|
||||
@Schema(name = "status", title = "0:未读 1:已读")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(name = "level", title = "消息等级")
|
||||
private String level;
|
||||
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
package cn.bunny.dao.vo.system.message;
|
||||
|
||||
import cn.bunny.dao.common.vo.BaseUserVo;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@Schema(name = "MessageDetailVo对象", title = "系统消息详情返回内容", description = "系统消息详情返回内容")
|
||||
public class MessageDetailVo extends BaseUserVo {
|
||||
|
||||
@Schema(name = "title", title = "消息标题")
|
||||
private String title;
|
||||
|
||||
@Schema(name = "sendUserId", title = "发送人用户ID")
|
||||
private Long sendUserId;
|
||||
|
||||
@Schema(name = "messageType", title = "sys:系统消息,user用户消息")
|
||||
private String messageType;
|
||||
|
||||
@Schema(name = "cover", title = "封面")
|
||||
private String cover;
|
||||
|
||||
@Schema(name = "summary", title = "消息简介")
|
||||
private String summary;
|
||||
|
||||
@Schema(name = "content", title = "消息内容")
|
||||
private String content;
|
||||
|
||||
@Schema(name = "editorType", title = "编辑器类型")
|
||||
private String editorType;
|
||||
|
||||
@Schema(name = "level", title = "消息等级")
|
||||
private String level;
|
||||
|
||||
@Schema(name = "extra", title = "消息等级详情")
|
||||
private String extra;
|
||||
|
||||
@Schema(name = "sendNickname", title = "发送人昵称")
|
||||
private String sendNickname;
|
||||
|
||||
}
|
|
@ -26,12 +26,16 @@ public class MessageReceivedWithMessageVo extends BaseUserVo {
|
|||
private Long messageId;
|
||||
|
||||
@Schema(name = "receivedUserId", title = "接收人用户ID")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING)
|
||||
@JSONField(serializeUsing = ToStringSerializer.class)
|
||||
private String receivedUserId;
|
||||
|
||||
@Schema(name = "receivedUserNickname", title = "接收人用户昵称")
|
||||
private String receivedUserNickname;
|
||||
|
||||
@Schema(name = "messageTypeId", title = "消息类型id")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING)
|
||||
@JSONField(serializeUsing = ToStringSerializer.class)
|
||||
private String messageTypeId;
|
||||
|
||||
@Schema(name = "messageType", title = "消息类型")
|
||||
|
|
|
@ -3,11 +3,12 @@ package cn.bunny.dao.vo.system.message;
|
|||
import cn.bunny.dao.common.vo.BaseUserVo;
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
|
@ -16,11 +17,13 @@ import lombok.*;
|
|||
@Schema(name = "MessageVo对象", title = "系统消息返回内容", description = "系统消息返回内容")
|
||||
public class MessageVo extends BaseUserVo {
|
||||
|
||||
@Schema(name = "messageReceivedId", title = "用户消息表id")
|
||||
@JsonProperty("id")
|
||||
@Schema(name = "receivedUserId", title = "接收人用户ID")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING)
|
||||
@JSONField(serializeUsing = ToStringSerializer.class)
|
||||
private Long messageReceivedId;
|
||||
private List<String> receivedUserId;
|
||||
|
||||
@Schema(name = "receivedUserNickname", title = "接收人用户昵称")
|
||||
private List<String> receivedUserNickname;
|
||||
|
||||
@Schema(name = "title", title = "消息标题")
|
||||
private String title;
|
||||
|
@ -33,16 +36,12 @@ public class MessageVo extends BaseUserVo {
|
|||
@Schema(name = "sendNickname", title = "发送人昵称")
|
||||
private String sendNickname;
|
||||
|
||||
@Schema(name = "receivedUserId", title = "接收人用户ID")
|
||||
private String receivedUserId;
|
||||
|
||||
@Schema(name = "receivedUserNickname", title = "接收人用户昵称")
|
||||
private String receivedUserNickname;
|
||||
|
||||
@Schema(name = "messageTypeId", title = "消息类型id")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING)
|
||||
@JSONField(serializeUsing = ToStringSerializer.class)
|
||||
private String messageTypeId;
|
||||
|
||||
@Schema(name = "messageType", title = "消息类型")
|
||||
@Schema(name = "messageType", title = "sys:系统消息,user用户消息")
|
||||
private String messageType;
|
||||
|
||||
@Schema(name = "cover", title = "封面")
|
||||
|
@ -57,9 +56,6 @@ public class MessageVo extends BaseUserVo {
|
|||
@Schema(name = "editorType", title = "编辑器类型")
|
||||
private String editorType;
|
||||
|
||||
@Schema(name = "status", title = "0:未读 1:已读")
|
||||
private Boolean status;
|
||||
|
||||
@Schema(name = "level", title = "消息等级")
|
||||
private String level;
|
||||
|
||||
|
@ -68,3 +64,5 @@ public class MessageVo extends BaseUserVo {
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,17 +1,21 @@
|
|||
package cn.bunny.services.controller;
|
||||
|
||||
import cn.bunny.dao.dto.system.message.MessageUserDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageAddDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageUpdateDto;
|
||||
import cn.bunny.dao.entity.system.Message;
|
||||
import cn.bunny.dao.pojo.result.PageResult;
|
||||
import cn.bunny.dao.pojo.result.Result;
|
||||
import cn.bunny.dao.pojo.result.ResultCodeEnum;
|
||||
import cn.bunny.dao.vo.system.message.MessageUserVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageDetailVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageVo;
|
||||
import cn.bunny.services.service.MessageService;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
@ -34,37 +38,51 @@ public class MessageController {
|
|||
@Autowired
|
||||
private MessageService messageService;
|
||||
|
||||
@Operation(summary = "分页查询用户消息", description = "分页查询用户消息")
|
||||
@GetMapping("noManage/getUserMessageList/{page}/{limit}")
|
||||
public Mono<Result<PageResult<MessageUserVo>>> getUserMessageList(
|
||||
@Operation(summary = "分页查询发送消息", description = "分页查询发送消息")
|
||||
@GetMapping("getMessageList/{page}/{limit}")
|
||||
public Mono<Result<PageResult<MessageVo>>> getMessageList(
|
||||
@Parameter(name = "page", description = "当前页", required = true)
|
||||
@PathVariable("page") Integer page,
|
||||
@Parameter(name = "limit", description = "每页记录数", required = true)
|
||||
@PathVariable("limit") Integer limit,
|
||||
MessageUserDto dto) {
|
||||
MessageDto dto) {
|
||||
Page<Message> pageParams = new Page<>(page, limit);
|
||||
PageResult<MessageUserVo> pageResult = messageService.getUserMessageList(pageParams, dto);
|
||||
PageResult<MessageVo> pageResult = messageService.getMessageList(pageParams, dto);
|
||||
return Mono.just(Result.success(pageResult));
|
||||
}
|
||||
|
||||
@Operation(summary = "根据消息id查询消息详情", description = "根据消息id查询消息详情")
|
||||
@GetMapping("noManage/getMessageDetailById")
|
||||
public Mono<Result<MessageVo>> getMessageDetailById(Long id) {
|
||||
MessageVo vo = messageService.getMessageDetailById(id);
|
||||
public Mono<Result<MessageDetailVo>> getMessageDetailById(Long id) {
|
||||
MessageDetailVo vo = messageService.getMessageDetailById(id);
|
||||
return Mono.just(Result.success(vo));
|
||||
}
|
||||
|
||||
@Operation(summary = "根据消息id获取接收人信息", description = "根据消息id获取接收人信息")
|
||||
@GetMapping("noManage/getReceivedUserinfoByMessageId")
|
||||
public Mono<Result<List<MessageReceivedWithUserVo>>> getReceivedUserinfoByMessageId(Long messageId) {
|
||||
List<MessageReceivedWithUserVo> voList = messageService.getReceivedUserinfoByMessageId(messageId);
|
||||
return Mono.just(Result.success(voList));
|
||||
}
|
||||
|
||||
@Operation(summary = "添加系统消息", description = "添加系统消息")
|
||||
@PostMapping("addMessage")
|
||||
public Mono<Result<String>> addMessage(@Valid @RequestBody MessageAddDto dto) {
|
||||
messageService.addMessage(dto);
|
||||
return Mono.just(Result.success(ResultCodeEnum.ADD_SUCCESS));
|
||||
}
|
||||
|
||||
@Operation(summary = "更新系统消息", description = "更新系统消息")
|
||||
@PutMapping("updateMessage")
|
||||
public Mono<Result<String>> updateMessage(@Valid @RequestBody MessageUpdateDto dto) {
|
||||
messageService.updateMessage(dto);
|
||||
return Mono.just(Result.success(ResultCodeEnum.UPDATE_SUCCESS));
|
||||
}
|
||||
|
||||
@Operation(summary = "删除系统消息", description = "删除系统消息")
|
||||
@DeleteMapping("deleteMessage")
|
||||
public Mono<Result<String>> deleteMessage(@RequestBody List<Long> ids) {
|
||||
messageService.deleteMessage(ids);
|
||||
return Mono.just(Result.success(ResultCodeEnum.DELETE_SUCCESS));
|
||||
}
|
||||
|
||||
@Operation(summary = "用户删除消息", description = "用户删除消息")
|
||||
@DeleteMapping("noManage/deleteUserMessageByIds")
|
||||
public Mono<Result<String>> deleteUserMessageByIds(@RequestBody List<Long> ids) {
|
||||
messageService.deleteUserMessageByIds(ids);
|
||||
return Mono.just(Result.success(ResultCodeEnum.DELETE_SUCCESS));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
package cn.bunny.services.controller;
|
||||
|
||||
import cn.bunny.dao.dto.system.message.MessageAddDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageUpdateDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageReceivedDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageReceivedUpdateDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageUserDto;
|
||||
import cn.bunny.dao.entity.system.Message;
|
||||
import cn.bunny.dao.pojo.result.PageResult;
|
||||
import cn.bunny.dao.pojo.result.Result;
|
||||
import cn.bunny.dao.pojo.result.ResultCodeEnum;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageUserVo;
|
||||
import cn.bunny.services.service.MessageReceivedService;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
@ -44,16 +44,16 @@ public class MessageReceivedController {
|
|||
@PathVariable("page") Integer page,
|
||||
@Parameter(name = "limit", description = "每页记录数", required = true)
|
||||
@PathVariable("limit") Integer limit,
|
||||
MessageDto dto) {
|
||||
MessageReceivedDto dto) {
|
||||
Page<Message> pageParams = new Page<>(page, limit);
|
||||
PageResult<MessageReceivedWithMessageVo> pageResult = messageReceivedService.getMessageReceivedList(pageParams, dto);
|
||||
return Mono.just(Result.success(pageResult));
|
||||
}
|
||||
|
||||
@Operation(summary = "管理员将用户接受消息标为已读", description = "管理员将用户接受消息标为已读")
|
||||
@PutMapping("markMessageReceivedAsRead")
|
||||
public Mono<Result<String>> markMessageReceivedAsRead(@RequestBody List<Long> ids) {
|
||||
messageReceivedService.markMessageReceivedAsRead(ids);
|
||||
@PutMapping("updateMarkMessageReceived")
|
||||
public Mono<Result<String>> updateMarkMessageReceived(@Valid @RequestBody MessageReceivedUpdateDto dto) {
|
||||
messageReceivedService.updateMarkMessageReceived(dto);
|
||||
return Mono.just(Result.success());
|
||||
}
|
||||
|
||||
|
@ -64,32 +64,30 @@ public class MessageReceivedController {
|
|||
return Mono.just(Result.success(ResultCodeEnum.DELETE_SUCCESS));
|
||||
}
|
||||
|
||||
@Operation(summary = "根据消息id获取接收人信息", description = "根据消息id获取接收人信息")
|
||||
@GetMapping("noManage/getReceivedUserinfoByMessageId")
|
||||
public Mono<Result<List<MessageReceivedWithUserVo>>> getReceivedUserinfoByMessageId(Long messageId) {
|
||||
List<MessageReceivedWithUserVo> voList = messageReceivedService.getReceivedUserinfoByMessageId(messageId);
|
||||
return Mono.just(Result.success(voList));
|
||||
@Operation(summary = "分页查询用户消息", description = "分页查询用户消息")
|
||||
@GetMapping("noManage/getUserMessageList/{page}/{limit}")
|
||||
public Mono<Result<PageResult<MessageUserVo>>> getUserMessageList(
|
||||
@Parameter(name = "page", description = "当前页", required = true)
|
||||
@PathVariable("page") Integer page,
|
||||
@Parameter(name = "limit", description = "每页记录数", required = true)
|
||||
@PathVariable("limit") Integer limit,
|
||||
MessageUserDto dto) {
|
||||
Page<Message> pageParams = new Page<>(page, limit);
|
||||
PageResult<MessageUserVo> pageResult = messageReceivedService.getUserMessageList(pageParams, dto);
|
||||
return Mono.just(Result.success(pageResult));
|
||||
}
|
||||
|
||||
@Operation(summary = "用户将消息标为已读", description = "用户将消息标为已读")
|
||||
@PutMapping("noManage/updateUserMarkAsRead")
|
||||
public Mono<Result<String>> updateUserMarkAsRead(@Valid @RequestBody List<Long> ids) {
|
||||
messageReceivedService.updateUserMarkAsRead(ids);
|
||||
@PutMapping("noManage/userMarkAsRead")
|
||||
public Mono<Result<String>> userMarkAsRead(@Valid @RequestBody List<Long> ids) {
|
||||
messageReceivedService.userMarkAsRead(ids);
|
||||
return Mono.just(Result.success(ResultCodeEnum.UPDATE_SUCCESS));
|
||||
}
|
||||
|
||||
@Operation(summary = "添加系统消息", description = "添加系统消息")
|
||||
@PostMapping("addMessage")
|
||||
public Mono<Result<String>> addMessage(@Valid @RequestBody MessageAddDto dto) {
|
||||
messageReceivedService.addMessage(dto);
|
||||
return Mono.just(Result.success(ResultCodeEnum.ADD_SUCCESS));
|
||||
@Operation(summary = "用户删除消息", description = "用户删除消息")
|
||||
@DeleteMapping("noManage/deleteUserMessageByIds")
|
||||
public Mono<Result<String>> deleteUserMessageByIds(@RequestBody List<Long> ids) {
|
||||
messageReceivedService.deleteUserMessageByIds(ids);
|
||||
return Mono.just(Result.success(ResultCodeEnum.DELETE_SUCCESS));
|
||||
}
|
||||
|
||||
@Operation(summary = "更新系统消息", description = "更新系统消息")
|
||||
@PutMapping("updateMessage")
|
||||
public Mono<Result<String>> updateMessage(@Valid @RequestBody MessageUpdateDto dto) {
|
||||
messageReceivedService.updateMessage(dto);
|
||||
return Mono.just(Result.success(ResultCodeEnum.UPDATE_SUCCESS));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
package cn.bunny.services.mapper;
|
||||
|
||||
import cn.bunny.dao.dto.system.message.MessageUserDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageDto;
|
||||
import cn.bunny.dao.entity.system.Message;
|
||||
import cn.bunny.dao.vo.system.message.MessageVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageDetailVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -22,6 +23,21 @@ import java.util.List;
|
|||
@Mapper
|
||||
public interface MessageMapper extends BaseMapper<Message> {
|
||||
|
||||
/**
|
||||
* 根据消息id查询消息详情
|
||||
*
|
||||
* @param id 消息id
|
||||
* @return 消息返回对象
|
||||
*/
|
||||
MessageDetailVo selectMessageVoById(Long id);
|
||||
|
||||
/**
|
||||
* 根据消息id获取接收人信息
|
||||
*
|
||||
* @param messageId 消息id
|
||||
* @return 消息接收人用户名等信息
|
||||
*/
|
||||
List<MessageReceivedWithUserVo> selectUserinfoListByMessageId(Long messageId);
|
||||
|
||||
/**
|
||||
* 物理删除系统消息
|
||||
|
@ -31,20 +47,11 @@ public interface MessageMapper extends BaseMapper<Message> {
|
|||
void deleteBatchIdsWithPhysics(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 根据消息所有包含匹配当前消息Id的列表
|
||||
* 分页查询发送消息
|
||||
*
|
||||
* @param pageParams 系统消息分页参数
|
||||
* @param dto 系统消息查询表单
|
||||
* @return 系统消息分页结果
|
||||
* @param pageParams 分页参数
|
||||
* @param dto 查询表单
|
||||
* @return 系统消息返回列表
|
||||
*/
|
||||
IPage<MessageVo> selectListByPageWithMessageUserDto(@Param("page") Page<Message> pageParams, @Param("dto") MessageUserDto dto, @Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 根据消息id查询消息详情
|
||||
*
|
||||
* @param id 消息id
|
||||
* @return 消息返回对象
|
||||
*/
|
||||
MessageVo selectMessageVoById(Long id);
|
||||
|
||||
IPage<MessageReceivedWithMessageVo> selectListByPage(Page<Message> pageParams, MessageDto dto);
|
||||
}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
package cn.bunny.services.mapper;
|
||||
|
||||
import cn.bunny.dao.dto.system.message.MessageDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageReceivedDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageUserDto;
|
||||
import cn.bunny.dao.entity.system.Message;
|
||||
import cn.bunny.dao.entity.system.MessageReceived;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageUserVo;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
@ -31,27 +32,28 @@ public interface MessageReceivedMapper extends BaseMapper<MessageReceived> {
|
|||
* @param dto 系统消息查询表单
|
||||
* @return 系统消息分页结果
|
||||
*/
|
||||
IPage<MessageReceivedWithMessageVo> selectListByMessageReceivedPage(@Param("page") Page<Message> pageParams, @Param("dto") MessageDto dto);
|
||||
IPage<MessageReceivedWithMessageVo> selectListByMessageReceivedPage(@Param("page") Page<Message> pageParams, @Param("dto") MessageReceivedDto dto);
|
||||
|
||||
/**
|
||||
* 根据id批量删除
|
||||
*
|
||||
* @param ids 消息接受ids
|
||||
* @param ids 主键ids
|
||||
*/
|
||||
void deleteBatchIdsWithPhysics(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 根据消息所有包含匹配当前消息Id的列表
|
||||
*
|
||||
* @param pageParams 系统消息分页参数
|
||||
* @param dto 系统消息查询表单
|
||||
* @return 系统消息分页结果
|
||||
*/
|
||||
IPage<MessageUserVo> selectListByUserMessagePage(@Param("page") Page<Message> pageParams, @Param("dto") MessageUserDto dto, @Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 根据消息Id物理删除
|
||||
*
|
||||
* @param ids 消息id
|
||||
*/
|
||||
void deleteBatchIdsByMessageIdsWithPhysics(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 根据消息id获取接收人信息
|
||||
*
|
||||
* @param messageId 消息id
|
||||
* @return 消息接收人用户名等信息
|
||||
*/
|
||||
List<MessageReceivedWithUserVo> selectUserinfoListByMessageId(Long messageId);
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
package cn.bunny.services.service;
|
||||
|
||||
import cn.bunny.dao.dto.system.message.MessageAddDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageUpdateDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageReceivedDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageReceivedUpdateDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageUserDto;
|
||||
import cn.bunny.dao.entity.system.Message;
|
||||
import cn.bunny.dao.entity.system.MessageReceived;
|
||||
import cn.bunny.dao.pojo.result.PageResult;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageUserVo;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import jakarta.validation.Valid;
|
||||
|
@ -29,14 +29,14 @@ public interface MessageReceivedService extends IService<MessageReceived> {
|
|||
*
|
||||
* @return 系统消息返回列表
|
||||
*/
|
||||
PageResult<MessageReceivedWithMessageVo> getMessageReceivedList(Page<Message> pageParams, MessageDto dto);
|
||||
PageResult<MessageReceivedWithMessageVo> getMessageReceivedList(Page<Message> pageParams, MessageReceivedDto dto);
|
||||
|
||||
/**
|
||||
* 管理员将用户接受消息标为已读
|
||||
*
|
||||
* @param ids 用户消息表id
|
||||
* @param dto 用户消息表单
|
||||
*/
|
||||
void markMessageReceivedAsRead(List<Long> ids);
|
||||
void updateMarkMessageReceived(@Valid MessageReceivedUpdateDto dto);
|
||||
|
||||
/**
|
||||
* 管理删除用户接受的消息
|
||||
|
@ -46,32 +46,25 @@ public interface MessageReceivedService extends IService<MessageReceived> {
|
|||
void deleteMessageReceivedByIds(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 根据消息id获取接收人信息
|
||||
* 分页查询用户消息
|
||||
*
|
||||
* @param messageId 消息id
|
||||
* @return 消息接收人用户名等信息
|
||||
* @param pageParams 系统消息返回列表
|
||||
* @param dto 查询表单
|
||||
* @return 分页结果
|
||||
*/
|
||||
List<MessageReceivedWithUserVo> getReceivedUserinfoByMessageId(Long messageId);
|
||||
|
||||
/**
|
||||
* * 添加系统消息
|
||||
*
|
||||
* @param dto 添加表单
|
||||
*/
|
||||
void addMessage(@Valid MessageAddDto dto);
|
||||
PageResult<MessageUserVo> getUserMessageList(Page<Message> pageParams, MessageUserDto dto);
|
||||
|
||||
/**
|
||||
* 用户将消息标为已读
|
||||
*
|
||||
* @param ids 消息id列表
|
||||
*/
|
||||
void updateUserMarkAsRead(List<Long> ids);
|
||||
void userMarkAsRead(List<Long> ids);
|
||||
|
||||
/**
|
||||
* * 更新系统消息
|
||||
* 用户删除消息
|
||||
*
|
||||
* @param dto 更新表单
|
||||
* @param ids 消息Id列表
|
||||
*/
|
||||
void updateMessage(@Valid MessageUpdateDto dto);
|
||||
|
||||
void deleteUserMessageByIds(List<Long> ids);
|
||||
}
|
||||
|
|
|
@ -1,12 +1,16 @@
|
|||
package cn.bunny.services.service;
|
||||
|
||||
import cn.bunny.dao.dto.system.message.MessageUserDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageAddDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageUpdateDto;
|
||||
import cn.bunny.dao.entity.system.Message;
|
||||
import cn.bunny.dao.pojo.result.PageResult;
|
||||
import cn.bunny.dao.vo.system.message.MessageUserVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageDetailVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageVo;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -20,6 +24,35 @@ import java.util.List;
|
|||
*/
|
||||
public interface MessageService extends IService<Message> {
|
||||
|
||||
/**
|
||||
* 根据消息id获取接收人信息
|
||||
*
|
||||
* @param messageId 消息id
|
||||
* @return 消息接收人用户名等信息
|
||||
*/
|
||||
List<MessageReceivedWithUserVo> getReceivedUserinfoByMessageId(Long messageId);
|
||||
|
||||
/**
|
||||
* 根据消息id查询消息详情
|
||||
*
|
||||
* @param id 消息id
|
||||
* @return 消息详情
|
||||
*/
|
||||
MessageDetailVo getMessageDetailById(Long id);
|
||||
|
||||
/**
|
||||
* * 添加系统消息
|
||||
*
|
||||
* @param dto 添加表单
|
||||
*/
|
||||
void addMessage(@Valid MessageAddDto dto);
|
||||
|
||||
/**
|
||||
* * 更新系统消息
|
||||
*
|
||||
* @param dto 更新表单
|
||||
*/
|
||||
void updateMessage(@Valid MessageUpdateDto dto);
|
||||
|
||||
/**
|
||||
* * 删除|批量删除系统消息类型
|
||||
|
@ -29,26 +62,11 @@ public interface MessageService extends IService<Message> {
|
|||
void deleteMessage(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 分页查询用户消息
|
||||
* 分页查询发送消息
|
||||
*
|
||||
* @param pageParams 系统消息返回列表
|
||||
* @param pageParams 分页参数
|
||||
* @param dto 查询表单
|
||||
* @return 分页结果
|
||||
* @return 系统消息返回列表
|
||||
*/
|
||||
PageResult<MessageUserVo> getUserMessageList(Page<Message> pageParams, MessageUserDto dto);
|
||||
|
||||
/**
|
||||
* 根据消息id查询消息详情
|
||||
*
|
||||
* @param id 消息id
|
||||
* @return 消息详情
|
||||
*/
|
||||
MessageVo getMessageDetailById(Long id);
|
||||
|
||||
/**
|
||||
* 用户删除消息
|
||||
*
|
||||
* @param ids 消息Id列表
|
||||
*/
|
||||
void deleteUserMessageByIds(List<Long> ids);
|
||||
PageResult<MessageVo> getMessageList(Page<Message> pageParams, MessageDto dto);
|
||||
}
|
||||
|
|
|
@ -2,22 +2,20 @@ package cn.bunny.services.service.impl;
|
|||
|
||||
import cn.bunny.common.service.context.BaseContext;
|
||||
import cn.bunny.common.service.exception.BunnyException;
|
||||
import cn.bunny.dao.common.entity.BaseEntity;
|
||||
import cn.bunny.dao.dto.system.message.MessageAddDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageUpdateDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageReceivedDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageReceivedUpdateDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageUserDto;
|
||||
import cn.bunny.dao.entity.system.Message;
|
||||
import cn.bunny.dao.entity.system.MessageReceived;
|
||||
import cn.bunny.dao.pojo.result.PageResult;
|
||||
import cn.bunny.dao.pojo.result.ResultCodeEnum;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageUserVo;
|
||||
import cn.bunny.services.factory.UserFactory;
|
||||
import cn.bunny.services.mapper.MessageMapper;
|
||||
import cn.bunny.services.mapper.MessageReceivedMapper;
|
||||
import cn.bunny.services.mapper.UserMapper;
|
||||
import cn.bunny.services.service.MessageReceivedService;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import jakarta.validation.Valid;
|
||||
|
@ -40,12 +38,6 @@ import java.util.List;
|
|||
@Transactional
|
||||
public class MessageReceivedServiceImpl extends ServiceImpl<MessageReceivedMapper, MessageReceived> implements MessageReceivedService {
|
||||
|
||||
@Autowired
|
||||
private UserMapper userMapper;
|
||||
|
||||
@Autowired
|
||||
private MessageMapper messageMapper;
|
||||
|
||||
@Autowired
|
||||
private UserFactory userFactory;
|
||||
|
||||
|
@ -57,7 +49,7 @@ public class MessageReceivedServiceImpl extends ServiceImpl<MessageReceivedMappe
|
|||
* @return 查询分页系统消息返回对象
|
||||
*/
|
||||
@Override
|
||||
public PageResult<MessageReceivedWithMessageVo> getMessageReceivedList(Page<Message> pageParams, MessageDto dto) {
|
||||
public PageResult<MessageReceivedWithMessageVo> getMessageReceivedList(Page<Message> pageParams, MessageReceivedDto dto) {
|
||||
// 分页查询消息数据
|
||||
IPage<MessageReceivedWithMessageVo> page = baseMapper.selectListByMessageReceivedPage(pageParams, dto);
|
||||
List<MessageReceivedWithMessageVo> voList = page.getRecords().stream().map(messageVo -> {
|
||||
|
@ -78,14 +70,14 @@ public class MessageReceivedServiceImpl extends ServiceImpl<MessageReceivedMappe
|
|||
/**
|
||||
* 管理员将用户接受消息标为已读
|
||||
*
|
||||
* @param ids 用户消息表id
|
||||
* @param dto 用户消息表单
|
||||
*/
|
||||
@Override
|
||||
public void markMessageReceivedAsRead(List<Long> ids) {
|
||||
List<MessageReceived> messageReceivedList = ids.stream().map(id -> {
|
||||
public void updateMarkMessageReceived(@Valid MessageReceivedUpdateDto dto) {
|
||||
List<MessageReceived> messageReceivedList = dto.getIds().stream().map(id -> {
|
||||
MessageReceived messageReceived = new MessageReceived();
|
||||
messageReceived.setId(id);
|
||||
messageReceived.setStatus(true);
|
||||
messageReceived.setStatus(dto.getStatus());
|
||||
return messageReceived;
|
||||
}).toList();
|
||||
updateBatchById(messageReceivedList);
|
||||
|
@ -102,107 +94,33 @@ public class MessageReceivedServiceImpl extends ServiceImpl<MessageReceivedMappe
|
|||
}
|
||||
|
||||
/**
|
||||
* 根据消息id获取接收人信息
|
||||
* 分页查询用户消息
|
||||
* 查询用户消息关系表,找到当前用户所有的消息
|
||||
* 拿到用户消息关系表中数据只要MessageId
|
||||
* 根据MessageId分页查询消息表
|
||||
*
|
||||
* @param messageId 消息id
|
||||
* @return 消息接收人用户名等信息
|
||||
* @param pageParams 系统消息返回列表
|
||||
* @param dto 用户消息查询内容
|
||||
* @return 分页结果
|
||||
*/
|
||||
@Override
|
||||
public List<MessageReceivedWithUserVo> getReceivedUserinfoByMessageId(Long messageId) {
|
||||
if (messageId == null) {
|
||||
throw new BunnyException(ResultCodeEnum.REQUEST_IS_EMPTY);
|
||||
}
|
||||
return baseMapper.selectUserinfoListByMessageId(messageId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加系统消息
|
||||
* 判断发送消息的接收人是否为空,如果为空默认是所有用户都是接受者
|
||||
* 之后要将消息的接受者要保存在,消息接收表中,在这之前是没有消息id的
|
||||
* 先要保存消息内容,之后获取到保存消息的id
|
||||
* 将消息的id和接收者的id构建成map插入到消息接收表中
|
||||
*
|
||||
* @param dto 系统消息添加
|
||||
*/
|
||||
@Override
|
||||
public void addMessage(@Valid MessageAddDto dto) {
|
||||
// 如果发送人为空设置当前登录的人的ID
|
||||
if (dto.getSendUserId() == null) dto.setSendUserId(BaseContext.getUserId());
|
||||
public PageResult<MessageUserVo> getUserMessageList(Page<Message> pageParams, MessageUserDto dto) {
|
||||
// 根据消息所有包含匹配当前消息Id的列表
|
||||
IPage<MessageUserVo> page = baseMapper.selectListByUserMessagePage(pageParams, dto, BaseContext.getUserId());
|
||||
List<MessageUserVo> voList = page.getRecords().stream().map(messageVo -> {
|
||||
MessageUserVo vo = new MessageUserVo();
|
||||
BeanUtils.copyProperties(messageVo, vo);
|
||||
|
||||
// 设置封面返回内容
|
||||
String cover = dto.getCover();
|
||||
dto.setCover(userFactory.checkGetUserAvatar(cover));
|
||||
|
||||
// 先保存消息数据,之后拿到保存消息的id
|
||||
Message message = new Message();
|
||||
BeanUtils.copyProperties(dto, message);
|
||||
message.setMessageType(dto.getMessageTypeId().toString());
|
||||
messageMapper.insert(message);
|
||||
|
||||
// 如果接收人为空默认接收全部人
|
||||
List<Long> receivedUserIds = dto.getReceivedUserIds();
|
||||
if (receivedUserIds.isEmpty()) {
|
||||
receivedUserIds = userMapper.selectList(null).stream().map(BaseEntity::getId).toList();
|
||||
}
|
||||
|
||||
// 从之前保存的消息中获取消息id,保存到消息接收表中
|
||||
List<MessageReceived> receivedList = receivedUserIds.stream().map(id -> {
|
||||
MessageReceived messageReceived = new MessageReceived();
|
||||
messageReceived.setMessageId(message.getId());
|
||||
messageReceived.setReceivedUserId(id);
|
||||
messageReceived.setStatus(false);
|
||||
return messageReceived;
|
||||
String cover = vo.getCover();
|
||||
cover = userFactory.checkGetUserAvatar(cover);
|
||||
vo.setCover(cover);
|
||||
return vo;
|
||||
}).toList();
|
||||
|
||||
saveBatch(receivedList);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 更新系统消息
|
||||
*
|
||||
* @param dto 系统消息更新
|
||||
*/
|
||||
@Override
|
||||
public void updateMessage(@Valid MessageUpdateDto dto) {
|
||||
// 如果发送人为空设置当前登录的人的ID
|
||||
Long sendUserId = dto.getSendUserId();
|
||||
if (sendUserId == null) dto.setSendUserId(BaseContext.getUserId());
|
||||
|
||||
// 如果接收人为空默认接收全部人
|
||||
List<Long> receivedUserIds = dto.getReceivedUserIds();
|
||||
if (receivedUserIds.isEmpty()) {
|
||||
receivedUserIds = userMapper.selectList(null).stream().map(BaseEntity::getId).toList();
|
||||
}
|
||||
|
||||
// 设置封面返回内容
|
||||
String cover = dto.getCover();
|
||||
dto.setCover(userFactory.checkGetUserAvatar(cover));
|
||||
|
||||
// 更新内容
|
||||
Message message = new Message();
|
||||
BeanUtils.copyProperties(dto, message);
|
||||
message.setMessageType(dto.getMessageTypeId().toString());
|
||||
messageMapper.updateById(message);
|
||||
|
||||
// 保存消息和用户之间关联数据
|
||||
List<MessageReceived> receivedList = receivedUserIds.stream().map(id -> {
|
||||
MessageReceived messageReceived = new MessageReceived();
|
||||
messageReceived.setMessageId(dto.getId());
|
||||
messageReceived.setReceivedUserId(id);
|
||||
|
||||
// 当更新的时当前消息用户表是否已读
|
||||
if (id.equals(dto.getReceivedUserId())) {
|
||||
messageReceived.setStatus(dto.getStatus());
|
||||
}
|
||||
return messageReceived;
|
||||
}).toList();
|
||||
|
||||
// 删除这个消息id下所有用户消息关系内容
|
||||
baseMapper.deleteBatchIdsByMessageIdsWithPhysics(List.of(dto.getId()));
|
||||
|
||||
// 插入接收者和消息表
|
||||
saveBatch(receivedList);
|
||||
return PageResult.<MessageUserVo>builder().list(voList).pageNo(page.getCurrent())
|
||||
.pageSize(page.getSize()).total(page.getTotal())
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -212,7 +130,7 @@ public class MessageReceivedServiceImpl extends ServiceImpl<MessageReceivedMappe
|
|||
* @param ids 消息id列表
|
||||
*/
|
||||
@Override
|
||||
public void updateUserMarkAsRead(List<Long> ids) {
|
||||
public void userMarkAsRead(List<Long> ids) {
|
||||
// 判断ids是否为空
|
||||
if (ids.isEmpty()) {
|
||||
throw new BunnyException(ResultCodeEnum.REQUEST_IS_EMPTY);
|
||||
|
@ -229,4 +147,28 @@ public class MessageReceivedServiceImpl extends ServiceImpl<MessageReceivedMappe
|
|||
updateBatchById(messageList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户删除消息
|
||||
*
|
||||
* @param ids 消息Id列表
|
||||
*/
|
||||
@Override
|
||||
public void deleteUserMessageByIds(List<Long> ids) {
|
||||
// 判断ids是否为空
|
||||
if (ids.isEmpty()) {
|
||||
throw new BunnyException(ResultCodeEnum.REQUEST_IS_EMPTY);
|
||||
}
|
||||
|
||||
// 判断删除的是否是自己的消息
|
||||
List<MessageReceived> messageReceivedList = list(Wrappers.<MessageReceived>lambdaQuery().in(MessageReceived::getReceivedUserId, ids));
|
||||
messageReceivedList.forEach(messageReceived -> {
|
||||
if (!messageReceived.getReceivedUserId().equals(BaseContext.getUserId())) {
|
||||
throw new BunnyException(ResultCodeEnum.ILLEGAL_DATA_REQUEST);
|
||||
}
|
||||
});
|
||||
|
||||
// 根据当前用户id删除消息接受表中数据
|
||||
baseMapper.deleteBatchIdsWithPhysics(ids);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,28 +2,38 @@ package cn.bunny.services.service.impl;
|
|||
|
||||
import cn.bunny.common.service.context.BaseContext;
|
||||
import cn.bunny.common.service.exception.BunnyException;
|
||||
import cn.bunny.dao.dto.system.message.MessageUserDto;
|
||||
import cn.bunny.dao.common.entity.BaseEntity;
|
||||
import cn.bunny.dao.dto.system.message.MessageAddDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageDto;
|
||||
import cn.bunny.dao.dto.system.message.MessageUpdateDto;
|
||||
import cn.bunny.dao.entity.system.Message;
|
||||
import cn.bunny.dao.entity.system.MessageReceived;
|
||||
import cn.bunny.dao.pojo.result.PageResult;
|
||||
import cn.bunny.dao.pojo.result.ResultCodeEnum;
|
||||
import cn.bunny.dao.vo.system.message.MessageUserVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageDetailVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo;
|
||||
import cn.bunny.dao.vo.system.message.MessageVo;
|
||||
import cn.bunny.services.factory.UserFactory;
|
||||
import cn.bunny.services.mapper.MessageMapper;
|
||||
import cn.bunny.services.mapper.MessageReceivedMapper;
|
||||
import cn.bunny.services.mapper.UserMapper;
|
||||
import cn.bunny.services.service.MessageReceivedService;
|
||||
import cn.bunny.services.service.MessageService;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
@ -43,32 +53,46 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
|||
@Autowired
|
||||
private MessageReceivedMapper messageReceivedMapper;
|
||||
|
||||
@Autowired
|
||||
private UserMapper userMapper;
|
||||
|
||||
@Autowired
|
||||
private MessageReceivedService messageReceivedService;
|
||||
|
||||
/**
|
||||
* 分页查询用户消息
|
||||
* 查询用户消息关系表,找到当前用户所有的消息
|
||||
* 拿到用户消息关系表中数据只要MessageId
|
||||
* 根据MessageId分页查询消息表
|
||||
* 分页查询发送消息
|
||||
*
|
||||
* @param pageParams 系统消息返回列表
|
||||
* @param dto 用户消息查询内容
|
||||
* @return 分页结果
|
||||
* @param pageParams 分页参数
|
||||
* @param dto 查询表单
|
||||
* @return 系统消息返回列表
|
||||
*/
|
||||
@Override
|
||||
public PageResult<MessageUserVo> getUserMessageList(Page<Message> pageParams, MessageUserDto dto) {
|
||||
// 根据消息所有包含匹配当前消息Id的列表
|
||||
IPage<MessageVo> page = baseMapper.selectListByPageWithMessageUserDto(pageParams, dto, BaseContext.getUserId());
|
||||
List<MessageUserVo> voList = page.getRecords().stream().map(messageVo -> {
|
||||
MessageUserVo vo = new MessageUserVo();
|
||||
BeanUtils.copyProperties(messageVo, vo);
|
||||
public PageResult<MessageVo> getMessageList(Page<Message> pageParams, MessageDto dto) {
|
||||
IPage<MessageReceivedWithMessageVo> page = baseMapper.selectListByPage(pageParams, dto);
|
||||
List<MessageReceivedWithMessageVo> records = page.getRecords();
|
||||
|
||||
// 设置封面返回内容
|
||||
String cover = vo.getCover();
|
||||
cover = userFactory.checkGetUserAvatar(cover);
|
||||
vo.setCover(cover);
|
||||
return vo;
|
||||
}).toList();
|
||||
// 接受人昵称
|
||||
Map<Long, List<String>> receivedUserNicknameMap = records.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
MessageReceivedWithMessageVo::getId,
|
||||
Collectors.mapping(MessageReceivedWithMessageVo::getReceivedUserNickname, Collectors.toList())));
|
||||
|
||||
return PageResult.<MessageUserVo>builder().list(voList).pageNo(page.getCurrent())
|
||||
// 接收人id
|
||||
Map<Long, List<String>> receivedUserIdMap = records.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
MessageReceivedWithMessageVo::getId,
|
||||
Collectors.mapping(messageWithMessageReceivedVo -> messageWithMessageReceivedVo.getId().toString(), Collectors.toList())));
|
||||
|
||||
List<MessageVo> voList = records.stream()
|
||||
.map(messageWithMessageReceivedVo -> {
|
||||
MessageVo messageVo = new MessageVo();
|
||||
BeanUtils.copyProperties(messageWithMessageReceivedVo, messageVo);
|
||||
messageVo.setReceivedUserNickname(receivedUserNicknameMap.get(messageWithMessageReceivedVo.getId()));
|
||||
messageVo.setReceivedUserId(receivedUserIdMap.get(messageWithMessageReceivedVo.getId()));
|
||||
return messageVo;
|
||||
}).distinct().toList();
|
||||
|
||||
return PageResult.<MessageVo>builder().list(voList).pageNo(page.getCurrent())
|
||||
.pageSize(page.getSize()).total(page.getTotal())
|
||||
.build();
|
||||
}
|
||||
|
@ -81,7 +105,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
|||
* @return 消息详情
|
||||
*/
|
||||
@Override
|
||||
public MessageVo getMessageDetailById(Long id) {
|
||||
public MessageDetailVo getMessageDetailById(Long id) {
|
||||
// 将消息设为已读
|
||||
MessageReceived messageReceived = new MessageReceived();
|
||||
messageReceived.setReceivedUserId(BaseContext.getUserId());
|
||||
|
@ -99,19 +123,102 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
|||
}
|
||||
|
||||
/**
|
||||
* 用户删除消息
|
||||
* 根据消息id获取接收人信息
|
||||
*
|
||||
* @param ids 消息Id列表
|
||||
* @param messageId 消息id
|
||||
* @return 消息接收人用户名等信息
|
||||
*/
|
||||
@Override
|
||||
public void deleteUserMessageByIds(List<Long> ids) {
|
||||
// 判断ids是否为空
|
||||
if (ids.isEmpty()) {
|
||||
public List<MessageReceivedWithUserVo> getReceivedUserinfoByMessageId(Long messageId) {
|
||||
if (messageId == null) {
|
||||
throw new BunnyException(ResultCodeEnum.REQUEST_IS_EMPTY);
|
||||
}
|
||||
return baseMapper.selectUserinfoListByMessageId(messageId);
|
||||
}
|
||||
|
||||
// 根据当前用户id删除消息接受表中数据
|
||||
messageReceivedMapper.deleteBatchIdsWithPhysics(ids);
|
||||
/**
|
||||
* 添加系统消息
|
||||
* 判断发送消息的接收人是否为空,如果为空默认是所有用户都是接受者
|
||||
* 之后要将消息的接受者要保存在,消息接收表中,在这之前是没有消息id的
|
||||
* 先要保存消息内容,之后获取到保存消息的id
|
||||
* 将消息的id和接收者的id构建成map插入到消息接收表中
|
||||
*
|
||||
* @param dto 系统消息添加
|
||||
*/
|
||||
@Override
|
||||
public void addMessage(@Valid MessageAddDto dto) {
|
||||
// 如果发送人为空设置当前登录的人的ID
|
||||
if (dto.getSendUserId() == null) dto.setSendUserId(BaseContext.getUserId());
|
||||
|
||||
// 设置封面返回内容
|
||||
String cover = dto.getCover();
|
||||
dto.setCover(userFactory.checkGetUserAvatar(cover));
|
||||
|
||||
// 先保存消息数据,之后拿到保存消息的id
|
||||
Message message = new Message();
|
||||
BeanUtils.copyProperties(dto, message);
|
||||
message.setMessageType(dto.getMessageTypeId().toString());
|
||||
save(message);
|
||||
|
||||
// 如果接收人为空默认接收全部人
|
||||
List<Long> receivedUserIds = dto.getReceivedUserIds();
|
||||
if (receivedUserIds.isEmpty()) {
|
||||
receivedUserIds = userMapper.selectList(null).stream().map(BaseEntity::getId).toList();
|
||||
}
|
||||
|
||||
// 从之前保存的消息中获取消息id,保存到消息接收表中
|
||||
List<MessageReceived> receivedList = receivedUserIds.stream().map(id -> {
|
||||
MessageReceived messageReceived = new MessageReceived();
|
||||
messageReceived.setMessageId(message.getId());
|
||||
messageReceived.setReceivedUserId(id);
|
||||
messageReceived.setStatus(false);
|
||||
return messageReceived;
|
||||
}).toList();
|
||||
|
||||
messageReceivedService.saveBatch(receivedList);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 更新系统消息
|
||||
*
|
||||
* @param dto 系统消息更新
|
||||
*/
|
||||
@Override
|
||||
public void updateMessage(@Valid MessageUpdateDto dto) {
|
||||
// 如果发送人为空设置当前登录的人的ID
|
||||
Long sendUserId = dto.getSendUserId();
|
||||
if (sendUserId == null) dto.setSendUserId(BaseContext.getUserId());
|
||||
|
||||
// 如果接收人为空默认接收全部人
|
||||
List<Long> receivedUserIds = dto.getReceivedUserIds();
|
||||
if (receivedUserIds.isEmpty()) {
|
||||
receivedUserIds = userMapper.selectList(null).stream().map(BaseEntity::getId).toList();
|
||||
}
|
||||
|
||||
// 设置封面返回内容
|
||||
String cover = dto.getCover();
|
||||
dto.setCover(userFactory.checkGetUserAvatar(cover));
|
||||
|
||||
// 更新内容
|
||||
Message message = new Message();
|
||||
BeanUtils.copyProperties(dto, message);
|
||||
message.setMessageType(dto.getMessageTypeId().toString());
|
||||
baseMapper.updateById(message);
|
||||
|
||||
// 保存消息和用户之间关联数据
|
||||
List<MessageReceived> receivedList = receivedUserIds.stream().map(id -> {
|
||||
MessageReceived messageReceived = new MessageReceived();
|
||||
messageReceived.setMessageId(dto.getId());
|
||||
messageReceived.setReceivedUserId(id);
|
||||
return messageReceived;
|
||||
}).toList();
|
||||
|
||||
// 删除这个消息id下所有用户消息关系内容
|
||||
messageReceivedMapper.deleteBatchIdsByMessageIdsWithPhysics(List.of(dto.getId()));
|
||||
|
||||
// 插入接收者和消息表
|
||||
messageReceivedService.saveBatch(receivedList);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -123,10 +230,10 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
|
|||
*/
|
||||
@Override
|
||||
public void deleteMessage(List<Long> ids) {
|
||||
// 物理删除消息表数据
|
||||
// 根据消息id物理删除
|
||||
baseMapper.deleteBatchIdsWithPhysics(ids);
|
||||
|
||||
// 根据消息Id物理删除接受者消息
|
||||
// 根据消息Id物理删除用户消息表
|
||||
messageReceivedMapper.deleteBatchIdsByMessageIdsWithPhysics(ids);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,41 +26,63 @@
|
|||
id, create_time, update_time, create_user, update_user, is_deleted, title, send_user_id, message_type, content, cover, summary, editor_type, level,extra
|
||||
</sql>
|
||||
|
||||
<!-- 根据消息所有包含匹配当前消息Id的列表 -->
|
||||
<select id="selectListByPageWithMessageUserDto" resultType="cn.bunny.dao.vo.system.message.MessageVo">
|
||||
<!-- 分页查询发送消息 -->
|
||||
<select id="selectListByPage" resultType="cn.bunny.dao.vo.system.message.MessageReceivedWithMessageVo">
|
||||
SELECT
|
||||
message.id,
|
||||
message.create_time,
|
||||
message.update_time,
|
||||
message.create_user,
|
||||
message.update_user,
|
||||
message.is_deleted,
|
||||
message.title,
|
||||
message.send_user_id,
|
||||
send_user.nickname AS send_nickname,
|
||||
message.content,
|
||||
message.cover,
|
||||
message.summary,
|
||||
message.editor_type,
|
||||
message.level,
|
||||
message.extra,
|
||||
message.update_time,
|
||||
message_received.received_user_id AS received_user_id,
|
||||
message_received.id AS message_received_id,
|
||||
message_received.status AS status,
|
||||
message_type.message_type AS message_type
|
||||
message_type.message_name AS message_type,
|
||||
message_type.id AS message_type_id,
|
||||
received_user.nickname received_user_nickname,
|
||||
create_user.username AS create_username,
|
||||
update_user.username AS update_username
|
||||
FROM sys_message message
|
||||
LEFT JOIN sys_user create_user ON create_user.id = message.create_user
|
||||
LEFT JOIN sys_user update_user ON update_user.id = message.update_user
|
||||
LEFT JOIN sys_message_received message_received ON message.id = message_received.message_id
|
||||
LEFT JOIN sys_message_type message_type ON message_type.id = message.message_type
|
||||
INNER JOIN sys_message_received message_received ON message_received.received_user_id = #{userId}
|
||||
AND message.id = message_received.message_id
|
||||
LEFT JOIN sys_user create_user ON create_user.id = message_received.create_user
|
||||
LEFT JOIN sys_user update_user ON update_user.id = message_received.update_user
|
||||
LEFT JOIN sys_user received_user ON received_user.id = message_received.received_user_id
|
||||
LEFT JOIN sys_user send_user ON send_user.id = message.send_user_id
|
||||
<where>
|
||||
message.is_deleted = 0
|
||||
<if test="dto.status != null">
|
||||
and message_received.status = #{dto.status}
|
||||
<if test="dto.title != null and dto.title != ''">
|
||||
and message.title like CONCAT('%',#{dto.title},'%')
|
||||
</if>
|
||||
<if test="dto.sendNickname != null and dto.sendNickname != ''">
|
||||
and send_user.nickname like CONCAT('%',#{dto.sendNickname},'%')
|
||||
</if>
|
||||
<if test="dto.messageType != null and dto.messageType != ''">
|
||||
and message_type.message_type = #{dto.messageType}
|
||||
</if>
|
||||
<if test="dto.title != null and dto.title != ''">
|
||||
and message.title like CONCAT('%',#{dto.title},'%')
|
||||
<if test="dto.editorType != null and dto.editorType != ''">
|
||||
and message.editor_type = #{dto.editorType}
|
||||
</if>
|
||||
<if test="dto.level != null and dto.level != ''">
|
||||
and message.level = #{dto.level}
|
||||
</if>
|
||||
<if test="dto.extra != null and dto.extra != ''">
|
||||
and message.extra like CONCAT('%',#{dto.extra},'%')
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<!-- 根据消息id查询消息详情 -->
|
||||
<select id="selectMessageVoById" resultType="cn.bunny.dao.vo.system.message.MessageVo">
|
||||
<select id="selectMessageVoById" resultType="cn.bunny.dao.vo.system.message.MessageDetailVo">
|
||||
SELECT message.*,
|
||||
send_user.nickname AS send_nickname
|
||||
FROM sys_message message
|
||||
|
@ -80,4 +102,16 @@
|
|||
</foreach>
|
||||
</delete>
|
||||
|
||||
<!-- 根据消息id获取接收人信息 -->
|
||||
<select id="selectUserinfoListByMessageId"
|
||||
resultType="cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo">
|
||||
SELECT message_received.message_id,
|
||||
message_received.received_user_id,
|
||||
USER.nickname,
|
||||
USER.username
|
||||
FROM sys_message_received message_received
|
||||
LEFT JOIN sys_user user ON user.id = message_received.received_user_id
|
||||
where message_received.message_id = #{messageId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
LEFT JOIN sys_user send_user ON send_user.id = message.send_user_id
|
||||
LEFT JOIN sys_message_type message_type ON message_type.id = message.message_type
|
||||
<where>
|
||||
message.is_deleted = 0
|
||||
message_received.is_deleted = 0
|
||||
<if test="dto.title != null and dto.title != ''">
|
||||
and message.title like CONCAT('%',#{dto.title},'%')
|
||||
</if>
|
||||
|
@ -58,10 +58,7 @@
|
|||
and send_user.nickname like CONCAT('%',#{dto.sendNickname},'%')
|
||||
</if>
|
||||
<if test="dto.messageType != null and dto.messageType != ''">
|
||||
and message_type.message_type like CONCAT('%',#{dto.messageType},'%')
|
||||
</if>
|
||||
<if test="dto.content != null and dto.content != ''">
|
||||
and message.content like CONCAT('%',#{dto.content},'%')
|
||||
and message_type.message_type = #{dto.messageType}
|
||||
</if>
|
||||
<if test="dto.editorType != null and dto.editorType != ''">
|
||||
and message.editor_type = #{dto.editorType}
|
||||
|
@ -98,16 +95,37 @@
|
|||
</foreach>
|
||||
</delete>
|
||||
|
||||
<!-- 根据消息id获取接收人信息 -->
|
||||
<select id="selectUserinfoListByMessageId"
|
||||
resultType="cn.bunny.dao.vo.system.message.MessageReceivedWithUserVo">
|
||||
SELECT message_received.message_id,
|
||||
message_received.received_user_id,
|
||||
USER.nickname,
|
||||
USER.username
|
||||
FROM sys_message_received message_received
|
||||
LEFT JOIN sys_user user ON user.id = message_received.received_user_id
|
||||
where message_received.message_id = #{messageId}
|
||||
<!-- 根据消息所有包含匹配当前消息Id的列表 -->
|
||||
<select id="selectListByUserMessagePage" resultType="cn.bunny.dao.vo.system.message.MessageUserVo">
|
||||
SELECT
|
||||
message.id,
|
||||
message.title,
|
||||
message.cover,
|
||||
message.summary,
|
||||
message.level,
|
||||
message.extra,
|
||||
message.update_time,
|
||||
message_received.id AS message_received_id,
|
||||
message_received.status AS status,
|
||||
message_type.message_type AS message_type
|
||||
FROM sys_message message
|
||||
LEFT JOIN sys_user create_user ON create_user.id = message.create_user
|
||||
LEFT JOIN sys_user update_user ON update_user.id = message.update_user
|
||||
LEFT JOIN sys_message_type message_type ON message_type.id = message.message_type
|
||||
INNER JOIN sys_message_received message_received ON message_received.received_user_id = #{userId}
|
||||
AND message.id = message_received.message_id
|
||||
<where>
|
||||
message.is_deleted = 0
|
||||
<if test="dto.status != null">
|
||||
and message_received.status = #{dto.status}
|
||||
</if>
|
||||
<if test="dto.messageType != null and dto.messageType != ''">
|
||||
and message_type.message_type = #{dto.messageType}
|
||||
</if>
|
||||
<if test="dto.title != null and dto.title != ''">
|
||||
and message.title like CONCAT('%',#{dto.title},'%')
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
|
Loading…
Reference in New Issue