ソースを参照

Merge branch 'dev' into nb-pc-rabbitmq

# Conflicts:
#	nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IPatientClient.java
#	nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java
18339543638 3 年 前
コミット
bc61825ca3
25 ファイル変更226 行追加86 行削除
  1. 1 1
      nb-admin/src/main/resources/application-prod.yml
  2. 2 2
      nb-admin/src/main/resources/application.yml
  3. 14 4
      nb-admin/src/test/java/com/nb/admin/BusClinicTest.java
  4. 4 0
      nb-im/src/main/java/com/nb/im/controller/ImRoomController.java
  5. 4 3
      nb-im/src/main/java/com/nb/im/service/dto/ImRoomQuery.java
  6. 6 0
      nb-im/src/main/resources/mapper/im/ImRoomMapper.xml
  7. 1 1
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/entity/BusVersionEntity.java
  8. 5 1
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IPatientClient.java
  9. 14 0
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IVersionClient.java
  10. 1 1
      nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/query/GetPatientInfoVo.java
  11. 33 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/AssistAppController.java
  12. 1 1
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/delay/UnEvalNotifyDelayMessageHandler.java
  13. 33 0
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/AppController.java
  14. 3 0
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/EvalController.java
  15. 12 0
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/PatientMonitorController.java
  16. 3 2
      nb-service/app-doctor/src/main/java/com/nb/app/doctor/service/LocalAppDoctorUserService.java
  17. 4 0
      nb-service/app-msg/src/main/java/com/nb/app/msg/entity/AppConsultEntity.java
  18. 2 0
      nb-service/app-msg/src/main/java/com/nb/app/msg/service/LocalAppConsultService.java
  19. 1 1
      nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusDeviceHistoryController.java
  20. 1 3
      nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusPatientController.java
  21. 6 5
      nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusVersionController.java
  22. 38 6
      nb-service/web-service/src/main/java/com/nb/web/service/bus/hospital/his/HisScriptSession.java
  23. 20 52
      nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java
  24. 16 2
      nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusVersionService.java
  25. 1 1
      nb-service/web-service/src/main/java/com/nb/web/service/system/mapper/BusVersionMapper.java

+ 1 - 1
nb-admin/src/main/resources/application-prod.yml

@@ -30,7 +30,7 @@ spring:
     driverClassName: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://47.101.214.91:7001/nbnetpump?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true
     username: root
-    password: 123456
+    password: Tuoren123.
     druid:
       # 初始连接数
       initialSize: 5

+ 2 - 2
nb-admin/src/main/resources/application.yml

@@ -1,8 +1,8 @@
 spring:
   servlet:
     multipart:
-      max-file-size: 10MB
-      max-request-size: 15MB
+      max-file-size: 1024MB
+      max-request-size: 1024MB
   application:
     name: nb
   profiles:

+ 14 - 4
nb-admin/src/test/java/com/nb/admin/BusClinicTest.java

@@ -5,6 +5,8 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.nb.core.result.R;
+import com.nb.web.service.bus.controller.BusDeviceHistoryController;
 import com.nb.web.service.bus.controller.vo.ClinicStatsVo;
 import com.nb.web.api.entity.BusClinicEntity;
 import com.nb.web.service.bus.entity.BusDocEntity;
@@ -25,6 +27,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -47,8 +50,15 @@ public class BusClinicTest {
     private ObjectMapper objectMapper;
     @Autowired
     private LocalBusInfusionHistoryService infusionHistoryService;
-@Autowired
-private LocalBusDocService docService;
+    @Autowired
+    private LocalBusDocService docService;
+
+    @Autowired
+    private BusDeviceHistoryController historyController;
+    @Test
+    public void lost(){
+        R<BigDecimal> bigDecimalR = historyController.lossRate("1575009329758154754");
+    }
     @Test
     public void stats(){
         ClinicStatsVo clinicStatsVo = new ClinicStatsVo();
@@ -90,9 +100,9 @@ private LocalBusDocService docService;
     @Transactional(rollbackFor = ArithmeticException.class)
     public void test(){
         clinicService.update(new UpdateWrapper<BusClinicEntity>().lambda().eq(BusClinicEntity::getId,"1528668113304244226")
-        .set(BusClinicEntity::getSurgeryName,"临床数据5"));
+                .set(BusClinicEntity::getSurgeryName,"临床数据5"));
         docService.update(new UpdateWrapper<BusDocEntity>().lambda().eq(BusDocEntity::getId,"1512720050274963458")
-        .set(BusDocEntity::getType,"about1"));
+                .set(BusDocEntity::getType,"about1"));
         int i=1/0;
     }
 

+ 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("医生昵称不可为空");
         }

+ 4 - 3
nb-im/src/main/java/com/nb/im/service/dto/ImRoomQuery.java

@@ -1,11 +1,9 @@
 package com.nb.im.service.dto;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-
-import javax.validation.constraints.NotNull;
+import java.util.*;
 
 /**
  * @author lifang
@@ -30,6 +28,9 @@ public class ImRoomQuery {
     @ApiModelProperty(value = "管理位置",allowableValues = "0(院内管理) 1(居家管理)")
     private Integer manageType;
 
+    @ApiModelProperty(value = "聊天室状态",example = "传输数组,[0(等待医生确认),1(成功建立聊天室)2(医生关闭聊天室)3(24小时自动关闭聊天室)]")
+    private List<Integer> status;
+
     @ApiModelProperty("病人信息(名称或住院号)")
     private String patientInfo;
 

+ 6 - 0
nb-im/src/main/resources/mapper/im/ImRoomMapper.xml

@@ -63,6 +63,12 @@
             <if test="query.assistId != null">
                 and assist_id=#{query.assistId}
             </if>
+            <if test="query.status != null and query.status.size > 0">
+                and status in
+                <foreach item="st" index="index" collection="query.status" open="(" separator="," close=")">
+                    #{st, jdbcType=VARCHAR}
+                </foreach>
+            </if>
         </where>
         ) as r
         left join (select * from im_msg) as rm

+ 1 - 1
nb-service/web-service/src/main/java/com/nb/web/service/bus/entity/BusVersionEntity.java → nb-service-api/web-service-api/src/main/java/com/nb/web/api/entity/BusVersionEntity.java

@@ -1,4 +1,4 @@
-package com.nb.web.service.bus.entity;
+package com.nb.web.api.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.nb.core.entity.GenericEntity;

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

@@ -1,9 +1,11 @@
 package com.nb.web.api.feign;
 
+import com.nb.core.result.R;
+import com.nb.web.api.entity.BusClinicEntity;
 import com.nb.web.api.enums.ClinicManageEnum;
 import com.nb.web.api.feign.query.PatientMonitorQuery;
 import com.nb.web.api.feign.result.*;
-import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.context.request.async.DeferredResult;
 
 import java.util.List;
 
@@ -15,6 +17,8 @@ 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,boolean ignoreOnline);
+
     /**
      * 描述: 查询所有的监护中的病人信息
      * @author lifang

+ 14 - 0
nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/IVersionClient.java

@@ -0,0 +1,14 @@
+package com.nb.web.api.feign;
+
+import com.nb.web.api.entity.BusVersionEntity;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName IVersionClient.java
+ * @Description TODO
+ * @createTime 2022年10月10日 09:04:00
+ */
+public interface IVersionClient {
+    BusVersionEntity getLast(String type);
+}

+ 1 - 1
nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/vo/GetPatientInfoVo.java → nb-service-api/web-service-api/src/main/java/com/nb/web/api/feign/query/GetPatientInfoVo.java

@@ -1,4 +1,4 @@
-package com.nb.web.service.bus.controller.vo;
+package com.nb.web.api.feign.query;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;

+ 33 - 0
nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/AssistAppController.java

@@ -0,0 +1,33 @@
+package com.nb.app.assistant.controller;
+
+import com.nb.core.result.R;
+import com.nb.web.api.feign.IVersionClient;
+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("/assist/install")
+@Api(tags = "患者端app")
+@Slf4j
+public class AssistAppController {
+    private final IVersionClient versionClient;
+    @PostMapping("/get/{type}")
+    @ApiOperation("获取app安装包")
+    public R bindMsg(@PathVariable("type")String type){
+        return R.success(versionClient.getLast(type));
+    }
+}

+ 1 - 1
nb-service/app-assistant/src/main/java/com/nb/app/assistant/delay/UnEvalNotifyDelayMessageHandler.java

@@ -59,7 +59,7 @@ public class UnEvalNotifyDelayMessageHandler implements DelayMessageHandler {
                 .eq(AssistantUserEntity::getId, unEvalNotify.getAssistId())
                 .last("limit 1"));
         //24小时未评提醒
-        if(assistantUser.getUnEvalNotify()){
+        if(Boolean.TRUE.equals(assistantUser.getUnEvalNotify())){
             AssistantEvalEntity lastEval = evalService.getLastEval(unEvalNotify.getClinicId());
             if(lastEval==null){
                 log.info("尚未评价此次临床,发送24小时未评消息");

+ 33 - 0
nb-service/app-doctor/src/main/java/com/nb/app/doctor/controller/AppController.java

@@ -0,0 +1,33 @@
+package com.nb.app.doctor.controller;
+
+import com.nb.core.result.R;
+import com.nb.web.api.feign.IVersionClient;
+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/install")
+@Api(tags = "医生端app")
+@Slf4j
+public class AppController {
+    private final IVersionClient versionClient;
+    @PostMapping("/get/{type}")
+    @ApiOperation("获取app安装包")
+    public R bindMsg(@PathVariable("type")String type){
+        return R.success(versionClient.getLast(type));
+    }
+}

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

@@ -6,7 +6,9 @@ import com.nb.app.assistant.api.entity.AssistantEvalEntity;
 import com.nb.app.assistant.api.feign.IAssistantEvalClient;
 import com.nb.app.doctor.controller.vo.MonitorEvalVo;
 import com.nb.app.doctor.enums.EvalEnum;
+import com.nb.core.annotation.Log;
 import com.nb.core.entity.GenericEntity;
+import com.nb.core.enums.UserPlatformEnum;
 import com.nb.core.result.R;
 import com.nb.web.api.entity.BusEvaluationEntity;
 import com.nb.web.api.feign.IClinicEvalClient;
@@ -75,6 +77,7 @@ public class EvalController {
 
     @PostMapping("/config/{tenantId}")
     @ApiOperation("获取评价信息配置项")
+    @Log(title = "患者端获取评价信息配置项",userPlatform= UserPlatformEnum.APP_DOCTOR)
     public R config(@PathVariable("tenantId") String tenantId){
         return R.success(configClient.getEvalConfig(tenantId));
     }

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

@@ -1,5 +1,6 @@
 package com.nb.app.doctor.controller;
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -15,9 +16,12 @@ 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;
+import com.nb.core.annotation.Log;
 import com.nb.core.exception.CustomException;
 import com.nb.core.result.R;
+import com.nb.web.api.entity.BusClinicEntity;
 import com.nb.web.api.feign.IPatientClient;
+import com.nb.web.api.feign.query.GetPatientInfoVo;
 import com.nb.web.api.feign.query.PatientMonitorQuery;
 import com.nb.web.api.feign.result.InviteCodeResult;
 import com.nb.web.api.feign.result.PatientMonitorDetailResult;
@@ -28,6 +32,7 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.async.DeferredResult;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -138,4 +143,11 @@ public class PatientMonitorController {
     public R<Boolean> lift(@PathVariable("bindId") String bindId) {
         return R.success(userBindClient.liftBind(bindId,String.valueOf(SecurityUtil.getId()),null));
     }
+
+    @PostMapping("/pull/async")
+    @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,true);
+    }
 }

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

@@ -254,9 +254,10 @@ public class LocalAppDoctorUserService extends BaseService<AppDoctorUserMapper,
                 }
             }
         }
-//        if(!disturb&&MsgEnum.CONSUL.equals(entity.getOperationType())){
-        if(!disturb&&!roomOperatorManager.getRoomOperator(imRoomId).isOnlineDoctor()){
+        //仅咨询模式和勿扰模式下
+        if(!disturb&&MsgEnum.CONSUL.equals(entity.getOperationType())){
             //医生不位于聊天室内
+//        if(!disturb&&!roomOperatorManager.getRoomOperator(imRoomId).isOnlineDoctor()){
             payload=StrUtil.isNotBlank(consultConfig.getConsultReply())?consultConfig.getConsultReply():"您好,我已经收到您的咨询,请稍等";
         }
 //        }

+ 4 - 0
nb-service/app-msg/src/main/java/com/nb/app/msg/entity/AppConsultEntity.java

@@ -49,6 +49,10 @@ public class AppConsultEntity  extends GenericEntity<String> {
     @NotNull(message = "咨询医生id不能为空",groups = Insert.class)
     private String doctorId;
 
+    @ApiModelProperty(value = "咨询医生姓名")
+    @TableField(exist = false)
+    private String doctorNickName;
+
     @ApiModelProperty(value = "问题类型",required = true)
     @NotNull(message = "问题类型不能为空",groups = Insert.class)
     private String type;

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

@@ -49,8 +49,10 @@ 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())
+                        .receiverName(entity.getDoctorNickName())
                         .payload(entity.getId())
                         .extend(entity.getId())
                         .build()

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

@@ -94,7 +94,7 @@ public class BusDeviceHistoryController extends BaseCrudController<BusDeviceHist
         AtomicReference<BigDecimal> result=new AtomicReference<>(BigDecimal.ZERO);
         if(CollectionUtil.isNotEmpty(histories)){
             histories.stream().map(BusDeviceHistoryEntity::getDataNumber)
-                    .max(Comparator.comparing(Integer::byteValue))
+                    .max(Comparator.comparing(Integer::valueOf))
                     .map(max->{
                         BigDecimal proportionRate = BigDecimal.valueOf(count).divide(BigDecimal.valueOf(max), 2, BigDecimal.ROUND_HALF_UP);
                         result.set(BigDecimal.ONE.subtract(proportionRate).multiply(BigDecimal.valueOf(100)));

+ 1 - 3
nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusPatientController.java

@@ -1,9 +1,7 @@
 package com.nb.web.service.bus.controller;
 
-import cn.dev33.satoken.SaManager;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaMode;
-import cn.dev33.satoken.stp.StpLogic;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.util.StrUtil;
@@ -19,7 +17,7 @@ import com.nb.web.api.entity.common.BusDeviceRunningEntity;
 import com.nb.web.api.feign.result.PatientMonitorDetailResult;
 import com.nb.web.api.feign.query.PatientMonitorQuery;
 import com.nb.web.api.feign.result.PatientMonitorResult;
-import com.nb.web.service.bus.controller.vo.GetPatientInfoVo;
+import com.nb.web.api.feign.query.GetPatientInfoVo;
 import com.nb.web.service.bus.controller.vo.MonitorDetailVo;
 import com.nb.web.service.bus.controller.vo.MonitorFinishedVo;
 import com.nb.web.service.bus.entity.*;

+ 6 - 5
nb-service/web-service/src/main/java/com/nb/web/service/bus/controller/BusVersionController.java

@@ -7,10 +7,11 @@ import com.baomidou.mybatisplus.core.mapper.Mapper;
 import com.nb.common.crud.BaseService;
 import com.nb.common.crud.controller.BaseCrudController;
 import com.nb.core.result.R;
-import com.nb.web.service.bus.entity.BusVersionEntity;
+import com.nb.web.api.entity.BusVersionEntity;
 import com.nb.web.service.bus.service.LocalBusVersionService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.Authorization;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -24,16 +25,16 @@ import javax.annotation.Resource;
  */
 @RestController
 @RequestMapping("/bus/version")
-@Api(tags = "版本管理",description="版本管理    权限: bus:version: ")
+@Api(tags = "版本管理",description="版本管理    权限: bus:version: ",authorizations = {@Authorization("bus:version:")})
 public class BusVersionController extends BaseCrudController<BusVersionEntity,String> {
     @Resource
     private LocalBusVersionService versionService;
 
 
-    @GetMapping("/last")
+    @GetMapping("/last/{type}")
     @ApiOperation(value="查看最新的安装包信息")
-    public R get() {
-        return R.success(versionService.getOne(new QueryWrapper<BusVersionEntity>().lambda().last("limit 1")));
+    public R<BusVersionEntity> get(@PathVariable("type")String type) {
+        return R.success(versionService.getLast(type));
     }
 
 

+ 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)

+ 20 - 52
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusPatientService.java

@@ -8,9 +8,7 @@ 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.BusDeviceEntity;
 import com.nb.web.api.entity.BusInfusionHistoryEntity;
@@ -38,18 +36,12 @@ 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.redisson.api.RLock;
-import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.web.context.request.async.DeferredResult;
 
-import javax.validation.constraints.NotNull;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.util.*;
@@ -135,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);
+    }
+
     /**
      * 获取病人信息
      *
@@ -142,7 +138,8 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
      * @param patientCode 病号
      * @param sync        是否为同步操作
      */
-    public DeferredResult<R<BusClinicEntity>> getPatientInfoFromHis(String hospitalId, String patientCode, long timeout, boolean sync) {
+    @Override
+    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();
@@ -154,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);
     }
 
     /**
@@ -234,54 +231,25 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
     }
 
     /**
-     *
+     * t
      * 根据医院和住院号获取一个患者
      *
      * @param tenantId
      * @param patientCode
      * @return
      */
-    public BusPatientEntity getOneByHospitalAndPatientCode(@NotNull String tenantId, @NotNull String patientCode) {
-        return getOneByHospitalAndPatientCode(tenantId,patientCode,new Date(),true);
-    }
-
-    @Transactional(propagation = Propagation.REQUIRES_NEW,isolation = Isolation.SERIALIZABLE,rollbackFor = Exception.class)
-    public BusPatientEntity getOneByHospitalAndPatientCode(@NotNull String tenantId,@NotNull String patientCode, Date monitorStartTime, boolean monitorType) {
-        BusPatientEntity patient =null;
-        patient = this.getOne(new QueryWrapper<BusPatientEntity>().lambda()
+    @Transactional(rollbackFor = Exception.class)
+    public BusPatientEntity getOneByHospitalAndPatientCode(String tenantId, String patientCode) {
+        BusPatientEntity patient = this.getOne(new QueryWrapper<BusPatientEntity>().lambda()
                 .eq(BusPatientEntity::getTenantId, tenantId)
                 .eq(BusPatientEntity::getCode, patientCode));
-        BusInfusionHistoryEntity recentInfusion = infusionService.lastInfusionByPatientCode(tenantId, patientCode);
         // 如果患者不存在则新增一个患者
         if (Objects.isNull(patient)) {
             patient = new BusPatientEntity();
             patient.setTenantId(tenantId);
             patient.setCode(patientCode);
             patient.setOriginCode(patientCode);
-            patient.setId(IdWorker.getIdStr());
-            BusClinicEntity clinic=new BusClinicEntity();
-            clinic.setPatientId(patient.getId());
-            clinic.setId(IdWorker.getIdStr());
-            clinic.setPatientCode(patientCode);
-            clinic.setPatientId(patient.getId());
-            clinic.setTenantId(tenantId);
-            clinic.setMonitorType(monitorType);
-            clinic.setMonitorStartTime(monitorStartTime);
-            patient.setClinicId(clinic.getId());
-            if (Boolean.TRUE.equals(monitorType)&&recentInfusion!=null) {
-                patient.setInfusionId(recentInfusion.getId());
-                clinic.setMonitorStartTime(recentInfusion.getStartTime());
-                //监护已结束
-                if(Boolean.TRUE.equals(recentInfusion.getIsUndo())){
-                    clinic.setEndTime(recentInfusion.getUndoTime());
-                    clinic.setFinished(true);
-                };
-            }
             this.save(patient);
-            clinicService.save(clinic);
-        }
-        if(recentInfusion!=null){
-            patient.setBindDeviceId(recentInfusion.getId());
         }
         return patient;
     }
@@ -512,18 +480,18 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
 
         BusClinicEntity clinic = clinicService.getById(patient.getClinicId());
         String infusionId=patient.getInfusionId();
-
-        BusInfusionHistoryEntity infusion =null;
-
+        BusInfusionHistoryEntity infusion=null;
         if(StrUtil.isNotEmpty(infusionId)){
-            infusion=infusionService.getById(infusionId);
-        }
-        if(infusion!=null){
-            BusDeviceEntity device = deviceService.getByDeviceId(infusion.getDeviceId());
-            if(device!=null){
-                infusion.setAlias(device.getAlias());
+            infusion =infusionService.getById(infusionId);
+            if(ObjectUtil.isNotNull(infusion)&&StrUtil.isNotEmpty(infusion.getId())){
+                BusDeviceEntity device = deviceService.getByDeviceId(infusion.getDeviceId());
+                if(ObjectUtil.isNotNull(device)){
+                    infusion.setAlias(device.getAlias());
+                }
             }
         }
+
+
         clinic.setPatientCode(patient.getCode());
 
         result.setInfusion(infusion);

+ 16 - 2
nb-service/web-service/src/main/java/com/nb/web/service/bus/service/LocalBusVersionService.java

@@ -1,7 +1,10 @@
 package com.nb.web.service.bus.service;
 
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.nb.common.crud.BaseService;
-import com.nb.web.service.bus.entity.BusVersionEntity;
+import com.nb.web.api.entity.BusVersionEntity;
+import com.nb.web.api.feign.IVersionClient;
 import com.nb.web.service.system.mapper.BusVersionMapper;
 import org.springframework.stereotype.Service;
 
@@ -13,7 +16,7 @@ import org.springframework.stereotype.Service;
  * @createTime 2022年06月24日 15:08:00
  */
 @Service
-public class LocalBusVersionService extends BaseService<BusVersionMapper, BusVersionEntity,String> {
+public class LocalBusVersionService extends BaseService<BusVersionMapper, BusVersionEntity,String> implements IVersionClient {
     @Override
     public void validateBeforeSave(BusVersionEntity entity) {
 
@@ -28,4 +31,15 @@ public class LocalBusVersionService extends BaseService<BusVersionMapper, BusVer
     public void validateBeforeDelete(String id) {
 
     }
+
+    @Override
+    public BusVersionEntity getLast(String type) {
+        if(StrUtil.isEmpty(type)){
+            return null;
+        }
+        return this.getOne(new QueryWrapper<BusVersionEntity>().lambda()
+                .eq(BusVersionEntity::getType,type)
+                .orderByDesc(BusVersionEntity::getCreateTime)
+                .last("limit 1"));
+    }
 }

+ 1 - 1
nb-service/web-service/src/main/java/com/nb/web/service/system/mapper/BusVersionMapper.java

@@ -1,7 +1,7 @@
 package com.nb.web.service.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.nb.web.service.bus.entity.BusVersionEntity;
+import com.nb.web.api.entity.BusVersionEntity;
 import org.apache.ibatis.annotations.Mapper;
 
 /**