kongwz 4 سال پیش
والد
کامیت
21aa92d695

+ 52 - 0
cdssman-service/src/main/java/com/diagbot/dto/RelationNameDTO.java

@@ -0,0 +1,52 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:kongwz
+ * @time: 2021/3/8 16:15
+ */
+@Getter
+@Setter
+public class RelationNameDTO {
+    /**
+     * 开始conceptid
+     */
+    private Long startId;
+    /**
+     * 关系类型id
+     */
+    private Long relationId;
+    /**
+     * 开始概念名
+     */
+    private String startLibName;
+    /**
+     * 结束conceptid
+     */
+    private Long endId;
+    /**
+     * 结束概念名
+     */
+    private String endLibName;
+    /**
+     * 术语类型
+     */
+    private Long libType;
+    /**
+     * 药品通用名conceptid
+     */
+    private Long medId;
+    /**
+     * 药品通用名
+     */
+    private String medName;
+    /**
+     * 药品术语类型
+     */
+    private Long medLibType;
+}

+ 37 - 0
cdssman-service/src/main/java/com/diagbot/dto/RelationNamesDTO.java

@@ -0,0 +1,37 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:kongwz
+ * @time: 2021/3/8 16:15
+ */
+@Getter
+@Setter
+public class RelationNamesDTO {
+    /**
+     * 开始conceptid
+     */
+    private Long startId;
+    /**
+     * 关系类型id
+     */
+    private Long relationId;
+    /**
+     * 开始概念名
+     */
+    private String startLibName;
+
+    /**
+     * 结束概念名
+     */
+    private Map<Object,Object> data;
+    /**
+     * 下一级术语类型
+     */
+    private Long nextLibType;
+}

+ 147 - 12
cdssman-service/src/main/java/com/diagbot/facade/RelationContactFacade.java

@@ -1,6 +1,10 @@
 package com.diagbot.facade;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.RelationNameDTO;
+import com.diagbot.dto.RelationNamesDTO;
 import com.diagbot.dto.RelationNodeDTO;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.entity.KlRelation;
@@ -12,20 +16,22 @@ import com.diagbot.exception.CommonException;
 import com.diagbot.service.KlRelationService;
 import com.diagbot.service.impl.KlRelationOrderServiceImpl;
 import com.diagbot.service.impl.KlRelationServiceImpl;
-import com.diagbot.util.CryptUtil;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.UserUtils;
 import com.diagbot.vo.KlRelationNodeVO;
+import com.diagbot.vo.KlRelationSaveVO;
+import com.diagbot.vo.KlRelationVO;
 import com.diagbot.vo.RelationContactDetailVO;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import io.swagger.models.auth.In;
+import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
-import javax.management.relation.Relation;
-import javax.management.relation.RelationService;
+import javax.validation.constraints.NotNull;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -66,6 +72,15 @@ public class RelationContactFacade extends KlRelationServiceImpl {
         return relationNodeDTO;
     }
 
+    public RelationNodeDTO relationContactDetail(KlRelationVO klRelationVO) {
+        RelationNamesDTO relationNamesDTO = new RelationNamesDTO();
+        RelationNodeDTO relationNodeDTO = new RelationNodeDTO();
+        List<RelationNameDTO> relationNameDTOs_first = this.getRelationNameDTOs(klRelationVO.getConceptIds(), klRelationVO.getRelationId());
+
+
+        return relationNodeDTO;
+    }
+
     /**
      * 处理关系节点-查询事件
      *
@@ -120,6 +135,130 @@ public class RelationContactFacade extends KlRelationServiceImpl {
 
         return relationNodeDTOList;
     }
+    @DS("med")
+    @DSTransactional
+    public Boolean addRelation(List<KlRelationSaveVO> klRelationSaveVOs) {
+        if (ListUtil.isNotEmpty(klRelationSaveVOs)) {
+            KlRelationSaveVO klRelationSaveVO = klRelationSaveVOs.get(0);
+            Long sid = klRelationSaveVO.getSid();
+            List<Long> conceptid = Lists.newArrayList(sid);
+            Integer rid = klRelationSaveVO.getRid();
+            List<Long> sids = new ArrayList<>();
+            List<RelationNameDTO> relationNameDTOs = this.getRelationNameDTOs(conceptid, rid);
+            if (ListUtil.isNotEmpty(relationNameDTOs)) {
+                for (RelationNameDTO red : relationNameDTOs) {
+                    Long startId = red.getStartId();
+                    Long medId = red.getEndId();
+                    if (!sids.contains(startId)) {
+                        sids.add(startId);
+                    }
+                    if (!sids.contains(medId)) {
+                        sids.add(medId);
+                    }
+                }
+            }
+            List<KlRelation> relationList = this.list(new QueryWrapper<KlRelation>()
+                    .in("start_id", sids)
+                    .eq("relation_id", rid));
+            List<Long> ids = relationList.stream().map(x -> x.getId()).collect(Collectors.toList());
+            //先删除
+            if (ListUtil.isNotEmpty(ids)) {
+                this.removeByIds(ids);
+
+                QueryWrapper<KlRelationOrder> relationOrderQe = new QueryWrapper<>();
+                relationOrderQe.in("t_relation_id", ids);
+                klRelationOrderFacade.remove(relationOrderQe);
+            }
+            List<List<KlRelation>> relationGroupList = relationDataForAdd(klRelationSaveVOs);
+
+//            String currentUser = UserUtils.getCurrentPrincipleID();
+            Date now = DateUtil.now();
+            List<KlRelation> relationLists = Lists.newArrayList();
+            relationGroupList.forEach(i -> {
+                i.forEach(j -> {
+//                    j.setCreator(currentUser);
+                    j.setGmtCreate(now);
+//                    j.setModifier(currentUser);
+                    j.setGmtModified(now);
+                    relationLists.add(j);
+                });
+            });
+            klRelationService.saveBatch(relationLists);
+
+            List<KlRelationOrder> relationOrderList = Lists.newArrayList();
+            relationGroupList.forEach(i -> {
+                int orderNo = 0;
+                for (KlRelation j : i) {
+                    orderNo++;
+                    KlRelationOrder relationOrder = new KlRelationOrder();
+                    relationOrder.setOrderNo(orderNo);
+                    relationOrder.settRelationId(j.getId());
+                    relationOrder.setGmtCreate(now);
+                    relationOrder.setGmtModified(now);
+//                    relationOrder.setCreator(currentUser);
+//                    relationOrder.setModifier(currentUser);
+                    relationOrderList.add(relationOrder);
+                }
+            });
+            klRelationOrderServiceImpl.saveBatch(relationOrderList);
+
+        }
+
+        return true;
+    }
+
+    private List<List<KlRelation>> relationDataForAdd(List<KlRelationSaveVO> klRelationSaveVOs) {
+        List<List<KlRelation>> relationList = Lists.newArrayList();
+        Map<String, List<KlRelation>> relationMap = Maps.newHashMap();
+        if (ListUtil.isNotEmpty(klRelationSaveVOs)) {
+
+            for (KlRelationSaveVO kls : klRelationSaveVOs) {
+                Long sid = kls.getSid();
+                Integer rid = kls.getRid();
+                Long eid = kls.getEid();
+                Integer srid = kls.getSrid();
+                List<Long> eids = kls.getEids();
+                if(relationMap.containsKey(sid.toString()+"&"+rid.toString())){
+                    List<KlRelation> klRelations_big = relationMap.get(sid.toString() + "&" + rid.toString());
+                    KlRelation klRelation = new KlRelation();
+                    klRelation.setStartId(sid);
+                    klRelation.setRelationId(rid);
+                    klRelation.setEndId(eid);
+                    klRelation.setStatus(1);
+                    klRelations_big.add(klRelation);
+                    relationMap.put(sid.toString() + "&" + rid.toString(),klRelations_big);
+                }else {
+                    List<KlRelation> klRelations_big = Lists.newArrayList();
+                    KlRelation klRelation = new KlRelation();
+                    klRelation.setStartId(sid);
+                    klRelation.setRelationId(rid);
+                    klRelation.setEndId(eid);
+                    klRelation.setStatus(1);
+                    klRelations_big.add(klRelation);
+                    relationMap.put(sid.toString() + "&" + rid.toString(),klRelations_big);
+                }
+                if(srid != null && ListUtil.isNotEmpty(eids)){
+                    List<KlRelation> klRelations_sub = Lists.newArrayList();
+                    for (Long id:eids) {
+                        KlRelation klRelation = new KlRelation();
+                        klRelation.setStartId(eid);
+                        klRelation.setRelationId(srid);
+                        klRelation.setEndId(id);
+                        klRelation.setStatus(1);
+                        klRelations_sub.add(klRelation);
+                    }
+                    relationMap.put(eid.toString() + "&" + srid.toString(),klRelations_sub);
+                }
+            }
+        }
+        if(MapUtils.isNotEmpty(relationMap)){
+            relationMap.forEach((x,y)->{
+                relationList.add(y);
+            });
+        }
+
+        return relationList;
+    }
 
     /**
      * 医学术语关联维护/医学术语多层关联维护-添加或者编辑
@@ -186,20 +325,16 @@ public class RelationContactFacade extends KlRelationServiceImpl {
     /**
      * 处理关系节点-添加或者编辑前先删除掉
      *
-     * @param conceptId      当前概念id
+     * @param conceptId        当前概念id
      * @param klRelationNodeVO
      * @return
      */
     private List<Long> repairRelationDataForDelBeforeAdd(Long conceptId, KlRelationNodeVO klRelationNodeVO) {
         List<Long> relationIdList = Lists.newArrayList();
-        QueryWrapper<KlRelation> relationQe = new QueryWrapper<>();
-        relationQe.eq("start_id", conceptId);
-        if (klRelationNodeVO != null && klRelationNodeVO.getSonRelationId() != null) {
-            relationQe.eq("relation_id", klRelationNodeVO.getSonRelationId());
-        } else {
-            relationQe.eq("relation_id", -999999l);
-        }
-        List<KlRelation> relationList = this.list(relationQe);
+        List<KlRelation> relationList = this.list(new QueryWrapper<KlRelation>()
+                .eq("start_id", conceptId)
+                .eq("relation_id", klRelationNodeVO != null && klRelationNodeVO.getSonRelationId() != null ?
+                        klRelationNodeVO.getSonRelationId() : -999999l));
 
         if (ListUtil.isNotEmpty(relationList)) {
             if (klRelationNodeVO != null && klRelationNodeVO.getSonTypeId() != null) {

+ 4 - 0
cdssman-service/src/main/java/com/diagbot/mapper/KlRelationMapper.java

@@ -1,8 +1,10 @@
 package com.diagbot.mapper;
 
+import com.diagbot.dto.RelationNameDTO;
 import com.diagbot.dto.RelationNodeDTO;
 import com.diagbot.entity.KlRelation;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.vo.KlRelationVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -23,4 +25,6 @@ public interface KlRelationMapper extends BaseMapper<KlRelation> {
     List<RelationNodeDTO> getRelationNodeDTOs(@Param(value="conceptId")Long conceptId, @Param(value="relationId")Long relationId, @Param(value="endTypeId")Long endTypeId);
 
     List<MedClassMedDTO> getMedClassMedList();
+
+    List<RelationNameDTO> getRelationNameDTOs(@Param(value="conceptIds")List<Long> conceptIds,@Param(value="relationId")Integer relationId);
 }

+ 5 - 0
cdssman-service/src/main/java/com/diagbot/service/KlRelationService.java

@@ -1,8 +1,11 @@
 package com.diagbot.service;
 
 import com.diagbot.dto.MedClassMedDTO;
+import com.diagbot.dto.RelationNameDTO;
 import com.diagbot.entity.KlRelation;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.KlRelationVO;
+import io.swagger.models.auth.In;
 
 import java.util.List;
 
@@ -16,4 +19,6 @@ import java.util.List;
  */
 public interface KlRelationService extends IService<KlRelation> {
     List<MedClassMedDTO> getMedClassMedList();
+
+    List<RelationNameDTO> getRelationNameDTOs(List<Long> conceptIds, Integer relationId);
 }

+ 8 - 0
cdssman-service/src/main/java/com/diagbot/service/impl/KlRelationServiceImpl.java

@@ -3,9 +3,12 @@ package com.diagbot.service.impl;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.dto.MedClassMedDTO;
+import com.diagbot.dto.RelationNameDTO;
 import com.diagbot.entity.KlRelation;
 import com.diagbot.mapper.KlRelationMapper;
 import com.diagbot.service.KlRelationService;
+import com.diagbot.vo.KlRelationVO;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -24,4 +27,9 @@ public class KlRelationServiceImpl extends ServiceImpl<KlRelationMapper, KlRelat
     public List<MedClassMedDTO> getMedClassMedList() {
         return baseMapper.getMedClassMedList();
     }
+
+    @Override
+    public List<RelationNameDTO> getRelationNameDTOs(List<Long> conceptIds,Integer relationId) {
+        return baseMapper.getRelationNameDTOs(conceptIds,relationId);
+    }
 }

+ 38 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlRelationSaveVO.java

@@ -0,0 +1,38 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: Kongwz
+ * @time: 2021/3/8 16:03
+ */
+@Getter
+@Setter
+public class KlRelationSaveVO {
+	
+	/**
+	 * 当前概念id start_id
+	 */
+	/**
+	 * 概念id
+	 */
+	@ApiModelProperty(value="概念id",required=true)
+	@NotNull(message="概念开始id必传")
+	private Long sid;
+
+	/**
+	 * 关系id
+	 */
+	@ApiModelProperty(value="关系id",required=true)
+	@NotNull(message="关系id必传")
+	private Integer rid;
+	private Long eid;
+	private Integer srid;
+	private List<Long> eids;
+}

+ 41 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlRelationVO.java

@@ -0,0 +1,41 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: Kongwz
+ * @time: 2021/3/8 16:03
+ */
+@Getter
+@Setter
+public class KlRelationVO {
+	
+	/**
+	 * 当前概念id start_id
+	 */
+	/**
+	 * 概念id
+	 */
+	@ApiModelProperty(value="概念id",required=true)
+	@NotNull(message="概念id必传")
+	private List<Long> conceptIds;
+
+	
+	/**
+	 * 当前概念(起点术语) 与 上一级概念(终点术语) 关系id
+	 */
+	/**
+	 * 关系id
+	 */
+	@ApiModelProperty(value="关系id",required=true)
+	@NotNull(message="关系id必传")
+	private Integer relationId;
+    
+
+}

+ 14 - 7
cdssman-service/src/main/java/com/diagbot/web/MultContactController.java

@@ -6,9 +6,7 @@ import com.diagbot.dto.RelationNodeDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.KlConceptFacade;
 import com.diagbot.facade.RelationContactFacade;
-import com.diagbot.vo.GetAllForRelationVO;
-import com.diagbot.vo.KlRelationNodeVO;
-import com.diagbot.vo.RelationContactDetailVO;
+import com.diagbot.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,20 +28,24 @@ import java.util.List;
 @RequestMapping("/multContact")
 @SuppressWarnings("unchecked")
 @Api(value = "树形结构维护相关API", tags = { "知识库标准化-树形结构维护相关API" })
-public class MultContactController {
+public class TreeContactController {
     @Autowired
     private RelationContactFacade relationContactFacade;
     @Autowired
     private KlConceptFacade klConceptFacade;
 
 
-    @ApiOperation(value = "知识库标准化-树形结构维护相关API-详情[by:kongwz]")
+    @ApiOperation(value = "知识库标准化-树形结构维护相关API-详情(根据类别查询)[by:kongwz]")
     @PostMapping("/relationContactDetail")
     @SysLogger("relationContactDetail")
     public RespDTO<RelationNodeDTO> relationContactDetail(@Valid @RequestBody RelationContactDetailVO relationContactDetailVO) {
         return RespDTO.onSuc(relationContactFacade.relationContactDetail(relationContactDetailVO));
     }
 
+    /*public RespDTO<RelationNodeDTO> relationContactDetail(@Valid @RequestBody KlRelationVO klRelationVO) {
+        return RespDTO.onSuc(relationContactFacade.relationContactDetail(klRelationVO));
+    }*/
+
     @ApiOperation(value = "知识库标准化-获取所有概念(术语关系维护时筛选使用)[by:kongwz]")
     @PostMapping("/getAllForRelation")
     @SysLogger("getAllForRelation")
@@ -54,9 +56,14 @@ public class MultContactController {
     @ApiOperation(value = "知识库标准化-医学术语多层关联维护-添加或者编辑[by:kongwz]")
     @PostMapping("/addRelation")
     @SysLogger("addRelation")
-    @Transactional
-    public RespDTO<Boolean> addRelation(@Valid @RequestBody KlRelationNodeVO klRelationNodeVO) {
+    /*public RespDTO<Boolean> addRelation(@Valid @RequestBody KlRelationNodeVO klRelationNodeVO) {
         return RespDTO.onSuc(relationContactFacade.addRelation(klRelationNodeVO));
+    }*/
+
+    public RespDTO<Boolean> addRelation(@Valid @RequestBody List<KlRelationSaveVO> klRelationSaveVOs) {
+        return RespDTO.onSuc(relationContactFacade.addRelation(klRelationSaveVOs));
     }
 
+
+
 }

+ 46 - 0
cdssman-service/src/main/resources/mapper/KlRelationMapper.xml

@@ -40,6 +40,7 @@
         AND b.`status` = 1
         AND c.`status` = 1
     </select>
+
     <select id="getRelationNodeDTOs" resultType="com.diagbot.dto.RelationNodeDTO">
         SELECT
         d.id AS conceptId,
@@ -68,4 +69,49 @@
         ORDER BY b.order_no ASC,a.gmt_modified DESC
     </select>
 
+    <select id="getRelationNameDTOs"
+            resultType="com.diagbot.dto.RelationNameDTO">
+        SELECT
+        m.*, kc.lib_name AS medName,
+        kc.lib_type AS medLibType
+        FROM
+        (
+        SELECT
+        k.*, r.end_id AS medId
+        FROM
+        (
+        SELECT
+        klc1.id AS startId,
+        klr1.relation_id AS relationId,
+        klc1.lib_name AS startLibName,
+        klr1.end_id AS endId,
+        klc2.lib_name AS endLibName,
+        klc2.lib_type AS libType
+        FROM
+        kl_relation klr1,
+        kl_concept klc1,
+        kl_concept klc2
+        WHERE
+        klr1.start_id = klc1.id
+        AND klc2.id = klr1.end_id
+        <if test="conceptIds!=null and conceptIds.size() > 0">
+            AND klc1.id IN
+            <foreach collection="conceptIds" item="item" index="index" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="relationId!=null">
+            AND relation_id = #{relationId}
+        </if>
+        ) k,
+        kl_relation r
+        WHERE
+        k.endId = r.start_id
+        AND k.relationId = r.relation_id
+        ) m,
+        kl_concept kc
+        WHERE
+        m.medId = kc.id
+    </select>
+
 </mapper>