Procházet zdrojové kódy

关联维护修改

rgb před 5 roky
rodič
revize
09cfad8f75

+ 18 - 0
knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -1322,4 +1322,22 @@ public class ConceptFacade extends ConceptServiceImpl {
         }
         return res;
     }
+    
+    /**
+     * 筛选符合类型的概念id
+     * @param libTypeId
+     * @param sourceConceptIds
+     * @return
+     */
+    public List<Long> getCompatibleTypeConceptIds(Long libTypeId,List<Long> sourceConceptIds){
+    	if(libTypeId==null||ListUtil.isEmpty(sourceConceptIds)){
+    		return null;
+    	}
+    	QueryWrapper<Concept> conceptQe = new QueryWrapper<>();
+    	conceptQe.in("id", sourceConceptIds);
+    	conceptQe.eq("lib_type", libTypeId);
+    	return list(conceptQe).stream().map(i->i.getId()).collect(Collectors.toList());
+    }
+    
+    
 }

+ 74 - 38
knowledgeman-service/src/main/java/com/diagbot/facade/RelationContactFacade.java

@@ -31,10 +31,13 @@ import com.diagbot.util.DateUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.UserUtils;
+import com.diagbot.vo.DeleteRelationContactVO;
 import com.diagbot.vo.RelationContactDetailVO;
 import com.diagbot.vo.RelationNodeVO;
 import com.diagbot.vo.RemoveRelationContactVO;
 import com.diagbot.vo.SingleRelationListVO;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 
 /**
  * @Description: 医学术语关联业务层
@@ -91,12 +94,14 @@ public class RelationContactFacade extends RelationServiceImpl {
 		if(relationNodeVO.getConceptId()==null){
 			throw new CommonException(CommonErrorCode.RPC_ERROR,"conceptId必填!");
 		}
-		if(relationNodeVO.getNodeList()==null||relationNodeVO.getNodeList().size()==0){
+		if(ListUtil.isEmpty(relationNodeVO.getNodeList())){
 			throw new CommonException(CommonErrorCode.RPC_ERROR,"nodeList不能为空!");
 		}
 		
-		List<Long> relationIdList = repairRelationDataForDelBeforeAdd(relationNodeVO.getConceptId(), relationNodeVO.getSonRelationId());
+		List<Long> relationIdList = repairRelationDataForDelBeforeAdd(relationNodeVO.getConceptId(),relationNodeVO);
 		if(ListUtil.isNotEmpty(relationIdList)){
+			removeByIds(relationIdList);
+			
 			QueryWrapper<RelationOrder> relationOrderQe = new QueryWrapper<>();
 			relationOrderQe.in("t_relation_id", relationIdList);
 			relationOrderFacade.remove(relationOrderQe);
@@ -105,7 +110,7 @@ public class RelationContactFacade extends RelationServiceImpl {
 		List<List<Relation>> relationGroupList = repairRelationDataForAdd(relationNodeVO);
 		String currentUser = UserUtils.getCurrentPrincipleID();
         Date now = DateUtil.now();
-        List<Relation> relationList = new ArrayList<>();
+        List<Relation> relationList = Lists.newArrayList();
         relationGroupList.forEach(i->{
         	i.forEach(j->{
         		j.setCreator(currentUser);
@@ -118,7 +123,7 @@ public class RelationContactFacade extends RelationServiceImpl {
         relationService.saveOrUpdateBatch(relationList);
         
         if(relationNodeVO.getIsOrderBy()==1){
-        	List<RelationOrder> relationOrderList = new ArrayList<>();
+        	List<RelationOrder> relationOrderList = Lists.newArrayList();
         	relationGroupList.forEach(i->{
         		int orderNo = 0;
             	for(Relation j : i){
@@ -141,30 +146,38 @@ public class RelationContactFacade extends RelationServiceImpl {
 	
 	/**
 	 * 处理关系节点-添加或者编辑前先删除掉
-	 * @param conceptId
-	 * @param relationId
+	 * @param conceptId 当前概念id
+	 * @param relationNodeVO
 	 * @return
 	 */
-	private List<Long> repairRelationDataForDelBeforeAdd(Long conceptId,Long relationId){
-		List<Long> relationIdList = new ArrayList<>();
+	private List<Long> repairRelationDataForDelBeforeAdd(Long conceptId,RelationNodeVO relationNodeVO){
+		List<Long> relationIdList = Lists.newArrayList();
 		
 		QueryWrapper<Relation> relationQe = new QueryWrapper<>();
 		relationQe.eq("start_id", conceptId);
-		relationQe.eq(relationId!=null,"relation_id", relationId);
+		relationQe.eq(relationNodeVO!=null&&relationNodeVO.getSonRelationId()!=null,"relation_id", relationNodeVO.getSonRelationId());
 		List<Relation> relationList = list(relationQe);
 		
-		if(relationList.size()==0){
-			return relationIdList;
-		}
-		
-		relationIdList.addAll(relationList.stream().map(i->i.getId()).collect(Collectors.toList()));
-		
-		relationList.forEach(i->{
-			relationIdList.addAll(repairRelationDataForDelBeforeAdd(i.getEndId(),relationId));
-		});
-		
-		if(!remove(relationQe)){
-			throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
+		if(ListUtil.isNotEmpty(relationList)){
+			if(relationNodeVO!=null&&relationNodeVO.getSonTypeId()!=null){
+				List<Long> conceptIdList = conceptFacade.getCompatibleTypeConceptIds(relationNodeVO.getSonTypeId(), relationList.stream().map(i->i.getEndId()).collect(Collectors.toList()));
+	        	if(conceptIdList!=null){
+	        		relationList = relationList.stream().filter(i->conceptIdList.contains(i.getEndId())).collect(Collectors.toList());
+	        	}
+			}
+			
+			if(ListUtil.isNotEmpty(relationList)){
+				relationIdList.addAll(relationList.stream().map(i->i.getId()).collect(Collectors.toList()));
+				
+				Map<Long,RelationNodeVO> conceptIdRnMap = Maps.newHashMap();
+				if(relationNodeVO!=null&&ListUtil.isNotEmpty(relationNodeVO.getNodeList())){
+					conceptIdRnMap = relationNodeVO.getNodeList().stream().collect(Collectors.toMap(RelationNodeVO::getConceptId, i->i));
+				}
+				
+				for(Relation i : relationList){
+					relationIdList.addAll(repairRelationDataForDelBeforeAdd(i.getEndId(),conceptIdRnMap.get(i.getEndId())));
+				}
+			}
 		}
 		
 		return relationIdList;
@@ -176,10 +189,10 @@ public class RelationContactFacade extends RelationServiceImpl {
 	 * @return
 	 */
 	private List<List<Relation>> repairRelationDataForAdd(RelationNodeVO relationNodeVO){
-		List<List<Relation>> retList = new ArrayList<>();
+		List<List<Relation>> retList = Lists.newArrayList();
 		
-		if(relationNodeVO.getNodeList()!=null&&relationNodeVO.getNodeList().size()>0){
-			List<Relation> relationList = new ArrayList<>();
+		if(ListUtil.isNotEmpty(relationNodeVO.getNodeList())){
+			List<Relation> relationList = Lists.newArrayList();
 			relationNodeVO.getNodeList().forEach(i->{
 				Relation relation = new Relation();
 				relation.setStartId(relationNodeVO.getConceptId());
@@ -187,7 +200,7 @@ public class RelationContactFacade extends RelationServiceImpl {
 				relation.setRelationId(i.getRelationId());
 				relationList.add(relation);
 				
-				if(i.getNodeList()!=null&&i.getNodeList().size()>0){
+				if(ListUtil.isNotEmpty(i.getNodeList())){
 					retList.addAll(repairRelationDataForAdd(i));
 				}
 			});
@@ -213,7 +226,7 @@ public class RelationContactFacade extends RelationServiceImpl {
 		relationNodeDTO.setConceptNameType(concept.getLibName()+"("+LexiconTypeEnum.getName(concept.getLibType().intValue())+")");
 		relationNodeDTO.setIsDeletedConcept(concept.getIsDeleted());
 		
-		relationNodeDTO.setNodeList(repairRelationDataForQuery(relationContactDetailVO.getConceptId(), relationContactDetailVO.getRelationId(),null,concept.getIsDeleted()));
+		relationNodeDTO.setNodeList(repairRelationDataForQuery(relationContactDetailVO.getConceptId(),relationContactDetailVO.getRelationIds(),relationContactDetailVO.getTypeIds(),null,concept.getIsDeleted()));
 		
 		return relationNodeDTO;
 	}
@@ -221,18 +234,26 @@ public class RelationContactFacade extends RelationServiceImpl {
 	/**
 	 * 处理关系节点-查询事件
 	 * @param conceptId
-	 * @param relationId
+	 * @param relationIds
+	 * @param typeIds
 	 * @param hookConceptIds
 	 * @param isDeletedParent
 	 * @return
 	 */
-	private List<RelationNodeDTO> repairRelationDataForQuery(Long conceptId,Long relationId,List<Long> hookConceptIds,String isDeletedParent){
+	private List<RelationNodeDTO> repairRelationDataForQuery(Long conceptId,List<Long> relationIds,List<Long> typeIds,List<Long> hookConceptIds,String isDeletedParent){
 		if(hookConceptIds==null){
 			hookConceptIds = new ArrayList<>();
 			hookConceptIds.add(conceptId);
 		}
 		
-		List<RelationNodeDTO> relationNodeDTOList = this.baseMapper.getRelationNodeDTOs(conceptId,relationId);
+		Long relationId = null,endTypeId = null;
+		if(ListUtil.isNotEmpty(relationIds)){
+			relationId = relationIds.remove(0);
+		}
+		if(ListUtil.isNotEmpty(typeIds)){
+			endTypeId = typeIds.remove(0);
+		}
+		List<RelationNodeDTO> relationNodeDTOList = this.baseMapper.getRelationNodeDTOs(conceptId,relationId,endTypeId);
 		
 		for(RelationNodeDTO i : relationNodeDTOList){
 			i.setConceptTypeName(LexiconTypeEnum.getName(i.getConceptTypeId().intValue()));
@@ -245,7 +266,7 @@ public class RelationContactFacade extends RelationServiceImpl {
 				List<Long> hookConceptIds_ = new ArrayList<>();
 				hookConceptIds_.addAll(hookConceptIds);
 				hookConceptIds_.add(i.getConceptId());
-				i.setNodeList(repairRelationDataForQuery(i.getConceptId(), relationId,hookConceptIds_,i.getIsDeletedConcept()));
+				i.setNodeList(repairRelationDataForQuery(i.getConceptId(),relationIds,typeIds,hookConceptIds_,i.getIsDeletedConcept()));
 			}
 		}
 		
@@ -314,8 +335,8 @@ public class RelationContactFacade extends RelationServiceImpl {
 	 * @param removeRelationContactVO
 	 * @return
 	 */
-	public Boolean deleteRelationContact(RemoveRelationContactVO removeRelationContactVO){
-		repairRelationDataForDelete(removeRelationContactVO.getConceptId(), removeRelationContactVO.getRelationId());
+	public Boolean deleteRelationContact(DeleteRelationContactVO deleteRelationContactVO){
+		repairRelationDataForDelete(deleteRelationContactVO.getConceptId(), deleteRelationContactVO.getRelationIds(),deleteRelationContactVO.getTypeIds());
 		return true;
 	}
 	
@@ -324,24 +345,39 @@ public class RelationContactFacade extends RelationServiceImpl {
 	 * @param conceptId
 	 * @param relationId
 	 */
-	private void repairRelationDataForDelete(Long conceptId,Long relationId){
+	private void repairRelationDataForDelete(Long conceptId,List<Long> relationIds,List<Long> typeIds){
+		Long relationId = null,endTypeId = null;
+		if(ListUtil.isNotEmpty(relationIds)){
+			relationId = relationIds.remove(0);
+		}
+		if(ListUtil.isNotEmpty(typeIds)){
+			endTypeId = typeIds.remove(0);
+		}
+		
 		QueryWrapper<Relation> relationQe = new QueryWrapper<>();
 		relationQe.eq("start_id", conceptId);
 		relationQe.eq(relationId!=null,"relation_id", relationId);
 		List<Relation> relationList = list(relationQe);
 		
-		if(relationList.size()==0){
+		if(endTypeId!=null&&ListUtil.isNotEmpty(relationList)){
+			List<Long> conceptIdList = conceptFacade.getCompatibleTypeConceptIds(endTypeId,relationList.stream().map(i->i.getEndId()).collect(Collectors.toList()));
+        	relationList = relationList.stream().filter(i->conceptIdList.contains(i.getEndId())).collect(Collectors.toList());
+		}
+		
+		if(ListUtil.isEmpty(relationList)){
 			return;
 		}
 		
+		List<Long> removeRelationIds = relationList.stream().map(i->i.getId()).collect(Collectors.toList());
+		
 		QueryWrapper<RelationOrder> relationOrderQe = new QueryWrapper<>();
-		relationOrderQe.in("t_relation_id", relationList.stream().map(i->i.getId()).collect(Collectors.toList()));
-		if(!remove(relationQe)||!relationOrderFacade.remove(relationOrderQe)){
+		relationOrderQe.in("t_relation_id", removeRelationIds);
+		if(!removeByIds(removeRelationIds)||!relationOrderFacade.remove(relationOrderQe)){
 			throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
 		}
 		
-		relationList.forEach(i->{
-			repairRelationDataForDelete(i.getEndId(), relationId);
+		removeRelationIds.forEach(i->{
+			repairRelationDataForDelete(i, relationIds, typeIds);
 		});
 	}
 

+ 1 - 1
knowledgeman-service/src/main/java/com/diagbot/mapper/RelationMapper.java

@@ -29,7 +29,7 @@ public interface RelationMapper extends BaseMapper<Relation> {
 	
 	IPage<GetRelationInfoListDTO> getRelationInfoList(GetRelationInfoListVO getRelationInfoListVO);
 	
-	List<RelationNodeDTO> getRelationNodeDTOs(@Param(value="conceptId")Long conceptId,@Param(value="relationId")Long relationId);
+	List<RelationNodeDTO> getRelationNodeDTOs(@Param(value="conceptId")Long conceptId,@Param(value="relationId")Long relationId,@Param(value="endTypeId")Long endTypeId);
 	
 	/**
 	 * 化验子项分页查询

+ 40 - 0
knowledgeman-service/src/main/java/com/diagbot/vo/DeleteRelationContactVO.java

@@ -0,0 +1,40 @@
+package com.diagbot.vo;
+
+import java.util.List;
+
+import javax.validation.constraints.NotNull;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: Weixuan Huang
+ * @time: 2019/3/14 16:03
+ */
+@Getter
+@Setter
+public class DeleteRelationContactVO {
+    
+    /**
+     * 概念id
+     */
+	@ApiModelProperty(value="概念id",required=true)
+	@NotNull(message="概念id必传")
+    private Long conceptId;
+	
+	/**
+	 * 各级关系类型id集合
+	 */
+	@ApiModelProperty(value="各级关系类型id集合")
+	private List<Long> relationIds;
+	
+	/**
+	 * 各级终点术语类型id集合
+	 */
+	@ApiModelProperty(value="各级终点术语类型id集合")
+	private List<Long> typeIds;
+	
+    
+}

+ 11 - 3
knowledgeman-service/src/main/java/com/diagbot/vo/RelationContactDetailVO.java

@@ -1,5 +1,7 @@
 package com.diagbot.vo;
 
+import java.util.List;
+
 import javax.validation.constraints.NotNull;
 
 import io.swagger.annotations.ApiModelProperty;
@@ -23,9 +25,15 @@ public class RelationContactDetailVO {
     private Long conceptId;
 	
 	/**
-	 * 关系id
+	 * 各级关系类型id集合
+	 */
+	@ApiModelProperty(value="各级关系类型id集合")
+	private List<Long> relationIds;
+	
+	/**
+	 * 各级终点术语类型id集合
 	 */
-	@ApiModelProperty(value="关系id")
-	private Long relationId;
+	@ApiModelProperty(value="各级终点术语类型id集合")
+	private List<Long> typeIds;
     
 }

+ 4 - 4
knowledgeman-service/src/main/java/com/diagbot/vo/RelationNodeVO.java

@@ -19,10 +19,10 @@ public class RelationNodeVO {
 	 */
 	private Long conceptId;
 	
-//	/**
-//	 * 上一级概念id end_id
-//	 */
-//	private Long parentConceptId;
+	/**
+	 * 下一级概念类型id
+	 */
+	private Long sonTypeId;
 	
 	/**
 	 * 当前概念(起点术语) 与 上一级概念(终点术语) 关系id

+ 3 - 3
knowledgeman-service/src/main/java/com/diagbot/web/MultContactController.java

@@ -16,10 +16,10 @@ import com.diagbot.dto.RelationNodeDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.MultContactFacade;
 import com.diagbot.facade.RelationContactFacade;
+import com.diagbot.vo.DeleteRelationContactVO;
 import com.diagbot.vo.OnlyByRootListVO;
 import com.diagbot.vo.RelationContactDetailVO;
 import com.diagbot.vo.RelationNodeVO;
-import com.diagbot.vo.RemoveRelationContactVO;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -69,8 +69,8 @@ public class MultContactController {
     @PostMapping("/removeRelationContact")
     @SysLogger("removeRelationContact")
     @Transactional
-    public RespDTO<Boolean> removeRelationContact(@Valid @RequestBody RemoveRelationContactVO removeRelationContactVO) {
-        return RespDTO.onSuc(relationContactFacade.deleteRelationContact(removeRelationContactVO));
+    public RespDTO<Boolean> removeRelationContact(@Valid @RequestBody DeleteRelationContactVO deleteRelationContactVO) {
+        return RespDTO.onSuc(relationContactFacade.deleteRelationContact(deleteRelationContactVO));
     }
 
 }

+ 3 - 3
knowledgeman-service/src/main/java/com/diagbot/web/RelationContactController.java

@@ -15,9 +15,9 @@ import com.diagbot.dto.RelationNodeDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.SingleRelationListDTO;
 import com.diagbot.facade.RelationContactFacade;
+import com.diagbot.vo.DeleteRelationContactVO;
 import com.diagbot.vo.RelationContactDetailVO;
 import com.diagbot.vo.RelationNodeVO;
-import com.diagbot.vo.RemoveRelationContactVO;
 import com.diagbot.vo.SingleRelationListVO;
 
 import io.swagger.annotations.Api;
@@ -66,8 +66,8 @@ public class RelationContactController {
     @PostMapping("/removeRelationContact")
     @SysLogger("removeRelationContact")
     @Transactional
-    public RespDTO<Boolean> removeRelationContact(@Valid @RequestBody RemoveRelationContactVO removeRelationContactVO) {
-        return RespDTO.onSuc(relationContactFacade.deleteRelationContact(removeRelationContactVO));
+    public RespDTO<Boolean> removeRelationContact(@Valid @RequestBody DeleteRelationContactVO deleteRelationContactVO) {
+        return RespDTO.onSuc(relationContactFacade.deleteRelationContact(deleteRelationContactVO));
     }
 
 }

+ 3 - 0
knowledgeman-service/src/main/resources/mapper/RelationMapper.xml

@@ -74,6 +74,9 @@
  		<if test="relationId!=null">
  			AND a.relation_id=#{relationId}
  		</if>
+ 		<if test="endTypeId!=null">
+ 			AND d.lib_type=#{endTypeId}
+ 		</if>
 		ORDER BY b.order_no ASC,a.gmt_modified DESC
     </select>