Browse Source

add 看护人列表

18339543638 3 years ago
parent
commit
4c51f3eb06

+ 26 - 0
nb-im/src/main/java/com/nb/im/event/ImFinishedEvent.java

@@ -0,0 +1,26 @@
+package com.nb.im.event;
+
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ImFinishedEvent.java
+ * @Description 聊天室結束
+ * @createTime 2022年10月13日 10:56:00
+ */
+@Getter
+public class ImFinishedEvent extends ApplicationEvent {
+    private String assistId;
+    private String doctorId;
+    private String patientId;
+
+    public ImFinishedEvent(Object source, String assistId, String doctorId, String patientId) {
+        super(source);
+        this.assistId = assistId;
+        this.doctorId = doctorId;
+        this.patientId = patientId;
+    }
+
+}

+ 27 - 4
nb-im/src/main/java/com/nb/im/job/ImRoomJob.java

@@ -1,18 +1,26 @@
 package com.nb.im.job;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.nb.im.entity.ImRoomEntity;
 import com.nb.im.enums.ImStatusEnum;
+import com.nb.im.event.ImFinishedEvent;
 import com.nb.im.service.LocalImRoomService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.Scheduled;
 
+import javax.validation.constraints.NotNull;
 import java.util.Date;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @author lifang
@@ -40,12 +48,27 @@ public class ImRoomJob {
             Date now = new Date();
             //24小时之前的时间
             DateTime offset = DateUtil.offset( now, DateField.HOUR, -24);
-            imRoomService.update(new UpdateWrapper<ImRoomEntity>()
+            List<ImRoomEntity> rooms = imRoomService.list(new QueryWrapper<ImRoomEntity>()
                     .lambda()
                     .lt(ImRoomEntity::getSuccessTime, offset)
-                    .eq(ImRoomEntity::getStatus, ImStatusEnum.SUCCESS)
-                    .set(ImRoomEntity::getStatus, ImStatusEnum.AUTO_LIST)
-                    .set(ImRoomEntity::getUpdateTime,now));
+                    .eq(ImRoomEntity::getStatus, ImStatusEnum.SUCCESS));
+            if(CollectionUtil.isNotEmpty(rooms)){
+                Set<String> roomIds = rooms.stream().map(ImRoomEntity::getId).collect(Collectors.toSet());
+                boolean result = imRoomService.update(new UpdateWrapper<ImRoomEntity>()
+                        .lambda()
+                        .in(ImRoomEntity::getId, roomIds)
+                        .set(ImRoomEntity::getStatus, ImStatusEnum.AUTO_LIST)
+                        .set(ImRoomEntity::getUpdateTime, now)
+                );
+                if(result){
+                    rooms
+                            .stream()
+                            .map(room->
+                                    new ImFinishedEvent(this,room.getAssistId(),room.getDoctorId(),room.getPatientId())
+                            ).forEach(SpringUtil::publishEvent);
+                }
+            }
+
         }catch (Exception e){
             log.error("24小时自动结束聊天室失败,",e);
         }

+ 34 - 5
nb-im/src/main/java/com/nb/im/listener/ImPatientInfoListener.java

@@ -1,9 +1,14 @@
 package com.nb.im.listener;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.nb.app.assistant.api.event.AssistLiftEvent;
 import com.nb.im.entity.ImRoomEntity;
 import com.nb.im.enums.ImStatusEnum;
+import com.nb.im.event.ImFinishedEvent;
+import com.nb.app.assistant.api.event.ImNoneEvent;
 import com.nb.im.service.LocalImRoomService;
 import com.nb.web.api.event.PatientInfoEvent;
 import lombok.AllArgsConstructor;
@@ -11,6 +16,8 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.context.event.EventListener;
 import org.springframework.scheduling.annotation.Async;
 
+import java.util.List;
+
 /**
  * @author lifang
  * @version 1.0.0
@@ -40,11 +47,33 @@ public class ImPatientInfoListener {
     @EventListener
     @Async
     public void assistLift(AssistLiftEvent event){
-        roomService.update(new UpdateWrapper<ImRoomEntity>()
+        List<ImRoomEntity> rooms = roomService.list(new QueryWrapper<ImRoomEntity>()
+                .lambda()
+                .eq(ImRoomEntity::getAssistId, event.getAssistId())
+                .eq(ImRoomEntity::getPatientId, event.getPatientId())
+                .in(ImRoomEntity::getStatus, ImStatusEnum.SUCCESS, ImStatusEnum.WAITING)
+        );
+        if (CollectionUtil.isNotEmpty(rooms)) {
+            rooms.stream().map(ImRoomEntity::getId)
+                    .forEach(roomId->roomService.finished(roomId,true));
+        }
+    }
+
+
+
+    @EventListener
+    @Async
+    public void imFinished(ImFinishedEvent event){
+        long count = roomService.count(new QueryWrapper<ImRoomEntity>()
                 .lambda()
-                .eq(ImRoomEntity::getAssistId,event.getAssistId())
-                .eq(ImRoomEntity::getPatientId,event.getPatientId())
-                .in(ImRoomEntity::getStatus,ImStatusEnum.SUCCESS,ImStatusEnum.WAITING)
-                .set(ImRoomEntity::getStatus,ImStatusEnum.ASSIST_LIFT));
+                .eq(ImRoomEntity::getAssistId, event.getAssistId())
+                .eq(ImRoomEntity::getDoctorId, event.getDoctorId())
+                .eq(ImRoomEntity::getPatientId, event.getPatientId())
+                .eq(ImRoomEntity::getStatus, ImStatusEnum.SUCCESS));
+        if(count==0){
+            SpringUtil.publishEvent(new ImNoneEvent(this,event.getAssistId(),event.getDoctorId(),event.getPatientId()));
+        }
+
     }
+
 }

+ 24 - 3
nb-im/src/main/java/com/nb/im/service/LocalImRoomService.java

@@ -2,9 +2,11 @@ package com.nb.im.service;
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
+import com.nb.app.assistant.api.event.ImSuccessEvent;
 import com.nb.app.assistant.api.event.UpdateBindPatientEvent;
 import com.nb.app.assistant.api.feign.result.UpdateBindPatientParam;
 import com.nb.app.msg.enums.MsgEnum;
@@ -17,6 +19,7 @@ import com.nb.im.entity.ImRoomEntity;
 import com.nb.im.enums.ImMsgType;
 import com.nb.im.enums.ImStatusEnum;
 import com.nb.im.enums.SponsorEnum;
+import com.nb.im.event.ImFinishedEvent;
 import com.nb.im.mapper.ImRoomMapper;
 import com.nb.im.room.ImRoomOperator;
 import com.nb.im.room.ImRoomOperatorManager;
@@ -30,6 +33,7 @@ import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.swing.*;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -118,13 +122,15 @@ public class LocalImRoomService extends BaseService<ImRoomMapper, ImRoomEntity,S
     public void postUpdate(ImRoomEntity entity) {
         if(ImStatusEnum.SUCCESS.equals(entity.getStatus())){
             autoFinishRoom(entity.getId());
+            SpringUtil.publishEvent(new ImSuccessEvent(this,entity.getAssistId(),entity.getDoctorId(),entity.getPatientId()));
         }
     }
 
     @Override
     public void postSave(ImRoomEntity entity) {
         if(ImStatusEnum.SUCCESS.equals(entity.getStatus())){
-            autoFinishRoom(entity.getId());        }
+            autoFinishRoom(entity.getId());
+            SpringUtil.publishEvent(new ImSuccessEvent(this,entity.getAssistId(),entity.getDoctorId(),entity.getPatientId()));}
     }
 
     /**
@@ -165,12 +171,17 @@ public class LocalImRoomService extends BaseService<ImRoomMapper, ImRoomEntity,S
      */
     @Transactional(rollbackFor = Exception.class)
     public void successChatRoom(String chatRoomId,String doctorId) {
+        ImRoomEntity room = this.getById(chatRoomId);
+        if(room==null){
+            return;
+        }
         if (this.update(new UpdateWrapper<ImRoomEntity>()
                 .lambda()
                 .eq(ImRoomEntity::getId,chatRoomId)
                 .set(ImRoomEntity::getSuccessTime,new Date())
                 .set(ImRoomEntity::getStatus, ImStatusEnum.SUCCESS))) {
             autoFinishRoom(chatRoomId);
+            SpringUtil.publishEvent(new ImSuccessEvent(this,room.getAssistId(),room.getDoctorId(),room.getPatientId()));
         }
     }
 
@@ -187,13 +198,17 @@ public class LocalImRoomService extends BaseService<ImRoomMapper, ImRoomEntity,S
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public Boolean finished(String roomId) {
+    public Boolean finished(String roomId,boolean assistLift){
+        ImRoomEntity room = this.getById(roomId);
+        if(room==null){
+            return true;
+        }
         boolean result = this.update(new UpdateWrapper<ImRoomEntity>()
                 .lambda()
                 .eq(ImRoomEntity::getId, roomId)
                 .set(ImRoomEntity::getStatus, ImStatusEnum.DOCTOR_LIFT));
 
-        if(result){
+        if(result&&!assistLift){
             ImRoomOperator roomOperator = roomOperatorManager.getRoomOperator(roomId);
             imUtils.send(roomId,
                     PubMsgInfo.builder()
@@ -206,10 +221,16 @@ public class LocalImRoomService extends BaseService<ImRoomMapper, ImRoomEntity,S
                             .operationType(MsgEnum.FINISHED)
                             .build());
             roomOperator.close();
+            SpringUtil.publishEvent( new ImFinishedEvent(this,room.getAssistId(),room.getDoctorId(),room.getPatientId()));
         }
         return result;
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean finished(String roomId) {
+        return finished(roomId,false);
+    }
+
 
     private void autoFinishRoom(String roomId){
         delayMessageManager.add(new DelayMessage(Value.simple(roomId),AUTO_FINISH_DELAY, DelayMessageProperties.of(TimeUnit.MINUTES,1)));

+ 3 - 0
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/entity/AssistantUserBindEntity.java

@@ -68,6 +68,9 @@ public class AssistantUserBindEntity extends GenericEntity<String> {
     @ApiModelProperty(value = "是否为默认看护")
     private Boolean default_;
 
+    @ApiModelProperty(value = "是否存在聊天室")
+    private Boolean existIm;
+
     @ApiModelProperty(value = "申请类型",required = true,example = " 0(手动申请) 1(邀请码申请)")
     private ApplyEnum applyType;
 

+ 25 - 0
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/event/ImNoneEvent.java

@@ -0,0 +1,25 @@
+package com.nb.app.assistant.api.event;
+
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ImNoneEvent.java
+ * @Description 病人、看护人、医生三者之间的聊天室全部结束
+ * @createTime 2022年10月13日 11:00:00
+ */
+@Getter
+public class ImNoneEvent extends ApplicationEvent {
+    private String assistId;
+    private String doctorId;
+    private String patientId;
+
+    public ImNoneEvent(Object source, String assistId, String doctorId, String patientId) {
+        super(source);
+        this.assistId = assistId;
+        this.doctorId = doctorId;
+        this.patientId = patientId;
+    }
+}

+ 25 - 0
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/event/ImSuccessEvent.java

@@ -0,0 +1,25 @@
+package com.nb.app.assistant.api.event;
+
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ImNoneEvent.java
+ * @Description 病人、看护人、医生三者之间的聊天室成功建立
+ * @createTime 2022年10月13日 11:00:00
+ */
+@Getter
+public class ImSuccessEvent extends ApplicationEvent {
+    private String assistId;
+    private String doctorId;
+    private String patientId;
+
+    public ImSuccessEvent(Object source, String assistId, String doctorId, String patientId) {
+        super(source);
+        this.assistId = assistId;
+        this.doctorId = doctorId;
+        this.patientId = patientId;
+    }
+}

+ 9 - 1
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/IAssistantUserBindClient.java

@@ -3,6 +3,7 @@ package com.nb.app.assistant.api.feign;
 import com.nb.app.assistant.api.bean.HandleBindResult;
 import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
 import com.nb.app.assistant.api.feign.result.ContactQuery;
+import com.nb.app.assistant.api.feign.result.PatientBindAssistantResult;
 import com.nb.app.assistant.api.feign.result.UpdateBindPatientParam;
 
 import java.util.*;
@@ -68,5 +69,12 @@ public interface IAssistantUserBindClient {
 
     boolean updateBindPatient(UpdateBindPatientParam patientParam);
 
-    List<AssistantUserBindEntity> listAssist(String patientId);
+    /**
+     * 描述: 病人看护人列表
+     * @author lifang
+     * @date 2022/10/13 10:27
+     * @param patientId
+     * @return List<PatientBindAssistantResult>
+     */
+    List<PatientBindAssistantResult> listAssist(String patientId);
 }

+ 40 - 0
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/result/PatientBindAssistantResult.java

@@ -0,0 +1,40 @@
+package com.nb.app.assistant.api.feign.result;
+
+import com.nb.core.enums.SexEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName AssistantUserResult.java
+ * @Description TODO
+ * @createTime 2022年08月13日 09:16:00
+ */
+@Data
+@ApiModel("病人看护人信息")
+public class PatientBindAssistantResult implements Serializable {
+    private static final long serialVersionUID=1L;
+    @ApiModelProperty("绑定关系id")
+    private String id;
+    @ApiModelProperty("看护人Id")
+    private String assistId;
+    @ApiModelProperty("病人id")
+    private String patientId;
+    @ApiModelProperty("看护人昵称")
+    private String nickname;
+    @ApiModelProperty("看护人头像地址")
+    private String avatar;
+    @ApiModelProperty("看护人手机号")
+    private String phone;
+    @ApiModelProperty("看护人性别")
+    private SexEnum sex;
+    @ApiModelProperty("创建时间")
+    private Date creatTime;
+    @ApiModelProperty("是否存在聊天室")
+    private boolean existImRoom;
+}

+ 26 - 0
nb-service/app-assistant/src/main/java/com/nb/app/assistant/listener/AssistPatientInfoListener.java

@@ -3,6 +3,8 @@ package com.nb.app.assistant.listener;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
 import com.nb.app.assistant.api.enums.BindEnum;
+import com.nb.app.assistant.api.event.ImNoneEvent;
+import com.nb.app.assistant.api.event.ImSuccessEvent;
 import com.nb.app.assistant.service.LocalAssistantUserBindService;
 import com.nb.web.api.event.PatientInfoEvent;
 import lombok.AllArgsConstructor;
@@ -34,4 +36,28 @@ public class AssistPatientInfoListener {
                 .set(AssistantUserBindEntity::getPatientSex,patientInfoEvent.getPatientSex())
         );
     }
+
+    @EventListener
+    @Async
+    public void imNone(ImNoneEvent event){
+        userBindService.update(new UpdateWrapper<AssistantUserBindEntity>()
+                .lambda()
+                .eq(AssistantUserBindEntity::getPatientId,event.getPatientId())
+                .eq(AssistantUserBindEntity::getDoctorId,event.getDoctorId())
+                .eq(AssistantUserBindEntity::getAssistId,event.getAssistId())
+                .eq(AssistantUserBindEntity::getStatus, BindEnum.SUCCESS)
+                .set(AssistantUserBindEntity::getExistIm,false));
+    }
+
+    @EventListener
+    @Async
+    public void imNone(ImSuccessEvent event){
+        userBindService.update(new UpdateWrapper<AssistantUserBindEntity>()
+                .lambda()
+                .eq(AssistantUserBindEntity::getPatientId,event.getPatientId())
+                .eq(AssistantUserBindEntity::getDoctorId,event.getDoctorId())
+                .eq(AssistantUserBindEntity::getAssistId,event.getAssistId())
+                .eq(AssistantUserBindEntity::getStatus, BindEnum.SUCCESS)
+                .set(AssistantUserBindEntity::getExistIm,true));
+    }
 }

+ 6 - 0
nb-service/app-assistant/src/main/java/com/nb/app/assistant/mapper/AssistantUserBindMapper.java

@@ -2,7 +2,11 @@ package com.nb.app.assistant.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
+import com.nb.app.assistant.api.feign.result.PatientBindAssistantResult;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @author lifang
@@ -13,4 +17,6 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface AssistantUserBindMapper extends BaseMapper<AssistantUserBindEntity> {
+
+    List<PatientBindAssistantResult> listAssistByPatientId(@Param("patientId") String patientId);
 }

+ 5 - 5
nb-service/app-assistant/src/main/java/com/nb/app/assistant/service/LocalAssistantUserBindService.java

@@ -15,6 +15,7 @@ import com.nb.app.assistant.api.feign.result.AssistantUserResult;
 import com.nb.app.assistant.api.enums.ApplyEnum;
 import com.nb.app.assistant.api.enums.BindEnum;
 import com.nb.app.assistant.api.feign.result.ContactQuery;
+import com.nb.app.assistant.api.feign.result.PatientBindAssistantResult;
 import com.nb.app.assistant.api.feign.result.UpdateBindPatientParam;
 import com.nb.app.assistant.constant.UnEvalConstant;
 import com.nb.app.assistant.delay.UnEvalNotifyConfig;
@@ -67,7 +68,7 @@ public class LocalAssistantUserBindService extends BaseService<AssistantUserBind
 
     @Override
     public void validateBeforeSave(AssistantUserBindEntity entity) {
-
+        entity.setExistIm(false);
     }
 
     @Override
@@ -82,6 +83,7 @@ public class LocalAssistantUserBindService extends BaseService<AssistantUserBind
 
     @Override
     public boolean save(AssistantUserBindEntity entity) {
+        entity.setExistIm(false);
         String id = String.valueOf(SecurityUtil.getId());
         if(StrUtil.isEmpty(entity.getPatientId())){
             entity.setPatientId(patientClient.lookPatientId(entity.getTenantId(),entity.getPatientCode()));
@@ -344,10 +346,8 @@ public class LocalAssistantUserBindService extends BaseService<AssistantUserBind
     }
 
     @Override
-    public List<AssistantUserBindEntity> listAssist(String patientId) {
-        return this.list(new QueryWrapper<AssistantUserBindEntity>().lambda()
-        .eq(AssistantUserBindEntity::getPatientId,patientId)
-        .eq(AssistantUserBindEntity::getStatus,BindEnum.SUCCESS));
+    public List<PatientBindAssistantResult> listAssist(String patientId) {
+        return this.baseMapper.listAssistByPatientId(patientId);
     }
 
     /**

+ 33 - 0
nb-service/app-assistant/src/main/resources/mapper/AssistantUserBindMapper.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.nb.app.assistant.mapper.AssistantUserBindMapper">
+
+
+    <resultMap id="assistPatientResult" type="com.nb.app.assistant.api.feign.result.PatientBindAssistantResult">
+        <result property="id" column="id"/>
+        <result property="creatTime" column="create_time"/>
+        <result property="assistId" column="assist_id"/>
+        <result property="nickname" column="nickname"/>
+        <result property="patientId" column="patient_id"/>
+        <result property="avatar" column="avatar"/>
+        <result property="phone" column="phone"/>
+        <result property="phone" column="phone"/>
+        <result property="existImRoom" column="exist_im"/>
+    </resultMap>
+
+    <select id="listAssistByPatientId" resultMap="assistPatientResult" >
+            select ub.id as id,
+            ub.create_time as create_time,
+            IFNULL(ub.exist_im ,0)as exist_im,
+            u.id as assist_id,
+            u.nickname as nickname,
+            ub.patient_id as patient_id,
+            u.avatar as avatar,
+            u.phone as phone
+            from assistant_user_bind as ub INNER JOIN assistant_user as u
+            on ub.assist_id = u.id
+            where ub.status='1' and  ub.patient_id=#{patientId}
+            order by ub.exist_im desc , ub.create_time desc
+    </select>
+
+</mapper>

+ 2 - 1
nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/PatientMonitorController.java

@@ -7,6 +7,7 @@ import com.nb.app.assistant.api.bean.HandleBindResult;
 import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
 import com.nb.app.assistant.api.feign.IAssistantUserBindClient;
 import com.nb.app.assistant.api.feign.result.ContactQuery;
+import com.nb.app.assistant.api.feign.result.PatientBindAssistantResult;
 import com.nb.app.assistant.api.feign.result.UpdateBindPatientParam;
 import com.nb.app.doctor.controller.vo.ChangeManageVo;
 import com.nb.app.doctor.controller.vo.InviteCodeVo;
@@ -150,7 +151,7 @@ public class PatientMonitorController {
 
     @PostMapping("/list/assist/{patientId}")
     @ApiOperation(value = "查看病人看护人列表")
-    public R<List<AssistantUserBindEntity>> listAssist(@PathVariable("patientId") String patientId) {
+    public R<List<PatientBindAssistantResult>> listAssist(@PathVariable("patientId") String patientId) {
         return R.success(userBindClient.listAssist(patientId));
     }
 }