|
|
@@ -1,22 +1,23 @@
|
|
|
package com.coffee.bus.hospital.his;
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import cn.hutool.core.text.CharSequenceUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
|
import cn.hutool.json.JSON;
|
|
|
-import cn.hutool.json.JSONArray;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
-import com.coffee.bus.entity.BusClinicEntity;
|
|
|
-import com.coffee.bus.entity.BusHospitalEntity;
|
|
|
-import com.coffee.bus.entity.BusHospitalLogEntity;
|
|
|
-import com.coffee.bus.entity.BusPatientEntity;
|
|
|
+import com.coffee.bus.entity.*;
|
|
|
+import com.coffee.bus.enums.ConstantMixEnum;
|
|
|
import com.coffee.bus.listener.event.bean.HisEvent;
|
|
|
import com.coffee.bus.hospital.script.DefaultParse;
|
|
|
import com.coffee.bus.service.LocalBusHospitalLogService;
|
|
|
import com.coffee.bus.service.LocalBusPatientService;
|
|
|
+import com.coffee.bus.service.constant.LocalBusConDoctorService;
|
|
|
+import com.coffee.bus.service.constant.LocalBusConMixService;
|
|
|
import com.coffee.common.exception.ExecuteResult;
|
|
|
import com.coffee.bus.hospital.script.ScriptManager;
|
|
|
import com.coffee.bus.hospital.script.ScriptParse;
|
|
|
@@ -28,18 +29,20 @@ import com.coffee.common.cache.value.Value;
|
|
|
import com.coffee.common.exception.CustomException;
|
|
|
import com.coffee.common.exception.ScriptException;
|
|
|
import com.coffee.common.result.R;
|
|
|
+import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import lombok.Getter;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.hibernate.validator.constraints.Length;
|
|
|
import org.springframework.util.Assert;
|
|
|
import org.springframework.web.context.request.async.DeferredResult;
|
|
|
import org.tio.core.ChannelContext;
|
|
|
import org.tio.core.Tio;
|
|
|
import org.tio.core.utils.TioUtils;
|
|
|
import org.tio.websocket.common.WsResponse;
|
|
|
-
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author lifang
|
|
|
@@ -59,15 +62,18 @@ public class HisScriptSession {
|
|
|
private LocalBusHospitalService hospitalService;
|
|
|
private LocalBusPatientService patientService;
|
|
|
private LocalBusHospitalLogService hospitalLogService;
|
|
|
+ private LocalBusConMixService conMixService;
|
|
|
+ private LocalBusConDoctorService conDoctorService;
|
|
|
private Map<String,HisRequest> hisRequestMap=new ConcurrentHashMap<>();
|
|
|
-
|
|
|
- public HisScriptSession(String hospitalId, ScriptManager scriptManager, ConfigStorageManager configStorageManager, LocalBusClinicService clinicService, LocalBusHospitalService hospitalService, LocalBusHospitalLogService hospitalLogService,LocalBusPatientService patientService) {
|
|
|
+ public HisScriptSession(String hospitalId, ScriptManager scriptManager, ConfigStorageManager configStorageManager) {
|
|
|
this.hospitalId = hospitalId;
|
|
|
this.scriptManager = scriptManager;
|
|
|
- this.clinicService = clinicService;
|
|
|
- this.hospitalService=hospitalService;
|
|
|
- this.hospitalLogService=hospitalLogService;
|
|
|
- this.patientService=patientService;
|
|
|
+ this.clinicService = SpringUtil.getBean(LocalBusClinicService.class);
|
|
|
+ this.hospitalService=SpringUtil.getBean(LocalBusHospitalService.class);
|
|
|
+ this.hospitalLogService=SpringUtil.getBean(LocalBusHospitalLogService.class);
|
|
|
+ this.patientService=SpringUtil.getBean(LocalBusPatientService.class);
|
|
|
+ this.conMixService=SpringUtil.getBean(LocalBusConMixService.class);
|
|
|
+ this.conDoctorService=SpringUtil.getBean(LocalBusConDoctorService.class);
|
|
|
init(configStorageManager,hospitalId);
|
|
|
}
|
|
|
|
|
|
@@ -200,8 +206,11 @@ public class HisScriptSession {
|
|
|
}
|
|
|
ExecuteResult exec = script.exec(text);
|
|
|
JSON result=null;
|
|
|
+ List<BusClinicEntity> sources=null;
|
|
|
try {
|
|
|
result = exec.getIfSuccess();
|
|
|
+ sources = SpringUtil.getBean(ObjectMapper.class).readValue(result.toStringPretty(), new TypeReference<List<BusClinicEntity>>() {
|
|
|
+ });
|
|
|
}catch (Exception e){
|
|
|
log.error("数据解析后转化为json失败,{},",text,e.getMessage());
|
|
|
if(StrUtil.isNotEmpty(text)){
|
|
|
@@ -217,12 +226,23 @@ public class HisScriptSession {
|
|
|
log.error("医院日志存储异常,数据:【{}】",JSONUtil.toJsonStr(hospitalLog),e);
|
|
|
}
|
|
|
}
|
|
|
- //数据解析完成后发布
|
|
|
- JSONArray jsonArray = JSONUtil.parseArray(result);
|
|
|
- List<BusClinicEntity> sources = JSONUtil.toList(jsonArray, BusClinicEntity.class);
|
|
|
if(CollectionUtil.isEmpty(sources)){
|
|
|
return null;
|
|
|
}else {
|
|
|
+ BusPatientEntity patient = patientService
|
|
|
+ .getOne(new QueryWrapper<BusPatientEntity>().lambda().eq(BusPatientEntity::getCode, patientCode).eq(BusPatientEntity::getTenantId, hospitalId));
|
|
|
+ if(patient!=null){
|
|
|
+ List<BusClinicEntity> finalSources = sources;
|
|
|
+ CompletableFuture.runAsync(()->{
|
|
|
+ conMixService.insertUniqueCon(finalSources,hospitalId);
|
|
|
+ conDoctorService.insertUniqueDoctor(finalSources,hospitalId);
|
|
|
+ })
|
|
|
+ .whenComplete((i,e)->{
|
|
|
+ if(e!=null){
|
|
|
+ log.error("拉取His信息存储常量失败,",e);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
List<BusClinicEntity> publish=new ArrayList<>();
|
|
|
//对数据去重, name+startTime进行唯一值判定
|
|
|
Map<String, BusClinicEntity> distinct = new HashMap<>();
|
|
|
@@ -233,8 +253,6 @@ public class HisScriptSession {
|
|
|
return source;
|
|
|
});
|
|
|
});
|
|
|
- BusPatientEntity patient = patientService
|
|
|
- .getOne(new QueryWrapper<BusPatientEntity>().lambda().eq(BusPatientEntity::getCode, patientCode).eq(BusPatientEntity::getTenantId, hospitalId));
|
|
|
publish.sort(Comparator.comparing(BusClinicEntity::getStartTime));
|
|
|
publish.forEach(source->{
|
|
|
source.setTenantId(hospitalId);
|
|
|
@@ -316,7 +334,11 @@ public class HisScriptSession {
|
|
|
//正常响应
|
|
|
try {
|
|
|
BusClinicEntity clinic = handle(Value.simple(hisResponse.getContext()).asString(), hisResponse.getPatientCode());
|
|
|
- result.setResult(R.success(clinic));
|
|
|
+ if(clinic==null){
|
|
|
+ result.setResult(R.fail(String.format("病号【[%s]】病人数据查询为空",hisResponse.getPatientCode())));
|
|
|
+ }else {
|
|
|
+ result.setResult(R.success(clinic));
|
|
|
+ }
|
|
|
}catch (ScriptException e){
|
|
|
result.setResult(R.fail(String.format("病号【[%s]】病人数据查询为空",hisResponse.getPatientCode())));
|
|
|
}
|