|
@@ -61,6 +61,7 @@ import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
import java.lang.reflect.Field;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
@@ -374,6 +375,8 @@ public class PushProcess {
|
|
|
|
|
|
/**
|
|
|
* 根据诊断反推(根据性别和年龄过滤,并根据界面已有信息过滤,根据长度截取)
|
|
|
+ * 推送逻辑:第一诊断查询其他推送项(除去治疗相关),选中诊断查询治疗相关的推送项
|
|
|
+ * 治疗相关:药品、手术、护理、一般治疗
|
|
|
*
|
|
|
* @param pushDTO
|
|
|
* @param pushVo
|
|
@@ -381,30 +384,77 @@ public class PushProcess {
|
|
|
* @return
|
|
|
*/
|
|
|
public void process(PushDTO pushDTO, PushVO pushVo, WordCrfDTO wordCrfDTO) {
|
|
|
- // 一般治疗——界面下的第一个诊断
|
|
|
- if (wordCrfDTO.getDiseaseName() != null) {
|
|
|
+ // 一般治疗由界面选中诊断diseaseName获取。core服务处理,这里只返回结构体
|
|
|
+ Item selectDis = wordCrfDTO.getDiseaseName(); // 选中诊断
|
|
|
+ Boolean hasDiseaseNameFlag = hasDiseaseName(selectDis);
|
|
|
+ String selectDisName = hasDiseaseNameFlag ? selectDis.getUniqueName() : "";
|
|
|
+ if (hasDiseaseNameFlag) {
|
|
|
TreatDTO treatDTO = new TreatDTO();
|
|
|
- BeanUtil.copyProperties(wordCrfDTO.getDiseaseName(), treatDTO);
|
|
|
+ BeanUtil.copyProperties(selectDis, treatDTO);
|
|
|
pushDTO.getTreat().add(treatDTO);
|
|
|
}
|
|
|
- // 生成反推的入参
|
|
|
+ // 标识选中诊断和第一诊断名称是否相同。这里做了优化处理,如果第一诊断和选中诊断相同,反推只需查询一次
|
|
|
+ Boolean diseaseNameEqFirstFirstFlag = false;
|
|
|
+ if (hasDiseaseNameFlag && ListUtil.isNotEmpty(wordCrfDTO.getDiag())
|
|
|
+ && selectDisName.equals(wordCrfDTO.getDiag().get(0).getUniqueName())) {
|
|
|
+ diseaseNameEqFirstFirstFlag = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 第一诊断反推
|
|
|
List<String> ruleTypeList = Lists.newArrayList(pushVo.getFeatureType().split(",")); // 需要获取的类型
|
|
|
Map<String, List<PushBaseDTO>> dis = pushDTO.getDis();
|
|
|
- ReverseVO reverseVO = generateReverseVO(wordCrfDTO, ruleTypeList, dis);
|
|
|
+ ReverseVO reverseVO = generateReverseVO(wordCrfDTO, ruleTypeList, dis, diseaseNameEqFirstFirstFlag);
|
|
|
+
|
|
|
+ // 输出调试信息
|
|
|
if (StringUtil.isBlank(reverseVO.getLibName())) {
|
|
|
- pushDTO.getDebug().put("反推诊断", "无"); // 调试信息
|
|
|
+ pushDTO.getDebug().put("第一诊断推送其他信息", "无"); // 调试信息
|
|
|
return;
|
|
|
} else {
|
|
|
- pushDTO.getDebug().put("反推诊断", reverseVO.getLibName()); // 调试信息
|
|
|
+ pushDTO.getDebug().put("第一诊断推送其他信息", reverseVO.getLibName()); // 调试信息
|
|
|
}
|
|
|
- // 查询数据
|
|
|
+ if (StringUtil.isBlank(selectDisName)) {
|
|
|
+ pushDTO.getDebug().put("选中诊断推送【一般治疗、药品、手术、护理】", "无"); // 调试信息
|
|
|
+ return;
|
|
|
+ } else {
|
|
|
+ pushDTO.getDebug().put("选中诊断推送【一般治疗、药品、手术、护理】", selectDisName); // 调试信息
|
|
|
+ }
|
|
|
+
|
|
|
List<ReverseDTO> reverseDTOList = conceptInfoFacade.getReverseFac(reverseVO);
|
|
|
+ // 选中诊断反推
|
|
|
+ if (hasDiseaseNameFlag && !diseaseNameEqFirstFirstFlag) {
|
|
|
+ reverseVO.setLibName(selectDisName);
|
|
|
+ // 关联类型
|
|
|
+ List<Integer> relationType = new ArrayList<>();
|
|
|
+ if (ruleTypeList.contains("8")) {
|
|
|
+ relationType.add(RelationshipEnum.R506.getKey()); // 药品
|
|
|
+ }
|
|
|
+ if (ruleTypeList.contains("9")) {
|
|
|
+ relationType.add(RelationshipEnum.R507.getKey()); // 手术
|
|
|
+ }
|
|
|
+ reverseVO.setRelationType(relationType);
|
|
|
+ List<ReverseDTO> reverseDTOList1 = conceptInfoFacade.getReverseFac(reverseVO);
|
|
|
+ reverseDTOList.addAll(reverseDTOList1);
|
|
|
+ }
|
|
|
+
|
|
|
// 获取各个类型的界面过滤元素
|
|
|
Map<String, List<String>> filterMap = getFilterMap(wordCrfDTO);
|
|
|
// 设置推送信息(过滤已有)
|
|
|
setPushItem(pushDTO, ruleTypeList, filterMap, reverseDTOList, pushVo.getLength());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 是否有选中诊断
|
|
|
+ *
|
|
|
+ * @param item
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Boolean hasDiseaseName(Item item) {
|
|
|
+ if (item != null && StringUtil.isNotBlank(item.getUniqueName())) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据诊断依据推送疾病总入口
|
|
|
*
|
|
@@ -723,7 +773,7 @@ public class PushProcess {
|
|
|
* @param dis
|
|
|
* @return
|
|
|
*/
|
|
|
- public ReverseVO generateReverseVO(WordCrfDTO wordCrfDTO, List<String> ruleTypeList, Map<String, List<PushBaseDTO>> dis) {
|
|
|
+ public ReverseVO generateReverseVO(WordCrfDTO wordCrfDTO, List<String> ruleTypeList, Map<String, List<PushBaseDTO>> dis, boolean flag) {
|
|
|
ReverseVO reverseVO = new ReverseVO();
|
|
|
String disName = "";
|
|
|
// 按以下顺序获取一个诊断: 下的诊断->可能诊断第一个
|
|
@@ -760,10 +810,14 @@ public class PushProcess {
|
|
|
relationType.add(RelationshipEnum.R508.getKey()); // 鉴别诊断
|
|
|
}
|
|
|
if (ruleTypeList.contains("8")) {
|
|
|
- relationType.add(RelationshipEnum.R506.getKey()); // 药品
|
|
|
+ if (flag) {
|
|
|
+ relationType.add(RelationshipEnum.R506.getKey()); // 药品
|
|
|
+ }
|
|
|
}
|
|
|
if (ruleTypeList.contains("9")) {
|
|
|
- relationType.add(RelationshipEnum.R507.getKey()); // 手术
|
|
|
+ if (flag) {
|
|
|
+ relationType.add(RelationshipEnum.R507.getKey()); // 手术
|
|
|
+ }
|
|
|
}
|
|
|
if (ruleTypeList.contains("11")) {
|
|
|
relationType.add(RelationshipEnum.R509.getKey()); // 量表
|