소스 검색

fix ws授权模块

18339543638 3 년 전
부모
커밋
dd57d31bbc
23개의 변경된 파일482개의 추가작업 그리고 41개의 파일을 삭제
  1. 2 2
      nb-common/ws-common/src/main/java/com/nb/common/websocket/DefaultWebSocketMsgHandler.java
  2. 19 9
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/entity/AssistantUserBindEntity.java
  3. 1 1
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/enums/ApplyEnum.java
  4. 3 2
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/enums/BindEnum.java
  5. 22 0
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/IAssistantUserBindClient.java
  6. 15 0
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/IAssistantUserClient.java
  7. 18 0
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/result/AssistantUserResult.java
  8. 11 4
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IPatientClient.java
  9. 27 0
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/query/ContactQuery.java
  10. 23 0
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/result/ContactPatientResult.java
  11. 24 4
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/PatientOperationController.java
  12. 11 1
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/vo/MonitorAddVo.java
  13. 1 1
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/entity/AssistantUserEntity.java
  14. 1 1
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/mapper/AssistantUserBindMapper.java
  15. 40 9
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/service/LocalAssistantUserBindService.java
  16. 9 1
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/service/LocalAssistantUserService.java
  17. 77 2
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/ContactsController.java
  18. 26 0
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/vo/ContactDetailVo.java
  19. 60 0
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/dto/ContactDetailResult.java
  20. 34 0
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/dto/ContactResult.java
  21. 7 0
      nb-service/web-service/src/main/java/com/nb/web/service/bus/mapper/BusPatientMapper.java
  22. 7 4
      nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java
  23. 44 0
      nb-service/web-service/src/main/resources/mapper/bus/BusPatientMapper.xml

+ 2 - 2
nb-common/ws-common/src/main/java/com/nb/common/websocket/DefaultWebSocketMsgHandler.java

@@ -87,7 +87,7 @@ public class DefaultWebSocketMsgHandler implements IWsMsgHandler {
         try {
             synchronized (channelContext.getId()){
                 if(log.isDebugEnabled()){
-                    log.debug("websocket 接收到消息,message:{},token:{},userId:{}",message,channelContext.getToken(),JSONUtil.toJsonStr(channelContext.get(Constants.LOGIN_USER_KEY)));
+                    log.debug("websocket 接收到消息,message:{},token:{},assistId:{}",message,channelContext.getToken(),JSONUtil.toJsonStr(channelContext.get(Constants.LOGIN_USER_KEY)));
                 }
                 Object user = channelContext.get(Constants.LOGIN_USER_KEY);
                 if(ObjectUtil.isNotNull(user)){
@@ -97,7 +97,7 @@ public class DefaultWebSocketMsgHandler implements IWsMsgHandler {
                 }
             }
         }catch (Exception e){
-            log.warn("websocket 接收到异常请求,token:{},message:{},userId:{}",channelContext.getToken(),message,JSONUtil.toJsonStr(channelContext.get(Constants.LOGIN_USER_KEY)));
+            log.warn("websocket 接收到异常请求,token:{},message:{},assistId:{}",channelContext.getToken(),message,JSONUtil.toJsonStr(channelContext.get(Constants.LOGIN_USER_KEY)));
             channelContext.setCloseCode(ChannelContext.CloseCode.HEARTBEAT_TIMEOUT);
             Tio.remove(channelContext,  "接受数据不符合业务规范");
         }

+ 19 - 9
nb-service/app-assistant/src/main/java/com/nb/app/assistant/entity/AssistantUserBindEntity.java → nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/entity/AssistantUserBindEntity.java

@@ -1,10 +1,11 @@
-package com.nb.app.assistant.entity;
+package com.nb.app.assistant.api.entity;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.nb.app.assistant.enums.ApplyEnum;
-import com.nb.app.assistant.enums.BindEnum;
+import com.nb.app.assistant.api.enums.ApplyEnum;
+import com.nb.app.assistant.api.enums.BindEnum;
 import com.nb.core.entity.GenericEntity;
+import com.nb.core.enums.SexEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -12,7 +13,7 @@ import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import lombok.ToString;
 
-import javax.validation.constraints.NotNull;
+import java.util.Date;
 
 /**
  * @author lifang
@@ -29,19 +30,26 @@ import javax.validation.constraints.NotNull;
 @NoArgsConstructor
 public class AssistantUserBindEntity extends GenericEntity<String> {
     @ApiModelProperty(value = "用户id",required = true)
-    private String userId;
+    private String assistId;
+
+    @ApiModelProperty(value = "用户昵称",required = true)
+    private String assistNickname;
 
     @ApiModelProperty(value = "病人id",required = true)
     private String patientId;
 
-    @ApiModelProperty(hidden = true)
-    @TableField(exist = false)
+    @ApiModelProperty(value = "住院号",required = true)
     private String patientCode;
 
-    @ApiModelProperty(hidden = true)
-    @TableField(exist = false)
+    @ApiModelProperty(value = "病人姓名",required = true)
     private String patientName;
 
+    @ApiModelProperty(value = "病人性别",required = true)
+    private SexEnum patientSex;
+
+    @ApiModelProperty(value = "病人年龄",required = true)
+    private String patientAge;
+
     @ApiModelProperty(value = "医生id",required = true)
     private String doctorId;
 
@@ -49,6 +57,8 @@ public class AssistantUserBindEntity extends GenericEntity<String> {
     @TableField(exist = false)
     private String doctorName;
 
+    @ApiModelProperty(value = "临床结束管理时的时间",required = true)
+    private Date monitorFinishedTime;
 
     @ApiModelProperty(value = "申请类型",required = true,allowableValues = "0(手动申请) 1(邀请码申请)")
     private ApplyEnum applyType;

+ 1 - 1
nb-service/app-assistant/src/main/java/com/nb/app/assistant/enums/ApplyEnum.java → nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/enums/ApplyEnum.java

@@ -1,4 +1,4 @@
-package com.nb.app.assistant.enums;
+package com.nb.app.assistant.api.enums;
 
 import com.baomidou.mybatisplus.annotation.IEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;

+ 3 - 2
nb-service/app-assistant/src/main/java/com/nb/app/assistant/enums/BindEnum.java → nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/enums/BindEnum.java

@@ -1,4 +1,4 @@
-package com.nb.app.assistant.enums;
+package com.nb.app.assistant.api.enums;
 
 import com.baomidou.mybatisplus.annotation.IEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -20,7 +20,8 @@ public enum  BindEnum  implements IEnum<Integer> {
     WAITING(1,"等待医生进行绑定操作"),
     SUCCESS(2,"绑定成功"),
     REFUSE(3,"拒绝"),
-    LIFTED(4,"已断开")
+    AUTO_LIFTED(4,"自动断开"),
+    MANUAL_LIFTED(5,"手动断开")
 ;
     @Getter
     @ApiModelProperty("报警编码")

+ 22 - 0
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/IAssistantUserBindClient.java

@@ -0,0 +1,22 @@
+package com.nb.app.assistant.api.feign;
+
+import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
+import java.util.*;
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName IAssistantUserBindClient.java
+ * @Description TODO
+ * @createTime 2022年08月12日 15:51:00
+ */
+public interface IAssistantUserBindClient {
+
+    /**
+     * 描述: 获取所给医院医生所有绑定的病人信息
+     * @author lifang
+     * @date 2022/8/12 15:53
+     * @param doctorId
+     * @return List<AssistantUserBindEntity>
+     */
+    List<AssistantUserBindEntity> list(String doctorId);
+}

+ 15 - 0
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/IAssistantUserClient.java

@@ -0,0 +1,15 @@
+package com.nb.app.assistant.api.feign;
+
+import com.nb.app.assistant.api.feign.result.AssistantUserResult;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName IAssistantUserClient.java
+ * @Description TODO
+ * @createTime 2022年08月13日 09:16:00
+ */
+public interface IAssistantUserClient {
+
+    AssistantUserResult getById(String id);
+}

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

@@ -0,0 +1,18 @@
+package com.nb.app.assistant.api.feign.result;
+
+import lombok.Data;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName AssistantUserResult.java
+ * @Description TODO
+ * @createTime 2022年08月13日 09:16:00
+ */
+@Data
+public class AssistantUserResult {
+    private String id;
+    private String nickname;
+    private String avatar;
+    private String phone;
+}

+ 11 - 4
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IPatientClient.java

@@ -1,11 +1,9 @@
 package com.nb.web.api.feign;
 
 import com.nb.web.api.enums.ClinicManageEnum;
+import com.nb.web.api.feign.query.ContactQuery;
 import com.nb.web.api.feign.query.PatientMonitorQuery;
-import com.nb.web.api.feign.result.InviteCodeResult;
-import com.nb.web.api.feign.result.PatientByInviteCodeResult;
-import com.nb.web.api.feign.result.PatientMonitorDetailResult;
-import com.nb.web.api.feign.result.PatientMonitorResult;
+import com.nb.web.api.feign.result.*;
 
 import java.util.List;
 
@@ -57,4 +55,13 @@ public interface IPatientClient {
      * @return PatientByInviteCodeResult
      */
     PatientByInviteCodeResult lookPatientByInviteCode(String inviteCode);
+
+    /**
+     * 描述: 查询通讯录列表
+     * @author lifang
+     * @date 2022/8/12 16:57
+     * @param query
+     * @return void
+     */
+    List<ContactPatientResult> contactList(ContactQuery query);
 }

+ 27 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/query/ContactQuery.java

@@ -0,0 +1,27 @@
+package com.nb.web.api.feign.query;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.*;
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ContactQuery.java
+ * @Description TODO
+ * @createTime 2022年08月12日 15:48:00
+ */
+@Data
+@ApiModel("通讯录查询条件")
+public class ContactQuery {
+    @ApiModelProperty("病人名称")
+    private String blurry;
+    @ApiModelProperty("院内/居家")
+    private Integer manageType;
+
+    @ApiModelProperty(hidden = true)
+    private List<String> patientIds;
+
+    @ApiModelProperty(hidden = true)
+    private String tenantId;
+}

+ 23 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/result/ContactPatientResult.java

@@ -0,0 +1,23 @@
+package com.nb.web.api.feign.result;
+
+import com.nb.core.enums.SexEnum;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ContactPatientResult.java
+ * @Description TODO
+ * @createTime 2022年08月12日 16:58:00
+ */
+@Data
+@ApiModel("通讯录病人信息")
+public class ContactPatientResult {
+    private String patientId;
+    private String patientName;
+    private SexEnum patientSex;
+    private String patientAge;
+    private String patientCode;
+
+}

+ 24 - 4
nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/PatientOperationController.java

@@ -4,8 +4,8 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.nb.app.assistant.controller.vo.InviteCodePatientVo;
 import com.nb.app.assistant.controller.vo.MonitorAddVo;
-import com.nb.app.assistant.entity.AssistantUserBindEntity;
-import com.nb.app.assistant.enums.BindEnum;
+import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
+import com.nb.app.assistant.api.enums.BindEnum;
 import com.nb.app.assistant.service.LocalAssistantUserBindService;
 import com.nb.auth.utils.SecurityUtil;
 import com.nb.core.exception.CustomException;
@@ -35,6 +35,26 @@ public class PatientOperationController {
     private final IPatientClient patientClient;
 
     private final LocalAssistantUserBindService userBindService;
+
+    /**
+     * 描述: 添加看护人生成关联关系后向医生发起请求数据
+     * @author lifang
+     * @date 2022/8/12 10:57
+     * @return R
+     */
+    @PostMapping("/shift/{bindId}")
+    @ApiOperation(value = "判断是否可以切换监控人",notes = "返回为1即为可以切换,返回code=400即不可切换且显示报错信息")
+    public R<Boolean> shift(@PathVariable("bindId") String  bindId){
+        AssistantUserBindEntity userBind = userBindService.getById(bindId);
+        if(userBind==null){
+            throw new CustomException("您尚未看护该患者");
+        }
+        if(!BindEnum.SUCCESS.equals(userBind.getStatus())){
+            throw new CustomException("该监护关系已被解除,请重新进行绑定");
+        }
+        return R.success(true);
+    }
+
     /**
      * 描述: 添加看护人生成关联关系后向医生发起请求数据
      * @author lifang
@@ -67,7 +87,7 @@ public class PatientOperationController {
     @ApiOperation(value = "一键呼叫")
     public R<Boolean> painCall(@PathVariable("bindId")String bindId){
         userBindService.painCall(bindId);
-        return R.success();
+        return R.success(true);
     }
 
 
@@ -101,7 +121,7 @@ public class PatientOperationController {
         Long bindCount = userBindService.count(new QueryWrapper<AssistantUserBindEntity>()
                 .lambda()
                 .eq(AssistantUserBindEntity::getStatus, BindEnum.SUCCESS)
-                .eq(AssistantUserBindEntity::getUserId, id)
+                .eq(AssistantUserBindEntity::getAssistId, id)
         );
 
         if(bindCount>=6){

+ 11 - 1
nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/vo/MonitorAddVo.java

@@ -1,6 +1,7 @@
 package com.nb.app.assistant.controller.vo;
 
-import com.nb.app.assistant.enums.ApplyEnum;
+import com.nb.app.assistant.api.enums.ApplyEnum;
+import com.nb.core.enums.SexEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -21,6 +22,11 @@ public class MonitorAddVo {
     @NotNull(message = "被监护病人id不能为空")
     private String patientId;
 
+
+    @ApiModelProperty(value = "被监护病人性别",required = true)
+    @NotNull(message = "被监护病人性别不能为空")
+    private SexEnum patientSex;
+
     @ApiModelProperty(value = "被监护病人住院号",required = true)
     @NotNull(message = "被监护病人住院号不能为空")
     private String patientCode;
@@ -44,4 +50,8 @@ public class MonitorAddVo {
     @NotNull(message = "医院id不能为空")
     private String tenantId;
 
+    @ApiModelProperty(value = "医院名称",required = true)
+    @NotNull(message = "医院名称不能为空")
+    private String tenantName;
+
 }

+ 1 - 1
nb-service/app-assistant/src/main/java/com/nb/app/assistant/entity/AssistantUserEntity.java

@@ -39,6 +39,6 @@ public class AssistantUserEntity extends GenericEntity<String> {
 
     @ApiModelProperty(value = "昵称,昵称不得超过32个字节")
     @Length(max = 32,message = "昵称不得超过32个字节",groups = {Insert.class,Update.class})
-    private String nickName;
+    private String nickname;
 
 }

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

@@ -1,7 +1,7 @@
 package com.nb.app.assistant.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.nb.app.assistant.entity.AssistantUserBindEntity;
+import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
 import org.apache.ibatis.annotations.Mapper;
 
 /**

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

@@ -1,10 +1,12 @@
 package com.nb.app.assistant.service;
 
 import cn.hutool.extra.spring.SpringUtil;
-import com.nb.app.assistant.entity.AssistantUserBindEntity;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
+import com.nb.app.assistant.api.feign.IAssistantUserBindClient;
 import com.nb.app.assistant.entity.AssistantUserEntity;
-import com.nb.app.assistant.enums.ApplyEnum;
-import com.nb.app.assistant.enums.BindEnum;
+import com.nb.app.assistant.api.enums.ApplyEnum;
+import com.nb.app.assistant.api.enums.BindEnum;
 import com.nb.app.assistant.mapper.AssistantUserBindMapper;
 import com.nb.app.msg.bean.MsgBean;
 import com.nb.app.msg.enums.MsgEnum;
@@ -16,6 +18,8 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+
 /**
  * @author lifang
  * @version 1.0.0
@@ -24,7 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
  * @createTime 2022年08月10日 10:27:00
  */
 @Component
-public class LocalAssistantUserBindService extends BaseService<AssistantUserBindMapper, AssistantUserBindEntity,String> {
+public class LocalAssistantUserBindService extends BaseService<AssistantUserBindMapper, AssistantUserBindEntity,String> implements IAssistantUserBindClient {
 
     @Autowired
     @Lazy
@@ -49,7 +53,8 @@ public class LocalAssistantUserBindService extends BaseService<AssistantUserBind
         String id = String.valueOf(SecurityUtil.getId());
         AssistantUserEntity currentUser = userService.getById(id);
         entity.setStatus(BindEnum.WAITING);
-        entity.setUserId(currentUser.getId());
+        entity.setAssistId(currentUser.getId());
+        entity.setAssistNickname(currentUser.getNickname());
         boolean result = this.baseMapper.insert(entity) == 1;
 
         if(result){
@@ -59,8 +64,8 @@ public class LocalAssistantUserBindService extends BaseService<AssistantUserBind
                             .msgType(ApplyEnum.INVITE_CODE.equals(entity.getApplyType())?
                                     MsgEnum.CODE_BIND_NOTIFY:MsgEnum.MANUAL_BIND_NOTIFY)
                             .payload(entity.getId())
-                            .sender(entity.getUserId())
-                            .senderName(currentUser.getNickName())
+                            .sender(entity.getAssistId())
+                            .senderName(currentUser.getNickname())
                             .patientId(entity.getPatientId())
                             .patientCode(entity.getPatientCode())
                             .patientName(entity.getPatientName())
@@ -80,8 +85,34 @@ public class LocalAssistantUserBindService extends BaseService<AssistantUserBind
 
 
     }
-    @Transactional(readOnly = true)
+    @Transactional
     public void painCall(String bindId) {
-        AssistantUserBindEntity byId = this.getById(bindId);
+        //todo
+        AssistantUserBindEntity userBind = this.getById(bindId);
+        AssistantUserEntity user = userService.getById(userBind.getAssistId());
+        SpringUtil.publishEvent(new SaveMsgEvent(
+                this,
+                MsgBean.builder()
+                        .msgType(ApplyEnum.INVITE_CODE.equals(userBind.getApplyType())?
+                                MsgEnum.CODE_BIND_NOTIFY:MsgEnum.MANUAL_BIND_NOTIFY)
+                        .payload(userBind.getPatientId())
+                        .sender(userBind.getAssistId())
+                        .senderName(user.getNickname())
+                        .patientId(userBind.getPatientId())
+                        .patientCode(userBind.getPatientCode())
+                        .patientName(userBind.getPatientName())
+                        .receiver(userBind.getDoctorId())
+                        .receiverName(userBind.getDoctorName())
+                        .sys(false)
+                        .build()
+        ));
+    }
+
+    @Override
+    public List<AssistantUserBindEntity> list(String doctorId) {
+        return this.list(new QueryWrapper<AssistantUserBindEntity>()
+                .lambda()
+                .eq(AssistantUserBindEntity::getDoctorId,doctorId)
+                .eq(AssistantUserBindEntity::getStatus,BindEnum.SUCCESS));
     }
 }

+ 9 - 1
nb-service/app-assistant/src/main/java/com/nb/app/assistant/service/LocalAssistantUserService.java

@@ -1,6 +1,9 @@
 package com.nb.app.assistant.service;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.nb.app.assistant.api.feign.IAssistantUserClient;
+import com.nb.app.assistant.api.feign.result.AssistantUserResult;
 import com.nb.app.assistant.entity.AssistantUserEntity;
 import com.nb.app.assistant.mapper.AssistantUserMapper;
 import com.nb.app.msg.bean.MsgBean;
@@ -17,7 +20,7 @@ import org.springframework.stereotype.Component;
  * @createTime 2022年08月10日 10:27:00
  */
 @Component
-public class LocalAssistantUserService extends BaseService<AssistantUserMapper, AssistantUserEntity,String> {
+public class LocalAssistantUserService extends BaseService<AssistantUserMapper, AssistantUserEntity,String> implements IAssistantUserClient {
     @Override
     public void validateBeforeSave(AssistantUserEntity entity) {
         //用户新增后发送注册通知
@@ -39,4 +42,9 @@ public class LocalAssistantUserService extends BaseService<AssistantUserMapper,
     public void validateBeforeDelete(String id) {
 
     }
+
+    @Override
+    public AssistantUserResult getById(String id) {
+        return BeanUtil.copyProperties(super.getById(id),AssistantUserResult.class);
+    }
 }

+ 77 - 2
nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/ContactsController.java

@@ -1,10 +1,33 @@
 package com.nb.app.doctor.controller;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
+import com.nb.app.assistant.api.feign.IAssistantUserBindClient;
+import com.nb.app.assistant.api.feign.IAssistantUserClient;
+import com.nb.app.assistant.api.feign.result.AssistantUserResult;
+import com.nb.app.doctor.controller.vo.ContactDetailVo;
+import com.nb.app.doctor.service.dto.ContactDetailResult;
+import com.nb.app.doctor.service.dto.ContactResult;
+import com.nb.core.exception.CustomException;
+import com.nb.web.api.entity.BusClinicEntity;
+import com.nb.web.api.feign.query.ContactQuery;
+import com.nb.auth.utils.SecurityUtil;
+import com.nb.core.result.R;
+import com.nb.web.api.feign.IPatientClient;
+import com.nb.web.api.feign.result.ContactPatientResult;
+import com.nb.web.api.feign.result.PatientMonitorDetailResult;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author lifang
@@ -19,7 +42,59 @@ import org.springframework.web.bind.annotation.RestController;
 @Api(tags = "通讯录")
 @Slf4j
 public class ContactsController {
+    private final IAssistantUserBindClient userBindClient;
+    private final IPatientClient patientClient;
+    private final IAssistantUserClient userClient;
+    /**
+     * 描述: 获取当前医生所绑定的病人列表,医生看到的病人信息与his保持一致
+     * 病人看到的信息与自己所填写的保持一致。
+     * @author lifang
+     * @date 2022/8/13 8:43
+     * @param query
+     * @return R<List<ContactResult>>
+     */
+    @PostMapping("/no_page")
+    @ApiOperation("获取通讯录列表")
+    public R<List<ContactResult>> list(@RequestBody ContactQuery query){
+        List<ContactResult> result =new ArrayList<>();
+        List<AssistantUserBindEntity> userBindList = userBindClient.list(String.valueOf(SecurityUtil.getId()));
+        if(CollectionUtil.isEmpty(userBindList)){
+            return R.success(result);
+        }
+        Map<String, List<AssistantUserBindEntity>> userBindByPatientId = userBindList.stream().collect(Collectors.groupingBy(AssistantUserBindEntity::getPatientId));
+
+        query.setPatientIds(userBindList.stream().map(AssistantUserBindEntity::getPatientId).collect(Collectors.toList()));
+        List<ContactPatientResult> contactPatientResults = patientClient.contactList(query);
+        result = BeanUtil.copyToList(contactPatientResults, ContactResult.class);
+
+        for (ContactResult vo : result) {
+            AssistantUserBindEntity userBind = userBindByPatientId.get(vo.getPatientId())
+                    .get(0);
+            vo.setAssistNickname(userBind.getAssistNickname());
+            vo.setBindId(userBind.getId());
+            vo.setAssistId(userBind.getAssistId());
+        }
+        return R.success(result);
+    }
+
+
+    @PostMapping("/detail")
+    @ApiOperation("查看通讯录信息详情")
+    public R<ContactDetailResult> list(@RequestBody@Validated ContactDetailVo param){
+        String assistId = param.getAssistId();
+        String patientId = param.getPatientId();
 
+        PatientMonitorDetailResult patientInfo = patientClient.lookPatientDetail(patientId);
 
+        if(patientInfo==null||patientInfo.getClinic()==null){
+            throw new CustomException("该病人信息不存在,请刷新后重试");
+        }
+        AssistantUserResult assistInfo = userClient.getById(assistId);
+        BusClinicEntity clinic = patientInfo.getClinic();
 
+        return R.success(ContactDetailResult.of(
+                ContactDetailResult.PatientInfo.of(clinic.getPatientCode(),clinic.getWard(),clinic.getBedNo(),clinic.getManageType()),
+                ContactDetailResult.AssistInfo.of(assistInfo.getPhone(),assistInfo.getNickname(),assistInfo.getAvatar())
+        ));
+    }
 }

+ 26 - 0
nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/vo/ContactDetailVo.java

@@ -0,0 +1,26 @@
+package com.nb.app.doctor.controller.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ContactDetailVo.java
+ * @Description TODO
+ * @createTime 2022年08月13日 09:08:00
+ */
+@Data
+@ApiModel("通讯录详情查询参数")
+public class ContactDetailVo {
+    @ApiModelProperty("病人id")
+    @NotNull(message = "病人id不能为空")
+    private String patientId;
+
+    @ApiModelProperty("看护人id")
+    @NotNull(message = "看护人id不能为空")
+    private String assistId;
+}

+ 60 - 0
nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/dto/ContactDetailResult.java

@@ -0,0 +1,60 @@
+package com.nb.app.doctor.service.dto;
+
+import com.nb.web.api.enums.ClinicManageEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ContactDetailResult.java
+ * @Description TODO
+ * @createTime 2022年08月13日 08:56:00
+ */
+@Data
+@ApiModel("通讯录详情信息")
+@AllArgsConstructor(staticName = "of")
+public class ContactDetailResult implements Serializable {
+
+    @ApiModelProperty("病人信息")
+    private PatientInfo patientInfo;
+
+    @ApiModelProperty("看护人信息")
+    private AssistInfo assistInfo;
+
+    @Data
+    @ApiModel("通讯录详情中的病人信息")
+    @AllArgsConstructor(staticName = "of")
+    public static class PatientInfo{
+        @ApiModelProperty("住院号")
+        private String patientCode;
+
+        @ApiModelProperty("病区")
+        private String ward;
+
+        @ApiModelProperty("床号")
+        private String bedNo;
+
+        @ApiModelProperty(value = "管理位置",allowableValues = "0(院内管理) 1(居家管理)")
+        private ClinicManageEnum manageType;
+    }
+
+    @Data
+    @ApiModel("通讯录详情中的看护人信息")
+    @AllArgsConstructor(staticName = "of")
+    public static class AssistInfo{
+
+        @ApiModelProperty("电话")
+        private String phone;
+
+        @ApiModelProperty("昵称")
+        private String nickname;
+
+        @ApiModelProperty("头像")
+        private String avatar;
+    }
+}

+ 34 - 0
nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/dto/ContactResult.java

@@ -0,0 +1,34 @@
+package com.nb.app.doctor.service.dto;
+
+import com.nb.core.enums.SexEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ContactResult.java
+ * @Description TODO
+ * @createTime 2022年08月12日 15:44:00
+ */
+@Data
+@ApiModel("通讯录列表")
+public class ContactResult {
+    @ApiModelProperty("绑定id")
+    private String bindId;
+    @ApiModelProperty("住院号")
+    private String patientCode;
+    @ApiModelProperty("病人id")
+    private String patientId;
+    @ApiModelProperty("病人名称")
+    private String patientName;
+    @ApiModelProperty("病人性别")
+    private SexEnum patientSex;
+    @ApiModelProperty("病人年龄")
+    private String patientAge;
+    @ApiModelProperty("看护人昵称")
+    private String assistNickname;
+    @ApiModelProperty("看护人Id")
+    private String assistId;
+}

+ 7 - 0
nb-service/web-service/src/main/java/com/nb/web/service/bus/mapper/BusPatientMapper.java

@@ -2,6 +2,8 @@ package com.nb.web.service.bus.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.nb.web.api.feign.query.ContactQuery;
+import com.nb.web.api.feign.result.ContactPatientResult;
 import com.nb.web.service.bus.entity.BusPatientEntity;
 import com.nb.web.service.bus.entity.PatientDeviceRepeatDomain;
 import com.nb.web.api.feign.result.PatientMonitorResult;
@@ -48,4 +50,9 @@ public interface BusPatientMapper extends BaseMapper<BusPatientEntity> {
 
     @Deprecated
     long monitorTotalCount(@Param("tenantId") String tenantId);
+
+    /**
+     * 查询医生端通讯录列表信息
+     */
+    List<ContactPatientResult> selectContact(@Param("query") ContactQuery query);
 }

+ 7 - 4
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java

@@ -16,11 +16,9 @@ import com.nb.web.api.entity.BusClinicEntity;
 import com.nb.web.api.entity.BusInfusionHistoryEntity;
 import com.nb.web.api.enums.ClinicManageEnum;
 import com.nb.web.api.feign.IPatientClient;
-import com.nb.web.api.feign.result.InviteCodeResult;
-import com.nb.web.api.feign.result.PatientByInviteCodeResult;
-import com.nb.web.api.feign.result.PatientMonitorDetailResult;
+import com.nb.web.api.feign.query.ContactQuery;
+import com.nb.web.api.feign.result.*;
 import com.nb.web.api.feign.query.PatientMonitorQuery;
-import com.nb.web.api.feign.result.PatientMonitorResult;
 import com.nb.web.service.bus.entity.*;
 import com.nb.web.api.enums.DeviceAlarmEnum;
 import com.nb.web.api.enums.DeviceStatusEnum;
@@ -558,4 +556,9 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
         }
         return    PatientByInviteCodeResult.of(inviteCode,inviteCodeNode.getTenantId(), this.lookMonitorByPatientId(inviteCodeNode.getPatientId(),inviteCodeNode.getTenantId())) ;
     }
+
+    @Override
+    public List<ContactPatientResult>  contactList(ContactQuery query) {
+        return this.baseMapper.selectContact(query);
+    }
 }

+ 44 - 0
nb-service/web-service/src/main/resources/mapper/bus/BusPatientMapper.xml

@@ -103,6 +103,15 @@
         <result column="finished" property="finished"/>
         <result column="config_person" property="configPerson"/>
     </resultMap>
+
+    <resultMap id="contactMap" type="com.nb.web.api.feign.result.ContactPatientResult">
+        <result column="patient_id" property="patientId"/>
+        <result column="patient_name" property="patientName"/>
+        <result column="sex" property="patientSex"/>
+        <result column="patient_code" property="patientCode"/>
+        <result column="patient_age" property="patientAge"/>
+    </resultMap>
+
     <select id="selectRepeatDevice" resultMap="repeatDeviceResult">
                      SELECT
                      p.id as patient_id,
@@ -464,4 +473,39 @@
     <select id="monitorTotalCount" resultType="long">
         select count(1) from (select * from bus_patient where tenant_id=#{tenantId}) as p JOIN (select * from bus_clinic where finished=0 and tenant_id=#{tenantId}) as c on p.clinic_id=c.id
     </select>
+
+
+    <select id="selectContact" resultMap="contactMap">
+        select
+        p.id as patientId,
+        p.code as patient_code,
+        c.patient_name as patient_name,
+        c.patient_gender as sex,
+        c.patient_age as patient_age
+        from
+        (select * from bus_patient
+        <where>
+            <if test="query.tenantId != null" >
+                and tenant_id =#{query.tenantId}
+            </if>
+            <if test="query.patientIds !=null and query.patientIds.size>0">
+                and id in
+                <foreach item="pId" index="index" collection="query.patientIds" open="(" separator="," close=")">
+                    #{pId, jdbcType=VARCHAR}
+                </foreach>
+            </if>
+        </where>
+        ) as p
+        join (
+        select * from bus_clinic
+        <where>
+            <if test="query.blurry != null">
+                and patient_name like concat('%',#{query.blurry},'%')
+            </if>
+            <if test="query.manageType != null">
+                and manage_type = #{query.manageType}
+            </if>
+        </where>
+        )
+    </select>
 </mapper>