|
@@ -1,8 +1,39 @@
|
|
|
package com.diagbot.facade;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.diagbot.client.CdssCoreClient;
|
|
|
+import com.diagbot.dto.DictionaryInfoDTO;
|
|
|
+import com.diagbot.dto.RespDTO;
|
|
|
+import com.diagbot.dto.StaticKnowledgeDTO;
|
|
|
+import com.diagbot.dto.StaticKnowledgeDetailDTO;
|
|
|
+import com.diagbot.dto.StaticKnowledgeIndexDTO;
|
|
|
+import com.diagbot.entity.ConceptDetail;
|
|
|
+import com.diagbot.entity.ConceptInfo;
|
|
|
+import com.diagbot.enums.ConceptTypeEnum;
|
|
|
+import com.diagbot.enums.IsDeleteEnum;
|
|
|
+import com.diagbot.exception.CommonErrorCode;
|
|
|
+import com.diagbot.exception.CommonException;
|
|
|
import com.diagbot.service.impl.ConceptInfoServiceImpl;
|
|
|
+import com.diagbot.util.BeanUtil;
|
|
|
+import com.diagbot.util.EntityUtil;
|
|
|
+import com.diagbot.util.ListUtil;
|
|
|
+import com.diagbot.util.RespDTOUtil;
|
|
|
+import com.diagbot.util.StringUtil;
|
|
|
+import com.diagbot.util.SysUserUtils;
|
|
|
+import com.diagbot.vo.StaticKnowledgeHISVO;
|
|
|
+import com.diagbot.vo.StaticKnowledgeIndexVO;
|
|
|
+import com.diagbot.vo.StaticKnowledgeVO;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
/**
|
|
|
* @Description:
|
|
|
* @Author:zhaops
|
|
@@ -10,4 +41,268 @@ import org.springframework.stereotype.Component;
|
|
|
*/
|
|
|
@Component
|
|
|
public class ConceptInfoFacade extends ConceptInfoServiceImpl {
|
|
|
-}
|
|
|
+ @Autowired
|
|
|
+ private CdssCoreClient cdssCoreClient;
|
|
|
+ @Autowired
|
|
|
+ private DictionaryFacade dictionaryFacade;
|
|
|
+ @Autowired
|
|
|
+ private ConceptDetailFacade conceptDetailFacade;
|
|
|
+ @Autowired
|
|
|
+ private LisConfigFacade lisConfigFacade;
|
|
|
+ @Autowired
|
|
|
+ private PacsConfigFacade pacsConfigFacade;
|
|
|
+ @Autowired
|
|
|
+ private DrugConfigFacade drugConfigFacade;
|
|
|
+ @Autowired
|
|
|
+ private DiseaseConfigFacade diseaseConfigFacade;
|
|
|
+ @Autowired
|
|
|
+ private OperationConfigFacade operationConfigFacade;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 医学知识(静态信息)检索
|
|
|
+ *
|
|
|
+ * @param staticKnowledgeIndexVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<StaticKnowledgeIndexDTO> staticKnowledgeIndex(StaticKnowledgeIndexVO staticKnowledgeIndexVO) {
|
|
|
+ List<StaticKnowledgeIndexDTO> retList = Lists.newLinkedList();
|
|
|
+ //静态知识检索顺序
|
|
|
+ List<DictionaryInfoDTO> dicStaticIndexList = dictionaryFacade.getListByGroupType(7);
|
|
|
+
|
|
|
+ List<StaticKnowledgeIndexDTO> staticKnowledgeIndexDTOList = Lists.newLinkedList();
|
|
|
+ RespDTO<List<StaticKnowledgeIndexDTO>> respDTO = cdssCoreClient.staticKnowledgeIndex(staticKnowledgeIndexVO);
|
|
|
+ RespDTOUtil.respNGDealCover(respDTO, "检索失败");
|
|
|
+ staticKnowledgeIndexDTOList = respDTO.data;
|
|
|
+ if (ListUtil.isNotEmpty(staticKnowledgeIndexDTOList)) {
|
|
|
+ //typeName转换
|
|
|
+ staticKnowledgeIndexDTOList.forEach(item -> {
|
|
|
+ item.setTypeName(convertTypeName(item.getTypeName()));
|
|
|
+ });
|
|
|
+ //是否有静态知识
|
|
|
+ List<String> conNameList = staticKnowledgeIndexDTOList
|
|
|
+ .stream()
|
|
|
+ .map(i -> i.getName())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ QueryWrapper<ConceptInfo> conceptInfoQueryWrapper = new QueryWrapper<>();
|
|
|
+ conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .in("name", conNameList);
|
|
|
+ List<ConceptInfo> conceptInfoList = this.list(conceptInfoQueryWrapper);
|
|
|
+ Map<String, ConceptInfo> infoMap
|
|
|
+ = EntityUtil.makeEntityMapByKeys(conceptInfoList, "_", "name", "type");
|
|
|
+ for (StaticKnowledgeIndexDTO item : staticKnowledgeIndexDTOList) {
|
|
|
+ if (infoMap.containsKey(item.getName() + "_" + item.getTypeName())) {
|
|
|
+ item.setId(infoMap.get(item.getName() + "_" + item.getTypeName()).getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<Long> conceptIdList = conceptInfoList.stream()
|
|
|
+ .map(i -> i.getId())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (ListUtil.isNotEmpty(conceptIdList)) {
|
|
|
+ QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
|
|
|
+ conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .in("concept_id", conceptIdList);
|
|
|
+ List<ConceptDetail> conceptDetailList = conceptDetailFacade.list(conceptDetailQueryWrapper);
|
|
|
+ Map<Long, List<ConceptDetail>> detailMap
|
|
|
+ = EntityUtil.makeEntityListMap(conceptDetailList, "conceptId");
|
|
|
+ for (StaticKnowledgeIndexDTO item : staticKnowledgeIndexDTOList) {
|
|
|
+ if (item.getId() == null
|
|
|
+ || !detailMap.containsKey(item.getId())) {
|
|
|
+ item.setHasInfomation(0);
|
|
|
+ item.setHasClinicalPathway(0);
|
|
|
+ item.setHasNotice((0));
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (ConceptDetail detail : detailMap.get(item.getId())) {
|
|
|
+ List<String> contentTypeList = Arrays.asList(detail.getConcentType().split(","));
|
|
|
+ if (contentTypeList.contains(1)) {
|
|
|
+ item.setHasInfomation(1);
|
|
|
+ }
|
|
|
+ if (contentTypeList.contains(2)) {
|
|
|
+ item.setHasNotice(1);
|
|
|
+ }
|
|
|
+ if (contentTypeList.contains(3)) {
|
|
|
+ item.setHasClinicalPathway(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //排序
|
|
|
+ Map<String, List<StaticKnowledgeIndexDTO>> map
|
|
|
+ = EntityUtil.makeEntityListMap(staticKnowledgeIndexDTOList, "typeName");
|
|
|
+ for (DictionaryInfoDTO dic : dicStaticIndexList) {
|
|
|
+ if (map.containsKey(dic.getName())) {
|
|
|
+ retList.addAll(map.get(dic.getName()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return retList;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取静态知识
|
|
|
+ *
|
|
|
+ * @param staticKnowledgeVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public StaticKnowledgeDTO getStaticKnowledge(StaticKnowledgeVO staticKnowledgeVO) {
|
|
|
+ StaticKnowledgeDTO staticKnowledgeDTO = new StaticKnowledgeDTO();
|
|
|
+ String typeName = ConceptTypeEnum.getName(staticKnowledgeVO.getType());
|
|
|
+ typeName = convertTypeName(typeName);
|
|
|
+
|
|
|
+ QueryWrapper<ConceptInfo> conceptInfoQueryWrapper = new QueryWrapper<>();
|
|
|
+ conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .eq("name", staticKnowledgeVO.getName())
|
|
|
+ .eq("type", typeName);
|
|
|
+ ConceptInfo conceptInfo = this.getOne(conceptInfoQueryWrapper);
|
|
|
+
|
|
|
+ if (conceptInfo == null) {
|
|
|
+ throw new CommonException(CommonErrorCode.IS_EXISTS, "缺少静态信息");
|
|
|
+ }
|
|
|
+
|
|
|
+ BeanUtil.copyProperties(conceptInfo, staticKnowledgeDTO);
|
|
|
+ Long conceptId = conceptInfo.getId();
|
|
|
+ QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
|
|
|
+ conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .eq("concept_id", conceptId);
|
|
|
+ if (ListUtil.isNotEmpty(staticKnowledgeVO.getContentTypes())) {
|
|
|
+ String sql = "";
|
|
|
+ for (Integer contentType : staticKnowledgeVO.getContentTypes()) {
|
|
|
+ if (StringUtil.isNotBlank(sql)) {
|
|
|
+ sql += " or ";
|
|
|
+ }
|
|
|
+ sql = "find_in_set(" + contentType + ",position)";
|
|
|
+ }
|
|
|
+ sql = "(" + sql + ")";
|
|
|
+ conceptDetailQueryWrapper.apply(sql);
|
|
|
+ }
|
|
|
+ List<ConceptDetail> conceptDetailList = conceptDetailFacade.list(conceptDetailQueryWrapper);
|
|
|
+ List<StaticKnowledgeDetailDTO> detailList
|
|
|
+ = BeanUtil.listCopyTo(conceptDetailList, StaticKnowledgeDetailDTO.class);
|
|
|
+ List<StaticKnowledgeDetailDTO> introduceList = detailList
|
|
|
+ .stream()
|
|
|
+ .filter(i -> Arrays.asList(i.getConcentType().split(",")).contains(1))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ List<StaticKnowledgeDetailDTO> noticeList = detailList
|
|
|
+ .stream()
|
|
|
+ .filter(i -> Arrays.asList(i.getConcentType().split(",")).contains(2))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ List<StaticKnowledgeDetailDTO> clinicalPathwayList = detailList
|
|
|
+ .stream()
|
|
|
+ .filter(i -> Arrays.asList(i.getConcentType().split(",")).contains(3))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ Map<String, List<StaticKnowledgeDetailDTO>> detailMap = new HashMap<>();
|
|
|
+ if (ListUtil.isNotEmpty(introduceList)) {
|
|
|
+ detailMap.put("静态知识", introduceList);
|
|
|
+ }
|
|
|
+ if (ListUtil.isNotEmpty(noticeList)) {
|
|
|
+ detailMap.put("注意事项", noticeList);
|
|
|
+ }
|
|
|
+ if (ListUtil.isNotEmpty(clinicalPathwayList)) {
|
|
|
+ detailMap.put("临床路径", clinicalPathwayList);
|
|
|
+ }
|
|
|
+ staticKnowledgeDTO.setDetails(detailMap);
|
|
|
+ return staticKnowledgeDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 医院端获取静态知识(对接)
|
|
|
+ *
|
|
|
+ * @param staticKnowledgeHISVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<StaticKnowledgeDTO> getStaticKnowledgeForHIS(StaticKnowledgeHISVO staticKnowledgeHISVO) {
|
|
|
+
|
|
|
+ List<StaticKnowledgeDTO> retList = Lists.newArrayList();
|
|
|
+ StaticKnowledgeDTO staticKnowledgeDTO = new StaticKnowledgeDTO();
|
|
|
+ String typeName = ConceptTypeEnum.getName(staticKnowledgeHISVO.getType());
|
|
|
+ typeName = convertTypeName(typeName);
|
|
|
+
|
|
|
+ //术语映射
|
|
|
+ List<String> uniqueNameList = getUniqueNames(staticKnowledgeHISVO);
|
|
|
+
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面术语类型转图谱标签名称
|
|
|
+ *
|
|
|
+ * @param typeName
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String convertTypeName(String typeName) {
|
|
|
+ List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
|
|
|
+ if (ListUtil.isNotEmpty(dicList)) {
|
|
|
+ Map<String, String> nameValMap
|
|
|
+ = EntityUtil.makeMapWithKeyValue(dicList, "name", "val");
|
|
|
+ if (nameValMap.containsKey(typeName)) {
|
|
|
+ return nameValMap.get(typeName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return typeName;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param staticKnowledgeHISVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<String> getUniqueNames(StaticKnowledgeHISVO staticKnowledgeHISVO) {
|
|
|
+ String hospitalId = SysUserUtils.getCurrentHospitalID();
|
|
|
+ List<String> nameList = null;
|
|
|
+ switch (staticKnowledgeHISVO.getType()) {
|
|
|
+ case 1:
|
|
|
+ Map<String, Map<String, Long>> disConfigMap
|
|
|
+ = diseaseConfigFacade.getConfigMap(Long.valueOf(hospitalId),
|
|
|
+ ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }), null);
|
|
|
+ if (disConfigMap != null) {
|
|
|
+ nameList = new ArrayList<>(disConfigMap.get(staticKnowledgeHISVO.getHisName()).keySet());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ Map<String, Map<String, Long>> drugConfigMap
|
|
|
+ = drugConfigFacade.getConfigMap(Long.valueOf(hospitalId),
|
|
|
+ ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }), null);
|
|
|
+ if (drugConfigMap != null) {
|
|
|
+ nameList = new ArrayList<>(drugConfigMap.get(staticKnowledgeHISVO.getHisName()).keySet());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ case 4:
|
|
|
+ Map<String, Map<String, Map<String, Long>>> lisConfigMap
|
|
|
+ = lisConfigFacade.getConfigMap(Long.valueOf(hospitalId),
|
|
|
+ ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }), null);
|
|
|
+ if (lisConfigMap != null) {
|
|
|
+ if (StringUtil.isBlank(staticKnowledgeHISVO.getHisDetailName())) {
|
|
|
+ staticKnowledgeHISVO.setHisDetailName("");
|
|
|
+ if (lisConfigMap.containsKey(staticKnowledgeHISVO.getHospitalId())) {
|
|
|
+ nameList = new ArrayList<>(lisConfigMap.get(staticKnowledgeHISVO.getHisName())
|
|
|
+ .get(staticKnowledgeHISVO.getHisDetailName()).keySet());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ Map<String, Map<String, Long>> pacsConfigMap
|
|
|
+ = pacsConfigFacade.getConfigMap(Long.valueOf(hospitalId),
|
|
|
+ ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }), null);
|
|
|
+ if (pacsConfigMap != null) {
|
|
|
+ nameList = new ArrayList<>(pacsConfigMap.get(staticKnowledgeHISVO.getHisName()).keySet());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ Map<String, Map<String, Long>> operationConfigMap
|
|
|
+ = operationConfigFacade.getConfigMap(Long.valueOf(hospitalId),
|
|
|
+ ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }), null);
|
|
|
+ if (operationConfigMap != null) {
|
|
|
+ nameList = new ArrayList<>(operationConfigMap.get(staticKnowledgeHISVO.getHisName()).keySet());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+ return nameList;
|
|
|
+ }
|
|
|
+}
|