From d941b161f94ea3e2ff86c4fe240a7fd7b560df23 Mon Sep 17 00:00:00 2001 From: yyb <1416014977@qq.com> Date: Sun, 27 Apr 2025 14:27:09 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=81=8A=E5=A4=A9=E5=AE=A4=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=96=B0=E5=A2=9E=E8=BF=94=E5=9B=9E=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=83=A8=E5=88=86swagger=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../m2pool/common/core/web/page/TableDataInfo.java | 14 +++++++++++--- .../swagger/config/SwaggerWebConfiguration.java | 2 ++ .../m2pool/chat/controller/ChatRoomController.java | 3 ++- .../java/com/m2pool/chat/dto/ChatMessageDto.java | 11 +++++++++++ .../main/java/com/m2pool/chat/dto/ChatRoomDto.java | 9 +++++++++ .../interceptor/WebsocketChannelInterceptor.java | 6 ++++-- .../com/m2pool/chat/mapper/ChatMessageMapper.java | 2 +- .../chat/service/impl/ChatMessageServiceImpl.java | 3 ++- .../m2pool/chat/service/impl/StompServiceImpl.java | 14 +++++--------- .../java/com/m2pool/chat/vo/MessagePageVo.java | 1 - .../main/java/com/m2pool/chat/vo/RoomPageVo.java | 4 ++++ .../mapper/chat/ChatMessageHistoryMapper.xml | 7 ++++++- .../resources/mapper/chat/ChatMessageMapper.xml | 14 ++++++++++++-- 13 files changed, 69 insertions(+), 21 deletions(-) diff --git a/m2pool-common/common-core/src/main/java/com/m2pool/common/core/web/page/TableDataInfo.java b/m2pool-common/common-core/src/main/java/com/m2pool/common/core/web/page/TableDataInfo.java index 1f44b27..0ada6b9 100644 --- a/m2pool-common/common-core/src/main/java/com/m2pool/common/core/web/page/TableDataInfo.java +++ b/m2pool-common/common-core/src/main/java/com/m2pool/common/core/web/page/TableDataInfo.java @@ -1,5 +1,7 @@ package com.m2pool.common.core.web.page; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -11,23 +13,29 @@ import java.util.List; * @Author dy */ @Data -public class TableDataInfo implements Serializable +@ApiModel(description = "分页返回对象") +public class TableDataInfo implements Serializable { private static final long serialVersionUID = 1L; /** 总记录数 */ + @ApiModelProperty(value = "总记录数", example = "1") private long total; /** 总页数 */ + @ApiModelProperty(value = "总页数", example = "1") private long totalPage; /** 列表数据 */ - private List rows; + @ApiModelProperty(value = "查询结果集合") + private List rows; /** 消息状态码 */ + @ApiModelProperty(value = "消息状态码", example = "200") private int code; /** 消息内容 */ + @ApiModelProperty(value = "查询结果描述", example = "成功") private String msg; /** @@ -43,7 +51,7 @@ public class TableDataInfo implements Serializable * @param list 列表数据 * @param total 总记录数 */ - public TableDataInfo(List list, int total) + public TableDataInfo(List list, int total) { this.rows = list; this.total = total; diff --git a/m2pool-common/common-swagger/src/main/java/com/m2pool/common/swagger/config/SwaggerWebConfiguration.java b/m2pool-common/common-swagger/src/main/java/com/m2pool/common/swagger/config/SwaggerWebConfiguration.java index cc9b6d4..0d5224e 100644 --- a/m2pool-common/common-swagger/src/main/java/com/m2pool/common/swagger/config/SwaggerWebConfiguration.java +++ b/m2pool-common/common-swagger/src/main/java/com/m2pool/common/swagger/config/SwaggerWebConfiguration.java @@ -18,6 +18,8 @@ public class SwaggerWebConfiguration implements WebMvcConfigurer { /** swagger-ui 地址 */ registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); + registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } } diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatRoomController.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatRoomController.java index dd17a39..75b34cf 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatRoomController.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatRoomController.java @@ -1,5 +1,6 @@ package com.m2pool.chat.controller; +import com.m2pool.chat.dto.ChatRoomDto; import com.m2pool.chat.service.ChatRoomService; import com.m2pool.chat.vo.CharRoomVo; import com.m2pool.chat.vo.RoomPageVo; @@ -25,7 +26,7 @@ public class ChatRoomController { @PostMapping("/find/room/list") @ApiOperation(value = "查询客服人员的聊天室列表") @RequiresLogin - public TableDataInfo findRoomList(@RequestBody(required = false) RoomPageVo roomPageVo) { + public TableDataInfo findRoomList(@RequestBody(required = false) RoomPageVo roomPageVo) { // 如果请求体为空,初始化一个默认的 RoomPageVo 对象 if (roomPageVo == null) { roomPageVo = new RoomPageVo(); diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/ChatMessageDto.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/ChatMessageDto.java index 02e2ab0..1e96e94 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/ChatMessageDto.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/ChatMessageDto.java @@ -35,4 +35,15 @@ public class ChatMessageDto { @ApiModelProperty(value = "发送时间", example = "") private LocalDateTime createTime; + + @ApiModelProperty(value = "聊天室id", example = "") + private Long roomId; + + @ApiModelProperty(value = "消息是否已读", example = "") + private Integer isRead; + + @ApiModelProperty(value = "是否是自己发送的消息", example = "") + private Integer isSelf; + + } diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/ChatRoomDto.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/ChatRoomDto.java index f4aa6cf..d5e7bb1 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/ChatRoomDto.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/ChatRoomDto.java @@ -1,5 +1,7 @@ package com.m2pool.chat.dto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -17,34 +19,41 @@ import java.time.LocalDateTime; @Data @AllArgsConstructor @NoArgsConstructor +@ApiModel(description = "客服 聊天室列表返回对象") public class ChatRoomDto { /** * 聊天室id */ + @ApiModelProperty(value = "聊天室id", example = "1") private Long id; /** * 聊天对象id */ + @ApiModelProperty(value = "聊天对象id", example = "1") private String userEmail; /** * 聊天室重要程度 */ + @ApiModelProperty(value = "聊天室重要程度 0不重要 1重要", example = "1") private Integer flag; /** * 未读消息条数 */ + @ApiModelProperty(value = "未读消息条数", example = "1") private Integer unReadNumber; /** * 用户回复时间 */ + @ApiModelProperty(value = "用户回复时间", example = "2025-10-01 12:32:01") private LocalDateTime lastUserSendTime; /** * 客服回复时间 */ + @ApiModelProperty(value = "客服回复时间", example = "2025-10-01 12:32:01") private LocalDateTime lastCustomerSendTime; } diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/interceptor/WebsocketChannelInterceptor.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/interceptor/WebsocketChannelInterceptor.java index 34859d6..74cab40 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/interceptor/WebsocketChannelInterceptor.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/interceptor/WebsocketChannelInterceptor.java @@ -130,8 +130,10 @@ public class WebsocketChannelInterceptor implements ChannelInterceptor { throw new MessageDeliveryException(ExceptionEnum.fromCode(ExceptionEnum.IP_LIMIT_CONNECT)); } //本次链接为登录用户,并且已经链接.直接拒绝本次链接(多用户登录) - if ( type == LOGIN_USER && email.equals(hasConnectionEmail)) { - throw new MessageDeliveryException(ExceptionEnum.fromCode(ExceptionEnum.IP_LIMIT_CONNECT)); + if ( type == LOGIN_USER ) { + if(email.equals(hasConnectionEmail) || ipConnectionCountMap.containsValue(email)){ + throw new MessageDeliveryException(ExceptionEnum.fromCode(ExceptionEnum.IP_LIMIT_CONNECT)); + } } ipConnectionCountMap.put(ipAddr,email); diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/mapper/ChatMessageMapper.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/mapper/ChatMessageMapper.java index f52cd2b..4f690b0 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/mapper/ChatMessageMapper.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/mapper/ChatMessageMapper.java @@ -20,7 +20,7 @@ public interface ChatMessageMapper extends BaseMapper { * @param roomId * @return */ - List findRecentlyMessage(@Param("id") Long id,@Param("pageNum") Integer pageNum,@Param("roomId") Long roomId); + List findRecentlyMessage(@Param("email")String email,@Param("id") Long id,@Param("pageNum") Integer pageNum,@Param("roomId") Long roomId); /** diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatMessageServiceImpl.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatMessageServiceImpl.java index c09d3b1..99aee05 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatMessageServiceImpl.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatMessageServiceImpl.java @@ -36,7 +36,8 @@ public class ChatMessageServiceImpl implements ChatMessageService { @Override public AjaxResult findRecentlyMessage(Long id,Integer pageNum,Long roomId) { - List recentlyMessage = chatMessageMapper.findRecentlyMessage(id, pageNum, roomId); + String email = SecurityUtils.getUsername(); + List recentlyMessage = chatMessageMapper.findRecentlyMessage(email,id, pageNum, roomId); return AjaxResult.success(recentlyMessage); } diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java index a94e87a..cd35a17 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java @@ -45,12 +45,7 @@ public class StompServiceImpl implements StompService { @Override public AjaxResult sendMessageToUser(StompPrincipal principal, UserMessageVo userMessageVo) { - // 检查目标用户是否在线 - if (!checkOnline(userMessageVo)) { - return AjaxResult.error("目标用户不在线"); - } - - WebsocketMessageDto build = WebsocketMessageDto.builder() + WebsocketMessageDto build = WebsocketMessageDto.builder() .type(userMessageVo.getType()) .content(userMessageVo.getContent()) .sendEmail(principal.getName()) @@ -60,11 +55,12 @@ public class StompServiceImpl implements StompService { if(!TOURIST.equals(userMessageVo.getReceiveUserType())){ build.setRoomId(userMessageVo.getRoomId()); } - //当前用户发送其他人, 发送给指定用户. 否则默认发送给当前发送者 - messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE + "/" + userMessageVo.getEmail(),build); + if (checkOnline(userMessageVo)){ + //当前用户发送其他人, 发送给指定用户. 否则默认发送给当前发送者 + messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE + "/" + userMessageVo.getEmail(),build); + } // 接收者和发送者 都不是游客才能存储消息 和修改聊天室信息。后续可改为消息中间件解耦形式。 if (!TOURIST.equals(userMessageVo.getReceiveUserType()) && !TOURIST.equals(principal.getType())){ - transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/MessagePageVo.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/MessagePageVo.java index b8a9408..3301d7e 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/MessagePageVo.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/MessagePageVo.java @@ -15,7 +15,6 @@ public class MessagePageVo { private Integer pageNum; private Long roomId; public MessagePageVo() { - this.id = 1L; this.pageNum = 20; } } diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/RoomPageVo.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/RoomPageVo.java index aa77929..b958792 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/RoomPageVo.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/RoomPageVo.java @@ -1,6 +1,8 @@ package com.m2pool.chat.vo; import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -13,8 +15,10 @@ import java.time.LocalDateTime; * @Date 2025/4/22 17:09 */ @Data +@ApiModel(description = "请求对象") public class RoomPageVo { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "上一页最后一个聊天室发送时间", example = "2025-10-01 12:32:01") private LocalDateTime sendDateTime; } diff --git a/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatMessageHistoryMapper.xml b/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatMessageHistoryMapper.xml index 9ae65f6..7dab262 100644 --- a/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatMessageHistoryMapper.xml +++ b/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatMessageHistoryMapper.xml @@ -13,7 +13,12 @@ content, create_time as createTime FROM chat_message_history - WHERE id #{id} AND room_id = #{roomId} + + room_id = #{roomId} + + AND id #{id} + + ORDER BY id DESC LIMIT #{pageNum} diff --git a/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatMessageMapper.xml b/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatMessageMapper.xml index 05e6b00..2854bbe 100644 --- a/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatMessageMapper.xml +++ b/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatMessageMapper.xml @@ -8,9 +8,19 @@ type, send_email as sendEmail, content, - create_time as createTime + create_time as createTime, + room_id as roomId, + is_read as isRead, + case when send_email = #{email} then 1 + else 0 + end as isSelf FROM chat_message - WHERE id #{id} AND room_id = #{roomId} + + room_id = #{roomId} + + AND id #{id} + + ORDER BY id DESC LIMIT #{pageNum}