瀏覽代碼

术语关联维护及多层关联维护修改

rgb 5 年之前
父節點
當前提交
bf5c98369a

+ 76 - 0
knowledgeman-service/src/main/java/com/diagbot/dto/OnlyByRootListDTO.java

@@ -0,0 +1,76 @@
+package com.diagbot.dto;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description
+ * @author rgb
+ * @time 2018年12月5日下午5:00:34
+ */
+@Getter
+@Setter
+public class OnlyByRootListDTO {
+	
+	/**
+     * 医学标准术语id
+     */
+	@ApiModelProperty(value="医学标准术语id")
+    private Long conceptId;
+    
+    /**
+     * 医学标准术语名称
+     */
+	@ApiModelProperty(value="医学标准术语名称")
+    private String libName;
+	
+	/**
+	 * 医学标准术语类型id
+	 */
+	@ApiModelProperty(value="医学标准术语类型id")
+	private Long libTypeId;
+    
+    /**
+     * 医学标准术语类型
+     */
+	@ApiModelProperty(value="医学标准术语类型")
+    private String libType;
+	
+	/**
+	 * 医学标准术语名称(医学标准术语类型)
+	 */
+	private String libNameType;
+    
+    /**
+     * 关联术语
+     */
+	@ApiModelProperty(value="关联术语")
+    private String otherNames;
+    
+    /**
+     * 操作人
+     */
+	@ApiModelProperty(value="操作人")
+    private String operName;
+    
+    /**
+     * 操作时间
+     */
+	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value="操作时间")
+    private Date operTime;
+    
+	/**
+     * 状态:Y-已删除,N-启用中
+     */
+	@ApiModelProperty(value="状态:Y-已删除,N-启用中")
+	private String isDeleted;
+    
+    
+
+}

+ 88 - 0
knowledgeman-service/src/main/java/com/diagbot/dto/SingleRelationListDTO.java

@@ -0,0 +1,88 @@
+package com.diagbot.dto;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description
+ * @author rgb
+ * @time 2018年12月5日下午5:00:34
+ */
+@Getter
+@Setter
+public class SingleRelationListDTO {
+	
+	/**
+     * 医学标准术语id
+     */
+	@ApiModelProperty(value="医学标准术语id")
+    private Long conceptId;
+    
+    /**
+     * 医学标准术语名称
+     */
+	@ApiModelProperty(value="医学标准术语名称")
+    private String libName;
+    
+	/**
+	 * 医学标准术语类型id
+	 */
+	@ApiModelProperty(value="医学标准术语类型id")
+	private Long libTypeId;
+	
+    /**
+     * 医学标准术语类型
+     */
+	@ApiModelProperty(value="医学标准术语类型")
+    private String libType;
+	
+	/**
+	 * 医学标准术语名称(医学标准术语类型)
+	 */
+	private String libNameType;
+	
+	/**
+	 * 关系模块类型编码
+	 */
+    @ApiModelProperty(value="关系模块类型编码")
+    private String relationModelTypeCode;
+    
+    /**
+     * 关系模块类型名称
+     */
+    @ApiModelProperty(value="关系模块类型名称")
+    private String relationModelTypeName;
+    
+    /**
+     * 关联术语
+     */
+	@ApiModelProperty(value="关联术语")
+    private String otherNames;
+    
+    /**
+     * 操作人
+     */
+	@ApiModelProperty(value="操作人")
+    private String operName;
+    
+    /**
+     * 操作时间
+     */
+	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value="操作时间")
+    private Date operTime;
+    
+	/**
+     * 状态:Y-已删除,N-启用中
+     */
+	@ApiModelProperty(value="状态:Y-已删除,N-启用中")
+	private String isDeleted;
+    
+    
+
+}

+ 11 - 37
knowledgeman-service/src/main/java/com/diagbot/facade/MultContactFacade.java

@@ -1,28 +1,20 @@
 package com.diagbot.facade;
 
-import java.util.Arrays;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.stream.Collectors;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.client.UserServiceClient;
-import com.diagbot.dto.MultContactListDTO;
+import com.diagbot.dto.OnlyByRootListDTO;
 import com.diagbot.dto.RespDTO;
-import com.diagbot.entity.Concept;
-import com.diagbot.enums.IsDeleteEnum;
-import com.diagbot.enums.LexiconTypeEnum;
 import com.diagbot.service.impl.RelationServiceImpl;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
-import com.diagbot.util.StringUtil;
-import com.diagbot.vo.MultContactListVO;
+import com.diagbot.vo.OnlyByRootListVO;
 
 /**
  * @Description: 医学术语关联业务层
@@ -34,45 +26,27 @@ public class MultContactFacade extends RelationServiceImpl {
 
     @Autowired
     private UserServiceClient userServiceClient;
-    @Autowired
-    private ConceptFacade conceptFacade;
 
     /**
      * 医学术语多层关联维护-列表
      * @param multContactListVO
      * @return
      */
-    public IPage<MultContactListDTO> multContactList(MultContactListVO multContactListVO) {
-    	if(StringUtil.isNotBlank(multContactListVO.getName())||StringUtil.isNotBlank(multContactListVO.getType())){
-    		QueryWrapper<Concept> conceptQe = new QueryWrapper<>();
-    		conceptQe.eq("is_deleted", IsDeleteEnum.N.getKey());
-    		conceptQe.like(StringUtil.isNotBlank(multContactListVO.getName()),"lib_name", multContactListVO.getName());
-        	conceptQe.eq(StringUtil.isNotBlank(multContactListVO.getType()),"lib_type", LexiconTypeEnum.getKey(multContactListVO.getType()));
-        	multContactListVO.setRootNodeConceptIds(conceptFacade.list(conceptQe).stream().map(i->i.getId()).collect(Collectors.toList()));
-    	}
+    public IPage<OnlyByRootListDTO> multContactList(OnlyByRootListVO onlyByRootListVO) {
+    	
+    	IPage<OnlyByRootListDTO> ipage = this.baseMapper.onlyByRootList(onlyByRootListVO);
     	
-        IPage<MultContactListDTO> multContactListDTOPage = this.baseMapper.multContactList(multContactListVO);
-        
-        if(ListUtil.isNotEmpty(multContactListDTOPage.getRecords())){
-        	List<String> userIds = multContactListDTOPage.getRecords().stream().map(i -> i.getOperName()).distinct().collect(Collectors.toList());
+    	if(ListUtil.isNotEmpty(ipage.getRecords())){
+    		List<String> userIds = ipage.getRecords().stream().map(i -> i.getOperName()).distinct().collect(Collectors.toList());
         	RespDTO<Map<String, String>> respDTO = userServiceClient.getUserInfoByIds(userIds);
         	RespDTOUtil.respNGDealCover(respDTO, "获取用户信息失败");
         	
-        	Set<Long> otherIds = new HashSet<>();
-        	otherIds.addAll(Arrays.asList(multContactListDTOPage.getRecords().stream().map(i->i.getOtherIds()).collect(Collectors.joining(",")).split(",")).stream().map(i->Long.parseLong(i)).collect(Collectors.toList()));
-        	otherIds.addAll(multContactListDTOPage.getRecords().stream().map(i->i.getConceptId()).collect(Collectors.toList()));
-        	Map<Long,Concept> conceptMap = conceptFacade.listByIds(otherIds).stream().collect(Collectors.toMap(Concept::getId, i->i));
-        	
-        	multContactListDTOPage.getRecords().forEach(i->{
+        	ipage.getRecords().forEach(i->{
         		i.setOperName(respDTO.data.get(i.getOperName()));
-        		i.setLibName(conceptMap.get(i.getConceptId()).getLibName());
-        		i.setLibType(LexiconTypeEnum.getName(conceptMap.get(i.getConceptId()).getLibType().intValue()));
-        		i.setLibNameType(i.getLibName()+"("+i.getLibType()+")");
-        		i.setOtherNames(Arrays.asList(i.getOtherIds().split(",")).stream().map(k->conceptMap.get(Long.parseLong(k)).getLibName()).collect(Collectors.joining(",")));
         	});
-        }
-        
-        return multContactListDTOPage;
+    	}
+
+    	return ipage;
     }
 
 }

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

@@ -13,9 +13,9 @@ import org.springframework.stereotype.Component;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.client.UserServiceClient;
-import com.diagbot.dto.RelationContactListDTO;
 import com.diagbot.dto.RelationNodeDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.SingleRelationListDTO;
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.Relation;
 import com.diagbot.entity.RelationOrder;
@@ -31,9 +31,9 @@ import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.UserUtils;
 import com.diagbot.vo.RelationContactDetailVO;
-import com.diagbot.vo.RelationContactListVO;
 import com.diagbot.vo.RelationNodeVO;
 import com.diagbot.vo.RemoveRelationContactVO;
+import com.diagbot.vo.SingleRelationListVO;
 
 /**
  * @Description: 医学术语关联业务层
@@ -61,8 +61,8 @@ public class RelationContactFacade extends RelationServiceImpl {
      * @param relationContactListVO
      * @return
      */
-    public IPage<RelationContactListDTO> relationContactList(RelationContactListVO relationContactListVO) {
-    	IPage<RelationContactListDTO> ipage = this.baseMapper.relationContactList(relationContactListVO);
+    public IPage<SingleRelationListDTO> relationContactList(SingleRelationListVO singleRelationListVO) {
+    	IPage<SingleRelationListDTO> ipage = this.baseMapper.singleRelationList(singleRelationListVO);
         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);

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

@@ -9,13 +9,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.GetRelationInfoListDTO;
 import com.diagbot.dto.LisSonContactListDTO;
 import com.diagbot.dto.MultContactListDTO;
+import com.diagbot.dto.OnlyByRootListDTO;
 import com.diagbot.dto.RelationContactListDTO;
 import com.diagbot.dto.RelationNodeDTO;
+import com.diagbot.dto.SingleRelationListDTO;
 import com.diagbot.entity.Relation;
 import com.diagbot.vo.GetRelationInfoListVO;
 import com.diagbot.vo.LisSonContactListVO;
 import com.diagbot.vo.MultContactListVO;
+import com.diagbot.vo.OnlyByRootListVO;
 import com.diagbot.vo.RelationContactListVO;
+import com.diagbot.vo.SingleRelationListVO;
 
 /**
  * <p>
@@ -31,10 +35,39 @@ public interface RelationMapper extends BaseMapper<Relation> {
 	
 	List<RelationNodeDTO> getRelationNodeDTOs(@Param(value="conceptId")Long conceptId,@Param(value="relationId")Long relationId);
 	
+	/**
+	 * 单层关联分页查询
+	 * @param relationContactListVO
+	 * @return
+	 */
 	IPage<RelationContactListDTO> relationContactList(RelationContactListVO relationContactListVO);
 	
+	/**
+	 * 多层关联分页查询
+	 * @param multContactListVO
+	 * @return
+	 */
 	IPage<MultContactListDTO> multContactList(MultContactListVO multContactListVO);
 	
+	/**
+	 * 化验子项分页查询
+	 * @param lisSonContactListVO
+	 * @return
+	 */
 	IPage<LisSonContactListDTO> lisSonContactList(LisSonContactListVO lisSonContactListVO);
 	
+	/**
+	 * 起始术语类型id、终点术语类型id、关系类型id
+	 * @param singleRelationListVO
+	 * @return
+	 */
+	IPage<SingleRelationListDTO> singleRelationList(SingleRelationListVO singleRelationListVO);
+	
+	/**
+	 * 根节点术语类型id集合(起始术语类型id集合)、关系类型id
+	 * @param onlyByRootListVO
+	 * @return
+	 */
+	IPage<OnlyByRootListDTO> onlyByRootList(OnlyByRootListVO onlyByRootListVO);
+	
 }

+ 46 - 0
knowledgeman-service/src/main/java/com/diagbot/vo/OnlyByRootListVO.java

@@ -0,0 +1,46 @@
+package com.diagbot.vo;
+
+import java.util.List;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: Weixuan Huang
+ * @time: 2019/3/14 16:03
+ */
+@SuppressWarnings({ "serial", "rawtypes" })
+@Getter
+@Setter
+public class OnlyByRootListVO extends Page {
+    
+    /**
+     * 标准术语名称
+     */
+    @ApiModelProperty(value="标准术语名称")
+    private String name;
+    
+    /**
+     * 根节点术语类型id集合(起始术语类型id集合)
+     */
+    @NotEmpty(message="根节点术语类型id集合(起始术语类型id集合)必传")
+    @ApiModelProperty(value="根节点术语类型id集合(起始术语类型id集合)")
+    private List<Long> startTypeIds;
+    
+    /**
+     * 关系类型id
+     */
+    @NotNull(message="关系类型id必传")
+    @ApiModelProperty(value="关系类型id")
+    private Long relationId;
+
+    
+    
+}

+ 56 - 0
knowledgeman-service/src/main/java/com/diagbot/vo/SingleRelationListVO.java

@@ -0,0 +1,56 @@
+package com.diagbot.vo;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: Weixuan Huang
+ * @time: 2019/3/14 16:03
+ */
+@SuppressWarnings({ "serial", "rawtypes" })
+@Getter
+@Setter
+public class SingleRelationListVO extends Page {
+    
+    /**
+     * 标准术语名称
+     */
+    @ApiModelProperty(value="标准术语名称")
+    private String name;
+    
+    /**
+     * 关系模块类型:科室常用、化验常用、辅检常用、诊断关联量表
+     */
+    @NotBlank(message="关系模块类型必传")
+    @ApiModelProperty(value="关系模块类型:科室常用、化验常用、辅检常用、诊断关联量表")
+    private String relationModelType;
+
+    /**
+     * 起始术语类型id
+     */
+    @ApiModelProperty(value="起始术语类型id")
+    private Long startTypeId;
+    
+    /**
+     * 终点术语类型id
+     */
+    @ApiModelProperty(value="终点术语类型id")
+    private Long endTypeId;
+    
+    /**
+     * 关系类型id
+     */
+    @NotNull(message="关系类型id必传")
+    @ApiModelProperty(value="关系类型id")
+    private Long relationId;
+    
+    
+    
+}

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

@@ -1,26 +1,28 @@
 package com.diagbot.web;
 
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
-import com.diagbot.dto.MultContactListDTO;
+import com.diagbot.dto.OnlyByRootListDTO;
 import com.diagbot.dto.RelationNodeDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.MultContactFacade;
 import com.diagbot.facade.RelationContactFacade;
-import com.diagbot.vo.MultContactListVO;
+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;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.validation.Valid;
 
 /**
  * <p>
@@ -44,8 +46,8 @@ public class MultContactController {
     @ApiOperation(value = "知识库标准化-医学术语多层关联维护-列表[by:rengb]")
     @PostMapping("/multContactList")
     @SysLogger("multContactList")
-    public RespDTO<IPage<MultContactListDTO>> multContactList(@RequestBody MultContactListVO multContactListVO) {
-        return RespDTO.onSuc(multContactFacade.multContactList(multContactListVO));
+    public RespDTO<IPage<OnlyByRootListDTO>> multContactList(@Valid @RequestBody OnlyByRootListVO onlyByRootListVO) {
+        return RespDTO.onSuc(multContactFacade.multContactList(onlyByRootListVO));
     }
 
     @ApiOperation(value = "知识库标准化-医学术语多层关联维护-添加或者编辑[by:rengb]")

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

@@ -1,25 +1,27 @@
 package com.diagbot.web;
 
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
-import com.diagbot.dto.RelationContactListDTO;
 import com.diagbot.dto.RelationNodeDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.SingleRelationListDTO;
 import com.diagbot.facade.RelationContactFacade;
 import com.diagbot.vo.RelationContactDetailVO;
-import com.diagbot.vo.RelationContactListVO;
 import com.diagbot.vo.RelationNodeVO;
 import com.diagbot.vo.RemoveRelationContactVO;
+import com.diagbot.vo.SingleRelationListVO;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.validation.Valid;
 
 /**
  * <p>
@@ -41,8 +43,8 @@ public class RelationContactController {
     @ApiOperation(value = "医学术语关联维护-列表[by:rengb]")
     @PostMapping("/relationContactList")
     @SysLogger("relationContactList")
-    public RespDTO<IPage<RelationContactListDTO>> relationContactList(@RequestBody RelationContactListVO relationContactListVO) {
-        return RespDTO.onSuc(relationContactFacade.relationContactList(relationContactListVO));
+    public RespDTO<IPage<SingleRelationListDTO>> relationContactList(@Valid @RequestBody SingleRelationListVO singleRelationListVO) {
+        return RespDTO.onSuc(relationContactFacade.relationContactList(singleRelationListVO));
     }
 
     @ApiOperation(value = "知识库标准化-医学术语关联维护-添加或者编辑[by:rengb]")

+ 60 - 35
knowledgeman-service/src/main/resources/mapper/RelationMapper.xml

@@ -113,41 +113,6 @@
 		ORDER BY isDeleted ASC,operTime DESC
     </select>
     
-    <!-- <select id="multContactList" resultType="com.diagbot.dto.MultContactListDTO">
-    	SELECT
-			*
-		FROM
-		(SELECT
-		t2.id AS conceptId,
-		t2.lib_name AS libName,
-		t4.name AS libType,
-		CONCAT(t2.lib_name,'(',t4.name,')') AS libNameType,
-		GROUP_CONCAT(t3.lib_name ORDER BY t5.order_no ASC,t1.gmt_modified DESC) AS otherNames,
-		t1.modifier AS operName,
-		MAX(t1.gmt_modified) AS operTime,
-		t1.is_deleted AS isDeleted
-		FROM
-		(SELECT
-		a.*
-		FROM
-		(SELECT * FROM kl_relation WHERE relation_id=17) a
-		JOIN kl_relation_order b ON a.id=b.t_relation_id
-		LEFT JOIN (SELECT * FROM kl_relation WHERE relation_id=17) c
-		ON a.start_id=c.end_id
-		WHERE c.id IS NULL) t1
-		JOIN kl_concept t2 ON t1.start_id=t2.id
-		JOIN kl_concept t3 ON t1.end_id=t3.id
-		JOIN kl_lexicon t4 ON t2.lib_type=t4.id
-		LEFT JOIN kl_relation_order t5 ON t1.id=t5.t_relation_id
-		where t2.is_deleted='N' AND t3.is_deleted='N' AND t4.is_deleted='N'
-		GROUP BY t2.id) tab
-		where 1=1
-		<if test="name!=null and name!=''">
-			and libNameType like concat('%',#{name},'%')
-		</if>
-		ORDER BY isDeleted ASC,operTime DESC
-    </select> -->
-    
     <select id="multContactList" resultType="com.diagbot.dto.MultContactListDTO">
     	SELECT 
 		a.start_id AS conceptId,
@@ -208,5 +173,65 @@
 		ORDER BY isDeleted ASC,operTime DESC
     </select>
     
+    <select id="singleRelationList" resultType="com.diagbot.dto.SingleRelationListDTO">
+    	SELECT
+		d.id AS conceptId,
+		d.lib_name AS libName,
+		d.lib_type AS libTypeId,
+		CONCAT(d.lib_type,"-",e.lib_type) AS relationModelTypeCode,
+		GROUP_CONCAT(e.lib_name ORDER BY f.order_no ASC) AS otherNames,
+		a.modifier AS operName,
+		a.gmt_modified AS operTime,
+		a.is_deleted AS isDeleted
+		FROM
+		(SELECT id,is_deleted,gmt_modified,modifier,start_id,end_id FROM kl_relation WHERE relation_id=#{relationId} AND is_deleted='N') a
+		LEFT JOIN 
+		(SELECT end_id FROM kl_relation WHERE relation_id=#{relationId} AND is_deleted='N') b
+		ON a.start_id=b.end_id
+		LEFT JOIN 
+		(SELECT start_id FROM kl_relation WHERE relation_id=#{relationId} AND is_deleted='N') c
+		ON a.end_id=c.start_id
+		JOIN 
+		(SELECT id,lib_name,lib_type FROM kl_concept WHERE is_deleted='N' AND lib_type=#{startTypeId} AND lib_name LIKE CONCAT("%",#{name},"%")) d
+		ON a.start_id=d.id
+		JOIN
+		(SELECT id,lib_name,lib_type FROM kl_concept WHERE is_deleted='N' AND lib_type=#{endTypeId}) e
+		ON a.end_id=e.id
+		LEFT JOIN kl_relation_order f ON a.id=f.t_relation_id
+		WHERE b.end_id IS NULL AND c.start_id IS NULL
+		GROUP BY d.id
+		ORDER BY operTime DESC
+    </select>
+    
+    <select id="onlyByRootList" resultType="com.diagbot.dto.OnlyByRootListDTO">
+    	SELECT
+		c.id AS conceptId,
+		c.lib_name AS libName,
+		c.lib_type AS libTypeId,
+		GROUP_CONCAT(d.lib_name ORDER BY e.order_no ASC) AS otherNames,
+		a.modifier AS operName,
+		a.gmt_modified AS operTime,
+		a.is_deleted AS isDeleted
+		FROM
+		(SELECT id,is_deleted,gmt_modified,modifier,start_id,end_id FROM kl_relation WHERE relation_id=#{relationId} AND is_deleted='N') a
+		LEFT JOIN 
+		(SELECT end_id FROM kl_relation WHERE relation_id=#{relationId} AND is_deleted='N') b
+		ON a.start_id=b.end_id
+		JOIN 
+		(SELECT id,lib_name,lib_type FROM kl_concept WHERE is_deleted='N' 
+		AND lib_type in 
+		<foreach collection="startTypeIds" open="(" close=")" separator="," item="startTypeId">
+			#{startTypeId}
+		</foreach>
+		AND lib_name LIKE CONCAT("%",#{name},"%")) c
+		ON a.start_id=c.id
+		JOIN kl_concept d ON a.end_id=d.id
+		LEFT JOIN kl_relation_order e ON a.id=e.t_relation_id
+		WHERE b.end_id IS NULL
+		GROUP BY c.id
+		ORDER BY operTime DESC
+    </select>
+    
+    
 
 </mapper>