|
@@ -2,6 +2,7 @@ package com.coffee.bus.hospital.his.strategy.part;
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
import cn.hutool.json.JSONUtil;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.coffee.bus.entity.BusClinicEntity;
|
|
import com.coffee.bus.entity.BusClinicEntity;
|
|
|
import com.coffee.bus.hospital.his.strategy.all.HisAllStrategyHandler;
|
|
import com.coffee.bus.hospital.his.strategy.all.HisAllStrategyHandler;
|
|
|
import com.coffee.bus.hospital.his.strategy.onlynew.HisNewStrategyHandler;
|
|
import com.coffee.bus.hospital.his.strategy.onlynew.HisNewStrategyHandler;
|
|
@@ -43,11 +44,12 @@ public class DefaultHisPartStrategyHandler implements HisNewStrategyHandler {
|
|
|
if(CollectionUtil.isEmpty(source)){
|
|
if(CollectionUtil.isEmpty(source)){
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
+ //source.size()<target.size()
|
|
|
log.info("拉取his只获取一部分病人数据,拉取手术信息{},数据库数据{}", JSONUtil.toJsonStr(source),JSONUtil.toJsonStr(target));
|
|
log.info("拉取his只获取一部分病人数据,拉取手术信息{},数据库数据{}", JSONUtil.toJsonStr(source),JSONUtil.toJsonStr(target));
|
|
|
source.sort(Comparator.comparing(BusClinicEntity::getStartTime));
|
|
source.sort(Comparator.comparing(BusClinicEntity::getStartTime));
|
|
|
if(CollectionUtil.isEmpty(target)){
|
|
if(CollectionUtil.isEmpty(target)){
|
|
|
//只插入
|
|
//只插入
|
|
|
- insert(source);
|
|
|
|
|
|
|
+ insert(target);
|
|
|
}else {
|
|
}else {
|
|
|
//his拉取数据中最早的手术开始时间
|
|
//his拉取数据中最早的手术开始时间
|
|
|
BusClinicEntity earliest = source.get(0);
|
|
BusClinicEntity earliest = source.get(0);
|
|
@@ -66,21 +68,70 @@ public class DefaultHisPartStrategyHandler implements HisNewStrategyHandler {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
if(start>=target.size()){
|
|
if(start>=target.size()){
|
|
|
|
|
+ //所拉取his数据开始时间全部大于数据库存储时间
|
|
|
|
|
+ clinicService.update(new UpdateWrapper<BusClinicEntity>().lambda()
|
|
|
|
|
+ .eq(BusClinicEntity::getPatientCode,earliest.getPatientCode())
|
|
|
|
|
+ .eq(BusClinicEntity::getTenantId,earliest.getTenantId())
|
|
|
|
|
+ .set(BusClinicEntity::getFinished,true));
|
|
|
insert(source);
|
|
insert(source);
|
|
|
}else {
|
|
}else {
|
|
|
//走全处理的逻辑
|
|
//走全处理的逻辑
|
|
|
- List<BusClinicEntity> existClinics = target.subList(start, target.size());
|
|
|
|
|
- allStrategyHandlers.stream()
|
|
|
|
|
- .filter(handler->handler.apply(source,existClinics))
|
|
|
|
|
- .forEach(handler->handler.handle(source,existClinics));
|
|
|
|
|
|
|
+ List<BusClinicEntity> subTargets = target.subList(start, target.size());
|
|
|
|
|
+ compareHandler(source,subTargets);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 描述: 仅比较his拉取数据与部分存储数据,同样按照手术场次进行比较
|
|
|
|
|
+ * @author lifang
|
|
|
|
|
+ * @date 2022/5/23 21:13
|
|
|
|
|
+ * His数据 一 、 二、 三、 四
|
|
|
|
|
+ * || || || 比较
|
|
|
|
|
+ * 存储 一、 二、 三
|
|
|
|
|
+ * @param source
|
|
|
|
|
+ * @param subTarget
|
|
|
|
|
+ * @return void
|
|
|
|
|
+ */
|
|
|
|
|
+ private void compareHandler(List<BusClinicEntity> source,List<BusClinicEntity> subTarget){
|
|
|
|
|
+ source.sort((t1,t2)->t2.getStartTime().compareTo(t1.getStartTime()));
|
|
|
|
|
+ subTarget.sort((t1,t2)->t2.getStartTime().compareTo(t1.getStartTime()));
|
|
|
|
|
+ int sourceSize = CollectionUtil.size(source);
|
|
|
|
|
+ int subTargetSize = CollectionUtil.size(subTarget);
|
|
|
|
|
+ int subSize=Math.abs(Math.subtractExact(sourceSize,subTargetSize));
|
|
|
|
|
+ int minSize=Math.min(sourceSize,subTargetSize);
|
|
|
|
|
+ for (int i = minSize-1; i >=0; i--) {
|
|
|
|
|
+ //比较相同场次的手术,从最大到最小开始比较
|
|
|
|
|
+ if(sourceSize>subTargetSize){
|
|
|
|
|
+ clinicService.compareFromHis(source.get(subSize+i),subTarget.get(i));
|
|
|
|
|
+ }else {
|
|
|
|
|
+ clinicService.compareFromHis(source.get(i),subTarget.get(i+subSize));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (minSize < CollectionUtil.size(source)) {
|
|
|
|
|
+ BusClinicEntity first = CollectionUtil.getFirst(source.iterator());
|
|
|
|
|
+ clinicService.update(new UpdateWrapper<BusClinicEntity>().lambda()
|
|
|
|
|
+ .eq(BusClinicEntity::getPatientCode,first.getPatientCode())
|
|
|
|
|
+ .eq(BusClinicEntity::getTenantId,first.getTenantId())
|
|
|
|
|
+ .set(BusClinicEntity::getFinished,true));
|
|
|
|
|
+ insert(source.subList(0,minSize));
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
private void insert(List<BusClinicEntity> source){
|
|
private void insert(List<BusClinicEntity> source){
|
|
|
- source.forEach(clinicService::insertFromHis);
|
|
|
|
|
- clinicService.setCurrentClinicByHis(source.get(source.size()-1));
|
|
|
|
|
|
|
+ source.sort((t1,t2)->t2.getStartTime().compareTo(t1.getStartTime()));
|
|
|
|
|
+ for (int i = 0; i < source.size(); i++) {
|
|
|
|
|
+ BusClinicEntity clinic = source.get(i);
|
|
|
|
|
+ if(i==0){
|
|
|
|
|
+ clinic.setFinished(false);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ clinic.setFinished(true);
|
|
|
|
|
+ }
|
|
|
|
|
+ clinicService.insertFromHis(clinic);
|
|
|
|
|
+ }
|
|
|
|
|
+ clinicService.setCurrentClinicByHis(CollectionUtil.getFirst(source.iterator()));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|