|
@@ -1,27 +1,55 @@
|
|
|
package com.diagbot.facade;
|
|
|
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.metadata.*;
|
|
|
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
-import com.diagbot.api.ImportExcel;
|
|
|
-import com.diagbot.dto.ConceptDTO;
|
|
|
-import com.diagbot.dto.LibraryInfoDTO;
|
|
|
-import com.diagbot.entity.*;
|
|
|
-import com.diagbot.service.impl.ConceptServiceImpl;
|
|
|
-import com.diagbot.vo.AmendTermVo;
|
|
|
-import com.diagbot.vo.ConceptVo;
|
|
|
-import com.diagbot.vo.KnowledgeVo;
|
|
|
-import com.diagbot.vo.TermVo;
|
|
|
-import org.springframework.beans.BeanUtils;
|
|
|
+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.bind.annotation.RequestBody;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
-
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.diagbot.client.UserServiceClient;
|
|
|
+import com.diagbot.dto.GetAllConceptDTO;
|
|
|
+import com.diagbot.dto.GetAllInformationDTO;
|
|
|
+import com.diagbot.dto.GetAllLisConceptDTO;
|
|
|
+import com.diagbot.dto.GetConceptInfoDetailDTO;
|
|
|
+import com.diagbot.dto.RespDTO;
|
|
|
+import com.diagbot.entity.Concept;
|
|
|
+import com.diagbot.entity.LibraryDetail;
|
|
|
+import com.diagbot.entity.LibraryInfo;
|
|
|
+import com.diagbot.entity.Medical;
|
|
|
+import com.diagbot.entity.Relation;
|
|
|
+import com.diagbot.exception.CommonErrorCode;
|
|
|
+import com.diagbot.exception.CommonException;
|
|
|
+import com.diagbot.service.LibraryInfoService;
|
|
|
+import com.diagbot.service.impl.ConceptServiceImpl;
|
|
|
+import com.diagbot.util.BeanUtil;
|
|
|
+import com.diagbot.util.DateUtil;
|
|
|
+import com.diagbot.util.StringUtil;
|
|
|
+import com.diagbot.util.UserUtils;
|
|
|
+import com.diagbot.vo.AddConceptInfoDetailVO;
|
|
|
+import com.diagbot.vo.AddConceptInfoVO;
|
|
|
+import com.diagbot.vo.GetAllConceptVO;
|
|
|
+import com.diagbot.vo.GetAllInformationVO;
|
|
|
+import com.diagbot.vo.GetAllLisConceptVO;
|
|
|
+import com.diagbot.vo.GetConceptInfoDetailVO;
|
|
|
+import com.diagbot.vo.RemoveConceptInfoVO;
|
|
|
|
|
|
/**
|
|
|
* @Description: 术语查询业务层
|
|
@@ -39,214 +67,483 @@ public class ConceptFacade extends ConceptServiceImpl {
|
|
|
private MedicalFacade medicalFacade;
|
|
|
@Autowired
|
|
|
private RelationFacade relationFacade;
|
|
|
-
|
|
|
-
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("libraryInfoServiceImpl")
|
|
|
+ private LibraryInfoService libraryInfoService;
|
|
|
+ @Autowired
|
|
|
+ private UserServiceClient userServiceClient;
|
|
|
+
|
|
|
/**
|
|
|
- * 获取医学术语基本信息
|
|
|
- *
|
|
|
- * @param termvo
|
|
|
- * @return ConceptDTO
|
|
|
+ * 获取所有化验公表项
|
|
|
+ * @param getAllLisConceptVO
|
|
|
+ * @return
|
|
|
*/
|
|
|
- public ConceptDTO getConceptInfo(@RequestBody TermVo termvo) {
|
|
|
-
|
|
|
-// List<ConceptDTO> conceptDTOs = new ArrayList<>();
|
|
|
- ConceptDTO conceptDTO = null;
|
|
|
- List<LibraryInfo> libraryinfos;
|
|
|
-
|
|
|
- // 获取医学术语的基本信息
|
|
|
- QueryWrapper<LibraryInfo> query = new QueryWrapper<>();
|
|
|
- query.eq("name", termvo.getTerm());
|
|
|
- query.eq("type", termvo.getType());
|
|
|
- query.eq("is_concept", 1);
|
|
|
- LibraryInfo libraryInfo = libraryinfoFacade.getOne(query);
|
|
|
-
|
|
|
- if ( libraryInfo != null ) {
|
|
|
-
|
|
|
- conceptDTO = new ConceptDTO();
|
|
|
-
|
|
|
- conceptDTO.setId(libraryInfo.getConceptId());
|
|
|
- conceptDTO.setLibId(libraryInfo.getId().intValue());
|
|
|
- conceptDTO.setName(libraryInfo.getName());
|
|
|
-
|
|
|
- query = new QueryWrapper<>();
|
|
|
- query.eq("concept_id", libraryInfo.getConceptId());
|
|
|
- query.isNull("is_concept");
|
|
|
-
|
|
|
- libraryinfos = libraryinfoFacade.list(query);
|
|
|
- conceptDTO.setLibraryInfo(libraryinfos);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- return conceptDTO;
|
|
|
+ public List<GetAllLisConceptDTO> getAllLisConcept(GetAllLisConceptVO getAllLisConceptVO){
|
|
|
+ return this.baseMapper.getAllLisConcept(getAllLisConceptVO);
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
- * 获取标准术语名称列表
|
|
|
- *
|
|
|
- * @param conceptVo
|
|
|
- * @return IPage<LibraryDTO>
|
|
|
+ * 获取所有医学术语命名
|
|
|
+ * @param getAllConceptVO
|
|
|
+ * @return
|
|
|
*/
|
|
|
- public IPage<LibraryInfoDTO> getAllConcepts(ConceptVo conceptVo) {
|
|
|
-
|
|
|
- return libraryinfoFacade.getAllConcept(conceptVo);
|
|
|
+ public List<GetAllConceptDTO> getAllConcept(GetAllConceptVO getAllConceptVO){
|
|
|
+ QueryWrapper<LibraryInfo> libraryInfoQe = new QueryWrapper<LibraryInfo>();
|
|
|
+ libraryInfoQe.eq("is_deleted", "N");
|
|
|
+ if(getAllConceptVO.getIsConcept()!=null){
|
|
|
+ libraryInfoQe.eq("is_concept", getAllConceptVO.getIsConcept());
|
|
|
+ }
|
|
|
+ if(StringUtil.isNotBlank(getAllConceptVO.getName())){
|
|
|
+ libraryInfoQe.like("name", getAllConceptVO.getName());
|
|
|
+ }
|
|
|
+ List<LibraryInfo> libraryInfoList = libraryinfoFacade.list(libraryInfoQe);
|
|
|
+
|
|
|
+ //过滤掉非概念术语
|
|
|
+ if(getAllConceptVO.getIsConcept()!=null&&getAllConceptVO.getIsConcept()==1){
|
|
|
+ QueryWrapper<Concept> conceptQe = new QueryWrapper<>();
|
|
|
+ conceptQe.eq("is_deleted", "N");
|
|
|
+ conceptQe.in("id", libraryInfoList.stream().map(i->i.getConceptId()).distinct().collect(Collectors.toList()));
|
|
|
+ Map<Long,Concept> conceptMap = list(conceptQe).stream().collect(Collectors.toMap(Concept::getId, i->i));
|
|
|
+ libraryInfoList.forEach(i->{
|
|
|
+ if(conceptMap.get(i.getConceptId())==null||conceptMap.get(i.getConceptId()).getLibId().intValue()!=i.getId().intValue()){
|
|
|
+ i.setIsDeleted("Y");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ libraryInfoList = libraryInfoList.stream().filter(i->i.getIsDeleted().equals("N")).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ //添加过术语医学属性的过滤掉
|
|
|
+ if(getAllConceptVO.getIsMedical()!=null&&getAllConceptVO.getIsMedical()==1){
|
|
|
+ QueryWrapper<Medical> medicalQe = new QueryWrapper<>();
|
|
|
+ medicalQe.eq("is_deleted", "N");
|
|
|
+ medicalQe.in("concept_id", libraryInfoList.stream().map(i->i.getConceptId()).collect(Collectors.toList()));
|
|
|
+ Map<Long,Medical> medicalMap =medicalFacade.list(medicalQe).stream().collect(Collectors.toMap(Medical::getConceptId, i->i));
|
|
|
+ libraryInfoList = libraryInfoList.stream().filter(i->{
|
|
|
+ if(medicalMap.get(i.getConceptId())==null){
|
|
|
+ return true;
|
|
|
+ }else{
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ List<GetAllConceptDTO> getAllConceptDTOList = BeanUtil.listCopyTo(libraryInfoList, GetAllConceptDTO.class);
|
|
|
+ getAllConceptDTOList.forEach(i->{
|
|
|
+ i.setNameAndType(i.getName()+"("+i.getType()+")");
|
|
|
+ });
|
|
|
+
|
|
|
+ return getAllConceptDTOList;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
- * 获取标准术语信息列表
|
|
|
- *
|
|
|
- * @param conceptVo
|
|
|
- * @return IPage<LibraryDTO>
|
|
|
+ * 获取医学术语命名列表
|
|
|
+ * @param getAllInformationVO
|
|
|
+ * @return
|
|
|
*/
|
|
|
- public IPage<LibraryInfoDTO> getAllInformation(ConceptVo conceptVo) {
|
|
|
-
|
|
|
- return libraryinfoFacade.getAllInfor(conceptVo);
|
|
|
+ public IPage<GetAllInformationDTO> getAllInformation(GetAllInformationVO getAllInformationVO) {
|
|
|
+ IPage<GetAllInformationDTO> ipage = libraryinfoFacade.getAllInformation(getAllInformationVO);
|
|
|
+ if(ipage.getRecords().size()>0){
|
|
|
+ List<String> ids = ipage.getRecords().stream().map(i->i.getOperName()).distinct().collect(Collectors.toList());
|
|
|
+ RespDTO<Map<String, String>> respDTO = userServiceClient.getUserInfoByIds(ids);
|
|
|
+ if (respDTO == null || !CommonErrorCode.OK.getCode().equals(respDTO.code)) {
|
|
|
+ throw new CommonException(CommonErrorCode.RPC_ERROR,
|
|
|
+ "获取用户信息失败");
|
|
|
+ }
|
|
|
+ ipage.getRecords().forEach(i->{
|
|
|
+ i.setOperName(respDTO.data.get(i.getOperName()));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return ipage;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
- * 更新医学术语信息
|
|
|
- *
|
|
|
- * @param amendTermVo
|
|
|
- * @return ConceptDTO
|
|
|
+ * 医学术语命名删除
|
|
|
+ * @param removeConceptInfoVO
|
|
|
+ * @return
|
|
|
*/
|
|
|
- public ConceptDTO upsertConceptInfo(@RequestBody AmendTermVo amendTermVo) {
|
|
|
- ConceptDTO conceptDTO = new ConceptDTO();
|
|
|
-
|
|
|
- TermVo termVo = new TermVo();
|
|
|
- termVo.setTerm(amendTermVo.getNewterm());
|
|
|
- termVo.setType(amendTermVo.getNewtype());
|
|
|
-
|
|
|
- LibraryInfo libraryInfo = libraryinfoFacade.upsertLibraryInfo(amendTermVo);
|
|
|
-
|
|
|
- QueryWrapper<Concept> query = new QueryWrapper<>();
|
|
|
- query.eq("lib_id", libraryInfo.getId());
|
|
|
- Concept concept = getOne(query);
|
|
|
-
|
|
|
- if (concept == null) {
|
|
|
- concept = new Concept();
|
|
|
- concept.setLibId(libraryInfo.getId().intValue());
|
|
|
- saveOrUpdate(concept);
|
|
|
-
|
|
|
- concept = getOne(query);
|
|
|
- }
|
|
|
-
|
|
|
- libraryInfo.setConceptId(concept.getId());
|
|
|
- libraryInfo.setIsConcept(1);
|
|
|
- libraryinfoFacade.saveOrUpdate(libraryInfo);
|
|
|
-
|
|
|
- if (amendTermVo.getLibraryInfo() != null && amendTermVo.getLibraryInfo().size() > 0) {
|
|
|
- List<LibraryInfo> libraryInfos = amendTermVo.getLibraryInfo();
|
|
|
- for (LibraryInfo libraryinfo:libraryInfos) {
|
|
|
- libraryinfo.setConceptId(concept.getId());
|
|
|
- libraryinfo.setIsConcept(0);
|
|
|
- libraryinfo.setIsDeleted("N");
|
|
|
- libraryinfoFacade.saveOrUpdate(libraryinfo);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- query = new QueryWrapper<>();
|
|
|
- query.eq("name", amendTermVo.getNewterm());
|
|
|
- query.eq("type", amendTermVo.getNewtype());
|
|
|
- concept = getOne(query);
|
|
|
-
|
|
|
- BeanUtils.copyProperties(concept, conceptDTO);
|
|
|
-
|
|
|
- QueryWrapper<LibraryInfo> conceptquery = new QueryWrapper<>();
|
|
|
- conceptquery = new QueryWrapper<>();
|
|
|
- conceptquery.eq("concept_id", concept.getId());
|
|
|
- conceptquery.isNull("is_concept");
|
|
|
- List<LibraryInfo> libraryInfos = libraryinfoFacade.list(conceptquery);
|
|
|
-
|
|
|
- conceptDTO.setLibraryInfo(libraryInfos);
|
|
|
-
|
|
|
- return conceptDTO;
|
|
|
+ public Boolean removeConceptInfo(RemoveConceptInfoVO removeConceptInfoVO) {
|
|
|
+ StringBuffer sbf = new StringBuffer();
|
|
|
+
|
|
|
+ QueryWrapper<Medical> medicalQe = new QueryWrapper<Medical>();
|
|
|
+ medicalQe.eq("is_deleted", "N");
|
|
|
+ medicalQe.eq("concept_id", removeConceptInfoVO.getConceptId());
|
|
|
+ if(medicalFacade.list(medicalQe).size()>0){
|
|
|
+ sbf.append("请先解除医学属性关联 ");
|
|
|
+ }
|
|
|
+
|
|
|
+ QueryWrapper<Relation> relationQe = new QueryWrapper<Relation>();
|
|
|
+ relationQe.eq("is_deleted", "N");
|
|
|
+ relationQe.and(i->i.eq("start_id", removeConceptInfoVO.getConceptId()).or().eq("end_id", removeConceptInfoVO.getConceptId()));
|
|
|
+ if(relationFacade.list(relationQe).size()>0){
|
|
|
+ sbf.append("请先解除术语关系关联 ");
|
|
|
+ }
|
|
|
+
|
|
|
+ QueryWrapper<LibraryDetail> libraryDetailQe = new QueryWrapper<LibraryDetail>();
|
|
|
+ libraryDetailQe.eq("is_deleted", "N");
|
|
|
+ libraryDetailQe.eq("concept_id", removeConceptInfoVO.getConceptId());
|
|
|
+ if(libraryDetailFacade.list(libraryDetailQe).size()>0){
|
|
|
+ sbf.append("请先解除医学静态知识关联 ");
|
|
|
+ }
|
|
|
+
|
|
|
+ if(sbf.length()>0){
|
|
|
+ throw new CommonException(CommonErrorCode.RPC_ERROR,sbf.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ String currentUser = UserUtils.getCurrentPrincipleID();
|
|
|
+ Date now = DateUtil.now();
|
|
|
+
|
|
|
+ QueryWrapper<LibraryInfo> libraryInfoQe1 = new QueryWrapper<>();
|
|
|
+ libraryInfoQe1.eq("concept_id", removeConceptInfoVO.getConceptId());
|
|
|
+ libraryInfoQe1.eq("is_concept", 0);
|
|
|
+ libraryinfoFacade.remove(libraryInfoQe1);
|
|
|
+
|
|
|
+ QueryWrapper<LibraryInfo> libraryInfoQe2 = new QueryWrapper<>();
|
|
|
+ libraryInfoQe2.eq("concept_id", removeConceptInfoVO.getConceptId());
|
|
|
+ LibraryInfo libraryInfo = new LibraryInfo();
|
|
|
+ libraryInfo.setIsDeleted("Y");
|
|
|
+ libraryInfo.setGmtModified(now);
|
|
|
+ libraryInfo.setModifier(currentUser);
|
|
|
+ libraryinfoFacade.update(libraryInfo, libraryInfoQe2);
|
|
|
+
|
|
|
+ Concept concept = new Concept();
|
|
|
+ concept.setId(removeConceptInfoVO.getConceptId());
|
|
|
+ concept.setIsDeleted("Y");
|
|
|
+ concept.setModifier(currentUser);
|
|
|
+ concept.setGmtModified(now);
|
|
|
+ this.updateById(concept);
|
|
|
+
|
|
|
+ return true;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
- * 删除医学术语信息
|
|
|
- *
|
|
|
- * @param termVo
|
|
|
- * @return ConceptDTO
|
|
|
- *
|
|
|
+ * 获取医学术语命名详情
|
|
|
+ * @param getConceptInfoDetailVO
|
|
|
+ * @return libName-标准术语,otherNames-同义词
|
|
|
*/
|
|
|
- public ConceptDTO removeConceptInfo(TermVo termVo) {
|
|
|
-
|
|
|
- ConceptDTO conceptDTO = getConcept(termVo);
|
|
|
- KnowledgeVo knowledgeVo = new KnowledgeVo();
|
|
|
-
|
|
|
- if (conceptDTO == null) {
|
|
|
- conceptDTO = new ConceptDTO();
|
|
|
- String msg = "概念\"" + termVo.getTerm() + "\"不存在!";
|
|
|
- conceptDTO.setMessage(new ArrayList<String>());
|
|
|
- conceptDTO.getMessage().add(msg);
|
|
|
-
|
|
|
- return conceptDTO;
|
|
|
- }
|
|
|
- else {
|
|
|
- knowledgeVo.setTerm(termVo.getTerm());
|
|
|
- knowledgeVo.setType(termVo.getType());
|
|
|
- conceptDTO = libraryDetailFacade.getConceptKnowledge(knowledgeVo);
|
|
|
- if (conceptDTO.getInformation() != null && conceptDTO.getInformation().size() > 0) {
|
|
|
- String msg = "概念\"" + termVo.getTerm() + "\"的静态知识还存在!";
|
|
|
- conceptDTO.setMessage(new ArrayList<String>());
|
|
|
- conceptDTO.getMessage().add(msg);
|
|
|
-
|
|
|
- return conceptDTO;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- return conceptDTO;
|
|
|
+ public Map<String,List<GetConceptInfoDetailDTO>> getConceptInfoDetail(GetConceptInfoDetailVO getConceptInfoDetailVO){
|
|
|
+ QueryWrapper<LibraryInfo> libraryInfoQe = new QueryWrapper<LibraryInfo>();
|
|
|
+ libraryInfoQe.eq("concept_id", getConceptInfoDetailVO.getConceptId());
|
|
|
+ libraryInfoQe.eq("is_deleted", "N");
|
|
|
+ libraryInfoQe.orderByAsc("order_no");
|
|
|
+ List<LibraryInfo> libraryInfoList = libraryinfoFacade.list(libraryInfoQe);
|
|
|
+
|
|
|
+ Map<String,List<GetConceptInfoDetailDTO>> retMap = new HashMap<>();
|
|
|
+ retMap.put("otherNames", BeanUtil.listCopyTo(libraryInfoList.stream().filter(i->i.getIsConcept()==null||i.getIsConcept()==0).collect(Collectors.toList()), GetConceptInfoDetailDTO.class));
|
|
|
+ retMap.put("libName", BeanUtil.listCopyTo(libraryInfoList.stream().filter(i->i.getIsConcept()!=null&&i.getIsConcept()==1).collect(Collectors.toList()), GetConceptInfoDetailDTO.class));
|
|
|
+
|
|
|
+ return retMap;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
- * 获取概念Id
|
|
|
- *
|
|
|
- * @param term
|
|
|
- * @return Integer
|
|
|
+ * 医学术语命名添加或者编辑
|
|
|
+ * 说明:1、不允许单个非标准术语添加
|
|
|
+ *
|
|
|
+ * @param addConceptInfoVO
|
|
|
+ * @return
|
|
|
*/
|
|
|
- public int getConceptId(String term, String type) {
|
|
|
- int id = 0;
|
|
|
- TermVo termVo = new TermVo();
|
|
|
+ public Boolean addConceptInfo(AddConceptInfoVO addConceptInfoVO){
|
|
|
+ if(addConceptInfoVO.getDetailList().stream().distinct().count()!=addConceptInfoVO.getDetailList().size()){
|
|
|
+ throw new CommonException(CommonErrorCode.RPC_ERROR,"存在重复数据("+addConceptInfoVO.getName()+")");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<AddConceptInfoDetailVO> addConceptInfoDetailVOMainList = addConceptInfoVO.getDetailList().stream().filter(i->i.getIsConcept()==1).collect(Collectors.toList());
|
|
|
+ if(addConceptInfoDetailVOMainList.size()==0){
|
|
|
+ throw new CommonException(CommonErrorCode.RPC_ERROR,"无标准术语("+addConceptInfoVO.getName()+")");
|
|
|
+ }
|
|
|
+ if(addConceptInfoDetailVOMainList.size()>1){
|
|
|
+ throw new CommonException(CommonErrorCode.RPC_ERROR,"标准术语只能有一个("+addConceptInfoVO.getName()+")");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<LibraryInfo> saveOrUpdateLibraryInfoList = new ArrayList<>();
|
|
|
+
|
|
|
+ AddConceptInfoDetailVO addConceptInfoDetailVOMain = addConceptInfoDetailVOMainList.get(0);//提交过来的标准术语
|
|
|
+
|
|
|
+ //查询当前添加的术语是否已经在数据库中
|
|
|
+ QueryWrapper<LibraryInfo> libraryInfoQe1 = new QueryWrapper<>();
|
|
|
+ libraryInfoQe1.eq("type", addConceptInfoVO.getType());
|
|
|
+ libraryInfoQe1.in("name", addConceptInfoVO.getDetailList().stream().map(i->i.getName()).collect(Collectors.toList()));
|
|
|
+ List<LibraryInfo> libraryInfoList = libraryinfoFacade.list(libraryInfoQe1);
|
|
|
+
|
|
|
+ String currentUser = UserUtils.getCurrentPrincipleID();
|
|
|
+ Date now = DateUtil.now();
|
|
|
+
|
|
|
+ Map<String,LibraryInfo> libraryInfoMap = libraryInfoList.stream().collect(Collectors.toMap(LibraryInfo::getName, i->i));
|
|
|
+ LibraryInfo libraryInfoMain = libraryInfoMap.get(addConceptInfoDetailVOMain.getName());
|
|
|
+ Concept concept = new Concept();
|
|
|
+ Long conceptId = null;
|
|
|
+ int oldlibraryInfoCount = 0;
|
|
|
+ boolean isUpdateConcept = false;
|
|
|
+ if(libraryInfoMain==null){
|
|
|
+ libraryInfoMain = new LibraryInfo();
|
|
|
+ BeanUtil.copyProperties(addConceptInfoDetailVOMain, libraryInfoMain);
|
|
|
+ libraryInfoMain.setGmtCreated(now);
|
|
|
+ libraryInfoMain.setCreator(currentUser);
|
|
|
+ libraryInfoMain.setGmtModified(now);
|
|
|
+ libraryInfoMain.setModifier(currentUser);
|
|
|
+ libraryInfoMain.setType(addConceptInfoVO.getType());
|
|
|
+ libraryinfoFacade.save(libraryInfoMain);
|
|
|
+ concept.setLibId(libraryInfoMain.getId());
|
|
|
+ concept.setGmtCreated(now);
|
|
|
+ concept.setCreator(currentUser);
|
|
|
+ concept.setGmtModified(now);
|
|
|
+ concept.setModifier(currentUser);
|
|
|
+ save(concept);
|
|
|
+ conceptId = concept.getId();
|
|
|
+ libraryInfoMain.setConceptId(conceptId);
|
|
|
+ }else{
|
|
|
+ if(libraryInfoMain.getIsDeleted().equals("N")&&libraryInfoMain.getIsConcept()==0
|
|
|
+ &&(libraryInfoList.stream().filter(i->i.getIsDeleted().equals("N")).count()==1||libraryInfoList.stream().filter(i->i.getIsDeleted().equals("N")).map(i->i.getConceptId()).distinct().count()>1)){
|
|
|
+ QueryWrapper<LibraryInfo> libraryInfoQe2 = new QueryWrapper<>();
|
|
|
+ libraryInfoQe2.eq("is_deleted", "N");
|
|
|
+ libraryInfoQe2.eq("is_concept", 1);
|
|
|
+ libraryInfoQe2.eq("concept_id", libraryInfoMain.getConceptId());
|
|
|
+ LibraryInfo libraryInfo = libraryinfoFacade.getOne(libraryInfoQe2);
|
|
|
+ if(libraryInfo!=null){
|
|
|
+ throw new CommonException(CommonErrorCode.RPC_ERROR,"标准术语已作为同义词被概念"+libraryInfo.getName()+"-"+libraryInfo.getType()+"占用");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ conceptId = libraryInfoMain.getConceptId();
|
|
|
+ concept.setId(conceptId);
|
|
|
+
|
|
|
+ if(libraryInfoMain.getIsDeleted().equals("Y")
|
|
|
+ ||(libraryInfoMain.getIsDeleted().equals("N")&&libraryInfoMain.getIsConcept()==0)
|
|
|
+ ||!(StringUtil.isBlank(libraryInfoMain.getRemark())?"":libraryInfoMain.getRemark()).equals((StringUtil.isBlank(addConceptInfoDetailVOMain.getRemark())?"":addConceptInfoDetailVOMain.getRemark()))){
|
|
|
+ concept.setLibId(libraryInfoMain.getId());
|
|
|
+ concept.setIsDeleted("N");
|
|
|
+ concept.setGmtModified(now);
|
|
|
+ concept.setModifier(currentUser);
|
|
|
+
|
|
|
+ libraryInfoMain.setIsDeleted("N");
|
|
|
+ libraryInfoMain.setIsConcept(1);
|
|
|
+ libraryInfoMain.setGmtModified(now);
|
|
|
+ libraryInfoMain.setModifier(currentUser);
|
|
|
+ libraryInfoMain.setRemark(addConceptInfoDetailVOMain.getRemark());
|
|
|
+
|
|
|
+ isUpdateConcept = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ QueryWrapper<LibraryInfo> libraryInfoQe2 = new QueryWrapper<>();
|
|
|
+ libraryInfoQe2.eq("concept_id", conceptId);
|
|
|
+ libraryInfoQe2.ne("id", libraryInfoMain.getId());
|
|
|
+ oldlibraryInfoCount = libraryinfoFacade.count(libraryInfoQe2);
|
|
|
+ libraryinfoFacade.remove(libraryInfoQe2);
|
|
|
+ }
|
|
|
+
|
|
|
+ StringBuffer sbf = new StringBuffer();
|
|
|
+ for(AddConceptInfoDetailVO i:addConceptInfoVO.getDetailList()){
|
|
|
+ if(i.getIsConcept()==1){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ LibraryInfo libraryInfo = libraryInfoMap.get(i.getName());
|
|
|
+ if(libraryInfo==null){
|
|
|
+ libraryInfo = new LibraryInfo();
|
|
|
+ libraryInfo.setGmtCreated(now);
|
|
|
+ libraryInfo.setCreator(currentUser);
|
|
|
+ libraryInfo.setGmtModified(now);
|
|
|
+ libraryInfo.setModifier(currentUser);
|
|
|
+ isUpdateConcept = true;
|
|
|
+ }else if(libraryInfo.getIsDeleted().equals("Y")){
|
|
|
+ libraryInfo.setGmtModified(now);
|
|
|
+ libraryInfo.setModifier(currentUser);
|
|
|
+ isUpdateConcept = true;
|
|
|
+ }else if(libraryInfo.getConceptId().intValue()!=conceptId.intValue()){
|
|
|
+ sbf.append(i.getName()).append(" ");
|
|
|
+ continue;
|
|
|
+ }else if(!(StringUtil.isBlank(i.getRemark())?"":i.getRemark()).equals((StringUtil.isBlank(libraryInfo.getRemark())?"":libraryInfo.getRemark()))){
|
|
|
+ libraryInfo.setGmtModified(now);
|
|
|
+ libraryInfo.setModifier(currentUser);
|
|
|
+ isUpdateConcept = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ libraryInfo.setName(i.getName());
|
|
|
+ libraryInfo.setIsConcept(0);
|
|
|
+ libraryInfo.setIsDeleted("N");
|
|
|
+ libraryInfo.setRemark(i.getRemark());
|
|
|
+ saveOrUpdateLibraryInfoList.add(libraryInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(sbf.length()>0){
|
|
|
+ sbf.append("已被占用");
|
|
|
+ throw new CommonException(CommonErrorCode.RPC_ERROR,sbf.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新前后同义词个数不一样,修改更新时间
|
|
|
+ if(oldlibraryInfoCount!=saveOrUpdateLibraryInfoList.size()){
|
|
|
+ isUpdateConcept = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ for(LibraryInfo i : saveOrUpdateLibraryInfoList){
|
|
|
+ i.setId(null);
|
|
|
+ i.setConceptId(conceptId);
|
|
|
+ i.setType(addConceptInfoVO.getType());
|
|
|
+ }
|
|
|
+ saveOrUpdateLibraryInfoList.add(libraryInfoMain);
|
|
|
+
|
|
|
+ libraryInfoService.saveOrUpdateBatch(saveOrUpdateLibraryInfoList);
|
|
|
+
|
|
|
+ if(isUpdateConcept){
|
|
|
+ concept.setGmtModified(now);
|
|
|
+ concept.setModifier(currentUser);
|
|
|
+ updateById(concept);
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 医学术语命名excel文件导入
|
|
|
+ * @param file
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Boolean conceptInfoExcelIm(MultipartFile file) {
|
|
|
+ List<AddConceptInfoVO> addConceptInfoVOList = new ArrayList<>();
|
|
|
+ StringBuffer sbf = new StringBuffer();
|
|
|
+ InputStream inputStream = null;
|
|
|
+ Workbook wb = null;
|
|
|
try {
|
|
|
- termVo.setTerm(term);
|
|
|
- termVo.setType(type);
|
|
|
- ConceptDTO conceptDTO = getConcept(termVo);
|
|
|
- if (conceptDTO != null) {
|
|
|
- id = conceptDTO.getId();
|
|
|
+ if (!file.isEmpty()) {
|
|
|
+ inputStream = file.getInputStream();
|
|
|
+ if (inputStream.available() > 512000) {
|
|
|
+ sbf.append("文件最大支持500KB!").append("<br/>");
|
|
|
+ } else {
|
|
|
+ String fileName = file.getOriginalFilename();
|
|
|
+ if (fileName.lastIndexOf(".") != -1) {
|
|
|
+ String type = fileName.substring(fileName.lastIndexOf("."));
|
|
|
+ if (type.equals(".xls")) {
|
|
|
+ wb = new HSSFWorkbook(inputStream);
|
|
|
+ } else if (type.equals(".xlsx")) {
|
|
|
+ wb = new XSSFWorkbook(inputStream);
|
|
|
+ }
|
|
|
+ if (wb != null) {
|
|
|
+
|
|
|
+ Sheet sheet = wb.getSheetAt(0);
|
|
|
+ int count = 0;
|
|
|
+ String libName, libType, otherNames, remark;
|
|
|
+ for (Row row : sheet) {
|
|
|
+ count++;
|
|
|
+ if (count == 1 || row == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ libName = getValue(row.getCell(0)).trim().replace(" ", "");
|
|
|
+ libType = getValue(row.getCell(1)).trim().replace(" ", "");
|
|
|
+ otherNames = getValue(row.getCell(2)).trim().replace(" ", "");
|
|
|
+ remark = getValue(row.getCell(3)).trim().replace(" ", "");
|
|
|
+ if(StringUtil.isEmpty(libName) && StringUtil.isEmpty(libType)
|
|
|
+ && StringUtil.isEmpty(otherNames) && StringUtil.isEmpty(remark)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (StringUtil.isEmpty(libName) || StringUtil.isEmpty(libType) || StringUtil.isEmpty(otherNames)) {
|
|
|
+ sbf.append("第" + count + "行数据不完整;").append("<br/>");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ AddConceptInfoVO addConceptInfoVO = new AddConceptInfoVO();
|
|
|
+ addConceptInfoVO.setName(libName);
|
|
|
+ addConceptInfoVO.setType(libType);
|
|
|
+ List<AddConceptInfoDetailVO> detailList = new ArrayList<>();
|
|
|
+ for(String nm:otherNames.split(",")){
|
|
|
+ if(StringUtil.isBlank(nm)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ AddConceptInfoDetailVO addConceptInfoDetailVO = new AddConceptInfoDetailVO();
|
|
|
+ addConceptInfoDetailVO.setName(nm);
|
|
|
+ addConceptInfoDetailVO.setType(libType);
|
|
|
+ if(libName.equals(nm)){
|
|
|
+ addConceptInfoDetailVO.setIsConcept(1);
|
|
|
+ addConceptInfoDetailVO.setRemark(remark);
|
|
|
+ }else{
|
|
|
+ addConceptInfoDetailVO.setIsConcept(0);
|
|
|
+ }
|
|
|
+ detailList.add(addConceptInfoDetailVO);
|
|
|
+ }
|
|
|
+ addConceptInfoVO.setDetailList(detailList);
|
|
|
+ addConceptInfoVOList.add(addConceptInfoVO);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ sbf.append("非excel文件无法解析!").append("<br/>");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ sbf.append("未知文件无法解析!").append("<br/>");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ sbf.append("无文件上传!").append("<br/>");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ sbf.append("解析失败!").append("<br/>");
|
|
|
+ } finally {
|
|
|
+ try {
|
|
|
+ if (wb != null) {
|
|
|
+ wb.close();
|
|
|
+ }
|
|
|
+ if (inputStream != null) {
|
|
|
+ inputStream.close();
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
}
|
|
|
}
|
|
|
- catch (Exception ex) {
|
|
|
- ex.printStackTrace();
|
|
|
+
|
|
|
+ /*****************excel文件本身问题提醒************************/
|
|
|
+ if(sbf.length()>0){
|
|
|
+ throw new CommonException(CommonErrorCode.RPC_ERROR,sbf.toString());
|
|
|
}
|
|
|
- finally {
|
|
|
- return id;
|
|
|
+
|
|
|
+ /****************excel文件中所有术语存在重复提示---名字和类型一样即重复***********************/
|
|
|
+ List<AddConceptInfoDetailVO> addConceptInfoDetailVOList = new ArrayList<>();
|
|
|
+ addConceptInfoVOList.forEach(i->{
|
|
|
+ addConceptInfoDetailVOList.addAll(i.getDetailList());
|
|
|
+ });
|
|
|
+ Map<String,List<AddConceptInfoDetailVO>> addConceptInfoDetailVOListMap = addConceptInfoDetailVOList.stream().collect(Collectors.groupingBy(AddConceptInfoDetailVO::getName));
|
|
|
+ for(String key : addConceptInfoDetailVOListMap.keySet()){
|
|
|
+ if(addConceptInfoDetailVOListMap.get(key).size()>1&&addConceptInfoDetailVOListMap.get(key).stream().map(i->i.getType()).distinct().count()==1){
|
|
|
+ sbf.append(key).append(" ");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(sbf.length()>0){
|
|
|
+ sbf.append("(术语存在重复)");
|
|
|
+ throw new CommonException(CommonErrorCode.RPC_ERROR,sbf.toString());
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 从文件批量导入术语信息
|
|
|
- *
|
|
|
- * @param file
|
|
|
- * @return ConceptDTO
|
|
|
- */
|
|
|
- public ConceptDTO importBatch(MultipartFile file) {
|
|
|
- ImportExcel.setConceptFacade(this);
|
|
|
- ImportExcel.setLibraryinfoFacade(libraryinfoFacade);
|
|
|
- ImportExcel.setLibraryDetailFacade(libraryDetailFacade);
|
|
|
- ImportExcel.setMedicalFacade(medicalFacade);
|
|
|
- ImportExcel.setRelationFacade(relationFacade);
|
|
|
-
|
|
|
- ConceptDTO conceptDTO = ImportExcel.importBatch(file);
|
|
|
|
|
|
- return conceptDTO;
|
|
|
+ addConceptInfoVOList.forEach(i->{
|
|
|
+ addConceptInfo(i);
|
|
|
+ });
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("deprecation")
|
|
|
+ private String getValue(Cell cell) {
|
|
|
+ try {
|
|
|
+ Object obj = null;
|
|
|
+ switch (cell.getCellTypeEnum()) {
|
|
|
+ case BOOLEAN:
|
|
|
+ obj = cell.getBooleanCellValue();
|
|
|
+ break;
|
|
|
+ case ERROR:
|
|
|
+ obj = cell.getErrorCellValue();
|
|
|
+ break;
|
|
|
+ case NUMERIC:
|
|
|
+ if (HSSFDateUtil.isCellDateFormatted(cell)) {
|
|
|
+ Date date = cell.getDateCellValue();
|
|
|
+ obj = DateFormatUtils.format(date, "yyyy-MM-dd");
|
|
|
+ } else {
|
|
|
+ obj = cell.getNumericCellValue();
|
|
|
+ DecimalFormat df = new DecimalFormat("0");
|
|
|
+ obj = df.format(obj);
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ case STRING:
|
|
|
+ obj = cell.getStringCellValue();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return obj.toString();
|
|
|
+ } catch (Exception e) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
|
|
|
}
|