|
@@ -25,11 +25,13 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
|
@Component
|
|
|
public class PushProcess {
|
|
|
+
|
|
|
@Autowired
|
|
|
NeoFacade neoFacade;
|
|
|
@Autowired
|
|
|
CommonFacade commonFacade;
|
|
|
- public PushDTO process(PushVO pushVo,Map<String, Map<String, String>> standConvertMap,WordCrfDTO wordCrfDTO) {
|
|
|
+
|
|
|
+ public PushDTO process(PushVO pushVo, Map<String, Map<String, String>> standConvertMap, WordCrfDTO wordCrfDTO) {
|
|
|
int length = pushVo.getLength();
|
|
|
PushDTO pushDTO = new PushDTO();
|
|
|
|
|
@@ -39,23 +41,23 @@ public class PushProcess {
|
|
|
NeoPushVO pushVO = commonFacade.generatePushInput(wordCrfDTO);
|
|
|
Map<String, List<PushBaseDTO>> dis = new HashMap<>();
|
|
|
//如果下的诊断有数据就反推
|
|
|
- if(pushVO.getDiagVo() != null && pushVO.getDiagVo().getDiags().size() > 0){
|
|
|
- reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO,dis);
|
|
|
- }else {
|
|
|
+ if (pushVO.getDiagVo() != null && pushVO.getDiagVo().getDiags().size() > 0) {
|
|
|
+ reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO, dis);
|
|
|
+ } else {
|
|
|
//正推
|
|
|
List<NeoPushDTO> push = neoFacade.getPush(pushVO);
|
|
|
- if(ListUtil.isNotEmpty(push) && push.size() >0){
|
|
|
+ if (ListUtil.isNotEmpty(push) && push.size() > 0) {
|
|
|
//先把所有疾病推出来
|
|
|
- if(ruleTypeList.contains("7")){
|
|
|
+ if (ruleTypeList.contains("7")) {
|
|
|
List<PushBaseDTO> diseeases = push.stream().filter(x -> x.getDisease() != null).map(x -> x.getDisease()).collect(Collectors.toList());
|
|
|
diseeases = diseeases.subList(0, diseeases.size() >= length ? length : diseeases.size());
|
|
|
- dis.put(DiseaseTypeEnum.possibleDis.getName(),diseeases);
|
|
|
+ dis.put(DiseaseTypeEnum.possibleDis.getName(), diseeases);
|
|
|
pushDTO.setDis(dis);
|
|
|
}
|
|
|
//把第一个推送出来的诊断set到diagOrder中,再反推
|
|
|
setPushVo(pushVO, push);
|
|
|
//调用反推
|
|
|
- reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO,dis);
|
|
|
+ reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO, dis);
|
|
|
}
|
|
|
}
|
|
|
return pushDTO;
|
|
@@ -72,17 +74,17 @@ public class PushProcess {
|
|
|
pushVO.setDiagVo(diagVo);
|
|
|
}
|
|
|
|
|
|
- public Map<String,List<String>> typeWords( Map<String, Map<String, String>> standConvertMap){
|
|
|
- Map<String,List<String>> typeWordsMap = new HashMap<>();
|
|
|
- for (Map.Entry<String, Map<String, String>> s:standConvertMap.entrySet()) {
|
|
|
+ public Map<String, List<String>> typeWords(Map<String, Map<String, String>> standConvertMap) {
|
|
|
+ Map<String, List<String>> typeWordsMap = new HashMap<>();
|
|
|
+ for (Map.Entry<String, Map<String, String>> s : standConvertMap.entrySet()) {
|
|
|
List<String> words = new ArrayList<>();
|
|
|
String type = s.getKey();
|
|
|
Map<String, String> value = s.getValue();
|
|
|
- value.forEach((name,standName)->{
|
|
|
+ value.forEach((name, standName) -> {
|
|
|
words.add(name);
|
|
|
words.add(standName);
|
|
|
});
|
|
|
- typeWordsMap.put(type,new ArrayList<>(new HashSet<>(words)));
|
|
|
+ typeWordsMap.put(type, new ArrayList<>(new HashSet<>(words)));
|
|
|
}
|
|
|
|
|
|
return typeWordsMap;
|
|
@@ -90,61 +92,61 @@ public class PushProcess {
|
|
|
|
|
|
private void reversePushPackage(int length, PushDTO pushDTO, List<String> ruleTypeList, Map<String, List<String>> typeWords, NeoPushVO pushVO, Map<String, List<PushBaseDTO>> dis) {
|
|
|
NeoPushDTO reversePush = neoFacade.getReversePush(pushVO);
|
|
|
-// if(ListUtil.isNotEmpty(reversePush)){
|
|
|
- // 症状
|
|
|
- if (ruleTypeList.contains("1")) {
|
|
|
- if(ListUtil.isNotEmpty(reversePush.getSymptoms())){
|
|
|
- List<String> symptoms = reversePush.getSymptoms().stream().map(x->x.getName()).collect(Collectors.toList());
|
|
|
+ // if(ListUtil.isNotEmpty(reversePush)){
|
|
|
+ // 症状
|
|
|
+ if (ruleTypeList.contains("1")) {
|
|
|
+ if (ListUtil.isNotEmpty(reversePush.getSymptoms())) {
|
|
|
+ List<String> symptoms = reversePush.getSymptoms().stream().map(x -> x.getName()).collect(Collectors.toList());
|
|
|
/*reversePush.stream().filter(x -> ListUtil.isNotEmpty(x.getSymptoms())).forEach(x -> {
|
|
|
List<String> symptomList = x.getSymptoms().stream().map(y -> y.getName()).collect(Collectors.toList());
|
|
|
symptoms.removeAll(symptomList);
|
|
|
symptoms.addAll(symptomList);
|
|
|
});*/
|
|
|
- if (symptoms.size() > 0) {
|
|
|
- List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, symptoms, StandConvertEnum.symptom);
|
|
|
- pushDTO.setSymptom(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
|
|
|
- }
|
|
|
+ if (symptoms.size() > 0) {
|
|
|
+ List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, symptoms, StandConvertEnum.symptom);
|
|
|
+ pushDTO.setSymptom(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- // 查体
|
|
|
- if (ruleTypeList.contains("4")) {
|
|
|
- if(ListUtil.isNotEmpty(reversePush.getVitals())){
|
|
|
- List<String> vitals = reversePush.getVitals().stream().map(x->x.getName()).collect(Collectors.toList());
|
|
|
- if (vitals.size() > 0) {
|
|
|
- List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, vitals, StandConvertEnum.vital);
|
|
|
- pushDTO.setVital(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- }
|
|
|
- // 化验
|
|
|
- if (ruleTypeList.contains("5")) {
|
|
|
- if(ListUtil.isNotEmpty(reversePush.getLis())){
|
|
|
- List<String> lises = reversePush.getLis().stream().map(x->x.getName()).collect(Collectors.toList());
|
|
|
- if (lises.size() > 0) {
|
|
|
- List<PushBaseDTO> filterlis = getPackagePushBaseDTO(typeWords, lises, StandConvertEnum.lis);
|
|
|
- pushDTO.setLis(filterlis.subList(0, filterlis.size() >= length ? length : filterlis.size()));
|
|
|
- }
|
|
|
+ }
|
|
|
+ // 查体
|
|
|
+ if (ruleTypeList.contains("4")) {
|
|
|
+ if (ListUtil.isNotEmpty(reversePush.getVitals())) {
|
|
|
+ List<String> vitals = reversePush.getVitals().stream().map(x -> x.getName()).collect(Collectors.toList());
|
|
|
+ if (vitals.size() > 0) {
|
|
|
+ List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, vitals, StandConvertEnum.vital);
|
|
|
+ pushDTO.setVital(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- // 辅检
|
|
|
- if (ruleTypeList.contains("6")) {
|
|
|
- if(ListUtil.isNotEmpty(reversePush.getPacs())){
|
|
|
- List<String> pacses = reversePush.getPacs().stream().map(x->x.getName()).collect(Collectors.toList());
|
|
|
- if (pacses.size() > 0) {
|
|
|
- List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, pacses, StandConvertEnum.pacs);
|
|
|
- pushDTO.setPacs(filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size()));
|
|
|
- }
|
|
|
+
|
|
|
+ }
|
|
|
+ // 化验
|
|
|
+ if (ruleTypeList.contains("5")) {
|
|
|
+ if (ListUtil.isNotEmpty(reversePush.getLis())) {
|
|
|
+ List<String> lises = reversePush.getLis().stream().map(x -> x.getName()).collect(Collectors.toList());
|
|
|
+ if (lises.size() > 0) {
|
|
|
+ List<PushBaseDTO> filterlis = getPackagePushBaseDTO(typeWords, lises, StandConvertEnum.lis);
|
|
|
+ pushDTO.setLis(filterlis.subList(0, filterlis.size() >= length ? length : filterlis.size()));
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
+ // 辅检
|
|
|
+ if (ruleTypeList.contains("6")) {
|
|
|
+ if (ListUtil.isNotEmpty(reversePush.getPacs())) {
|
|
|
+ List<String> pacses = reversePush.getPacs().stream().map(x -> x.getName()).collect(Collectors.toList());
|
|
|
+ if (pacses.size() > 0) {
|
|
|
+ List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, pacses, StandConvertEnum.pacs);
|
|
|
+ pushDTO.setPacs(filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size()));
|
|
|
+ }
|
|
|
}
|
|
|
- // 药品
|
|
|
- if (ruleTypeList.contains("8")) {
|
|
|
- if(reversePush.getTreat() != null && ListUtil.isNotEmpty(reversePush.getTreat().get(MedicalAdviceEnum.drug.getName()))){
|
|
|
|
|
|
- List<String> drugs = reversePush.getTreat().get(MedicalAdviceEnum.drug.getName()).stream().map(x->x.getName()).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ // 药品
|
|
|
+ if (ruleTypeList.contains("8")) {
|
|
|
+ if (reversePush.getTreat() != null && ListUtil.isNotEmpty(reversePush.getTreat().get(MedicalAdviceEnum.drug.getName()))) {
|
|
|
+
|
|
|
+ List<String> drugs = reversePush.getTreat().get(MedicalAdviceEnum.drug.getName()).stream().map(x -> x.getName()).collect(Collectors.toList());
|
|
|
/*reversePush.stream().filter(x ->x.getTreat() != null && ListUtil.isNotEmpty(x.getTreat().get(MedicalAdviceEnum.drug.getName())))
|
|
|
.forEach(x -> {
|
|
|
List<String> drugList = x.getTreat().get(MedicalAdviceEnum.drug.getName()).stream().map(y -> y.getName()).collect(Collectors.toList());
|
|
@@ -155,55 +157,54 @@ public class PushProcess {
|
|
|
List<PushBaseDTO> filterdrugs = getPackagePushBaseDTO(typeWords, drugs, StandConvertEnum.drug);
|
|
|
pushDTO.setMedicines(filterdrugs.subList(0, filterdrugs.size() >= length ? length : filterdrugs.size()));
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
}
|
|
|
- // 手术
|
|
|
- if (ruleTypeList.contains("9")) {
|
|
|
- if(reversePush.getTreat() != null && ListUtil.isNotEmpty(reversePush.getTreat().get(MedicalAdviceEnum.operation.getName())))
|
|
|
- {
|
|
|
-
|
|
|
- List<String> operations = reversePush.getTreat().get(MedicalAdviceEnum.operation.getName()).stream().map(x -> x.getName()).collect(Collectors.toList());
|
|
|
- if (operations.size() > 0) {
|
|
|
- List<PushBaseDTO> filteroperations = getPackagePushBaseDTO(typeWords, operations, StandConvertEnum.operation);
|
|
|
- pushDTO.setOperations(filteroperations.subList(0, filteroperations.size() >= length ? length : filteroperations.size()));
|
|
|
- }
|
|
|
+
|
|
|
+ }
|
|
|
+ // 手术
|
|
|
+ if (ruleTypeList.contains("9")) {
|
|
|
+ if (reversePush.getTreat() != null && ListUtil.isNotEmpty(reversePush.getTreat().get(MedicalAdviceEnum.operation.getName()))) {
|
|
|
+
|
|
|
+ List<String> operations = reversePush.getTreat().get(MedicalAdviceEnum.operation.getName()).stream().map(x -> x.getName()).collect(Collectors.toList());
|
|
|
+ if (operations.size() > 0) {
|
|
|
+ List<PushBaseDTO> filteroperations = getPackagePushBaseDTO(typeWords, operations, StandConvertEnum.operation);
|
|
|
+ pushDTO.setOperations(filteroperations.subList(0, filteroperations.size() >= length ? length : filteroperations.size()));
|
|
|
}
|
|
|
}
|
|
|
- //反推,推鉴别诊断
|
|
|
- if (ruleTypeList.contains("7")) {
|
|
|
- if(ListUtil.isNotEmpty(reversePush.getDifferentialDis())){
|
|
|
- List<String> differentDis = reversePush.getDifferentialDis().stream().map(x->x.getName()).collect(Collectors.toList());
|
|
|
- if (differentDis.size() > 0) {
|
|
|
- List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, differentDis, StandConvertEnum.disease);
|
|
|
- List<PushBaseDTO> pushDiffBaseDTOS = filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size());
|
|
|
- dis.put(DiseaseTypeEnum.identify.getName(),pushDiffBaseDTOS);
|
|
|
- pushDTO.setDis(dis);
|
|
|
- }
|
|
|
+ }
|
|
|
+ //反推,推鉴别诊断
|
|
|
+ if (ruleTypeList.contains("7")) {
|
|
|
+ if (ListUtil.isNotEmpty(reversePush.getDifferentialDis())) {
|
|
|
+ List<String> differentDis = reversePush.getDifferentialDis().stream().map(x -> x.getName()).collect(Collectors.toList());
|
|
|
+ if (differentDis.size() > 0) {
|
|
|
+ List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, differentDis, StandConvertEnum.disease);
|
|
|
+ List<PushBaseDTO> pushDiffBaseDTOS = filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size());
|
|
|
+ dis.put(DiseaseTypeEnum.identify.getName(), pushDiffBaseDTOS);
|
|
|
+ pushDTO.setDis(dis);
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
- if (ruleTypeList.contains("10") && pushVO.getDiaeaseName() != null) {
|
|
|
- List<TreatDTO> collect = new ArrayList<>();
|
|
|
- Item diaeaseName = pushVO.getDiaeaseName();
|
|
|
- TreatDTO treatDTO = new TreatDTO();
|
|
|
- treatDTO.setName(diaeaseName.getName());
|
|
|
- treatDTO.setUniqueName(diaeaseName.getUniqueName());
|
|
|
- collect.add(treatDTO);
|
|
|
- pushDTO.setTreat(collect);
|
|
|
}
|
|
|
-// }
|
|
|
-// return pushDTO;
|
|
|
+
|
|
|
+ }
|
|
|
+ if (ruleTypeList.contains("10") && pushVO.getDiaeaseName() != null) {
|
|
|
+ List<TreatDTO> collect = new ArrayList<>();
|
|
|
+ Item diaeaseName = pushVO.getDiaeaseName();
|
|
|
+ TreatDTO treatDTO = new TreatDTO();
|
|
|
+ treatDTO.setName(diaeaseName.getName());
|
|
|
+ treatDTO.setUniqueName(diaeaseName.getUniqueName());
|
|
|
+ collect.add(treatDTO);
|
|
|
+ pushDTO.setTreat(collect);
|
|
|
+ }
|
|
|
+ // }
|
|
|
+ // return pushDTO;
|
|
|
}
|
|
|
|
|
|
private List<PushBaseDTO> getPackagePushBaseDTO(Map<String, List<String>> typeWords, List<String> symptoms, StandConvertEnum symptom) {
|
|
|
List<PushBaseDTO> symptomPush = symptoms.stream()
|
|
|
.filter(x -> !typeWords.get(symptom.toString()).contains(x))
|
|
|
.map(x -> {
|
|
|
- PushBaseDTO pushBaseDTO = new PushBaseDTO();
|
|
|
- pushBaseDTO.setName(x);
|
|
|
- return pushBaseDTO;
|
|
|
- }).collect(Collectors.toList());
|
|
|
+ PushBaseDTO pushBaseDTO = new PushBaseDTO();
|
|
|
+ pushBaseDTO.setName(x);
|
|
|
+ return pushBaseDTO;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
return symptomPush;
|
|
|
}
|
|
|
}
|