diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatMessageController.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatMessageController.java index 1057787..9ed7f8d 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatMessageController.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatMessageController.java @@ -2,6 +2,7 @@ package com.m2pool.chat.controller; import com.m2pool.chat.service.ChatMessageService; import com.m2pool.common.core.web.Result.AjaxResult; +import com.m2pool.common.security.annotation.RequiresLogin; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -22,6 +23,7 @@ public class ChatMessageController { */ @GetMapping("/find/history/message") @ApiOperation(value = "查询7天前的历史记录", notes = "根据ID查询7天前的历史记录") + @RequiresLogin public AjaxResult findHistoryMessage( @ApiParam(value = "游标:最后一条消息id", required = true, example = "1") @RequestParam(defaultValue = "1") Long id, @@ -35,6 +37,7 @@ public class ChatMessageController { @GetMapping("/find/recently/message") @ApiOperation(value = "查询七天内的记录", notes = "根据ID查询七天内的记录") + @RequiresLogin public AjaxResult findRecentlyMessage( @ApiParam(value = "游标:最后一条消息id", required = true, example = "1") @RequestParam(defaultValue = "1") Long id, @@ -48,6 +51,7 @@ public class ChatMessageController { @GetMapping("/delete/message") @ApiOperation(value = "消息撤回或删除") + @RequiresLogin public AjaxResult deleteMessage( @ApiParam(value = "消息id", required = true, example = "1") @RequestParam(defaultValue = "1") Long id, @@ -59,6 +63,7 @@ public class ChatMessageController { @PostMapping("/read/message") @ApiOperation(value = "聊天室消息改已读") + @RequiresLogin public AjaxResult readMessage( @ApiParam(value = "聊天室id", required = true, example = "1") @RequestParam Long roomId) { 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 a1c003a..6582712 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 @@ -4,9 +4,9 @@ import com.m2pool.chat.service.ChatRoomService; import com.m2pool.chat.vo.CharRoomVo; import com.m2pool.common.core.web.Result.AjaxResult; import com.m2pool.common.core.web.page.TableDataInfo; +import com.m2pool.common.security.annotation.RequiresLogin; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -21,20 +21,22 @@ public class ChatRoomController { @GetMapping("/find/room/list") @ApiOperation(value = "查询客服人员的聊天室列表") + @RequiresLogin public TableDataInfo findRoomList() { return chatRoomService.findRoomList(); } @GetMapping("/find/room/by/userid") @ApiOperation(value = "根据当前用户邮箱查询聊天室") - public AjaxResult findRoomByUserid(@ApiParam(value = "当前用户聊天对象的userId", example = "1") - @RequestParam(required = false) String email) { - return chatRoomService.findRoomByUserid(email); + @RequiresLogin + public AjaxResult findRoomByUserid() { + return chatRoomService.findRoomByUserid(); } @PostMapping("/update/room") @ApiOperation(value = "修改room相关信息") + @RequiresLogin public AjaxResult updateRoom(@RequestBody CharRoomVo charRoomVo) { return chatRoomService.updateRoom(charRoomVo); } 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 cef1a2e..02e2ab0 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 @@ -2,7 +2,9 @@ package com.m2pool.chat.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.time.LocalDateTime; @@ -15,6 +17,8 @@ import java.time.LocalDateTime; @ApiModel(description = "聊天消息返回对象") @Data +@AllArgsConstructor +@NoArgsConstructor public class ChatMessageDto { @ApiModelProperty(value = "消息ID", example = "1") 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 cdfd690..f4aa6cf 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,6 +1,9 @@ package com.m2pool.chat.dto; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.time.LocalDateTime; @@ -10,7 +13,10 @@ import java.time.LocalDateTime; * @Author yyb * @Date 2025/4/14 14:28 */ +@Builder @Data +@AllArgsConstructor +@NoArgsConstructor public class ChatRoomDto { /** diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/WebsocketMessageDto.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/WebsocketMessageDto.java index 3534892..17a6f04 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/WebsocketMessageDto.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/dto/WebsocketMessageDto.java @@ -1,6 +1,9 @@ package com.m2pool.chat.dto; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * @ClassName WebsocketMessageDto @@ -8,11 +11,14 @@ import lombok.Data; * @Author yyb * @Date 2025/4/10 16:27 */ +@Builder @Data +@AllArgsConstructor +@NoArgsConstructor public class WebsocketMessageDto { /** - * 消息id + * 消息id : 目前没用,不做消息撤回功能了 */ private Long id; @@ -26,7 +32,7 @@ public class WebsocketMessageDto { */ private String content; /** - * 是否是登录用户 + * 发送者类型 0 游客 1 登录用户 2 客服人员 */ - private boolean isLoginUser; + private Integer sendUserType; } diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatMessage.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatMessage.java index 3c9b8f7..3d6227a 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatMessage.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatMessage.java @@ -1,12 +1,16 @@ package com.m2pool.chat.entity; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.time.LocalDateTime; @Builder @Data +@AllArgsConstructor +@NoArgsConstructor public class ChatMessage { private Long id; private Integer type; diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatMessageHistory.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatMessageHistory.java index bc13758..5f065fc 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatMessageHistory.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatMessageHistory.java @@ -1,10 +1,14 @@ package com.m2pool.chat.entity; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.time.LocalDateTime; @Data +@AllArgsConstructor +@NoArgsConstructor public class ChatMessageHistory { private Long id; private Integer type; diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatRoom.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatRoom.java index 03d0465..a2dea0c 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatRoom.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/entity/ChatRoom.java @@ -1,19 +1,23 @@ package com.m2pool.chat.entity; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.time.LocalDateTime; @Builder @Data +@NoArgsConstructor +@AllArgsConstructor public class ChatRoom { private Long id; private String userOneEmail; private String userTwoEmail; private LocalDateTime lastUserSendTime; private LocalDateTime lastCustomerSendTime; - private Boolean flag; + private Integer flag; private LocalDateTime createTime; private LocalDateTime updateTime; private Boolean del; diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/mapper/ChatRoomMapper.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/mapper/ChatRoomMapper.java index 7600c56..2259688 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/mapper/ChatRoomMapper.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/mapper/ChatRoomMapper.java @@ -25,10 +25,9 @@ public interface ChatRoomMapper extends BaseMapper { /** * 查找当前用户与对应用户是否已存在创建的聊天室 * @param userEmail 用户邮箱 - * @param email 客服邮箱 * @return */ - Long findRoomByUserEmail(@Param("userEmail") String userEmail,@Param("email") String email); + ChatRoomDto findRoomByUserEmail(@Param("userEmail") String userEmail); diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/ChatRoomService.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/ChatRoomService.java index 836e170..affd21a 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/ChatRoomService.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/ChatRoomService.java @@ -18,7 +18,7 @@ public interface ChatRoomService extends IService { * 根据当前用户邮箱查询聊天室 * @return */ - AjaxResult findRoomByUserid(String email); + AjaxResult findRoomByUserid(); /** * 修改聊天室信息 diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatRoomServiceImpl.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatRoomServiceImpl.java index df26b5f..581b615 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatRoomServiceImpl.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatRoomServiceImpl.java @@ -13,6 +13,9 @@ import com.m2pool.common.core.utils.PageUtils; import com.m2pool.common.core.web.Result.AjaxResult; import com.m2pool.common.core.web.page.TableDataInfo; import com.m2pool.common.security.utils.SecurityUtils; +import com.m2pool.system.api.RemoteUserService; +import com.m2pool.system.api.entity.SysUser; +import io.jsonwebtoken.lang.Collections; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -20,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.stream.Collectors; @Service @@ -31,11 +35,16 @@ public class ChatRoomServiceImpl extends ServiceImpl i @Resource private ChatMessageMapper chatMessageMapper; + @Resource + private RemoteUserService remoteUserService; + @Override public TableDataInfo findRoomList() { + PageUtils.clearPage(); PageUtils.startPage(); + String userEmail = SecurityUtils.getUsername(); //1.查找当前客服对应的聊天室 - List roomList = chatRoomMapper.findRoomList(SecurityUtils.getUsername()); + List roomList = chatRoomMapper.findRoomList(userEmail); List userEmails = roomList.stream().map(ChatRoomDto::getUserEmail).collect(Collectors.toList()); //2.查询未读数量 if (!userEmails.isEmpty()){ @@ -64,19 +73,25 @@ public class ChatRoomServiceImpl extends ServiceImpl i @Override @Transactional - public AjaxResult findRoomByUserid(String email) { + public AjaxResult findRoomByUserid() { //1.查询当前用户与对应用户是否已存在创建的聊天室 String userEmail = SecurityUtils.getUsername(); - Long roomId = chatRoomMapper.findRoomByUserEmail(userEmail, email); - if(roomId != null){ - return AjaxResult.success(roomId); + ChatRoomDto roomByUserEmail = chatRoomMapper.findRoomByUserEmail(userEmail); + if(roomByUserEmail != null){ + return AjaxResult.success(roomByUserEmail); } - ChatRoom build = ChatRoom.builder().userOneEmail(userEmail).userTwoEmail(email).build(); + //2.不存在创建一个聊天室 + List data = remoteUserService.getCSList().getData(); + if(Collections.isEmpty(data)){ + return AjaxResult.error("客服人数不足"); + } + Random random = new Random(); + SysUser sysUser = data.get(random.nextInt(data.size())); + ChatRoom build = ChatRoom.builder().userOneEmail(userEmail).userTwoEmail(sysUser.getEmail()).build(); int insert = chatRoomMapper.insert(build); if (insert > 0){ - roomId = build.getId(); - return AjaxResult.success(roomId); + return AjaxResult.success(ChatRoomDto.builder().id(build.getId()).userEmail(build.getUserTwoEmail()).build()); } return AjaxResult.error("聊天室不存在,并且创建聊天室失败"); } 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 d926e5a..b7471b9 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 @@ -44,15 +44,13 @@ public class StompServiceImpl implements StompService { @Override public AjaxResult sendMessageToUser(UserMessageVo userMessageVo) { - WebsocketMessageDto websocketMessageDto = new WebsocketMessageDto(); - websocketMessageDto.setType(userMessageVo.getType()); - websocketMessageDto.setContent(userMessageVo.getContent()); // 检查目标用户是否在线 if (!checkOnline(userMessageVo)) { return AjaxResult.error("目标用户不在线"); } //当前用户发送其他人, 发送给指定用户. 否则默认发送给当前发送者 - messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE + "/" + userMessageVo.getEmail(), userMessageVo.getContent()); + messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE + "/" + userMessageVo.getEmail(), + WebsocketMessageDto.builder().type(userMessageVo.getType()).content(userMessageVo.getContent()).sendUserType(userMessageVo.getSendUserType()).build()); // 接收者和发送者 都不是游客才能存储消息 和修改聊天室信息。后续可改为消息中间件解耦形式。 if (!TOURIST.equals(userMessageVo.getReceiveUserType()) && !TOURIST.equals(userMessageVo.getSendUserType())){ transactionTemplate.execute(new TransactionCallbackWithoutResult() { @@ -60,8 +58,7 @@ public class StompServiceImpl implements StompService { protected void doInTransactionWithoutResult(TransactionStatus status) { try { // 插入消息并获取 ID - Long id = insertMessage(userMessageVo); - websocketMessageDto.setId(id); + insertMessage(userMessageVo); // 更新房间信息 updateRoom(userMessageVo); } catch (Exception e) { @@ -72,7 +69,8 @@ public class StompServiceImpl implements StompService { } }); } - return AjaxResult.success(websocketMessageDto); + //可以用void + return AjaxResult.success("成功"); } /** diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/CharRoomVo.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/CharRoomVo.java index a3d1354..1a260c7 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/CharRoomVo.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/CharRoomVo.java @@ -11,5 +11,5 @@ import lombok.Data; @Data public class CharRoomVo { private Long id; - private Boolean flag; + private Integer flag; } diff --git a/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatRoomMapper.xml b/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatRoomMapper.xml index 0a2dd4e..ee921fa 100644 --- a/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatRoomMapper.xml +++ b/m2pool-modules/m2pool-chat/src/main/resources/mapper/chat/ChatRoomMapper.xml @@ -2,15 +2,6 @@ - + \ No newline at end of file