Browse Source

Merge branch 'dev' into nb-pc-rabbitmq

18339543638 3 năm trước cách đây
mục cha
commit
42d54c8b82
22 tập tin đã thay đổi với 270 bổ sung28 xóa
  1. 1 1
      nb-common/config-common/src/main/java/com/nb/common/config/mybatisplus/MybatisPlusConfig.java
  2. 7 0
      nb-common/crud-common/src/main/java/com/nb/common/crud/controller/BaseSaveController.java
  3. 4 0
      nb-im/pom.xml
  4. 30 1
      nb-im/src/main/java/com/nb/im/service/LocalImRoomService.java
  5. 30 0
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/event/UpdateBindPatientEvent.java
  6. 3 0
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/IAssistantUserBindClient.java
  7. 31 0
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/feign/result/UpdateBindPatientParam.java
  8. 4 2
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IPatientClient.java
  9. 2 0
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/result/InviteCodeResult.java
  10. 3 0
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/result/PatientByInviteCodeResult.java
  11. 3 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/PatientOperationController.java
  12. 9 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/vo/InviteCodePatientVo.java
  13. 29 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/service/LocalAssistantUserBindService.java
  14. 10 1
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/PatientMonitorController.java
  15. 8 2
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/vo/InviteCodeVo.java
  16. 41 0
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/vo/UpdateBindPatientVo.java
  17. 2 2
      nb-service/app-msg/src/main/java/com/nb/app/msg/entity/AppMsgEntity.java
  18. 2 1
      nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusDeviceHistoryController.java
  19. 20 10
      nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusPatientController.java
  20. 14 3
      nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java
  21. 16 4
      nb-service/web-service/src/main/java/com/nb/web/service/bus/utils/PatientInviteCodeUtil.java
  22. 1 1
      nb-service/web-service/src/main/java/com/nb/web/service/system/auth/WebAuthGranter.java

+ 1 - 1
nb-common/config-common/src/main/java/com/nb/common/config/mybatisplus/MybatisPlusConfig.java

@@ -45,7 +45,7 @@ public class MybatisPlusConfig {
         // 设置数据库类型为mysql
         paginationInnerInterceptor.setDbType(DbType.MYSQL);
         // 设置最大单页限制数量,默认 500 条,-1 不受限制
-        paginationInnerInterceptor.setMaxLimit(-1L);
+        paginationInnerInterceptor.setMaxLimit(600L);
         paginationInnerInterceptor.setDialect(new MySqlDialect());
 
         return paginationInnerInterceptor;

+ 7 - 0
nb-common/crud-common/src/main/java/com/nb/common/crud/controller/BaseSaveController.java

@@ -47,4 +47,11 @@ public interface BaseSaveController<E,K extends Serializable> extends
         editAuth();
         return getService().updateById(payload)?R.success(payload):R.fail("更新失败");
     }
+
+    @PostMapping("/edit/_batch")
+    @ApiOperation(value = "批量根据id修改数据")
+    default R update(@RequestBody @Validated(GenericEntity.Insert.class) List<E> payload) {
+        editAuth();
+        return getService().updateBatchById(payload)?R.success(payload):R.fail("更新失败");
+    }
 }

+ 4 - 0
nb-im/pom.xml

@@ -12,6 +12,10 @@
     <artifactId>nb-im</artifactId>
 
     <dependencies>
+        <dependency>
+            <groupId>com.tuoren</groupId>
+            <artifactId>app-assistant-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.tuoren</groupId>
             <artifactId>delay-queue-common</artifactId>

+ 30 - 1
nb-im/src/main/java/com/nb/im/service/LocalImRoomService.java

@@ -1,8 +1,12 @@
 package com.nb.im.service;
 
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 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.UpdateBindPatientEvent;
+import com.nb.app.assistant.api.feign.result.UpdateBindPatientParam;
 import com.nb.app.msg.enums.MsgEnum;
 import com.nb.common.crud.BaseService;
 import com.nb.common.queue.delay.manager.DelayMessageManager;
@@ -22,6 +26,7 @@ import com.nb.im.ws.PubMsgInfo;
 import com.nb.web.api.feign.IPatientClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -61,6 +66,29 @@ public class LocalImRoomService extends BaseService<ImRoomMapper, ImRoomEntity,S
     @Lazy
     private DelayMessageManager delayMessageManager;
 
+
+    @EventListener
+    @Transactional(rollbackFor = Exception.class)
+    public  void updateRoomInfo(UpdateBindPatientEvent event){
+        String assistId = event.getAssistId();
+        String doctorId = event.getDoctorId();
+        String oldPatientId = event.getOldPatientId();
+        UpdateBindPatientParam param = event.getParam();
+        this.update(new UpdateWrapper<ImRoomEntity>()
+                .lambda()
+                .eq(ImRoomEntity::getAssistId,assistId)
+                .eq(ImRoomEntity::getDoctorId,doctorId)
+                .eq(ImRoomEntity::getPatientId,oldPatientId)
+                .in(ImRoomEntity::getStatus,ImStatusEnum.WAITING,ImStatusEnum.SUCCESS)
+                .set(StrUtil.isNotEmpty(param.getPatientId()), ImRoomEntity::getPatientId, param.getPatientId())
+                .set(StrUtil.isNotEmpty(param.getPatientAge()), ImRoomEntity::getPatientAge, param.getPatientAge())
+                .set(StrUtil.isNotEmpty(param.getPatientCode()), ImRoomEntity::getPatientCode, param.getPatientCode())
+                .set(StrUtil.isNotEmpty(param.getPatientName()), ImRoomEntity::getPatientName, param.getPatientName())
+                .set(ObjectUtil.isNotNull(param.getPatientSex()), ImRoomEntity::getPatientSex, param.getPatientSex())
+        );
+    }
+
+
     @Override
     public void validateBeforeSave(ImRoomEntity entity) {
         if(entity.getManageType()==null&& StrUtil.isNotEmpty(entity.getPatientId())){
@@ -84,7 +112,8 @@ public class LocalImRoomService extends BaseService<ImRoomMapper, ImRoomEntity,S
     @Override
     public void postUpdate(ImRoomEntity entity) {
         if(ImStatusEnum.SUCCESS.equals(entity.getStatus())){
-            autoFinishRoom(entity.getId());        }
+            autoFinishRoom(entity.getId());
+        }
     }
 
     @Override

+ 30 - 0
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/event/UpdateBindPatientEvent.java

@@ -0,0 +1,30 @@
+package com.nb.app.assistant.api.event;
+
+import com.nb.app.assistant.api.feign.result.UpdateBindPatientParam;
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+import java.time.Clock;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName UpdateBindPatientEvent.java
+ * @Description 绑定关系中的病人信息发生变化
+ * @createTime 2022年09月21日 17:07:00
+ */
+@Getter
+public class UpdateBindPatientEvent  extends ApplicationEvent {
+    private UpdateBindPatientParam param;
+    private String assistId;
+    private String doctorId;
+    private String oldPatientId;
+
+    public UpdateBindPatientEvent(Object source, UpdateBindPatientParam param, String assistId, String doctorId,String oldPatientId) {
+        super(source);
+        this.param = param;
+        this.assistId = assistId;
+        this.doctorId = doctorId;
+        this.oldPatientId=oldPatientId;
+    }
+}

+ 3 - 0
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.UpdateBindPatientParam;
 
 import java.util.*;
 /**
@@ -64,4 +65,6 @@ public interface IAssistantUserBindClient {
      * @return boolean
      */
     boolean haveBindByPatientId(String patientId, String tenantId);
+
+    boolean updateBindPatient(UpdateBindPatientParam patientParam);
 }

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

@@ -0,0 +1,31 @@
+package com.nb.app.assistant.api.feign.result;
+
+import com.nb.core.enums.SexEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName UpdateBindPatientDto.java
+ * @Description TODO
+ * @createTime 2022年09月21日 16:58:00
+ */
+@Data
+public class UpdateBindPatientParam {
+    private String patientId;
+
+    private String patientCode;
+
+    private String patientName;
+
+    private SexEnum patientSex;
+
+    private String patientAge;
+
+    @ApiModelProperty("绑定关系id")
+    @NotNull(message = "绑定关系id不能为空")
+    private String bindId;
+}

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

@@ -65,11 +65,13 @@ public interface IPatientClient {
      * @author lifang
      * @date 2022/8/11 11:31
      * @param tenantId
-     * @param patientCode
+     * @param code
+     * @param doctorId
+     * @param doctorName
      * @param manageType
      * @return InviteCodeResult
      */
-    InviteCodeResult  generateInviteCode(String tenantId,String patientCode,ClinicManageEnum manageType);
+    InviteCodeResult  generateInviteCode(String tenantId, String code, String doctorId, String doctorName, ClinicManageEnum manageType);
 
     /**
      * 描述: 通过邀请码获取当前病人信息

+ 2 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/result/InviteCodeResult.java

@@ -26,4 +26,6 @@ public class InviteCodeResult {
     private Date expiredAtTime;
     @ApiModelProperty("医院id")
     private String tenantId;
+    @ApiModelProperty("医院名称")
+    private String tenantName;
 }

+ 3 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/result/PatientByInviteCodeResult.java

@@ -15,5 +15,8 @@ import lombok.Data;
 public class PatientByInviteCodeResult {
     private String inviteCode;
     private String tenantId;
+    private String tenantName;
+    private String doctorId;
+    private String doctorName;
     private PatientMonitorResult result;
 }

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

@@ -114,6 +114,9 @@ public class PatientOperationController {
         judgeUser();
         InviteCodePatientVo result = BeanUtil.copyProperties(inviteCodeResult.getResult(), InviteCodePatientVo.class);
         result.setTenantId(inviteCodeResult.getTenantId());
+        result.setDoctorId(inviteCodeResult.getDoctorId());
+        result.setDoctorName(inviteCodeResult.getDoctorName());
+        result.setTenantName(inviteCodeResult.getTenantName());
         return R.success(result);
     }
 

+ 9 - 0
nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/vo/InviteCodePatientVo.java

@@ -47,4 +47,13 @@ public class InviteCodePatientVo {
 
     @ApiModelProperty(value = "医院id")
     private String tenantId;
+
+    @ApiModelProperty("医院名称")
+    private String tenantName;
+
+    @ApiModelProperty(value = "医生id")
+    private String doctorId;
+
+    @ApiModelProperty("医生名称")
+    private String doctorName;
 }

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

@@ -1,6 +1,7 @@
 package com.nb.app.assistant.service;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import cn.hutool.json.JSONUtil;
@@ -9,11 +10,13 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.nb.app.assistant.api.bean.HandleBindResult;
 import com.nb.app.assistant.api.entity.AssistantUserBindEntity;
+import com.nb.app.assistant.api.event.UpdateBindPatientEvent;
 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.api.feign.result.UpdateBindPatientParam;
 import com.nb.app.assistant.constant.UnEvalConstant;
 import com.nb.app.assistant.delay.UnEvalNotifyConfig;
 import com.nb.app.assistant.mapper.AssistantUserBindMapper;
@@ -300,6 +303,32 @@ public class LocalAssistantUserBindService extends BaseService<AssistantUserBind
                 .last("limit 1"))!=null;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateBindPatient(UpdateBindPatientParam param) {
+        if(StrUtil.isEmpty(param.getBindId())){
+            return true;
+        }
+        AssistantUserBindEntity userBind = this.getById(param.getBindId());
+        if(userBind==null){
+            return true;
+        }
+        boolean result = this.update(new UpdateWrapper<AssistantUserBindEntity>()
+                .lambda()
+                .eq(AssistantUserBindEntity::getId, param.getBindId())
+                .set(StrUtil.isNotEmpty(param.getPatientId()), AssistantUserBindEntity::getPatientId, param.getPatientId())
+                .set(StrUtil.isNotEmpty(param.getPatientAge()), AssistantUserBindEntity::getPatientAge, param.getPatientAge())
+                .set(StrUtil.isNotEmpty(param.getPatientCode()), AssistantUserBindEntity::getPatientCode, param.getPatientCode())
+                .set(StrUtil.isNotEmpty(param.getPatientName()), AssistantUserBindEntity::getPatientName, param.getPatientName())
+                .set(ObjectUtil.isNotNull(param.getPatientSex()), AssistantUserBindEntity::getPatientSex, param.getPatientSex())
+        );
+        if(result){
+            //更新最新的聊天室信息
+            SpringUtil.publishEvent(new UpdateBindPatientEvent(this,param,userBind.getAssistId(),userBind.getDoctorId(),userBind.getPatientId()));
+        }
+        return result;
+    }
+
     /**
      * 描述:查询当前用户所看护的所有病人信息
      * @author lifang

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

@@ -2,12 +2,15 @@ package com.nb.app.doctor.controller;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
 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.assistant.api.feign.result.UpdateBindPatientParam;
 import com.nb.app.doctor.controller.vo.InviteCodeVo;
+import com.nb.app.doctor.controller.vo.UpdateBindPatientVo;
 import com.nb.app.doctor.service.dto.PatientMonitorConsultResult;
 import com.nb.auth.utils.SecurityUtil;
 import com.nb.common.websocket.WebSocketSessionLifeCycleManage;
@@ -101,7 +104,7 @@ public class PatientMonitorController {
         if(userBindClient.haveBindByPatientCode(resource.getPatientCode(),tenantId)){
             throw new CustomException("该病人已被看护");
         }
-        return R.success(patientClient.generateInviteCode(tenantId,resource.getPatientCode(),resource.getManage()));
+        return R.success(patientClient.generateInviteCode(tenantId,resource.getPatientCode(),resource.getDoctorId(),resource.getDoctorName(),resource.getManage()));
     }
 
 
@@ -112,6 +115,12 @@ public class PatientMonitorController {
         return R.success(userBindClient.handleBindResult(source));
     }
 
+    @PostMapping("/update/bind")
+    @ApiOperation("更新看护关系中的病人信息")
+    public R<Boolean> updateBind(@RequestBody @Validated UpdateBindPatientVo vo){
+        return R.success(userBindClient.updateBindPatient(BeanUtil.copyProperties(vo, UpdateBindPatientParam.class)));
+    }
+
 
     @PostMapping("/lift/{bindId}")
     @ApiOperation(value = "与病人解除绑定")

+ 8 - 2
nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/vo/InviteCodeVo.java

@@ -17,10 +17,16 @@ import javax.validation.constraints.NotNull;
 @Data
 @ApiModel("邀请码")
 public class InviteCodeVo {
-    @ApiModelProperty("住院号")
+    @ApiModelProperty(value = "住院号",required = true)
     @NotNull(message = "住院号不能为空")
     private String patientCode;
-    @ApiModelProperty(value = "监护位置",allowableValues = "0(院内管理) 1(居家管理)")
+    @ApiModelProperty(value = "监护位置",allowableValues = "0(院内管理) 1(居家管理)",required = true)
     @NotNull(message = "监护位置不能为空")
     private ClinicManageEnum manage;
+    @ApiModelProperty(value = "医生id",required = true)
+    @NotNull(message = "医生id不能为空")
+    private String doctorId;
+    @ApiModelProperty(value = "医生名称",required = true)
+    @NotNull(message = "医生名称不能为空")
+    private String doctorName;
 }

+ 41 - 0
nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/vo/UpdateBindPatientVo.java

@@ -0,0 +1,41 @@
+package com.nb.app.doctor.controller.vo;
+
+import com.nb.core.enums.SexEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName UpdateBindPatientVo.java
+ * @Description TODO
+ * @createTime 2022年09月21日 16:49:00
+ */
+@Data
+@ApiModel("更新绑定关系中的病人信息")
+public class UpdateBindPatientVo {
+
+    @ApiModelProperty(value = "更新后的病人id",required = true)
+    @NotNull(message = "病人id不能为空")
+    private String patientId;
+
+    @ApiModelProperty("住院号")
+    private String patientCode;
+
+    @ApiModelProperty("病人名称")
+    private String patientName;
+
+    @ApiModelProperty("病人性别")
+    private SexEnum patientSex;
+
+    @ApiModelProperty("病人年龄")
+    private String patientAge;
+
+    @ApiModelProperty(value = "绑定关系id",required = true)
+    @NotNull(message = "绑定关系id不能为空")
+    private String bindId;
+}

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

@@ -96,9 +96,9 @@ public class AppMsgEntity  extends GenericEntity<String> {
             case MANUAL_BIND_NOTIFY:
                 return getSenderName()+"发起用户绑定申请";
             case BIND_FAIL:
-                return getReceiverName()+"通过了您与"+getPatient()+"的绑定申请";
-            case BIND_SUCCESS:
                 return getReceiverName()+"拒绝了您与"+getPatient()+"的绑定申请";
+            case BIND_SUCCESS:
+                return getSenderName()+"通过了"+getPatient()+"的绑定申请";
             case ASSIST_EVAL:
                 return  getPatient()+getExtend()+"未进行疼痛评估";
             default:  return "";

+ 2 - 1
nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusDeviceHistoryController.java

@@ -90,12 +90,13 @@ public class BusDeviceHistoryController extends BaseCrudController<BusDeviceHist
                 .lambda()
                 .select(BusDeviceHistoryEntity::getDataNumber)
                 .eq(BusDeviceHistoryEntity::getInfusionId, infusionId));
+        long count = histories.stream().map(BusDeviceHistoryEntity::getDataNumber).distinct().count();
         AtomicReference<BigDecimal> result=new AtomicReference<>(BigDecimal.ZERO);
         if(CollectionUtil.isNotEmpty(histories)){
             histories.stream().map(BusDeviceHistoryEntity::getDataNumber)
                     .max(Comparator.comparing(Integer::byteValue))
                     .map(max->{
-                        BigDecimal proportionRate = BigDecimal.valueOf(CollectionUtil.size(histories)).divide(BigDecimal.valueOf(max), 2, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal proportionRate = BigDecimal.valueOf(count).divide(BigDecimal.valueOf(max), 2, BigDecimal.ROUND_HALF_UP);
                         result.set(BigDecimal.ONE.subtract(proportionRate).multiply(BigDecimal.valueOf(100)));
                         return max;
                     });

+ 20 - 10
nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusPatientController.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
 import com.nb.web.api.entity.BusClinicEntity;
+import com.nb.web.api.entity.BusDeviceEntity;
 import com.nb.web.api.entity.BusDeviceManualEntity;
 import com.nb.web.api.entity.BusInfusionHistoryEntity;
 import com.nb.web.api.entity.common.BusDeviceRunningEntity;
@@ -68,6 +69,7 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
     private final LocalBusDeviceService deviceService;
 
     @PostMapping("/no_page")
+    @Log(title = "输注监控列表查询")
     @SaCheckPermission("device:patient:query")
     @ApiOperation(value = "输注监控列表",notes = "病人监控管理列表,权限【device:patient:query】")
     public R<List<PatientMonitorResult>> selectPage(@RequestBody PatientMonitorQuery query){
@@ -138,6 +140,7 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
 
     @PostMapping("/do/{monitorType}/finished")
     @SaCheckPermission("patient:finished:*")
+    @Log(title = "结束临床管理")
     @ApiResponse(code = 4001,message = "病号当前绑定了多个设备,不可结束管理")
     @ApiOperation(value = "结束管理",notes = "病患当前绑定主设备必须要在关机、不在服务器、待机中才能结束管理,权限【bus:patient:finished:*】")
     public R<Boolean> finished(@PathVariable("monitorType")@ApiParam(value = "是否为无泵管理 false、无泵 true、有泵",defaultValue = "false" ) boolean haveDevice,
@@ -210,8 +213,9 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
 
 
     @PostMapping("/monitor/reset/{clinicId}")
-    @SaCheckPermission("device:clinic:edit")
-    @ApiOperation(value = "病人当前监控时间重启",notes = "当结束临床后有新的输注信息产生,那么病人监控会重新显示,此时监控时间不会重新计算,需先调用该接口,权限标识为【device:clinic:edit】")
+    @Log(title = "病人当前监控时间重启")
+    @SaCheckPermission("bus:clinic:edit")
+    @ApiOperation(value = "病人当前监控时间重启",notes = "当结束临床后有新的输注信息产生,那么病人监控会重新显示,此时监控时间不会重新计算,需先调用该接口,权限标识为【bus:clinic:edit】")
     public R<Boolean> reset(@ApiParam("临床id")@PathVariable("clinicId")String clinicId){
         log.info("病人当前监控时间重启,【{}】",clinicId);
         R<Boolean> result = R.success(clinicService.update(new UpdateWrapper<BusClinicEntity>().lambda().eq(BusClinicEntity::getId, clinicId)
@@ -235,6 +239,7 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
     }
 
     @PostMapping("/shift")
+    @Log(title = "主泵切换的操作")
     @SaCheckPermission("bus:clinic:edit")
     @ApiOperation(value = "主泵切换的操作,只切换,不结束",notes = "当出现泵重复状态时,若用户想要进行主泵的切换,调用该接口进行操作,主泵切换完成后,会将副泵自动撤泵,权限标识为【bus:clinic:edit】")
     public R shift(@RequestBody@Validated DeviceShiftConfig shiftConfig){
@@ -245,8 +250,9 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
     }
 
     @PostMapping("/undo")
-    @SaCheckPermission("device:clinic:edit")
-    @ApiOperation(value = "批量撤泵,只撤泵,不切换",notes = "当出现泵重复状态时,若用户想要取消对其他副泵的监控,则调用此接口进行撤泵操作,权限标识为【device:clinic:edit】")
+    @Log(title = "批量撤泵")
+    @SaCheckPermission("bus:clinic:edit")
+    @ApiOperation(value = "批量撤泵,只撤泵,不切换",notes = "当出现泵重复状态时,若用户想要取消对其他副泵的监控,则调用此接口进行撤泵操作,权限标识为【bus:clinic:edit】")
     public R shift(@RequestBody@Validated ManualUndoConfig undoConfig, @RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId){
         log.info("批量撤泵,【{}】",JSONUtil.toJsonStr(undoConfig));
         undoConfig.setTenantId(tenantId);
@@ -262,6 +268,7 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
 
 
     @PostMapping("/monitor")
+    @Log(title = "查看病人监控详情")
     @SaCheckPermission(value = {"device:patient:query","device:manual:query"},mode = SaMode.OR)
     @ApiOperation(value = "查看病人当前监控详情",notes = "查看病人当前监控详情,权限标识为【device:patient:query】或【device:manual:query】")
     public R<PatientMonitorDetailResult> monitor(@RequestBody@Validated MonitorDetailVo vo){
@@ -285,12 +292,14 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
                 clinic= clinicService.getById(vo.getClinicId());
             }
             BusInfusionHistoryEntity infusion =infusionService.getById(infusionId);
-            Optional.ofNullable(deviceService.getByDeviceId(infusion.getDeviceId()))
-                    .map(device-> {
-                        //填充泵别名
-                        infusion.setAlias(device.getAlias());
-                        return device;
-                    });
+            if(infusion!=null){
+                BusDeviceEntity device = deviceService.getByDeviceId(infusion.getDeviceId());
+                if(device!=null){
+                    infusion.setAlias(device.getAlias());
+                }
+            }else {
+                infusion=new BusInfusionHistoryEntity();
+            }
             result.setInfusion(infusion);
         }else {
             String clinicId = vo.getClinicId();
@@ -328,6 +337,7 @@ public class BusPatientController  implements BaseQueryController<BusPatientEnti
 
 
     @PostMapping("/pull/async")
+    @Log(title = "异步更新患者信息")
     @SaCheckPermission("bus:clinic:edit")
     @ApiOperation(value = "异步更新患者信息,超时时间默认为10s,超时后数据返回继续处理,输注监控",notes = "权限标识为【bus:clinic:edit】")
     public DeferredResult<R<BusClinicEntity>> syn(@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId, @Validated@RequestBody GetPatientInfoVo vo){

+ 14 - 3
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java

@@ -570,7 +570,7 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public InviteCodeResult generateInviteCode(String tenantId,String patientCode, ClinicManageEnum manageType) {
+    public InviteCodeResult generateInviteCode(String tenantId, String patientCode, String doctorId, String doctorName, ClinicManageEnum manageType) {
         InviteCodeResult result = new InviteCodeResult();
         //将住院号病人存入数据库
         BusPatientEntity patient = this.getOneByHospitalAndPatientCode(tenantId, patientCode);
@@ -594,10 +594,16 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
                     .set(BusClinicEntity::getManageType,manageType));
         }
         CompletableFuture.runAsync(()->this.getPatientInfoFromHis(tenantId,patientCode,10,false));
-        PatientInviteCodeUtil.InviteCodeNode inviteCodeNode = inviteCodeUtil.generateCode(6, tenantId,patient.getId(),patientCode);
+        BusHospitalEntity hospital = hospitalService.getById(tenantId);
+        if(hospital==null){
+            throw new CustomException("当前医院不存在,请刷新后再试");
+        }
+        PatientInviteCodeUtil.InviteCodeNode inviteCodeNode = inviteCodeUtil.generateCode(6, tenantId,hospital.getName(),doctorId,doctorName,patient.getId(),patientCode);
+
         result.setPatientCode(patientCode);
         result.setPatientId(patient.getId());
         result.setTenantId(tenantId);
+        result.setTenantName(hospital.getName());
         result.setInviteCode(inviteCodeNode.getInviteCode());
         result.setExpiredAtTime(inviteCodeNode.getExpiredAtTime());
         return result;
@@ -609,7 +615,12 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
         if(inviteCodeNode==null){
             throw new CustomException("该邀请码已失效");
         }
-        return    PatientByInviteCodeResult.of(inviteCode,inviteCodeNode.getTenantId(), this.lookMonitorByPatientId(inviteCodeNode.getPatientId(),inviteCodeNode.getTenantId())) ;
+        return    PatientByInviteCodeResult.of(inviteCode,inviteCodeNode.getTenantId(),
+                inviteCodeNode.getTenantName(),
+                inviteCodeNode.getDoctorId(),
+                inviteCodeNode.getDoctorName(),
+                this.lookMonitorByPatientId(inviteCodeNode.getPatientId(),
+                        inviteCodeNode.getTenantId())) ;
     }
 
     @Override

+ 16 - 4
nb-service/web-service/src/main/java/com/nb/web/service/bus/utils/PatientInviteCodeUtil.java

@@ -14,6 +14,7 @@ import org.springframework.context.annotation.Configuration;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -42,14 +43,18 @@ public class PatientInviteCodeUtil {
         this.patientCodeMap = redissonClient.getMapCache("patient-code-invite");
     }
 
-    public synchronized InviteCodeNode generateCode(int length,String tenantId,String patientId,String patientCode){
-        InviteCodeNode result = patientCodeMap.get(patientCode);
+    public synchronized InviteCodeNode generateCode(int length,String tenantId,String tenantName, String doctorId, String doctorName,String patientId,String patientCode){
+        String key= Optional.ofNullable(doctorId).orElse("") +patientCode;
+        InviteCodeNode result = patientCodeMap.get(key);
         if(result!=null){
             return result;
         }
         result=new InviteCodeNode();
         result.setPatientId(patientId);
         result.setTenantId(tenantId);
+        result.setDoctorId(doctorId);
+        result.setDoctorName(doctorName);
+        result.setTenantName(tenantName);
         result.setPatientCode(patientCode);
         for (int i = 0; i < 10; i++) {
             String code = RandomUtil.randomNumbers(length);
@@ -65,7 +70,7 @@ public class PatientInviteCodeUtil {
             throw new CustomException("系统繁忙,请重试");
         }
         inviteCodeMap.put(result.getInviteCode(),result,7,TimeUnit.DAYS);
-        patientCodeMap.put(result.getPatientCode(),result,7,TimeUnit.DAYS);
+        patientCodeMap.put(key,result,7,TimeUnit.DAYS);
         return result;
     }
 
@@ -75,7 +80,10 @@ public class PatientInviteCodeUtil {
 
     public void delCode(String inviteCode) {
         InviteCodeNode inviteCodeNode = inviteCodeMap.remove(inviteCode);
-        patientCodeMap.remove(inviteCodeNode.getPatientCode());
+        if(inviteCodeNode!=null){
+            String key= Optional.ofNullable(inviteCodeNode.doctorId).orElse("") +inviteCodeNode.getPatientCode();
+            patientCodeMap.remove(key);
+        }
     }
 
 
@@ -84,8 +92,12 @@ public class PatientInviteCodeUtil {
         @JsonIgnoreProperties
         private String patientId;
         private String tenantId;
+        private String tenantName;
+        private String doctorId;
+        private String doctorName;
         private String  patientCode;
         private String inviteCode;
         private Date expiredAtTime;
+
     }
 }

+ 1 - 1
nb-service/web-service/src/main/java/com/nb/web/service/system/auth/WebAuthGranter.java

@@ -74,7 +74,7 @@ public class WebAuthGranter implements IAuthGranter {
             String requestFrom = request.getHeader("RequestFrom");
             //来自app的请求不需要验证码
             if(!"TuoRenApp".equals(requestFrom)){
-//                captchaTool.ver(source.getCodeKey(),source.getCode());
+                captchaTool.ver(source.getCodeKey(),source.getCode());
             }
         }
         sysUser = sysUserService.getOne(Wrappers.lambdaQuery(SysUser.class).eq(SysUser::getAccount, source.getUsername())