Bladeren bron

fix 聊天室没有病人性别
add 拉取his时添加忽略his是在在线参数

18339543638 3 jaren geleden
bovenliggende
commit
93560331d2

+ 4 - 0
nb-im/src/main/java/com/nb/im/controller/ImRoomController.java

@@ -4,6 +4,7 @@ import cn.dev33.satoken.stp.StpLogic;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
 import java.util.*;
@@ -31,6 +32,7 @@ import com.nb.im.service.dto.ImRoomResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Bean;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -45,6 +47,7 @@ import org.springframework.web.bind.annotation.*;
 @RestController
 @AllArgsConstructor
 @RequestMapping("/im/room")
+@Slf4j
 @Api(tags = "聊天室")
 public class ImRoomController implements BaseSaveController<ImRoomEntity,String> {
     private final LocalImRoomService imRoomService;
@@ -59,6 +62,7 @@ public class ImRoomController implements BaseSaveController<ImRoomEntity,String>
     @ApiOperation(value = "查询并自动创建与病人看护人的聊天室",notes = "若存在,则返回聊天室信息,若不存在,则返回空")
     @PostMapping("/look")
     public R<ImRoomEntity> getChatRoom(@RequestBody@Validated ImRoomDto source){
+        log.info("查询并自动创建与病人看护人的聊天室,{}", JSONUtil.toJsonStr(source));
         if(Boolean.TRUE.equals(source.isAutoCreate())&&StrUtil.isEmpty(source.getDoctorNickname())){
             throw new CustomException("医生昵称不可为空");
         }

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

@@ -17,7 +17,7 @@ import java.util.List;
  * @createTime 2022年08月10日 13:42:00
  */
 public interface IPatientClient {
-    DeferredResult<R<BusClinicEntity>> getPatientInfoFromHis(String hospitalId, String patientCode, long timeout, boolean sync);
+    DeferredResult<R<BusClinicEntity>> getPatientInfoFromHis(String hospitalId, String patientCode, long timeout, boolean sync,boolean ignoreOnline);
 
     /**
      * 描述: 查询所有的监护中的病人信息

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

@@ -145,9 +145,9 @@ public class PatientMonitorController {
     }
 
     @PostMapping("/pull/async")
-    @Log(title = "异步更新患者信息")
-    @ApiOperation(value = "异步更新患者信息,超时时间默认为10s,超时后数据返回继续处理,输注监控")
+    @Log(title = "从his或数据库中拉取数据病人数据")
+    @ApiOperation(value = "从his或数据库中拉取数据病人数据")
     public DeferredResult<R<BusClinicEntity>> syn(@RequestAttribute("tenantId")@ApiParam(hidden = true) String tenantId, @Validated@RequestBody GetPatientInfoVo vo){
-        return patientClient.getPatientInfoFromHis(tenantId,vo.getPatientCode(),vo.getTimeout(),false);
+        return patientClient.getPatientInfoFromHis(tenantId,vo.getPatientCode(),vo.getTimeout(),false,true);
     }
 }

+ 1 - 0
nb-service/app-msg/src/main/java/com/nb/app/msg/service/LocalAppConsultService.java

@@ -49,6 +49,7 @@ public class LocalAppConsultService extends BaseService<AppConsultMapper, AppCon
                         .patientId(entity.getPatientId())
                         .patientName(entity.getPatientName())
                         .patientCode(entity.getPatientCode())
+                        .patientSex(entity.getPatientSex())
                         .patientAge(entity.getPatientAge())
                         .receiverId(entity.getDoctorId())
                         .payload(entity.getId())

+ 38 - 6
nb-service/web-service/src/main/java/com/nb/web/service/bus/hospital/his/HisScriptSession.java

@@ -102,6 +102,11 @@ public class HisScriptSession {
     public BusHospitalEntity getHospitalInfo(){
         return clusterConfigStorage.getConfig("info").as(BusHospitalEntity.class);
     }
+
+    public  DeferredResult<R<BusClinicEntity>>  syncGetPatientInfo(String patientCode, long timeout, TimeUnit unit){
+        return this.syncGetPatientInfo(patientCode,timeout,unit,false);
+    }
+
     /**
      * 描述: 同步拉取病人信息,超时后该次请求不再处理
      * @author lifang
@@ -109,15 +114,27 @@ public class HisScriptSession {
      * @param patientCode
      * @param timeout
      * @param unit
+     * @param ignoreOnline 是否忽略对于医院在线状态的判断
      * @return BusClinicEntity
      */
-    public  DeferredResult<R<BusClinicEntity>>  syncGetPatientInfo(String patientCode, long timeout, TimeUnit unit){
-        if (!isOnline()) {
+    public  DeferredResult<R<BusClinicEntity>>  syncGetPatientInfo(String patientCode, long timeout, TimeUnit unit,boolean ignoreOnline){
+        boolean online = isOnline();
+        if (!ignoreOnline&&online) {
             log.warn("医院【{}】不在线,拉取【{}】信息失败,拉取方式【同步】",hospitalId,patientCode);
             throw new CustomException("医院不在线,拉取信息失败");
         }
-        String messageId = IdWorker.getIdStr();
         DeferredResult<R<BusClinicEntity>> result = new DeferredResult<>(unit.toMillis(timeout));
+        if(!online){
+            BusClinicEntity clinic = clinicService.recentClinicByPatientCode(hospitalId, patientCode);
+            if(clinic==null){
+                result.setResult(R.fail("拉取信息超时,请稍后再试"));
+            }else {
+                result.setResult(R.success(clinic));
+            }
+            return result;
+        }
+        String messageId = IdWorker.getIdStr();
+
         HisRequest request = HisRequest.builder()
                 .messageId(messageId)
                 .patientCode(patientCode)
@@ -142,6 +159,10 @@ public class HisScriptSession {
         return result;
     };
 
+
+    public  DeferredResult<R<BusClinicEntity>>  asyncGetPatientInfo(String patientCode,long timeout, TimeUnit unit,boolean needResult){
+        return this.asyncGetPatientInfo(patientCode,timeout,unit,needResult,false);
+    }
     /**
      * 描述: 异步拉取病人信息
      *  当异步拉取超时时,若需要返回临床信息,则从数据库中拉取最新数据返回
@@ -151,16 +172,27 @@ public class HisScriptSession {
      * @param timeout 超时时间
      * @param unit 时间单位
      * @param needResult 是否需要返回结果
+     * @param  ignoreOnline 是否忽略在线判断
      * @return BusClinicEntity
      */
-    public  DeferredResult<R<BusClinicEntity>>  asyncGetPatientInfo(String patientCode,long timeout, TimeUnit unit,boolean needResult){
-        if(!isOnline()){
+    public  DeferredResult<R<BusClinicEntity>>  asyncGetPatientInfo(String patientCode,long timeout, TimeUnit unit,boolean needResult,boolean ignoreOnline){
+        boolean online = isOnline();
+        if(!ignoreOnline&&!isOnline()){
             //将请求缓存
             log.warn("医院【{}】不在线,拉取【{}】信息失败,是否为用户拉取【{}】,拉取方式【异步】",hospitalId,patientCode,needResult);
             throw new CustomException("医院不在线,拉取信息失败");
         }
-        String messageId = IdWorker.getIdStr();
         DeferredResult<R<BusClinicEntity>> result = new DeferredResult<>(unit.toMillis(timeout));
+        if(!online){
+            BusClinicEntity clinic = clinicService.recentClinicByPatientCode(hospitalId, patientCode);
+            if(clinic==null){
+                result.setResult(R.fail("拉取信息超时,请稍后再试"));
+            }else {
+                result.setResult(R.success(clinic));
+            }
+            return result;
+        }
+        String messageId = IdWorker.getIdStr();
         HisRequest request = HisRequest.builder()
                 .messageId(messageId)
                 .patientCode(patientCode)

+ 6 - 2
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java

@@ -127,6 +127,10 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
                 , 2, TimeUnit.SECONDS);
     }
 
+    public DeferredResult<R<BusClinicEntity>> getPatientInfoFromHis(String hospitalId, String patientCode, long timeout, boolean sync) {
+        return this.getPatientInfoFromHis(hospitalId,patientCode,timeout,sync,false);
+    }
+
     /**
      * 获取病人信息
      *
@@ -135,7 +139,7 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
      * @param sync        是否为同步操作
      */
     @Override
-    public DeferredResult<R<BusClinicEntity>> getPatientInfoFromHis(String hospitalId, String patientCode, long timeout, boolean sync) {
+    public DeferredResult<R<BusClinicEntity>> getPatientInfoFromHis(String hospitalId, String patientCode, long timeout, boolean sync,boolean ignoreOnline) {
         BusHospitalEntity hospital = hospitalService.getById(hospitalId);
         HospitalManager hospitalManager = hospitalManagerRegister.get(hospitalId);
         HisScriptSession hisScriptSession = hospitalManager.getScriptSession();
@@ -147,7 +151,7 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
             throw new CustomException("医院系统对接未配置【对接脚本】,请到【信息维护】->【系统对接】配置对接脚本并发布");
         }
         log.info("医院【{}】,开始拉取病号【{}】信息,拉取方式【{}】", hospitalId, patientCode, sync ? "同步" : "异步");
-        return sync ? hisScriptSession.syncGetPatientInfo(patientCode, timeout, TimeUnit.SECONDS) : hisScriptSession.asyncGetPatientInfo(patientCode, timeout, TimeUnit.SECONDS, true);
+        return sync ? hisScriptSession.syncGetPatientInfo(patientCode, timeout, TimeUnit.SECONDS,ignoreOnline) : hisScriptSession.asyncGetPatientInfo(patientCode, timeout, TimeUnit.SECONDS, true,ignoreOnline);
     }
 
     /**