瀏覽代碼

add 多权限体系

18339543638 3 年之前
父節點
當前提交
651a4a5b1a
共有 16 個文件被更改,包括 343 次插入13 次删除
  1. 2 1
      nb-core/src/main/java/com/nb/core/doc/SwaggerConfig.java
  2. 2 2
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/entity/AssistantEvalEntity.java
  3. 14 7
      nb-service-api/app-doctor-api/src/main/java/com/nb/app/doctor/api/feign/IAppDoctorUserClient.java
  4. 43 0
      nb-service-api/app-doctor-api/src/main/java/com/nb/app/doctor/api/feign/result/AppDoctorUserResult.java
  5. 26 0
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/event/ClinicFinishedEvent.java
  6. 26 0
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/event/ClinicRestartEvent.java
  7. 10 0
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IPatientClient.java
  8. 19 0
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/result/PatientByInviteCodeResult.java
  9. 8 0
      nb-service/app-assistant/pom.xml
  10. 43 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/AppDoctorController.java
  11. 51 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/PatientMonitorController.java
  12. 50 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/vo/InviteCodePatientVo.java
  13. 15 0
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/LocalAppDoctorUserService.java
  14. 16 1
      nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusClinicService.java
  15. 11 1
      nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java
  16. 7 1
      nb-service/web-service/src/main/java/com/nb/web/service/bus/utils/PatientInviteCodeUtil.java

+ 2 - 1
nb-core/src/main/java/com/nb/core/doc/SwaggerConfig.java

@@ -56,7 +56,8 @@ public class SwaggerConfig implements WebMvcConfigurer {
 
 
     public List<SecurityScheme> security() {
-        return Arrays.asList(new ApiKey("BASE_TOKEN", "Authorization",   In.HEADER.toValue()),
+        return Arrays.asList(new ApiKey("授权码", "Authorization",   In.HEADER.toValue()),
+                new ApiKey("权限体系,从login接口中得到LoginType中获取","Login-Type",In.HEADER.toValue()),
                 new ApiKey("租户id", "Tenant-Id",   In.HEADER.toValue()));
     }
 

+ 2 - 2
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/entity/AssistantEvalEntity.java

@@ -60,10 +60,10 @@ public class AssistantEvalEntity extends GenericEntity<String> {
     private String painNature;
 
     @ApiModelProperty("静息疼痛")
-    private Integer painStatics;
+    private Integer statics;
 
     @ApiModelProperty("活动疼痛")
-    private Integer painActivity;
+    private Integer activity;
 
     @ApiModelProperty("过去24小时最疼")
     private Integer painLastOneDay;

+ 14 - 7
nb-service-api/app-doctor-api/src/main/java/com/nb/app/doctor/api/feign/IAppDoctorUserClient.java

@@ -2,6 +2,7 @@ package com.nb.app.doctor.api.feign;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.nb.app.doctor.api.entity.AppDoctorUserEntity;
+import com.nb.app.doctor.api.feign.result.AppDoctorUserResult;
 import com.nb.core.entity.QueryParamEntity;
 
 import java.io.Serializable;
@@ -42,17 +43,23 @@ public interface IAppDoctorUserClient {
      */
     boolean edit(AppDoctorUserEntity source);
 
-
     /**
-     * 描述: 查询用户列表
+     * 描述: 某医院下可咨询的医生列表
      * @author lifang
-     * @date 2022/8/10 14:14
-     * @param param
-     * @return IPage<AppDoctorUserEntity>
+     * @date 2022/8/11 18:12
+     * @param tenantId
+     * @return List<AppDoctorUserEntity>
      */
-    IPage<AppDoctorUserEntity> list(QueryParamEntity<AppDoctorUserEntity> param) ;
-
+    List<AppDoctorUserResult> consultList(String tenantId);
 
+    /**
+     * 描述: 某医院下可咨询的医生列表
+     * @author lifang
+     * @date 2022/8/11 18:12
+     * @param id
+     * @return List<AppDoctorUserEntity>
+     */
+    AppDoctorUserResult lookById(Serializable id);
 
     /**
      * 描述: 删除某一医生用户

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

@@ -0,0 +1,43 @@
+package com.nb.app.doctor.api.feign.result;
+
+import com.nb.core.entity.GenericEntity;
+import com.nb.core.enums.SexEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName AppDoctorUserResult.java
+ * @Description 医生用户查询结果
+ * @createTime 2022年08月11日 18:26:00
+ */
+@Data
+public class AppDoctorUserResult {
+    @ApiModelProperty(value = "性别 1、男 2、女 3、未知",allowableValues = "1,2,3")
+    private SexEnum sex;
+
+    @ApiModelProperty(value = "医生名称,医生名称不得超过32个字节")
+    @Length(max = 32,message = "医生名称不得超过32个字节",groups = {GenericEntity.Insert.class, GenericEntity.Update.class})
+    private String realName;
+
+    @ApiModelProperty(value = "职位,职位不得超过32个字节")
+    @Length(max = 32,message = "职位不得超过32个字节",groups = {GenericEntity.Insert.class, GenericEntity.Update.class})
+    private String post;
+
+    @ApiModelProperty(value = "头像")
+    private String avatar;
+
+    @ApiModelProperty(value = "个人简历,个人简历不得超过255个字节")
+    @Length(max = 32,message = "个人简历不得超过255个字节",groups = {GenericEntity.Insert.class, GenericEntity.Update.class})
+    private String resume;
+
+    @ApiModelProperty(value = "专业擅长,专业擅长不得超过255个字节")
+    @Length(max = 32,message = "专业擅长不得超过255个字节",groups = {GenericEntity.Insert.class, GenericEntity.Update.class})
+    private String skilled;
+
+    @ApiModelProperty(value = "科室,科室不得超过64个字节")
+    @Length(max = 32,message = "科室不得超过64个字节",groups = {GenericEntity.Insert.class, GenericEntity.Update.class})
+    private String dept;
+}

+ 26 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/event/ClinicFinishedEvent.java

@@ -0,0 +1,26 @@
+package com.nb.web.api.event;
+
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ClinicFinishedEvent.java
+ * @Description 临床结束事件
+ * @createTime 2022年08月11日 17:53:00
+ */
+@Getter
+public class ClinicFinishedEvent  extends ApplicationEvent {
+    private String tenantId;
+    private String clinicId;
+    private String patientId;
+
+    public ClinicFinishedEvent(Object source, String tenantId, String clinicId, String patientId) {
+        super(source);
+        this.tenantId = tenantId;
+        this.clinicId = clinicId;
+        this.patientId = patientId;
+    }
+
+}

+ 26 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/event/ClinicRestartEvent.java

@@ -0,0 +1,26 @@
+package com.nb.web.api.event;
+
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ClinicFinishedEvent.java
+ * @Description 临床重新开启事件
+ * @createTime 2022年08月11日 17:53:00
+ */
+@Getter
+public class ClinicRestartEvent extends ApplicationEvent {
+    private String tenantId;
+    private String clinicId;
+    private String patientId;
+
+    public ClinicRestartEvent(Object source, String tenantId, String clinicId, String patientId) {
+        super(source);
+        this.tenantId = tenantId;
+        this.clinicId = clinicId;
+        this.patientId = patientId;
+    }
+
+}

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

@@ -3,6 +3,7 @@ package com.nb.web.api.feign;
 import com.nb.web.api.enums.ClinicManageEnum;
 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;
 
@@ -47,4 +48,13 @@ public interface IPatientClient {
      * @return InviteCodeResult
      */
     InviteCodeResult  generateInviteCode(String tenantId,String patientCode,ClinicManageEnum manageType);
+
+    /**
+     * 描述: 通过邀请码获取当前病人信息
+     * @author lifang
+     * @date 2022/8/11 17:30
+     * @param inviteCode
+     * @return PatientByInviteCodeResult
+     */
+    PatientByInviteCodeResult lookPatientByInviteCode(String inviteCode);
 }

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

@@ -0,0 +1,19 @@
+package com.nb.web.api.feign.result;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName PatientByInviteCodeResult.java
+ * @Description 通过邀请码获取病人信息结果
+ * @createTime 2022年08月11日 17:39:00
+ */
+@Data
+@AllArgsConstructor(staticName = "of")
+public class PatientByInviteCodeResult {
+    private String inviteCode;
+    private String tenantId;
+    private PatientMonitorResult result;
+}

+ 8 - 0
nb-service/app-assistant/pom.xml

@@ -13,6 +13,10 @@
 
 
     <dependencies>
+        <dependency>
+            <groupId>com.tuoren</groupId>
+            <artifactId>app-doctor-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.tuoren</groupId>
             <artifactId>app-assistant-api</artifactId>
@@ -37,6 +41,10 @@
             <groupId>com.tuoren</groupId>
             <artifactId>crud-common</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.tuoren</groupId>
+            <artifactId>web-service-api</artifactId>
+        </dependency>
     </dependencies>
 
 

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

@@ -0,0 +1,43 @@
+package com.nb.app.assistant.controller;
+
+import com.nb.app.doctor.api.feign.IAppDoctorUserClient;
+import com.nb.core.result.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+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 PatientMonitorController.java
+ * @Description
+ * @createTime 2022年08月11日 15:40:00
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/doctor")
+@Api(tags = "可咨询医生")
+@Slf4j
+public class AppDoctorController {
+
+    private final IAppDoctorUserClient doctorUserClient;
+    @PostMapping("/list/{tenantId}")
+    @ApiOperation("获取医院的医生人员列表")
+    public R listDoctor(@PathVariable("tenantId")
+                        @ApiParam("医院id") String tenantId){
+        return R.success(doctorUserClient.consultList(tenantId));
+    }
+
+    @PostMapping("/{doctorId}")
+    @ApiOperation("获取医院的医生人员列表")
+    public R lookDoctor(@PathVariable("doctorId")
+                        @ApiParam("医生id") String doctorId){
+        return R.success(doctorUserClient.lookById(doctorId));
+    }
+}

+ 51 - 0
nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/PatientMonitorController.java

@@ -0,0 +1,51 @@
+package com.nb.app.assistant.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.nb.app.assistant.controller.vo.InviteCodePatientVo;
+import com.nb.app.doctor.api.feign.IAppDoctorUserClient;
+import com.nb.core.exception.CustomException;
+import com.nb.core.result.R;
+import com.nb.web.api.feign.IPatientClient;
+import com.nb.web.api.feign.result.PatientByInviteCodeResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+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 PatientMonitorController.java
+ * @Description
+ * @createTime 2022年08月11日 15:40:00
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/monitor")
+@Api(tags = "监控患者相关操作")
+@Slf4j
+public class PatientMonitorController {
+
+    private final IPatientClient patientClient;
+    private final IAppDoctorUserClient doctorUserClient;
+    @PostMapping("/save")
+    @ApiOperation(value = "添加看护人")
+    public R saveMonitor(){
+        return R.success();
+    }
+
+    @PostMapping("/look/invite/{inviteCode}")
+    @ApiOperation(value = "通过邀请码获取病人信息")
+    public R<InviteCodePatientVo> lookPatientInfoByInviteCode(@PathVariable("inviteCode")String inviteCode){
+        PatientByInviteCodeResult inviteCodeResult = patientClient.lookPatientByInviteCode(inviteCode);
+        if(inviteCodeResult.getResult()==null){
+            throw new CustomException("系统繁忙,请稍后重试");
+        }
+        return R.success(BeanUtil.copyProperties(inviteCodeResult.getResult(), InviteCodePatientVo.class));
+    }
+}

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

@@ -0,0 +1,50 @@
+package com.nb.app.assistant.controller.vo;
+
+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 InviteCodePatientVo.java
+ * @Description 通过邀请码获取的病人信息
+ * @createTime 2022年08月11日 17:41:00
+ */
+@Data
+@ApiModel("通过邀请码获取的病人信息")
+public class InviteCodePatientVo {
+    @ApiModelProperty(value = "病人id")
+    private String patientId;
+
+    @ApiModelProperty(value = "格式化后的病号")
+    private String patientCode;
+
+    @ApiModelProperty(value = "病人名称")
+    private String patientName;
+
+    @ApiModelProperty(value = "病人年龄")
+    private String patientAge;
+
+    @ApiModelProperty(value = "性别")
+    private SexEnum gender;
+
+    @ApiModelProperty(value = "临床号")
+    private String clinicId;
+
+    @ApiModelProperty(value = "病区")
+    private String ward;
+
+    @ApiModelProperty(value = "床号")
+    private String bedNo;
+
+    @ApiModelProperty(value = "手术医生")
+    private String surgeryDoctor;
+
+    @ApiModelProperty(value = "手术名称")
+    private String surgeryName;
+
+    @ApiModelProperty(value = "医院id")
+    private String tenantId;
+}

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

@@ -1,5 +1,6 @@
 package com.nb.app.doctor.service;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
@@ -7,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.enums.SqlMethod;
 import com.nb.app.doctor.api.entity.AppDoctorUserEntity;
 import com.nb.app.doctor.api.feign.IAppDoctorUserClient;
+import com.nb.app.doctor.api.feign.result.AppDoctorUserResult;
 import com.nb.app.doctor.mapper.AppDoctorUserMapper;
 import com.nb.auth.utils.SecurityUtil;
 import com.nb.common.crud.BaseService;
@@ -15,6 +17,7 @@ import com.nb.core.exception.CustomException;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.Serializable;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
@@ -133,4 +136,16 @@ public class LocalAppDoctorUserService extends BaseService<AppDoctorUserMapper,
         }
         return this.updateById(source);
     }
+
+    @Override
+    public List<AppDoctorUserResult> consultList(String tenantId) {
+        //todo
+        return null;
+    }
+
+    @Override
+    public AppDoctorUserResult lookById(Serializable id) {
+        AppDoctorUserEntity user = this.getById(id);
+        return user==null?null:BeanUtil.copyProperties(this.getById(id),AppDoctorUserResult.class);
+    }
 }

+ 16 - 1
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusClinicService.java

@@ -1,9 +1,12 @@
 package com.nb.web.service.bus.service;
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.nb.web.api.enums.ClinicManageEnum;
+import com.nb.web.api.event.ClinicFinishedEvent;
+import com.nb.web.api.event.ClinicRestartEvent;
 import com.nb.web.service.bus.controller.vo.ClinicStatsVo;
 import com.nb.web.api.entity.BusClinicEntity;
 import com.nb.web.api.entity.BusInfusionHistoryEntity;
@@ -93,6 +96,13 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
                 .set(BusClinicEntity::getFinished,true)
                 .set(BusClinicEntity::getEndTime,finishTime));
         wsPublishUtils.publishMonitorTotalCount(tenantId);
+        List<BusClinicEntity> clinics = this.listByIds(clinicIds);
+        clinics.parallelStream()
+                .forEach(clinic->{
+                    //管理结束时间
+                    ClinicFinishedEvent event = new ClinicFinishedEvent(this, tenantId, clinic.getId(), clinic.getPatientId());
+                    SpringUtil.publishEvent(event);
+                });
     }
 
     /**
@@ -229,7 +239,12 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
      */
     @Transactional(rollbackFor = Exception.class)
     public void resetClinic(String clinicId) {
-        this.update(new UpdateWrapper<BusClinicEntity>().lambda().eq(BusClinicEntity::getId,clinicId).set(BusClinicEntity::getFinished,false));
+        if (this.update(new UpdateWrapper<BusClinicEntity>().lambda().eq(BusClinicEntity::getId,clinicId).set(BusClinicEntity::getFinished,false))) {
+            BusClinicEntity clinic = this.getById(clinicId);
+            //临床重启事件
+            SpringUtil.publishEvent(new ClinicRestartEvent(this,clinic.getTenantId(),clinicId,clinic.getPatientId()));
+        }
+
     }
 
     public IPage<ClinicResult> latestQueryPage(ClinicQuery query){

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

@@ -17,6 +17,7 @@ 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.PatientMonitorQuery;
 import com.nb.web.api.feign.result.PatientMonitorResult;
@@ -540,7 +541,7 @@ 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, patientCode);
+        PatientInviteCodeUtil.InviteCodeNode inviteCodeNode = inviteCodeUtil.generateCode(6, tenantId,patient.getId(),patientCode);
         result.setPatientCode(patientCode);
         result.setPatientId(patient.getId());
         result.setTenantId(tenantId);
@@ -548,4 +549,13 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
         result.setExpiredAtTime(inviteCodeNode.getExpiredAtTime());
         return result;
     }
+
+    @Override
+    public PatientByInviteCodeResult lookPatientByInviteCode(String inviteCode) {
+        PatientInviteCodeUtil.InviteCodeNode inviteCodeNode = inviteCodeUtil.getCode(inviteCode);
+        if(inviteCodeNode==null){
+            throw new CustomException("该邀请码已失效");
+        }
+        return    PatientByInviteCodeResult.of(inviteCode,inviteCodeNode.getTenantId(), this.lookMonitorByPatientId(inviteCodeNode.getPatientId(),inviteCodeNode.getTenantId())) ;
+    }
 }

+ 7 - 1
nb-service/web-service/src/main/java/com/nb/web/service/bus/utils/PatientInviteCodeUtil.java

@@ -2,6 +2,7 @@ package com.nb.web.service.bus.utils;
 
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.nb.core.exception.CustomException;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
@@ -41,12 +42,14 @@ public class PatientInviteCodeUtil {
         this.patientCodeMap = redissonClient.getMapCache("patient-code-invite");
     }
 
-    public synchronized InviteCodeNode generateCode(int length,String patientCode){
+    public synchronized InviteCodeNode generateCode(int length,String tenantId,String patientId,String patientCode){
         InviteCodeNode result = patientCodeMap.get(patientCode);
         if(result!=null){
             return result;
         }
         result=new InviteCodeNode();
+        result.setPatientId(patientId);
+        result.setTenantId(tenantId);
         result.setPatientCode(patientCode);
         for (int i = 0; i < 10; i++) {
             String code = RandomUtil.randomNumbers(length);
@@ -74,6 +77,9 @@ public class PatientInviteCodeUtil {
 
     @Data
     public static class InviteCodeNode implements Serializable {
+        @JsonIgnoreProperties
+        private String patientId;
+        private String tenantId;
         private String  patientCode;
         private String inviteCode;
         private Date expiredAtTime;