Răsfoiți Sursa

新增聊天记录功能

tangbin 10 luni în urmă
părinte
comite
8895c2255c

+ 9 - 2
yezhu-api/src/main/java/com/kioor/chat/controller/ChatLogController.java

@@ -4,6 +4,7 @@ import com.kioor.annotation.Login;
 import com.kioor.chat.dto.ChatLogDTO;
 import com.kioor.chat.service.ChatLogService;
 import com.kioor.common.constant.Constant;
+import com.kioor.common.exception.ErrorCode;
 import com.kioor.common.page.PageData;
 import com.kioor.common.utils.Result;
 import com.kioor.common.validator.AssertUtils;
@@ -18,6 +19,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Arrays;
 import java.util.Date;
 import java.util.Map;
 
@@ -42,9 +44,14 @@ public class ChatLogController {
         @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true),
         @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true),
         @Parameter(name = Constant.ORDER_FIELD, description = "排序字段"),
-        @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)")
+        @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)"),
+        @Parameter(name = "type", description = "聊天类型:0小区群聊,1私聊"),
+        @Parameter(name = "chatPartnerId", description = "聊天对象id")
     })
     public Result<PageData<ChatLogDTO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> params){
+        if(params.get("type")==null || params.get("chatPartnerId")==null){
+            return new Result<PageData<ChatLogDTO>>().error(ErrorCode.NOT_NULL,"聊天类型和对象不能为空");
+        }
         PageData<ChatLogDTO> page = chatLogService.page(params);
 
         return new Result<PageData<ChatLogDTO>>().ok(page);
@@ -98,7 +105,7 @@ public class ChatLogController {
         //效验数据
         AssertUtils.isArrayEmpty(ids, "id");
 
-        chatLogService.delete(ids);
+        chatLogService.deleteBatchIds(Arrays.asList(ids));
 
         return new Result();
     }

+ 8 - 2
yezhu-api/src/main/java/com/kioor/chat/dao/ChatLogDao.java

@@ -1,9 +1,13 @@
 package com.kioor.chat.dao;
 
-import com.kioor.common.dao.BaseDao;
+import com.kioor.chat.dto.ChatLogDTO;
 import com.kioor.chat.entity.ChatLogEntity;
+import com.kioor.common.dao.BaseDao;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+import java.util.Map;
+
 /**
 * 聊天记录
 *
@@ -12,5 +16,7 @@ import org.apache.ibatis.annotations.Mapper;
 */
 @Mapper
 public interface ChatLogDao extends BaseDao<ChatLogEntity> {
-	
+    List<ChatLogDTO> getList(Map<String, Object> params);
+
+    ChatLogDTO get(Long id);
 }

+ 2 - 0
yezhu-api/src/main/java/com/kioor/chat/dto/ChatLogDTO.java

@@ -31,5 +31,7 @@ public class ChatLogDTO implements Serializable {
     private Long editUser;
     @Schema(description = "编辑时间")
     private Date editTime;
+    @Schema(description = "发言人房号")
+    private String roomName;
 
 }

+ 8 - 5
yezhu-api/src/main/java/com/kioor/chat/entity/ChatLogEntity.java

@@ -1,10 +1,10 @@
 package com.kioor.chat.entity;
 
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.kioor.common.entity.BaseEntity;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 
+import java.io.Serializable;
 import java.util.Date;
 
 /**
@@ -14,10 +14,13 @@ import java.util.Date;
  * @since 3.0 2024-07-17
  */
 @Data
-@EqualsAndHashCode(callSuper=false)
 @TableName("tb_chat_log")
-public class ChatLogEntity extends BaseEntity {
-	private static final long serialVersionUID = 1L;
+public class ChatLogEntity  implements Serializable {
+	/**
+	 * ID
+	 */
+	@TableId
+	private Long id;
 
 	/**
 	* 类型:0小区群聊,1私聊

+ 14 - 2
yezhu-api/src/main/java/com/kioor/chat/service/ChatLogService.java

@@ -1,8 +1,12 @@
 package com.kioor.chat.service;
 
 import com.kioor.chat.dto.ChatLogDTO;
-import com.kioor.common.service.CrudService;
 import com.kioor.chat.entity.ChatLogEntity;
+import com.kioor.common.page.PageData;
+import com.kioor.common.service.BaseService;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * 聊天记录
@@ -10,6 +14,14 @@ import com.kioor.chat.entity.ChatLogEntity;
  * @author Toby javatangbin@163.com
  * @since 3.0 2024-07-17
  */
-public interface ChatLogService extends CrudService<ChatLogEntity, ChatLogDTO> {
+public interface ChatLogService extends BaseService<ChatLogEntity> {
+    PageData<ChatLogDTO> page(Map<String, Object> params);
+
+    List<ChatLogDTO> list(Map<String, Object> params);
+
+    ChatLogDTO get(Long id);
+
+    void save(ChatLogDTO dto);
 
+    void update(ChatLogDTO dto);
 }

+ 57 - 13
yezhu-api/src/main/java/com/kioor/chat/service/impl/ChatLogServiceImpl.java

@@ -1,14 +1,18 @@
 package com.kioor.chat.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.kioor.chat.dao.ChatLogDao;
 import com.kioor.chat.dto.ChatLogDTO;
 import com.kioor.chat.entity.ChatLogEntity;
 import com.kioor.chat.service.ChatLogService;
-import com.kioor.common.service.impl.CrudServiceImpl;
-import org.apache.commons.lang3.StringUtils;
+import com.kioor.common.constant.Constant;
+import com.kioor.common.page.PageData;
+import com.kioor.common.service.impl.BaseServiceImpl;
+import com.kioor.common.utils.CommonUtils;
+import com.kioor.common.utils.ConvertUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -18,21 +22,61 @@ import java.util.Map;
  * @since 3.0 2024-07-17
  */
 @Service
-public class ChatLogServiceImpl extends CrudServiceImpl<ChatLogDao, ChatLogEntity, ChatLogDTO> implements ChatLogService {
+public class ChatLogServiceImpl extends BaseServiceImpl<ChatLogDao, ChatLogEntity> implements ChatLogService {
 
+    /**
+     * 分页
+     */
     @Override
-    public QueryWrapper<ChatLogEntity> getWrapper(Map<String, Object> params){
-        QueryWrapper<ChatLogEntity> wrapper = new QueryWrapper<>();
+    public PageData<ChatLogDTO> page(Map<String, Object> params) {
 
-        String type = (String)params.get("type");
-        wrapper.eq(StringUtils.isNotBlank(type), "type", type);
-        String chatPartnerId = (String)params.get("chatPartnerId");
-        wrapper.eq(StringUtils.isNotBlank(chatPartnerId), "chat_partner_id", chatPartnerId);
-        String editUser = (String)params.get("editUser");
-        wrapper.eq(StringUtils.isNotBlank(editUser), "edit_user", editUser);
+        //分页
+        IPage<ChatLogEntity> page = getPage(params, Constant.CREATE_DATE, false);
 
-        return wrapper;
+        //查询
+        List<ChatLogDTO> list = baseDao.getList(params);
+        //根据是否显示姓名和是否显示房号隐藏对应的数据
+        list.forEach(this::hiddenInformation);
+
+
+        return getPageData(list, page.getTotal(), ChatLogDTO.class);
+    }
+
+    @Override
+    public List<ChatLogDTO> list(Map<String, Object> params) {
+
+        //查询
+        List<ChatLogDTO> list = baseDao.getList(params);
+        //根据是否显示姓名和是否显示房号隐藏对应的数据
+        list.forEach(this::hiddenInformation);
+        return list;
+    }
+
+    @Override
+    public ChatLogDTO get(Long id) {
+
+        ChatLogDTO dto = baseDao.get(id);
+        hiddenInformation(dto);
+        return dto;
+    }
+
+    private void hiddenInformation(ChatLogDTO dto){
+        if(dto.getShowRoomFlag() != 1){
+            dto.setRoomName(CommonUtils.hiddenInformation(dto.getRoomName()));
+        }
     }
 
+    @Override
+    public void save(ChatLogDTO dto) {
+        ChatLogEntity entity =  ConvertUtils.sourceToTarget(dto, ChatLogEntity.class);
+        insert(entity);
+    }
+
+    @Override
+    public void update(ChatLogDTO dto) {
+        ChatLogEntity entity = ConvertUtils.sourceToTarget(dto, ChatLogEntity.class);
+
+        updateById(entity);
+    }
 
 }

+ 32 - 5
yezhu-api/src/main/java/com/kioor/websocket/WebSocketServer.java

@@ -8,6 +8,8 @@
 
 package com.kioor.websocket;
 
+import com.kioor.chat.dto.ChatLogDTO;
+import com.kioor.chat.service.ChatLogService;
 import com.kioor.common.exception.ErrorCode;
 import com.kioor.common.exception.RenException;
 import com.kioor.common.redis.RedisKeys;
@@ -31,6 +33,7 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -143,11 +146,7 @@ public class WebSocketServer {
 
             MessageData<String> message = new MessageData<String>().msg(msg);
             switch(fromMsgDetail.getToType()){
-                case 1:
-                    //发送给指定用户
-                    sendMessage(fromMsgDetail.getToId(), message);
-                    break;
-                case 2:
+                case 0:
                     //发送给小区业主群
                     //从redis通过小区id查找小区用户id
                     Map<String,Object> userList =redisUtils.hGetAll(RedisKeys.getSocketGroupUserKey()+fromMsgDetail.getToId());
@@ -156,6 +155,12 @@ public class WebSocketServer {
                         List<Long> userIdList = userList.keySet().stream().map(Long::parseLong).toList();
                         sendMessage(userIdList, message);
                     }
+                    //保存到小区群聊的聊天记录中
+                    saveChatLog(0, fromMsgDetail.getToId(), 1, servers.get(session.getId()).getUserId(), fromMsgDetail.getMessage());
+                    break;
+                case 1:
+                    //发送给指定用户
+                    sendMessage(fromMsgDetail.getToId(), message);
                     break;
                 default:
                     break;
@@ -163,6 +168,28 @@ public class WebSocketServer {
         }
     }
 
+    /**
+     * 保存聊天记录
+     * @param type
+     * @param chatPartnerId
+     * @param showRoomFlag
+     * @param userId
+     * @param content
+     */
+    private void saveChatLog(int type, Long chatPartnerId,int showRoomFlag,Long userId,String content){
+        ChatLogDTO dto = new ChatLogDTO();
+        ChatLogService chatLogService = applicationContext.getBean(ChatLogService.class);
+        dto.setType(type);
+        dto.setChatPartnerId(chatPartnerId);
+        dto.setShowRoomFlag(showRoomFlag);
+        dto.setContent(content);
+        dto.setEditUser(userId);
+        dto.setEditTime(new Date());
+        if(dto.getShowRoomFlag()==null){
+            dto.setShowRoomFlag(1);
+        }
+        chatLogService.save(dto);
+    }
     /**
      * 发送信息
      *

+ 1 - 1
yezhu-api/src/main/java/com/kioor/websocket/dto/MsgWebSocket.java

@@ -35,7 +35,7 @@ public class MsgWebSocket {
      */
     private String fromRoomStr;
     /**
-     * 接收者类型(0-个人,1-小区业主群)
+     * 接收者类型(0-小区业主群,1-个人
      */
     private int toType;
     /**

+ 22 - 9
yezhu-api/src/main/resources/mapper/chat/ChatLogDao.xml

@@ -3,14 +3,27 @@
 
 <mapper namespace="com.kioor.chat.dao.ChatLogDao">
 
-    <resultMap type="com.kioor.chat.entity.ChatLogEntity" id="chatLogMap">
-        <result property="id" column="id"/>
-        <result property="type" column="type"/>
-        <result property="chatPartnerId" column="chat_partner_id"/>
-        <result property="content" column="content"/>
-        <result property="showRoomFlag" column="show_room_flag"/>
-        <result property="editUser" column="edit_user"/>
-        <result property="editTime" column="edit_time"/>
-    </resultMap>
+    <select id="getList" resultType="com.kioor.chat.dto.ChatLogDTO">
+        select tcl.*, tuhe.remark as roomName
+        from tb_chat_log tcl
+        left join tb_user tu on tcl.edit_user = tu.id
+        left join tb_user_housing_estate tuhe on tu.id = tuhe.user_id
+        <where>
+            <if test="type != null">
+                and tcl.type = #{type}
+            </if>
+            <if test="chatPartnerId != null">
+                and tcl.chat_partner_id = #{chatPartnerId}
+            </if>
+        </where>
+        order by tcl.edit_time asc
+    </select>
 
+    <select id="get" resultType="com.kioor.chat.dto.ChatLogDTO">
+        select tcl.*, tuhe.remark as roomName
+        from tb_chat_log tcl
+                 left join tb_user tu on tcl.edit_user = tu.id
+                 left join tb_user_housing_estate tuhe on tu.id = tuhe.user_id
+        where tcl.id = #{id}
+    </select>
 </mapper>