Przeglądaj źródła

Merge branch 'develop' into dev/precSR

gaodm 5 lat temu
rodzic
commit
3401701730

+ 8 - 0
aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -282,7 +282,15 @@ public class ConceptFacade extends ConceptServiceImpl {
                 typeList.add(LexiconTypeEnum.FOOD_ALLERGY_HISTORY.getKey());
                 typeList.add(LexiconTypeEnum.HISTORY_OF_DRUG_ALLERGY.getKey());
                 typeList.add(LexiconTypeEnum.FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY.getKey());
+                typeList.add(LexiconTypeEnum.RELATIVES.getKey());
+                typeList.add(LexiconTypeEnum.MARRIAGE.getKey());
+                typeList.add(LexiconTypeEnum.FOOD.getKey());
+                typeList.add(LexiconTypeEnum.HISTORY.getKey());
+                typeList.add(LexiconTypeEnum.OPERATION.getKey());
+                typeList.add(LexiconTypeEnum.PERSONAL_HISTORY.getKey());
+                typeList.add(LexiconTypeEnum.PERSONAL_HISTORY_DESCRIPTION.getKey());
                 retrievalVO.setOtherType(typeList);
+                retrievalVO.setType(null);
                 bla = false;
             }
             if (bla) {

+ 20 - 0
aipt-service/src/main/java/com/diagbot/util/ParamConvertUtil.java

@@ -83,7 +83,26 @@ public class ParamConvertUtil {
             case SYMPTOM:
                 type = ConceptTypeEnum.Symptom.getKey();
                 break;
+            case HISTORY_OF_PAST_DISEASES:
+            case HISTORY_OF_TRAUMA:
+            case HISTORY_OF_SURGERY:
+            case HISTORY_OF_BLOOD_TRANSFUSION:
+            case INFECTIOUS_DISEASE_HISTORY:
+            case BAD_HABITS:
+            case MARITAL_HISTORY:
+            case HISTORY_OF_MARRIAGE_AND_CHILDBEARING:
+            case BIRTH_HISTORY:
+            case FAMILY_HISTORY:
+            case FOOD_ALLERGY_HISTORY:
+            case HISTORY_OF_DRUG_ALLERGY:
+            case FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY:
+            case RELATIVES:
+            case MARRIAGE:
+            case FOOD:
             case HISTORY:
+            case OPERATION:
+            case PERSONAL_HISTORY:
+            case PERSONAL_HISTORY_DESCRIPTION:
                 type = ConceptTypeEnum.Other.getKey();
                 break;
             case VITAL_INDEX:
@@ -125,6 +144,7 @@ public class ParamConvertUtil {
             case DEPARTMENT:
                 type = ConceptTypeEnum.DEPARTMENT.getKey();
                 break;
+
             default:
                 break;
         }

+ 2 - 4
data-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -40,10 +40,8 @@ public class PushFacade {
         PushDTO pushDTO = new PushDTO();
         SearchData searchData = assembleFacade.assembleData(pushVO);
         RespDTO<PushDTO> respDTO = aiptServiceClient.pushInner(searchData);
-        PushDTO data = new PushDTO();
-        if (RespDTOUtil.respIsOK(respDTO)) {
-            data = respDTO.data;
-        }
+        RespDTOUtil.respNGDeal(respDTO, "中间层没有返回结果");
+        PushDTO data = respDTO.data;
 
         String featureType = searchData.getFeatureType();
         String[] featureTypes = featureType.split(",|,");

+ 17 - 0
icssman-service/src/main/java/com/diagbot/facade/LisMappingFacade.java

@@ -7,7 +7,9 @@ import com.diagbot.client.UserServiceClient;
 import com.diagbot.dto.LisMappingPageDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.LisMapping;
+import com.diagbot.entity.QuestionInfo;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.QuestionTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.LisMappingService;
@@ -41,6 +43,10 @@ public class LisMappingFacade extends LisMappingServiceImpl {
     @Autowired
     @Qualifier("lisMappingServiceImpl")
     private LisMappingService lisMappingService;
+    @Autowired
+    private CacheFacade cacheFacade;
+    @Autowired
+    private QuestionFacade questionFacade;
 
     /**
      * 化验公表映射分页信息
@@ -104,6 +110,17 @@ public class LisMappingFacade extends LisMappingServiceImpl {
         lisMapping.setGmtModified(now);
         lisMapping.setIsDeleted(IsDeleteEnum.N.getKey());
         Boolean state = this.saveOrUpdate(lisMapping);
+
+        //清除缓存
+        QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
+        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).
+                eq("type", QuestionTypeEnum.Lis.getKey()).
+                eq("tag_type", 7).
+                eq("name", lisMappingVO.getMealName());
+        QuestionInfo lisQuestion = questionFacade.getOne(questionInfoQueryWrapper);
+        if (lisQuestion != null) {
+            cacheFacade.clearCache(lisQuestion.getId());
+        }
         return state;
     }
 

+ 1 - 1
knowledgeman-service/src/main/java/com/diagbot/enums/LexiconTypeEnum.java

@@ -50,7 +50,7 @@ public enum LexiconTypeEnum implements KeyedNamed {
     PERSONAL_HISTORY_DESCRIPTION(39,"个人史描述"),
     TIME_DESCRIPTION(40,"时间描述"),
     SYMPTOM_INDEX(41,"症状指标"),
-    MEDICAL_SUPPLIES(42,"医用耗材 "),
+    MEDICAL_SUPPLIES(42,"医用耗材"),
     DEGREE_CLASSIFIER(43,"程度量词"),
     OTHER(44,"其他"),
     DELETE(45,"删除"),

+ 214 - 23
knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -1,5 +1,27 @@
 package com.diagbot.facade;
 
+import java.io.InputStream;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang.time.DateFormatUtils;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -24,6 +46,8 @@ import com.diagbot.enums.LexiconRSTypeEnum;
 import com.diagbot.enums.LexiconTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.service.ConceptCommonService;
+import com.diagbot.service.ConceptService;
 import com.diagbot.service.LibraryInfoService;
 import com.diagbot.service.impl.ConceptServiceImpl;
 import com.diagbot.util.BeanUtil;
@@ -52,27 +76,6 @@ import com.diagbot.vo.IndexLexiconVO;
 import com.diagbot.vo.IndexVO;
 import com.diagbot.vo.RemoveConceptInfoVO;
 import com.google.common.collect.Lists;
-import org.apache.commons.lang.time.DateFormatUtils;
-import org.apache.poi.hssf.usermodel.HSSFDateUtil;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Component;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.InputStream;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * @Description: 术语查询业务层
@@ -90,6 +93,12 @@ public class ConceptFacade extends ConceptServiceImpl {
     @Qualifier("libraryInfoServiceImpl")
     private LibraryInfoService libraryInfoService;
     @Autowired
+    @Qualifier("conceptServiceImpl")
+    private ConceptService conceptService;
+    @Autowired
+    @Qualifier("conceptCommonServiceImpl")
+    private ConceptCommonService conceptCommonService;
+    @Autowired
     private UserServiceClient userServiceClient;
     @Autowired
     private LexiconFacade lexiconFacade;
@@ -258,6 +267,7 @@ public class ConceptFacade extends ConceptServiceImpl {
     	conceptQe.eq(StringUtil.isNotBlank(getAllInformationVO.getIsDeleted()),"is_deleted", getAllInformationVO.getIsDeleted());
     	conceptQe.orderByAsc("is_deleted");
     	conceptQe.orderByDesc("gmt_modified");
+    	conceptQe.orderByDesc("id");
     	IPage<Concept> iPage = this.page(conceptPage, conceptQe);
     	BeanUtil.copyProperties(iPage, getAllInformationDTOPage);
     	
@@ -785,14 +795,195 @@ public class ConceptFacade extends ConceptServiceImpl {
             sbf.append("数据重复,请修改导入数据!");
             throw new CommonException(CommonErrorCode.RPC_ERROR, sbf.toString());
         }
-
-        addConceptInfoVOList.forEach(i -> {
+        
+        /*
+         * 原来的
+         * addConceptInfoVOList.forEach(i -> {
             addConceptInfo(i);
+        });*/
+        
+        ////优化后
+        QueryWrapper<LibraryInfo> libraryInfoQe = new QueryWrapper<>();
+        libraryInfoQe.in("name", addConceptInfoDetailVOList.stream().map(i->i.getName()).distinct().collect(Collectors.toList()));
+        Map<String,List<LibraryInfo>> libraryInfoListMap = libraryinfoFacade.list(libraryInfoQe).stream().collect(Collectors.groupingBy(LibraryInfo::getName));
+        
+        Map<String,Lexicon> lexiconMap = lexiconFacade.list().stream().collect(Collectors.toMap(Lexicon::getName, i->i));
+        
+        addConceptInfoVOList.forEach(i -> {
+        	i = checkImConceptInfo(i,libraryInfoListMap,lexiconMap);
         });
+        
+        saveAddConceptInfoVOList(addConceptInfoVOList);
 
         return true;
     }
+    
+    /**
+     * 导入数据插入更新前校验
+     * @param addConceptInfoVO
+     * @param libraryInfoListAllMap
+     * @param lexiconMap
+     * @return
+     */
+    public AddConceptInfoVO checkImConceptInfo(AddConceptInfoVO addConceptInfoVO,Map<String,List<LibraryInfo>> libraryInfoListAllMap,Map<String,Lexicon> lexiconMap) {
+    	String currentUser = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+    	
+    	Concept concept = new Concept();
+    	ConceptCommon conceptCommon = null;
+    	List<LibraryInfo> libraryInfoList = Lists.newArrayList();
+    	
+        String lineNumStr = "第" + addConceptInfoVO.getLineNum() + "行";
+
+        List<AddConceptInfoDetailVO> addConceptInfoDetailVOMainList = addConceptInfoVO.getDetailList().stream().filter(i -> i.getIsConcept() == 1).collect(Collectors.toList());
+        if (addConceptInfoDetailVOMainList.size() == 0) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, lineNumStr + "无标准术语!");
+        }
+        if (addConceptInfoDetailVOMainList.size() > 1) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, lineNumStr + "标准术语只能有一个!");
+        }
+        
+        Lexicon lexicon = lexiconMap.get(addConceptInfoVO.getType());
+        if (lexicon == null) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, lineNumStr + "数据有误,该类型信息在数据库中不存在!");
+        }
+        Long typeId = lexicon.getId();
+        concept.setLibType(typeId);
+        concept.setGmtModified(now);
+    	concept.setModifier(currentUser);
+    	if(lexicon.getIsHasCommon()==1){
+    		conceptCommon = new ConceptCommon();
+    		conceptCommon.setSexType(addConceptInfoVO.getSexType());
+        	conceptCommon.setMinAge(addConceptInfoVO.getMinAge());
+        	conceptCommon.setMaxAge(addConceptInfoVO.getMaxAge());
+        	conceptCommon.setGmtModified(now);
+        	conceptCommon.setModifier(currentUser);
+    	}
+
+        List<LibraryInfo> extLibraryInfoList = Lists.newArrayList();
+        addConceptInfoVO.getDetailList().forEach(a->{
+        	List<LibraryInfo> libraryInfoListAll = libraryInfoListAllMap.get(a.getName());
+        	if(libraryInfoListAll!=null){
+        		libraryInfoListAll = libraryInfoListAll.stream().filter(b->b.getTypeId().intValue()==typeId.intValue()).collect(Collectors.toList());
+        		if(libraryInfoListAll!=null){
+        			extLibraryInfoList.add(libraryInfoListAll.get(0));
+        		}
+        	}
+        });
+        Map<String, LibraryInfo> extLibraryInfoMap = extLibraryInfoList.stream().collect(Collectors.toMap(LibraryInfo::getName, i -> i));
+        
+        LibraryInfo libraryInfoMain = extLibraryInfoMap.get(addConceptInfoDetailVOMainList.get(0).getName());
+        Long conceptId = null;
+        if (libraryInfoMain == null) {
+        	conceptId = -9999l;
+        	concept.setGmtCreate(now);
+        	concept.setCreator(currentUser);
+        	if(conceptCommon!=null){
+        		conceptCommon.setGmtCreate(now);
+            	conceptCommon.setCreator(currentUser);
+        	}
+        } else {
+            conceptId = libraryInfoMain.getConceptId();
+            concept.setId(conceptId);
+            addConceptInfoVO.setConceptId(conceptId);
+
+            if (libraryInfoMain.getIsConcept()!=1&&extLibraryInfoList.stream().filter(i -> i.getConceptId().intValue() == libraryInfoMain.getConceptId().intValue()).count() == 1) {
+            	throw new CommonException(CommonErrorCode.RPC_ERROR, lineNumStr + "标准术语已作为同义词被占用!");
+            }
+        }
+
+        StringBuffer sbf = new StringBuffer();
+        for (AddConceptInfoDetailVO i : addConceptInfoVO.getDetailList()) {
+            LibraryInfo libraryInfo = extLibraryInfoMap.get(i.getName());
+            if (libraryInfo == null) {
+            	libraryInfo = new LibraryInfo();
+            	libraryInfo.setTypeId(typeId);
+            	libraryInfo.setGmtCreate(now);
+            	libraryInfo.setCreator(currentUser);
+            } else if (libraryInfo.getConceptId().intValue() != conceptId.intValue()) {
+                sbf.append(i.getName()).append(" ");
+                continue;
+            }
 
+            BeanUtil.copyProperties(i, libraryInfo);
+            libraryInfo.setId(null);
+            libraryInfo.setConceptId(conceptId);
+            libraryInfo.setGmtModified(now);
+            libraryInfo.setModifier(currentUser);
+            if(i.getIsConcept()==1){
+            	libraryInfoList.add(0,libraryInfo);
+            }else{
+            	libraryInfoList.add(libraryInfo);
+            }
+        }
+
+        if (sbf.length() > 0) {
+            sbf.append("已被占用");
+            throw new CommonException(CommonErrorCode.RPC_ERROR, sbf.toString());
+        }
+        
+        addConceptInfoVO.setConcept(concept);
+        addConceptInfoVO.setConceptCommon(conceptCommon);
+        addConceptInfoVO.setLibraryInfoList(libraryInfoList);
+
+        return addConceptInfoVO;
+    }
+    
+    /**
+     * 导入数据插入更新
+     * @param addConceptInfoVOList
+     */
+    private void saveAddConceptInfoVOList(List<AddConceptInfoVO> addConceptInfoVOList){
+    	List<Long> conceptIds = addConceptInfoVOList.stream().filter(i->i.getConceptId()!=null).map(i->i.getConceptId()).collect(Collectors.toList());
+    	if(ListUtil.isNotEmpty(conceptIds)){
+    		QueryWrapper<LibraryInfo> libraryInfoQe = new QueryWrapper<>();
+            libraryInfoQe.in("concept_id", conceptIds);
+            libraryinfoFacade.remove(libraryInfoQe);
+    	}
+        
+        List<LibraryInfo> saveLibraryInfoList = Lists.newArrayList();
+        addConceptInfoVOList.forEach(i->{
+        	saveLibraryInfoList.addAll(i.getLibraryInfoList());
+        });
+        libraryInfoService.saveBatch(saveLibraryInfoList);
+        
+        List<Concept> saveOrUpdateConceptList = Lists.newArrayList();
+        addConceptInfoVOList.forEach(i->{
+        	i.getConcept().setLibId(i.getLibraryInfoList().get(0).getId());
+        	i.getConcept().setLibName(i.getLibraryInfoList().get(0).getName());
+        	saveOrUpdateConceptList.add(i.getConcept());
+        });
+        conceptService.saveOrUpdateBatch(saveOrUpdateConceptList);
+        
+        List<LibraryInfo> updateLibraryInfoList = Lists.newArrayList();
+        addConceptInfoVOList.forEach(i->{
+        	if(i.getConceptId()==null){
+        		i.getLibraryInfoList().forEach(j->{
+        			j.setConceptId(i.getConcept().getId());
+        		});
+        		updateLibraryInfoList.addAll(i.getLibraryInfoList());
+        	}
+        });
+        if(ListUtil.isNotEmpty(updateLibraryInfoList)){
+        	libraryInfoService.updateBatchById(updateLibraryInfoList);
+        }
+        
+        List<ConceptCommon> saveOrUpdateConceptCommonList = Lists.newArrayList();
+        QueryWrapper<ConceptCommon> conceptCommonQe = new QueryWrapper<>();
+        conceptCommonQe.in("concept_id", conceptIds);
+        Map<Long,ConceptCommon> conceptCommonMap = conceptCommonFacade.list(conceptCommonQe).stream().collect(Collectors.toMap(ConceptCommon::getConceptId, i->i));
+        addConceptInfoVOList.forEach(i->{
+        	if(i.getConceptCommon()!=null){
+        		if(i.getConceptId()!=null){
+            		i.getConceptCommon().setId(conceptCommonMap.get(i.getConceptId()).getId());
+            	}
+            	i.getConceptCommon().setConceptId(i.getConcept().getId());
+            	saveOrUpdateConceptCommonList.add(i.getConceptCommon());
+        	}
+        });
+        conceptCommonService.saveOrUpdateBatch(saveOrUpdateConceptCommonList);
+    }
+    
     @SuppressWarnings("deprecation")
     private String getValue(Cell cell) {
         try {

+ 7 - 0
knowledgeman-service/src/main/java/com/diagbot/util/ParamConvertUtil.java

@@ -96,6 +96,13 @@ public class ParamConvertUtil {
             case FOOD_ALLERGY_HISTORY:
             case HISTORY_OF_DRUG_ALLERGY:
             case FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY:
+            case RELATIVES:
+            case MARRIAGE:
+            case FOOD:
+            case HISTORY:
+            case OPERATION:
+            case PERSONAL_HISTORY:
+            case PERSONAL_HISTORY_DESCRIPTION:
                 type = ConceptTypeEnum.Other.getKey();
                 break;
             case VITAL_INDEX:

+ 27 - 0
knowledgeman-service/src/main/java/com/diagbot/vo/AddConceptInfoVO.java

@@ -7,6 +7,10 @@ import javax.validation.constraints.NotEmpty;
 
 import org.hibernate.validator.constraints.Range;
 
+import com.diagbot.entity.Concept;
+import com.diagbot.entity.ConceptCommon;
+import com.diagbot.entity.LibraryInfo;
+
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
@@ -74,8 +78,31 @@ public class AddConceptInfoVO {
 	@ApiModelProperty(value="是否推送:0-不推送;1-推送")
     private String isPush="0";
 	
+	/**
+	 * 后端业务字段,前端不用
+	 */
 	private Integer lineNum;
 	
+	/**
+	 * 后端业务字段,前端不用
+	 */
+	private Integer typeId;
+	
+	/**
+	 * 后端业务字段,前端不用
+	 */
+	private Concept concept;
+	
+	/**
+	 * 后端业务字段,前端不用
+	 */
+	private ConceptCommon conceptCommon;
+	
+	/**
+	 * 后端业务字段,前端不用
+	 */
+	private List<LibraryInfo> libraryInfoList;
+	
 	
 
 }

+ 2 - 4
ltapi-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -40,10 +40,8 @@ public class PushFacade {
         PushDTO pushDTO = new PushDTO();
         SearchData searchData = assembleFacade.assembleData(pushVO);
         RespDTO<PushDTO> respDTO = aiptServiceClient.pushInner(searchData);
-        PushDTO data = new PushDTO();
-        if (RespDTOUtil.respIsOK(respDTO)) {
-            data = respDTO.data;
-        }
+        RespDTOUtil.respNGDeal(respDTO, "中间层没有返回结果");
+        PushDTO data = respDTO.data;
 
         String featureType = searchData.getFeatureType();
         String[] featureTypes = featureType.split(",|,");

+ 1 - 1
triage-service/src/main/java/com/diagbot/facade/AIFacade.java

@@ -75,7 +75,7 @@ public class AIFacade {
                     Double rate;
                     Map<String, Double> map = new HashMap<>();
                     for (FeatureRate featureRate : res.data.getDis()) {
-                        if (Double.valueOf(featureRate.getRate()) > 0.1d) {
+                        if (featureRate.getRate() != null && Double.valueOf(featureRate.getRate()) > 0.1d) {
                             if (StringUtil.isNotBlank(featureRate.getExtraProperty())) {
                                 if (null != map.get(featureRate.getExtraProperty())) {
                                     rate = map.get(featureRate.getExtraProperty())