rgb 6 лет назад
Родитель
Сommit
ec7c326e02

+ 53 - 0
knowledgeman-service/src/main/java/com/diagbot/dto/RelationNodeDTO.java

@@ -0,0 +1,53 @@
+package com.diagbot.dto;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description
+ * @author rgb
+ * @time 2018年12月5日下午5:00:34
+ */
+@Getter
+@Setter
+public class RelationNodeDTO {
+	
+	/**
+	 * 当前概念id start_id
+	 */
+	private Long conceptId;
+	
+	/**
+	 * 当前概念名称
+	 */
+	private String conceptName;
+	
+	/**
+	 * 上一级概念id end_id
+	 */
+	private Long parentConceptId;
+	
+	/**
+	 * 上一级概念名称
+	 */
+	private String parentConceptName;
+	
+	/**
+	 * 当前概念(起点术语) 与 上一级概念(终点术语) 关系id
+	 */
+	private Long relationId;
+	
+	/**
+	 * 当前概念(起点术语) 与 上一级概念(终点术语) 关系名称
+	 */
+	private String relationName;
+	
+	/**
+	 * 下一级概念
+	 */
+	private List<RelationNodeDTO> nodeList;
+	
+
+}

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

@@ -1,8 +1,26 @@
 package com.diagbot.facade;
 
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.RelationNodeDTO;
+import com.diagbot.entity.Relation;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.RelationService;
 import com.diagbot.service.impl.RelationServiceImpl;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.UserUtils;
+import com.diagbot.vo.RelationContactDetailVO;
+import com.diagbot.vo.RelationNodeVO;
+import com.diagbot.vo.RemoveRelationContactVO;
 
 /**
  * @Description: 医学术语关联业务层
@@ -12,8 +30,145 @@ import com.diagbot.service.impl.RelationServiceImpl;
 @Component
 public class RelationContactFacade extends RelationServiceImpl {
 	
-    
-   
-    
+	@Autowired
+	private RelationFacade relationFacade;
+	@Autowired
+    @Qualifier("relationServiceImpl")
+    private RelationService relationService;
+
+	/**
+	 * 医学术语关联维护/医学术语多层关联维护/化验子项维护-添加或者编辑
+	 * @param relationNodeVO
+	 * @return
+	 */
+	public Boolean addRelation(RelationNodeVO relationNodeVO) {
+		List<Relation> relationList = repairRelationDataForAdd(relationNodeVO);
+		String currentUser = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+        relationList.forEach(i->{
+        	i.setCreator(currentUser);
+        	i.setGmtCreated(now);
+        	i.setModifier(currentUser);
+        	i.setGmtModified(now);
+        });
+		return relationService.saveOrUpdateBatch(relationList);
+	}
+	
+	/**
+	 * 处理关系节点-添加或者编辑事件
+	 * @param relationNodeVO
+	 * @return
+	 */
+	private List<Relation> repairRelationDataForAdd(RelationNodeVO relationNodeVO){
+		List<Relation> relationList = new ArrayList<>();
+		
+		if(relationNodeVO.getNodeList()!=null&&relationNodeVO.getNodeList().size()>0){
+			
+			QueryWrapper<Relation> relationQe = new QueryWrapper<>();
+			relationQe.eq("end_id", relationNodeVO.getConceptId());
+			if(relationNodeVO.getSonRelationId()!=null){
+				relationQe.eq("relation_id", relationNodeVO.getSonRelationId());
+				relationNodeVO.getNodeList().forEach(i->{
+					i.setRelationId(relationNodeVO.getSonRelationId());
+				});
+			}else{
+				relationQe.in("relation_id", relationNodeVO.getNodeList().stream().map(i->i.getRelationId()).distinct().collect(Collectors.toList()));
+			}
+			relationFacade.remove(relationQe);
+			
+			relationNodeVO.getNodeList().forEach(i->{
+				i.setParentConceptId(relationNodeVO.getConceptId());
+				relationList.addAll(repairRelationDataForAdd(i));
+			});
+		}else if(relationNodeVO.getParentConceptId()!=null){
+			Relation relation = new Relation();
+			relation.setStartId(relationNodeVO.getConceptId());
+			relation.setEndId(relationNodeVO.getParentConceptId());
+			relation.setRelationId(relationNodeVO.getRelationId());
+			relationList.add(relation);
+		}
+		
+		return relationList;
+	}
+	
+	/**
+	 * 医学术语关联维护/医学术语多层关联维护/化验子项维护-详情
+	 * @param relationContactDetailVO
+	 * @return
+	 */
+	public RelationNodeDTO relationContactDetail(RelationContactDetailVO relationContactDetailVO){
+		RelationNodeDTO relationNodeDTO = new RelationNodeDTO();
+		
+		relationNodeDTO.setNodeList(repairRelationDataForQuery(relationContactDetailVO.getConceptId(), relationContactDetailVO.getRelationId()));
+		
+		return relationNodeDTO;
+	}
+	
+	/**
+	 * 处理关系节点-查询事件
+	 * @param conceptId
+	 * @param relationId
+	 * @return
+	 */
+	private List<RelationNodeDTO> repairRelationDataForQuery(Long conceptId,Long relationId){
+		List<RelationNodeDTO> relationNodeDTOList = relationFacade.getBaseMapper().getRelationNodeDTOs(conceptId, relationId);
+		
+		relationNodeDTOList.forEach(i->{
+			i.setNodeList(repairRelationDataForQuery(i.getConceptId(), relationId));
+		});
+		
+		return relationNodeDTOList;
+	}
+	
+	/**
+	 * 医学术语关联维护/医学术语多层关联维护/化验子项维护-删除或者恢复
+	 * @param removeRelationContactVO
+	 * @return
+	 */
+	public Boolean removeRelationContact(RemoveRelationContactVO removeRelationContactVO){
+		repairRelationDataForDel(removeRelationContactVO.getConceptId(), removeRelationContactVO.getRelationId(),removeRelationContactVO.getIsDeleted());
+		return true;
+	}
+	
+	/**
+	 * 处理关系节点-删除/恢复事件
+	 * @param conceptId
+	 * @param relationId
+	 * @return
+	 */
+	private void repairRelationDataForDel(Long conceptId,Long relationId,String isDeleted){
+		QueryWrapper<Relation> relationQe = new QueryWrapper<>();
+		relationQe.eq("end_id", conceptId);
+		relationQe.eq(relationId!=null,"relation_id", relationId);
+		List<Relation> relationList = relationFacade.list(relationQe);
+		
+		if(relationList.size()==0){
+			return;
+		}
+		
+		if(relationList.stream().map(i->i.getIsDeleted()).distinct().count()>1){
+			throw new CommonException(CommonErrorCode.RPC_ERROR,"数据异常!");
+		}
+		
+		String isDeleted_ = relationList.get(0).getIsDeleted();
+		if(isDeleted.equals(isDeleted_)){
+    		if(isDeleted_.equals("Y")){
+    			throw new CommonException(CommonErrorCode.RPC_ERROR,"该数据已删除!");
+    		}
+    		if(isDeleted_.equals("N")){
+    			throw new CommonException(CommonErrorCode.RPC_ERROR,"该数据已恢复!");
+    		}
+    	}
+		
+		Relation relation = new Relation();
+		relation.setIsDeleted(isDeleted);
+		if(!relationFacade.update(relation, relationQe)){
+			throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
+		}
+		
+		relationList.forEach(i->{
+			repairRelationDataForDel(i.getStartId(), relationId,isDeleted);
+		});
+	}
 
 }

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

@@ -1,8 +1,11 @@
 package com.diagbot.mapper;
 
+import java.util.List;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.GetRelationInfoListDTO;
+import com.diagbot.dto.RelationNodeDTO;
 import com.diagbot.entity.Relation;
 import com.diagbot.vo.GetRelationInfoListVO;
 
@@ -19,4 +22,6 @@ public interface RelationMapper extends BaseMapper<Relation> {
 	
 	IPage<GetRelationInfoListDTO> getRelationInfoList(GetRelationInfoListVO getRelationInfoListVO);
 	
+	List<RelationNodeDTO> getRelationNodeDTOs(Long conceptId,Long relationId);
+	
 }

+ 31 - 0
knowledgeman-service/src/main/java/com/diagbot/vo/RelationContactDetailVO.java

@@ -0,0 +1,31 @@
+package com.diagbot.vo;
+
+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 RelationContactDetailVO {
+    
+    /**
+     * 概念id
+     */
+	@ApiModelProperty(value="概念id",required=true)
+	@NotNull(message="概念id必传")
+    private Long conceptId;
+	
+	/**
+	 * 关系id
+	 */
+	@ApiModelProperty(value="关系id")
+	private Long relationId;
+    
+}

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

@@ -0,0 +1,43 @@
+package com.diagbot.vo;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: Weixuan Huang
+ * @time: 2019/3/14 16:03
+ */
+@Getter
+@Setter
+public class RelationNodeVO {
+	
+	/**
+	 * 当前概念id start_id
+	 */
+	private Long conceptId;
+	
+	/**
+	 * 上一级概念id end_id
+	 */
+	private Long parentConceptId;
+	
+	/**
+	 * 当前概念(起点术语) 与 上一级概念(终点术语) 关系id
+	 */
+	private Long relationId;
+    
+	/**
+	 * 当前概念 与 下一级概念 关系id
+	 */
+	private Long sonRelationId;
+	
+	/**
+	 * 下一级概念
+	 */
+	private List<RelationNodeVO> nodeList;
+	
+    
+}

+ 39 - 0
knowledgeman-service/src/main/java/com/diagbot/vo/RemoveRelationContactVO.java

@@ -0,0 +1,39 @@
+package com.diagbot.vo;
+
+import javax.validation.constraints.NotBlank;
+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 RemoveRelationContactVO {
+    
+    /**
+     * 概念id
+     */
+	@ApiModelProperty(value="概念id",required=true)
+	@NotNull(message="概念id必传")
+    private Long conceptId;
+	
+	/**
+	 * 关系id
+	 */
+	@ApiModelProperty(value="关系id")
+	private Long relationId;
+	
+	/**
+     * 状态:Y-删除,N-恢复
+     */
+	@NotBlank(message="状态必填")
+	@ApiModelProperty(value="状态:Y-删除,N-恢复",required=true)
+	private String isDeleted;
+    
+}

+ 63 - 0
knowledgeman-service/src/main/java/com/diagbot/web/LisSonContactController.java

@@ -0,0 +1,63 @@
+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.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RelationNodeDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.RelationContactFacade;
+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;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Weixuan Huang
+ * @since 2019-01-30
+ */
+@RestController
+@RequestMapping("/lisSonContact")
+@SuppressWarnings("unchecked")
+@Api(value = "化验子项维护相关API", tags = { "化验子项维护相关API" })
+public class LisSonContactController {
+	
+    @Autowired
+    private RelationContactFacade relationContactFacade;
+    
+    @ApiOperation(value = "化验子项维护-添加或者编辑[by:rengb]")
+    @PostMapping("/addRelation")
+    @SysLogger("addRelation")
+    @Transactional
+    public RespDTO<Boolean> addRelation(@Valid @RequestBody RelationNodeVO relationNodeVO) {
+        return RespDTO.onSuc(relationContactFacade.addRelation(relationNodeVO));
+    }
+    
+    @ApiOperation(value = "化验子项维护-详情[by:rengb]")
+    @PostMapping("/relationContactDetail")
+    @SysLogger("relationContactDetail")
+    public RespDTO<RelationNodeDTO> relationContactDetail(@Valid @RequestBody RelationContactDetailVO relationContactDetailVO) {
+        return RespDTO.onSuc(relationContactFacade.relationContactDetail(relationContactDetailVO));
+    }
+    
+    @ApiOperation(value = "化验子项维护-删除或者恢复[by:rengb]")
+    @PostMapping("/removeRelationContact")
+    @SysLogger("removeRelationContact")
+    @Transactional
+    public RespDTO<Boolean> removeRelationContact(@Valid @RequestBody RemoveRelationContactVO removeRelationContactVO) {
+        return RespDTO.onSuc(relationContactFacade.removeRelationContact(removeRelationContactVO));
+    }
+    
+}

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

@@ -0,0 +1,63 @@
+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.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RelationNodeDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.RelationContactFacade;
+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;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Weixuan Huang
+ * @since 2019-01-30
+ */
+@RestController
+@RequestMapping("/multContact")
+@SuppressWarnings("unchecked")
+@Api(value = "医学术语多层关联维护相关API", tags = { "医学术语多层关联维护相关API" })
+public class MultContactController {
+	
+    @Autowired
+    private RelationContactFacade relationContactFacade;
+    
+    @ApiOperation(value = "医学术语多层关联维护-添加或者编辑[by:rengb]")
+    @PostMapping("/addRelation")
+    @SysLogger("addRelation")
+    @Transactional
+    public RespDTO<Boolean> addRelation(@Valid @RequestBody RelationNodeVO relationNodeVO) {
+        return RespDTO.onSuc(relationContactFacade.addRelation(relationNodeVO));
+    }
+    
+    @ApiOperation(value = "医学术语多层关联维护-详情[by:rengb]")
+    @PostMapping("/relationContactDetail")
+    @SysLogger("relationContactDetail")
+    public RespDTO<RelationNodeDTO> relationContactDetail(@Valid @RequestBody RelationContactDetailVO relationContactDetailVO) {
+        return RespDTO.onSuc(relationContactFacade.relationContactDetail(relationContactDetailVO));
+    }
+    
+    @ApiOperation(value = "医学术语多层关联维护-删除或者恢复[by:rengb]")
+    @PostMapping("/removeRelationContact")
+    @SysLogger("removeRelationContact")
+    @Transactional
+    public RespDTO<Boolean> removeRelationContact(@Valid @RequestBody RemoveRelationContactVO removeRelationContactVO) {
+        return RespDTO.onSuc(relationContactFacade.removeRelationContact(removeRelationContactVO));
+    }
+    
+}

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

@@ -1,12 +1,24 @@
 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.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RelationNodeDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.RelationContactFacade;
+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;
 
 /**
  * <p>
@@ -25,6 +37,27 @@ public class RelationContactController {
     @Autowired
     private RelationContactFacade relationContactFacade;
     
+    @ApiOperation(value = "医学术语关联维护-添加或者编辑[by:rengb]")
+    @PostMapping("/addRelation")
+    @SysLogger("addRelation")
+    @Transactional
+    public RespDTO<Boolean> addRelation(@Valid @RequestBody RelationNodeVO relationNodeVO) {
+        return RespDTO.onSuc(relationContactFacade.addRelation(relationNodeVO));
+    }
+    
+    @ApiOperation(value = "医学术语关联维护-详情[by:rengb]")
+    @PostMapping("/relationContactDetail")
+    @SysLogger("relationContactDetail")
+    public RespDTO<RelationNodeDTO> relationContactDetail(@Valid @RequestBody RelationContactDetailVO relationContactDetailVO) {
+        return RespDTO.onSuc(relationContactFacade.relationContactDetail(relationContactDetailVO));
+    }
     
+    @ApiOperation(value = "医学术语关联维护-删除或者恢复[by:rengb]")
+    @PostMapping("/removeRelationContact")
+    @SysLogger("removeRelationContact")
+    @Transactional
+    public RespDTO<Boolean> removeRelationContact(@Valid @RequestBody RemoveRelationContactVO removeRelationContactVO) {
+        return RespDTO.onSuc(relationContactFacade.removeRelationContact(removeRelationContactVO));
+    }
     
 }

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

@@ -48,5 +48,30 @@
 		</if>
 		ORDER BY isDeleted asc, operTime desc
     </select>
+    
+    <select id="getRelationNodeDTOs" resultType="com.diagbot.dto.RelationNodeDTO">
+    	SELECT
+			c.id AS conceptId,
+			c.lib_name AS conceptName,
+			d.id AS parentConceptId,
+			d.lib_name AS parentConceptName,
+			e.id AS relationId,
+			e.`name` AS relationName
+		FROM kl_relation a LEFT JOIN kl_relation_order b ON a.id=b.t_relation_id
+		JOIN kl_concept c ON a.start_id=c.id
+		JOIN kl_concept d ON a.end_id=d.id
+		JOIN kl_lexicon_relationship e ON a.relation_id=e.id
+		WHERE 1=1
+ 		AND a.is_deleted='N' 
+ 		AND b.is_deleted='N' 
+ 		AND c.is_deleted='N'
+ 		AND d.is_deleted='N'
+ 		AND e.is_deleted='N'
+ 		AND a.end_id=#{conceptId} 
+ 		<if test="relationId!=null">
+ 			AND a.relation_id=#{relationId}
+ 		</if>
+		ORDER BY b.order_no DESC,a.id ASC
+    </select>
 
 </mapper>