Browse Source

feat:
新增聊天室置顶功能

18339543638 2 years ago
parent
commit
06851cf1cc

+ 22 - 4
nb-im/src/main/java/com/nb/im/controller/ImRoomController.java

@@ -2,6 +2,7 @@ package com.nb.im.controller;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -22,13 +23,10 @@ import com.nb.im.entity.ImRoomEntity;
 import com.nb.im.room.ImRoomOperator;
 import com.nb.im.room.ImRoomOperatorManager;
 import com.nb.im.service.LocalImMsgService;
-import com.nb.im.service.dto.ImRoomDTO;
-import com.nb.im.service.dto.ImRoomDetailDTO;
+import com.nb.im.service.dto.*;
 import com.nb.im.enums.ImStatusEnum;
 import com.nb.im.enums.SponsorEnum;
 import com.nb.im.service.LocalImRoomService;
-import com.nb.im.service.dto.ImRoomQuery;
-import com.nb.im.service.dto.ImRoomResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -59,6 +57,26 @@ public class ImRoomController implements BaseSaveController<ImRoomEntity,String>
     }
 
 
+    @PostMapping("/doctor/no_page")
+    @ApiOperation(value = "医生聊天室全部列表查询(最近一个月)",notes = "当一个病人存在多个聊天室时,进查询最近的一次,走非条件查询,条件查询请于安卓端自行实现")
+    public R<List<ImRoomResult>> recentList(@RequestBody@Validated ImRoomDoctorQuery query){
+        //仅查询最近一个月信息
+        List<ImRoomResult> result= imRoomService.getBaseMapper().queryDoctorRecentList(query);
+        return R.success(result);
+    }
+
+    @PostMapping("/invert/top/{roomId}")
+    @ApiOperation(value = "反转医生聊天室置顶状态")
+    public R<Boolean> invertTop(@PathVariable("roomId") String roomId){
+        //仅查询最近一个月信息
+        ImRoomEntity room = imRoomService.getById(roomId);
+        if (ObjectUtil.isNotNull(room)) {
+            room.setDoctorTop(!Boolean.TRUE.equals(room.getDoctorTop()));
+            return R.success(imRoomService.updateById(room));
+        }
+        return R.success(true);
+    }
+
     @ApiOperation(value = "查询并自动创建与病人看护人的聊天室",notes = "若存在,则返回聊天室信息,若不存在,则返回空")
     @PostMapping("/look")
     public R<ImRoomEntity> getChatRoom(@RequestBody@Validated ImRoomDTO source){

+ 3 - 0
nb-im/src/main/java/com/nb/im/entity/ImRoomEntity.java

@@ -100,6 +100,8 @@ public class ImRoomEntity extends GenericEntity<String> {
     @ApiModelProperty("监控结束时间")
     private Date monitorFinishedTime;
 
+    @ApiModelProperty("医生置顶状态")
+    private Boolean doctorTop;
     /**
      * 描述: 由看护人发起的咨询或一件疼痛呼叫
      * @author lifang
@@ -121,6 +123,7 @@ public class ImRoomEntity extends GenericEntity<String> {
         result.setTotalCount(1);
         //等待医生确认
         result.setStatus(ImStatusEnum.WAITING);
+        result.setDoctorTop(false);
         //默认院内管理
         Map<String, Object> properties = source.getProperties();
         ClinicManageEnum manageType=ClinicManageEnum.hospital;

+ 2 - 1
nb-im/src/main/java/com/nb/im/mapper/ImRoomMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.nb.im.entity.ImRoomEntity;
+import com.nb.im.service.dto.ImRoomDoctorQuery;
 import com.nb.im.service.dto.ImRoomQuery;
 import com.nb.im.service.dto.ImRoomResult;
 import org.apache.ibatis.annotations.Mapper;
@@ -40,6 +41,6 @@ public interface ImRoomMapper extends BaseMapper<ImRoomEntity> {
 
     Long maxSort(@Param("roomId") String roomId);
 
-    List<ImRoomResult> queryDoctorRecentList(String doctorId);
+    List<ImRoomResult> queryDoctorRecentList(@Param("query") ImRoomDoctorQuery query);
 
 }

+ 42 - 0
nb-im/src/main/java/com/nb/im/service/dto/ImRoomDoctorQuery.java

@@ -0,0 +1,42 @@
+package com.nb.im.service.dto;
+
+import cn.hutool.core.date.DateUtil;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ImRoomQuery.java
+ * @Description TODO
+ * @createTime 2022年08月16日 22:46:00
+ */
+@Data
+@ApiModel("聊天室查询参数")
+public class ImRoomDoctorQuery {
+    @ApiModelProperty(value = "医生id",required = true)
+    @NotNull(message = "医生id不能为空")
+    private String doctorId;
+
+    @ApiModelProperty(value = "病人id")
+    private String patientId;
+
+    @ApiModelProperty(value = "管理位置",allowableValues = "0(院内管理) 1(居家管理)")
+    private Integer manageType;
+
+    @ApiModelProperty("病人信息(名称或住院号)")
+    private String patientInfo;
+
+    @ApiModelProperty("聊天内容")
+    private String record;
+
+    @ApiModelProperty(value = "成功建立连接时间,默认查询30天以内的聊天室列表",hidden = true)
+    @JsonIgnoreProperties
+    private Date successTime= DateUtil.offsetDay(new Date(),-30);
+}

+ 29 - 6
nb-im/src/main/resources/mapper/im/ImRoomMapper.xml

@@ -88,18 +88,22 @@
             ) as ru
             on ru.im_room_id=r.id
         </if>
-
+        <where>
+            <if test="query.successTime != null">
+                and r.success_time &lt; #{query.successTime}
+            </if>
+        </where>
         order by last_msg_time desc
     </select>
 
     <select id="queryPageMsgBlurry" resultMap="imRoomResult">
---         todo
+        --         todo
     </select>
 
 
     <select id="maxSort" resultType="java.lang.Long">
-                SELECT
-        MAX( sort )
+        SELECT
+            MAX( sort )
         FROM
             im_msg
         GROUP BY
@@ -131,11 +135,30 @@
             rm.msg_type as msg_type,
             rm.operation_type as operation_type
         from
-            im_room as r
+        (select * from im_room
+        <where>
+            <if test="query.doctorId != null">
+                and  doctor_id=#{query.doctorId}
+            </if>
+            <if test="query.patientInfo != null">
+                and (patient_code like concat('%',#{query.patientInfo},'%') or patient_name like concat('%',#{query.patientInfo},'%') )
+            </if>
+            <if test="query.manageType != null">
+                and manage_type=#{query.manageType}
+            </if>
+            <if test="query.patientId != null">
+                and patient_id=#{query.patientId}
+            </if>
+        </where>
+        ) as r
                 join (select MAX(id) as id,doctor_id,patient_id,assist_id from im_room group by doctor_id,patient_id,assist_id) as ir2 on r.id=ir2.id
                 left join (select * from im_msg) as rm
                           on rm.id=r.last_msg_id
-        where r.doctor_id=#{doctorId}
+        <where>
+            <if test="query.successTime != null">
+                and r.success_time &lt; #{query.successTime}
+            </if>
+        </where>
         order by doctor_top desc , case when (status =1) then  0 else 1  end desc ,create_time desc
     </select>
 </mapper>