Browse Source

fix 医生端

18339543638 3 years ago
parent
commit
76c9083175
31 changed files with 442 additions and 110 deletions
  1. 2 1
      nb-auth/src/main/java/com/nb/auth/config/CustomStpInterface.java
  2. 3 1
      nb-core/src/main/java/com/nb/core/enums/UserPlatformEnum.java
  3. 39 0
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/bean/HandleBindResult.java
  4. 13 0
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/entity/AssistantUserBindEntity.java
  5. 16 2
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/IAssistantUserBindClient.java
  6. 12 3
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/result/ContactQuery.java
  7. 5 0
      nb-service-api/app-doctor-api/src/main/java/com/nb/app/doctor/api/feign/result/AppDoctorUserResult.java
  8. 21 0
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IHospitalClient.java
  9. 0 10
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IPatientClient.java
  10. 44 0
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/result/HospitalResult.java
  11. 40 1
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/auth/AppAssistantGranter.java
  12. 1 1
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/AppDoctorController.java
  13. 40 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/HospitalController.java
  14. 21 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/PatientOperationController.java
  15. 8 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/vo/MonitorAddVo.java
  16. 44 2
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/service/LocalAssistantUserBindService.java
  17. 45 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/service/result/AssistPatientResult.java
  18. 4 2
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/auth/AppDoctorAuthGranter.java
  19. 3 26
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/ContactsController.java
  20. 34 0
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/NoticeMsgController.java
  21. 14 2
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/PatientMonitorController.java
  22. 1 1
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/LocalAppDoctorUserService.java
  23. 1 1
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/dto/ContactResult.java
  24. 2 0
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/dto/PatientMonitorConsultResult.java
  25. 5 0
      nb-service/app-msg/src/main/java/com/nb/app/msg/controller/AppMsgController.java
  26. 3 3
      nb-service/app-msg/src/main/java/com/nb/app/msg/entity/AppMsgEntity.java
  27. 11 0
      nb-service/app-msg/src/main/java/com/nb/app/msg/service/LocalAppMsgService.java
  28. 0 7
      nb-service/web-service/src/main/java/com/nb/web/service/bus/mapper/BusPatientMapper.java
  29. 9 1
      nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusHospitalService.java
  30. 0 11
      nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java
  31. 1 35
      nb-service/web-service/src/main/resources/mapper/bus/BusPatientMapper.xml

+ 2 - 1
nb-auth/src/main/java/com/nb/auth/config/CustomStpInterface.java

@@ -1,6 +1,7 @@
 package com.nb.auth.config;
 
 import cn.dev33.satoken.stp.StpInterface;
+import cn.hutool.core.collection.CollectionUtil;
 import com.nb.auth.bean.SysRoleInfo;
 import com.nb.auth.utils.SecurityUtil;
 import org.springframework.stereotype.Component;
@@ -19,7 +20,7 @@ import java.util.stream.Collectors;
 public class CustomStpInterface implements StpInterface {
     @Override
     public List<String> getPermissionList(Object loginId, String loginType) {
-        return new ArrayList<>(SecurityUtil.getLoginUser().getPermissions());
+        return    CollectionUtil.newArrayList(SecurityUtil.getLoginUser().getPermissions());
     }
 
     @Override

+ 3 - 1
nb-core/src/main/java/com/nb/core/enums/UserPlatformEnum.java

@@ -26,7 +26,9 @@ public enum UserPlatformEnum {
      */
     OPENAPI("API", "第三方应用"),
 
-    APP_DOCTOR("DOCTOR","app医生端");
+    APP_DOCTOR("DOCTOR","app医生端"),
+
+    APP_ASSIST("ASSIST","疼痛小助手");
 
     private String code;
     private String desc;

+ 39 - 0
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/bean/HandleBindResult.java

@@ -0,0 +1,39 @@
+package com.nb.app.assistant.api.bean;
+
+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 HandleBindResult.java
+ * @Description TODO
+ * @createTime 2022年08月17日 22:38:00
+ */
+@Data
+@ApiModel("处理绑定结果")
+public class HandleBindResult {
+    @ApiModelProperty(value = "当前医生id",required = true)
+    @NotNull(message = "医生id不能为空")
+    private String doctorId;
+
+    @ApiModelProperty(value = "当前医生名称",required = true)
+    @NotNull(message = "当前医生名称不能为空")
+    private String doctorName;
+
+    @ApiModelProperty(value = "绑定申请id",required = true)
+    @NotNull(message = "绑定申请id不能为空")
+    private String bindId;
+
+    @ApiModelProperty("是否同意申请")
+    @NotNull(message = "是否同意申请结果不能为空")
+    private Boolean agree;
+
+    @ApiModelProperty("拒绝申请结果")
+    private String refuseReason;
+
+
+}

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

@@ -54,6 +54,12 @@ public class AssistantUserBindEntity extends GenericEntity<String> {
     @ApiModelProperty(value = "医生id",required = true)
     private String doctorId;
 
+    @ApiModelProperty(value = "医院id",required = true)
+    private String tenantId;
+
+    @ApiModelProperty(value = "医院名称",required = true)
+    private String tenantName;
+
     @ApiModelProperty(value = "管理位置")
     private ClinicManageEnum manageType;
 
@@ -66,7 +72,14 @@ public class AssistantUserBindEntity extends GenericEntity<String> {
     @ApiModelProperty(value = "解除绑定人,当与userId相同时,即本人解除绑定关系,当不同时,即由医生解除绑定关系")
     private String liftedBy;
 
+    @ApiModelProperty("医生拒绝理由")
+    private String refuseReason;
+
     @ApiModelProperty(hidden = true)
     @TableField(exist = false)
     private String doctorName;
+
+    @ApiModelProperty(hidden = true)
+    @TableField(exist = false)
+    private String inviteCode;
 }

+ 16 - 2
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/IAssistantUserBindClient.java

@@ -1,6 +1,9 @@
 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 java.util.*;
 /**
  * @author lifang
@@ -15,8 +18,19 @@ public interface IAssistantUserBindClient {
      * 描述: 获取所给医院医生所有绑定的病人信息
      * @author lifang
      * @date 2022/8/12 15:53
-     * @param doctorId
+     * @param query
      * @return List<AssistantUserBindEntity>
      */
-    List<AssistantUserBindEntity> list(String doctorId);
+    List<AssistantUserBindEntity> list(ContactQuery query);
+
+    AssistantUserBindEntity findById(String bindId);
+
+    /**
+     * 描述: 处理用户绑定结果
+     * @author lifang
+     * @date 2022/8/17 22:41
+     * @return boolean
+     */
+    boolean handleBindResult(HandleBindResult source);
+
 }

+ 12 - 3
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/query/ContactQuery.java → nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/result/ContactQuery.java

@@ -1,8 +1,12 @@
-package com.nb.web.api.feign.query;
+package com.nb.app.assistant.api.feign.result;
 
+import com.nb.web.api.enums.ClinicManageEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 import java.util.*;
 /**
  * @author lifang
@@ -13,11 +17,16 @@ import java.util.*;
  */
 @Data
 @ApiModel("通讯录查询条件")
-public class ContactQuery {
+public class ContactQuery implements Serializable {
+    @ApiModelProperty(value = "医生id",required = true)
+    @NotNull(message = "医生id不能为空")
+    private String doctorId;
+
     @ApiModelProperty("病人名称")
     private String blurry;
+
     @ApiModelProperty("院内/居家")
-    private Integer manageType;
+    private ClinicManageEnum manageType;
 
     @ApiModelProperty(hidden = true)
     private List<String> patientIds;

+ 5 - 0
nb-service-api/app-doctor-api/src/main/java/com/nb/app/doctor/api/feign/result/AppDoctorUserResult.java

@@ -2,6 +2,7 @@ package com.nb.app.doctor.api.feign.result;
 
 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;
 import org.hibernate.validator.constraints.Length;
@@ -14,7 +15,11 @@ import org.hibernate.validator.constraints.Length;
  * @createTime 2022年08月11日 18:26:00
  */
 @Data
+@ApiModel("医生用户")
 public class AppDoctorUserResult {
+    @ApiModelProperty("医生id")
+    private String id;
+
     @ApiModelProperty(value = "性别 1、男 2、女 3、未知",allowableValues = "1,2,3")
     private SexEnum sex;
 

+ 21 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IHospitalClient.java

@@ -0,0 +1,21 @@
+package com.nb.web.api.feign;
+
+import com.nb.web.api.feign.result.HospitalResult;
+import java.util.*;
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName IHospitalClient.java
+ * @Description TODO
+ * @createTime 2022年08月17日 15:26:00
+ */
+public interface IHospitalClient {
+    /**
+     * 描述: 查询所有的医院数据
+     * @author lifang
+     * @date 2022/8/17 15:26
+     * @param
+     * @return List<HospitalResult>
+     */
+    List<HospitalResult> selectAll();
+}

+ 0 - 10
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IPatientClient.java

@@ -1,7 +1,6 @@
 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.*;
 
@@ -55,13 +54,4 @@ 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);
 }

+ 44 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/result/HospitalResult.java

@@ -0,0 +1,44 @@
+package com.nb.web.api.feign.result;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import java.io.Serializable;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName HospitalResult.java
+ * @Description 医院信息查询结果
+ * @createTime 2022年08月17日 15:24:00
+ */
+@Data
+@ApiModel("医院信息")
+public class HospitalResult implements Serializable {
+    @TableId(type = IdType.ASSIGN_ID,value = "tenant_id")
+    @ApiModelProperty(value = "tenant_id")
+    private String id;
+    /**
+     * 医院所在区域编码
+     */
+    @ApiModelProperty(value = "区域编码(详情见各个行政区域行政编码)")
+    @Length(max = 255,message = "区域编码名称长度不得超过255个字节")
+    private String areaCode;
+
+    /**
+     * 医院地址
+     */
+    @ApiModelProperty(value = "医院地址")
+    @Length(max = 255,message = "医院地址长度不得超过255个字节")
+    private String address;
+
+    /**
+     * 医院名称
+     */
+    @ApiModelProperty(value = "医院名称")
+    @Length(max = 255,message = "医院名称长度不得超过255个字节")
+    private String name;
+}

+ 40 - 1
nb-service/app-assistant/src/main/java/com/nb/app/assistant/auth/AppAssistantGranter.java

@@ -1,15 +1,28 @@
 package com.nb.app.assistant.auth;
 
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.nb.app.assistant.api.feign.result.AssistantUserResult;
+import com.nb.app.assistant.entity.AssistantUserEntity;
 import com.nb.app.assistant.service.LocalAssistantUserService;
+import com.nb.app.doctor.api.entity.AppDoctorUserEntity;
 import com.nb.auth.bean.LoginUser;
 import com.nb.auth.enums.GrantTypeEnum;
+import com.nb.auth.enums.StpTypeEnum;
 import com.nb.auth.granter.IAuthGranter;
 import com.nb.auth.granter.TokenParameter;
+import com.nb.auth.utils.SecurityUtil;
+import com.nb.core.enums.StatusEnum;
+import com.nb.core.enums.UserPlatformEnum;
 import com.nb.core.exception.CustomException;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import java.util.Objects;
+
+import static com.nb.auth.utils.SecurityUtil.LOGIN_USER_KEY;
+
 /**
  * @author lifang
  * @version 1.0.0
@@ -18,6 +31,7 @@ import org.springframework.stereotype.Component;
  * @createTime 2022年08月10日 10:16:00
  */
 @Component
+@Slf4j
 @AllArgsConstructor
 public class AppAssistantGranter implements IAuthGranter {
     private final LocalAssistantUserService assistantUserService;
@@ -34,6 +48,31 @@ public class AppAssistantGranter implements IAuthGranter {
         if (StrUtil.isBlank(source.getPassword())) {
             throw new CustomException("密码不能为空");
         }
-        return null;
+        AssistantUserEntity user = assistantUserService.getOne(Wrappers.lambdaQuery(AssistantUserEntity.class)
+                .eq(AssistantUserEntity::getPhone, source.getUsername())
+                .last("limit 1"));
+        if (Objects.isNull(user)) {
+            log.info("登录用户:{}不存在", source.getUsername());
+            throw new CustomException("登录用户不存在");
+        }
+        if (!SecurityUtil.matchesPassword(source.getPassword(), user.getPassword())) {
+            throw new CustomException("账号或密码不正确");
+        }
+        log.info("登录用户:{}", source.getUsername());
+
+        // 登录
+        SecurityUtil.getStpLogic(StpTypeEnum.ASSISTANT.getText()).login(user.getId());
+        LoginUser<String> loginUser = new LoginUser();
+        loginUser.setToken(SecurityUtil.getStpLogic().getTokenValue());
+        loginUser.setUserPlatform(UserPlatformEnum.APP_ASSIST.getCode());
+        loginUser.setGrantType(source.getGrantType());
+        loginUser.setUsername(source.getUsername());
+        loginUser.setSys(true);
+        loginUser.setId(user.getId());
+        loginUser.setLoginType(StpTypeEnum.ASSISTANT.getText());
+        fillUserAgentInfo(loginUser);
+        // 设置用户信息
+        SecurityUtil.getStpLogic(StpTypeEnum.ASSISTANT.getText()).getTokenSession().set(LOGIN_USER_KEY,loginUser);
+        return loginUser;
     }
 }

+ 1 - 1
nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/AppDoctorController.java

@@ -35,7 +35,7 @@ public class AppDoctorController {
     }
 
     @PostMapping("/{doctorId}")
-    @ApiOperation("获取医院的医生人员列表")
+    @ApiOperation("查看医生详情")
     public R lookDoctor(@PathVariable("doctorId")
                         @ApiParam("医生id") String doctorId){
         return R.success(doctorUserClient.lookById(doctorId));

+ 40 - 0
nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/HospitalController.java

@@ -0,0 +1,40 @@
+package com.nb.app.assistant.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
+import com.nb.app.assistant.controller.vo.MonitorAddVo;
+import com.nb.core.result.R;
+import com.nb.web.api.feign.IHospitalClient;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName HospitalController.java
+ * @Description 医院接口
+ * @createTime 2022年08月17日 14:57:00
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/assist/hospital")
+@Api(tags = "医院管理")
+@Slf4j
+public class HospitalController {
+
+    private final IHospitalClient hospitalClient;
+    /**
+     * 描述: 查看医院列表
+     */
+    @PostMapping("/no_page")
+    @ApiOperation(value = "查看医院列表",notes = "此处将返回所有医院的信息,查询条件请在客户端自行处理")
+    public R saveMonitor(){
+        return R.success(hospitalClient.selectAll());
+    }
+}

+ 21 - 0
nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/PatientOperationController.java

@@ -1,12 +1,15 @@
 package com.nb.app.assistant.controller;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.nb.app.assistant.api.enums.ApplyEnum;
 import com.nb.app.assistant.controller.vo.InviteCodePatientVo;
 import com.nb.app.assistant.controller.vo.MonitorAddVo;
 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.app.assistant.service.result.AssistPatientResult;
 import com.nb.auth.utils.SecurityUtil;
 import com.nb.core.exception.CustomException;
 import com.nb.core.result.R;
@@ -18,6 +21,8 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * @author lifang
  * @version 1.0.0
@@ -36,6 +41,19 @@ public class PatientOperationController {
 
     private final LocalAssistantUserBindService userBindService;
 
+    /**
+     * 描述: 查询当前用户所看护的所有病人信息
+     * @author lifang
+     * @date 2022/8/17 22:55
+     * @param assistId
+     * @return  List<AssistPatientResult>
+     */
+    @PostMapping("/no_page/{assistId}")
+    @ApiOperation("查询当前用户所看护的所有病人信息")
+    public R<List<AssistPatientResult>> list(@PathVariable("assistId") String assistId){
+        return R.success(userBindService.assistList(assistId));
+    }
+
     /**
      * 描述: 添加看护人生成关联关系后向医生发起请求数据
      * @author lifang
@@ -65,6 +83,9 @@ public class PatientOperationController {
     @PostMapping("/save")
     @ApiOperation(value = "发起添加看护人申请")
     public R<Boolean> saveMonitor(@RequestBody MonitorAddVo vo){
+        if(ApplyEnum.INVITE_CODE.equals(vo.getApplyType())&& StrUtil.isEmpty(vo.getInviteCode())){
+            throw new CustomException("邀请码不能为空");
+        }
         judgePatient(vo.getPatientId());
         judgeUser();
         AssistantUserBindEntity resource = BeanUtil.copyProperties(vo, AssistantUserBindEntity.class);

+ 8 - 0
nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/vo/MonitorAddVo.java

@@ -2,6 +2,7 @@ package com.nb.app.assistant.controller.vo;
 
 import com.nb.app.assistant.api.enums.ApplyEnum;
 import com.nb.core.enums.SexEnum;
+import com.nb.web.api.enums.ClinicManageEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -44,10 +45,17 @@ public class MonitorAddVo {
     @NotNull(message = "app医生端用户真实姓名不能为空")
     private String doctorName;
 
+    @ApiModelProperty(value = "看护位置",allowableValues = "0(院内管理) 1(居家管理)")
+    private ClinicManageEnum manageType;
+
     @ApiModelProperty(value = "申请途径",allowableValues = "0(手动申请) 1(邀请码申请)",required = true)
     @NotNull(message = "申请途径不能为空")
     private ApplyEnum applyType;
 
+
+    @ApiModelProperty(value = "邀请码")
+    private String inviteCode;
+
     @ApiModelProperty(value = "医院id",required = true)
     @NotNull(message = "医院id不能为空")
     private String tenantId;

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

@@ -1,13 +1,19 @@
 package com.nb.app.assistant.service;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
 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.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.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.mapper.AssistantUserBindMapper;
+import com.nb.app.assistant.service.result.AssistPatientResult;
 import com.nb.app.msg.bean.MsgBean;
 import com.nb.app.msg.enums.MsgEnum;
 import com.nb.app.msg.event.SaveMsgEvent;
@@ -74,6 +80,7 @@ public class LocalAssistantUserBindService extends BaseService<AssistantUserBind
                             .patientSex(entity.getPatientSex())
                             .receiverId(entity.getDoctorId())
                             .receiverName(entity.getDoctorName())
+                            .extend(entity.getInviteCode())
                             .sys(false)
                             .build()
             ));
@@ -113,11 +120,46 @@ public class LocalAssistantUserBindService extends BaseService<AssistantUserBind
         ));
     }
 
+
+
     @Override
-    public List<AssistantUserBindEntity> list(String doctorId) {
+    public List<AssistantUserBindEntity> list(ContactQuery query) {
         return this.list(new QueryWrapper<AssistantUserBindEntity>()
                 .lambda()
-                .eq(AssistantUserBindEntity::getDoctorId,doctorId)
+                .eq(AssistantUserBindEntity::getDoctorId,query.getDoctorId())
+                .like(StrUtil.isNotEmpty(query.getBlurry()),AssistantUserBindEntity::getPatientName,query.getBlurry())
+                .eq(query.getManageType()!=null,AssistantUserBindEntity::getManageType,query.getManageType())
                 .eq(AssistantUserBindEntity::getStatus,BindEnum.SUCCESS));
     }
+
+    @Override
+    public AssistantUserBindEntity findById(String bindId) {
+        return this.getById(bindId);
+    }
+
+    @Override
+    public boolean handleBindResult(HandleBindResult source) {
+        //todo 发送处理结果信息
+        return this.update(new UpdateWrapper<AssistantUserBindEntity>()
+                .lambda()
+                .eq(AssistantUserBindEntity::getId,source.getBindId())
+                .set(AssistantUserBindEntity::getDoctorId,source.getDoctorId())
+                .set(AssistantUserBindEntity::getStatus,source.getAgree()?BindEnum.SUCCESS:BindEnum.REFUSE)
+                .set(!source.getAgree(),AssistantUserBindEntity::getRefuseReason,source.getRefuseReason())
+        );
+    }
+
+    /**
+     * 描述:查询当前用户所看护的所有病人信息
+     * @author lifang
+     * @date 2022/8/17 22:56
+     * @param assistId
+     * @return  List<AssistPatientResult>
+     */
+    public List<AssistPatientResult> assistList(String assistId) {
+        return BeanUtil.copyToList(list(new QueryWrapper<AssistantUserBindEntity>()
+                .lambda()
+                .eq(AssistantUserBindEntity::getAssistId,assistId)
+                .eq(AssistantUserBindEntity::getStatus,BindEnum.SUCCESS)),AssistPatientResult.class);
+    }
 }

+ 45 - 0
nb-service/app-assistant/src/main/java/com/nb/app/assistant/service/result/AssistPatientResult.java

@@ -0,0 +1,45 @@
+package com.nb.app.assistant.service.result;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.nb.app.assistant.api.enums.ApplyEnum;
+import com.nb.app.assistant.api.enums.BindEnum;
+import com.nb.core.enums.SexEnum;
+import com.nb.web.api.enums.ClinicManageEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName AssistPatientResult.java
+ * @Description TODO
+ * @createTime 2022年08月17日 22:57:00
+ */
+@Data
+@ApiModel("看护的病人信息")
+public class AssistPatientResult {
+    @ApiModelProperty(value = "病人id",required = true)
+    private String patientId;
+
+    @ApiModelProperty(value = "住院号",required = true)
+    private String patientCode;
+
+    @ApiModelProperty(value = "病人姓名")
+    private String patientName;
+
+    @ApiModelProperty(value = "病人性别")
+    private SexEnum patientSex;
+
+    @ApiModelProperty(value = "病人年龄")
+    private String patientAge;
+
+    @ApiModelProperty(value = "医生id",required = true)
+    private String doctorId;
+
+    @ApiModelProperty(value = "医院id",required = true)
+    private String tenantId;
+
+    @ApiModelProperty(value = "医院名称",required = true)
+    private String tenantName;
+}

+ 4 - 2
nb-service/app-doctor/src/main/java/com/nb/app/doctor/auth/AppDoctorAuthGranter.java

@@ -19,6 +19,8 @@ import org.springframework.stereotype.Component;
 
 import java.util.Objects;
 
+import static com.nb.auth.utils.SecurityUtil.LOGIN_USER_KEY;
+
 /**
  * @author lifang
  * @version 1.0.0
@@ -63,7 +65,7 @@ public class AppDoctorAuthGranter implements IAuthGranter {
         // 登录
         SecurityUtil.getStpLogic().login(user.getId());
         LoginUser<String> loginUser = new LoginUser();
-        loginUser.setToken(SecurityUtil.getStpLogic().getTokenValue());
+        loginUser.setToken(SecurityUtil.getStpLogic(StpTypeEnum.APP_DOCTOR.getText()).getTokenValue());
         loginUser.setUserPlatform(UserPlatformEnum.APP_DOCTOR.getCode());
         loginUser.setGrantType(source.getGrantType());
         loginUser.setUsername(source.getUsername());
@@ -72,7 +74,7 @@ public class AppDoctorAuthGranter implements IAuthGranter {
         loginUser.setLoginType(StpTypeEnum.APP_DOCTOR.getText());
         fillUserAgentInfo(loginUser);
         // 设置用户信息
-        SecurityUtil.setLogin(loginUser);
+        SecurityUtil.getStpLogic(StpTypeEnum.APP_DOCTOR.getText()).getTokenSession().set(LOGIN_USER_KEY,loginUser);
         return loginUser;
     }
 }

+ 3 - 26
nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/ContactsController.java

@@ -1,8 +1,6 @@
 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;
@@ -11,11 +9,9 @@ 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.app.assistant.api.feign.result.ContactQuery;
 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;
@@ -26,8 +22,6 @@ 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
@@ -55,26 +49,9 @@ public class ContactsController {
      */
     @PostMapping("/no_page")
     @ApiOperation("获取通讯录列表")
-    public R<List<ContactResult>> list(@RequestBody ContactQuery query){
+    public R<List<ContactResult>> list(@RequestBody @Validated 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);
+        return R.success(BeanUtil.copyToList(userBindClient.list(query),ContactResult.class));
     }
 
 

+ 34 - 0
nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/NoticeMsgController.java

@@ -0,0 +1,34 @@
+package com.nb.app.doctor.controller;
+
+import com.nb.app.assistant.api.feign.IAssistantUserBindClient;
+import com.nb.core.result.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName MsgController.java
+ * @Description TODO
+ * @createTime 2022年08月17日 20:38:00
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/app/msg")
+@Api(tags = "医生消息详情内容")
+@Slf4j
+public class NoticeMsgController {
+    private final IAssistantUserBindClient userBindClient;
+
+    @PostMapping("/bind/{bindId}")
+    @ApiOperation("查询绑定申请消息详情")
+    public R bindMsg(@PathVariable("bindId") String bindId){
+        return R.success(userBindClient.findById(bindId));
+    }
+}

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

@@ -3,8 +3,10 @@ package com.nb.app.doctor.controller;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.json.JSONUtil;
+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.doctor.controller.vo.InviteCodeVo;
 import com.nb.app.doctor.service.dto.PatientMonitorConsultResult;
 import com.nb.auth.utils.SecurityUtil;
@@ -22,7 +24,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
-import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 /**
@@ -52,7 +53,9 @@ public class PatientMonitorController {
             if (CollectionUtil.isNotEmpty(results)) {
                 Map<String, List<PatientMonitorConsultResult>> resultGroupByPatientId = results.stream().collect(Collectors.groupingBy(PatientMonitorConsultResult::getPatientId));
                 //获取该与该医生有绑定的所有绑定关系
-                List<AssistantUserBindEntity> userBinds = userBindClient.list(String.valueOf(SecurityUtil.getId()));
+                ContactQuery contactQuery = new ContactQuery();
+                contactQuery.setDoctorId(String.valueOf(SecurityUtil.getId()));
+                List<AssistantUserBindEntity> userBinds = userBindClient.list(contactQuery);
                 if(CollectionUtil.isNotEmpty(userBinds)){
                     userBinds.parallelStream()
                             .forEach(bind->{
@@ -75,6 +78,7 @@ public class PatientMonitorController {
     @PostMapping("/monitor/{patientId}")
     @ApiOperation(value = "查看病人当前监控详情")
     public R<PatientMonitorDetailResult> monitorPatient(@PathVariable("patientId") String patientId) {
+        //todo 增加看护人信息
         return R.success(patientClient.lookPatientDetail(patientId));
     }
 
@@ -85,6 +89,14 @@ public class PatientMonitorController {
     }
 
 
+
+    @PostMapping("/agree/bind")
+    @ApiOperation(value = "处理看护人发起的看护请求")
+    public R<Boolean> agreeBindUser(@RequestBody HandleBindResult source) {
+        return R.success(userBindClient.handleBindResult(source));
+    }
+
+
     @PostMapping("/lift")
     @ApiOperation(value = "与病人解除绑定")
     public R list() {

+ 1 - 1
nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/LocalAppDoctorUserService.java

@@ -140,7 +140,7 @@ public class LocalAppDoctorUserService extends BaseService<AppDoctorUserMapper,
     @Override
     public List<AppDoctorUserResult> consultList(String tenantId) {
         //todo
-        return null;
+        return BeanUtil.copyToList(this.list(),AppDoctorUserResult.class);
     }
 
     @Override

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

@@ -16,7 +16,7 @@ import lombok.Data;
 @ApiModel("通讯录列表")
 public class ContactResult {
     @ApiModelProperty("绑定id")
-    private String bindId;
+    private String id;
     @ApiModelProperty("住院号")
     private String patientCode;
     @ApiModelProperty("病人id")

+ 2 - 0
nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/dto/PatientMonitorConsultResult.java

@@ -17,6 +17,8 @@ import lombok.Data;
 public class PatientMonitorConsultResult extends PatientMonitorResult {
     @ApiModelProperty("看护人id")
     private String assistId;
+    @ApiModelProperty("看护人昵称")
+    private String assistNickname;
     @ApiModelProperty("看护人是否在线")
     private boolean isOnline;
 }

+ 5 - 0
nb-service/app-msg/src/main/java/com/nb/app/msg/controller/AppMsgController.java

@@ -34,6 +34,11 @@ public class AppMsgController implements BaseSaveController<AppMsgEntity,String>
         return msgService;
     }
 
+    @Override
+    public boolean isAuth() {
+        return false;
+    }
+
     @Override
     public String getPermissionPrefix() {
         return null;

+ 3 - 3
nb-service/app-msg/src/main/java/com/nb/app/msg/entity/AppMsgEntity.java

@@ -33,7 +33,7 @@ public class AppMsgEntity  extends GenericEntity<String> {
     private MsgEnum msgType;
 
     @ApiModelProperty(value = "发送人id")
-    private String sender;
+    private String senderId;
 
     @ApiModelProperty(value = "发送人名称")
     private String senderName;
@@ -54,13 +54,13 @@ public class AppMsgEntity  extends GenericEntity<String> {
     private String payload;
 
     @ApiModelProperty(value = "接收人 即 医生id",required = true)
-    private String receiver;
+    private String receiverId;
 
     @ApiModelProperty(value = "接收人名称 ",required = true)
     private String receiverName;
 
     @ApiModelProperty(value = "是否已读",required = true)
-    private boolean read;
+    private boolean isRead;
 
     @ApiModelProperty("扩展内容,若所需字段不存在,则内容可放在此字段下,如疼痛咨询类型、疼痛评估时间间隔等")
     private String extend;

+ 11 - 0
nb-service/app-msg/src/main/java/com/nb/app/msg/service/LocalAppMsgService.java

@@ -1,8 +1,11 @@
 package com.nb.app.msg.service;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.nb.app.msg.event.SaveMsgEvent;
 import com.nb.common.crud.BaseService;
 import com.nb.app.msg.entity.AppMsgEntity;
 import com.nb.app.msg.mapper.AppMsgMapper;
+import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 
 /**
@@ -29,4 +32,12 @@ public class LocalAppMsgService extends BaseService<AppMsgMapper,AppMsgEntity,St
     public void validateBeforeDelete(String id) {
 
     }
+
+    @EventListener
+    public  void saveMsg(SaveMsgEvent event){
+        AppMsgEntity source = BeanUtil.copyProperties(event.getPayload(), AppMsgEntity.class);
+        source.setSenderName(event.getPayload().getSenderNickname());
+        source.setExtend(event.getPayload().getExtend());
+        this.save(source);
+    }
 }

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

@@ -2,8 +2,6 @@ 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;
@@ -50,9 +48,4 @@ public interface BusPatientMapper extends BaseMapper<BusPatientEntity> {
 
     @Deprecated
     long monitorTotalCount(@Param("tenantId") String tenantId);
-
-    /**
-     * 查询医生端通讯录列表信息
-     */
-    List<ContactPatientResult> selectContact(@Param("query") ContactQuery query);
 }

+ 9 - 1
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusHospitalService.java

@@ -1,5 +1,6 @@
 package com.nb.web.service.bus.service;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -10,6 +11,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.nb.auth.utils.SecurityUtil;
 import com.nb.core.Constants;
 import com.nb.web.api.bean.GeoPoint;
+import com.nb.web.api.feign.IHospitalClient;
+import com.nb.web.api.feign.result.HospitalResult;
 import com.nb.web.service.bus.entity.*;
 import com.nb.web.service.bus.enums.ConstantMixEnum;
 import com.nb.web.service.bus.hospital.HospitalManagerRegister;
@@ -49,7 +52,7 @@ import java.util.stream.Collectors;
  * @createTime 2022年03月19日 09:27:00
  */
 @Service
-public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusHospitalEntity,String> implements CommandLineRunner, GetNameInterface<String,String>, HospitalCodeCheck {
+public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusHospitalEntity,String> implements CommandLineRunner, GetNameInterface<String,String>, HospitalCodeCheck, IHospitalClient {
     @Autowired
     @Lazy
     private ConfigStorageManager configStorageManager;
@@ -279,4 +282,9 @@ public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusH
             return  new Page<>();
         }
     }
+
+    @Override
+    public List<HospitalResult> selectAll() {
+        return BeanUtil.copyToList(list(),HospitalResult.class);
+    }
 }

+ 0 - 11
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java

@@ -4,19 +4,15 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.RandomUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.nb.core.Value;
 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.query.ContactQuery;
 import com.nb.web.api.feign.result.*;
 import com.nb.web.api.feign.query.PatientMonitorQuery;
 import com.nb.web.service.bus.entity.*;
@@ -32,7 +28,6 @@ import com.nb.web.service.bus.service.dto.*;
 import com.nb.web.service.bus.mapper.BusPatientMapper;
 import com.nb.web.service.bus.registry.patient.PatientOperator;
 import com.nb.web.service.bus.registry.patient.PatientRegistry;
-import com.nb.web.service.bus.utils.CodeUtils;
 import com.nb.web.service.bus.utils.PatientInviteCodeUtil;
 import com.nb.web.service.bus.utils.WsPublishUtils;
 import com.nb.common.crud.BaseService;
@@ -40,7 +35,6 @@ import com.nb.core.exception.CustomException;
 import com.nb.core.result.R;
 import com.nb.core.utils.ExceptionUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.python.compiler.Code;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -556,9 +550,4 @@ 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);
-    }
 }

+ 1 - 35
nb-service/web-service/src/main/resources/mapper/bus/BusPatientMapper.xml

@@ -441,7 +441,7 @@
         as p
         join
         bus_infusion_history as i on p.infusion_id=i.id
-        join (select device_id,alias from bus_device) as d on d.device_id=i.device_id
+        left join (select device_id,alias from bus_device) as d on d.device_id=i.device_id
         left join (select * from bus_clinic where monitor_type=1) c on p.clinic_id=c.id
         limit 1
     </select>
@@ -474,38 +474,4 @@
         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>