浏览代码

开单合理性维护

zhaops 4 年之前
父节点
当前提交
d79ba96e46

+ 1 - 1
src/main/java/com/diagbot/entity/node/BillConcept.java

@@ -15,6 +15,6 @@ import org.springframework.data.neo4j.annotation.QueryResult;
 public class BillConcept {
     private Long id;
     private String name;
-    private Long status;
+    private Integer status;
     private String conceptLabel;
 }

+ 3 - 2
src/main/java/com/diagbot/entity/node/BillCondition.java

@@ -15,9 +15,10 @@ import org.springframework.data.neo4j.annotation.QueryResult;
 public class BillCondition {
     private Long id;
     private String name;
-    private Long status;
+    private Integer status;
     private String conditionLabel;
     private String unit;
-    private Double mixValue;
+    private Double minValue;
     private Double maxValue;
+    private Integer range;
 }

+ 15 - 6
src/main/java/com/diagbot/entity/node/BillItem.java

@@ -14,15 +14,24 @@ import org.springframework.data.neo4j.annotation.QueryResult;
 @QueryResult
 public class BillItem {
     private String ruleName;
-    private String ruleType;
     private Integer type;
+
     private Long conceptId;
-    private Long relationId;
-    private Long conditionId;
     private String conceptName;
+    private String conceptLabel;
+    private Integer conceptStatus;
+
+    private String ruleType;
+    private Long relationId;
     private String relationName;
+    private Integer relationStatus;
+
+    private Long conditionId;
     private String conditionName;
-    private String conceptLabel;
     private String conditionLabel;
-    private Integer  relationStatus;
-}
+    private Double conditionMinValue;
+    private Double conditionMaxValue;
+    private String conditionUnit;
+    private Integer conditionRange;
+    private Integer conditionStatus;
+}

+ 37 - 0
src/main/java/com/diagbot/entity/node/BillItemDetail.java

@@ -0,0 +1,37 @@
+package com.diagbot.entity.node;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.data.neo4j.annotation.QueryResult;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/11/24 16:10
+ */
+@Getter
+@Setter
+@QueryResult
+public class BillItemDetail {
+    private String ruleName;
+    private Integer type;
+
+    private Long conceptId;
+    private String conceptName;
+    private String conceptLabel;
+    private Integer conceptStatus;
+
+    private String ruleType;
+    private Long relationId;
+    private String relationName;
+    private Integer relationStatus;
+
+    private Long conditionId;
+    private String conditionName;
+    private String conditionLabel;
+    private Double conditionMinValue;
+    private Double conditionMaxValue;
+    private String conditionUnit;
+    private Integer conditionRange;
+    private Integer conditionStatus;
+}

+ 138 - 5
src/main/java/com/diagbot/facade/BillManFacade.java

@@ -1,15 +1,20 @@
 package com.diagbot.facade;
 
 import com.diagbot.dto.DictionaryInfoDTO;
-import com.diagbot.entity.node.BillItem;
 import com.diagbot.entity.node.BillConcept;
 import com.diagbot.entity.node.BillCondition;
+import com.diagbot.entity.node.BillItem;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
 import com.diagbot.repository.BillManRepository;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.BillPageVO;
+import com.diagbot.vo.BillSaveVO;
 import com.diagbot.vo.ConceptIndexVO;
 import com.diagbot.vo.ConditionIndexVO;
-import com.diagbot.vo.BillPageVO;
+import com.diagbot.vo.RelationIdVO;
 import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -62,6 +67,10 @@ public class BillManFacade {
                 billPageVO.getConditionName(),
                 billPageVO.getRelationStatus(),
                 pageable);
+
+        for(BillItem billItem:page.getContent()){
+            billItem.setRuleName(billItem.getRuleName()+"test");
+        }
         return page;
     }
 
@@ -74,6 +83,7 @@ public class BillManFacade {
     public List<BillCondition> conditionIndex(ConditionIndexVO conditionIndexVO) {
         List<DictionaryInfoDTO> dicTypeConvert = dictionaryFacade.getListByGroupType(8);
         List<DictionaryInfoDTO> dicIndicationManType = dictionaryFacade.getListByGroupType(11);
+        List<DictionaryInfoDTO> dicBillConditionType = dictionaryFacade.getListByGroupType(12);
         Map<String, String> dicTypeConvertMap
                 = EntityUtil.makeMapWithKeyValue(dicTypeConvert, "name", "val");
         Map<String, String> dicIndicationManTypeMap
@@ -82,9 +92,15 @@ public class BillManFacade {
                 && dicTypeConvertMap.containsKey(dicIndicationManTypeMap.get(conditionIndexVO.getType().toString()))) {
             conditionIndexVO.setConceptLabel(dicTypeConvertMap.get(dicIndicationManTypeMap.get(conditionIndexVO.getType().toString())));
         }
-        List<String> relationTypes = billManRepository.getRelationTypes(conditionIndexVO.getConceptLabel());
-        List<String> conditionLabels = Lists.newArrayList();
         //条件明细筛选范围
+        List<String> conditionLabels = Lists.newArrayList();
+        /*if (ListUtil.isNotEmpty(dicBillConditionType)) {
+            conditionLabels = dicBillConditionType.stream()
+                    .map(i -> i.getName())
+                    .distinct()
+                    .collect(Collectors.toList());
+        }*/
+        List<String> relationTypes = billManRepository.getRelationTypes(conditionIndexVO.getConceptLabel());
         if (ListUtil.isNotEmpty(relationTypes)) {
             for (String relationType : relationTypes) {
                 int index = relationType.indexOf("禁忌");
@@ -97,7 +113,7 @@ public class BillManFacade {
         List<BillCondition> notInConditions
                 = billManRepository.getNotInConditions(conditionIndexVO.getConceptName(), conditionIndexVO.getConceptLabel());
         List<Long> notInIds = Lists.newArrayList();
-        if (ListUtil.isNotEmpty(notInConditions) && conditionIndexVO.getRuleType().equals("文本类型")) {
+        if (ListUtil.isNotEmpty(notInConditions)) {
             notInIds = notInConditions.stream().map(i -> i.getId()).distinct().collect(Collectors.toList());
         }
         List<BillCondition> conditions = billManRepository.conditionIndex(conditionLabels,
@@ -135,4 +151,121 @@ public class BillManFacade {
 
         return concepts;
     }
+
+
+    /**
+     * 查询单条规则
+     *
+     * @param relationIdVO
+     * @return
+     */
+    public BillSaveVO getRecordByRelationId(RelationIdVO relationIdVO) {
+        BillSaveVO billSaveVO = new BillSaveVO();
+        BillConcept billConcept = new BillConcept();
+        BillCondition billCondition = new BillCondition();
+
+        List<DictionaryInfoDTO> dicTypeConvert = dictionaryFacade.getListByGroupType(8);
+        List<DictionaryInfoDTO> dicIndicationManType = dictionaryFacade.getListByGroupType(11);
+        Map<String, String> dicTypeConvertMap
+                = EntityUtil.makeMapWithKeyValue(dicTypeConvert, "val", "name");
+        Map<String, String> dicIndicationManTypeMap
+                = EntityUtil.makeMapWithKeyValue(dicIndicationManType, "name", "val");
+        BillItem billItem = billManRepository.getRecordByRelationId(relationIdVO.getRelationId());
+        if (billItem != null) {
+            billConcept.setId(billItem.getConceptId());
+            billConcept.setName(billItem.getConceptName());
+            billConcept.setConceptLabel(billItem.getConceptLabel());
+            billConcept.setStatus(billItem.getConceptStatus());
+
+            billCondition.setId(billItem.getConditionId());
+            billCondition.setName(billItem.getConditionName());
+            billCondition.setConditionLabel(billItem.getConditionLabel());
+            billCondition.setMaxValue(billItem.getConditionMaxValue());
+            billCondition.setMinValue(billItem.getConditionMinValue());
+            billCondition.setUnit(billItem.getConditionUnit());
+            billCondition.setRange(billItem.getConditionRange());
+            billCondition.setStatus(billItem.getConditionStatus());
+
+            if (dicTypeConvertMap.containsKey(billItem.getConceptLabel())
+                    && dicIndicationManTypeMap.containsKey(dicTypeConvertMap.get(billItem.getConceptLabel()))) {
+                billSaveVO.setType(Integer.valueOf(dicIndicationManTypeMap.get(dicTypeConvertMap.get(billItem.getConceptLabel()))));
+            }
+            billSaveVO.setRuleType(billItem.getRuleType());
+            billSaveVO.setRuleName(billCondition.getName() + "开单" + billConcept.getName());
+            billSaveVO.setRelationId(billItem.getRelationId());
+            billSaveVO.setRelationName(billItem.getRelationName());
+            billSaveVO.setRelationStatus(billItem.getRelationStatus());
+            billSaveVO.setConcept(billConcept);
+            billSaveVO.setCondition(billCondition);
+        }
+        return billSaveVO;
+    }
+
+    public Boolean saveRecord(BillSaveVO billSaveVO) {
+        //验证关系是否已存在
+        //开单项-[]->条件明细
+        //开单项-[]->开单项+禁忌+条件明细
+        String relationType = billSaveVO.getConcept().getConceptLabel() + "禁忌" + billSaveVO.getCondition().getConditionLabel();
+        BillItem existRelation = billManRepository.isExistRelation(billSaveVO.getConcept().getName(),
+                billSaveVO.getCondition().getName(),
+                relationType);
+        BillCondition existCondition = billManRepository.isExistCondition(billSaveVO.getConcept().getName(),
+                billSaveVO.getConcept().getConceptLabel(),
+                relationType,
+                billSaveVO.getCondition().getName(),
+                billSaveVO.getCondition().getConditionLabel());
+        //新增已存在
+        if (billSaveVO.getRelationId() == null
+                && existRelation != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "规则已存在,不允许重复添加");
+        }
+        //修改成已存在规则
+        if (billSaveVO.getRelationId() != null
+                && !billSaveVO.getRelationId().equals(existRelation.getRelationId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "规则已存在,不允许修改");
+        }
+
+        //数值类型
+        if (StringUtil.isNotBlank(billSaveVO.getRuleType())
+                && billSaveVO.getRuleType().equals("2")) {
+            BillCondition condition = billSaveVO.getCondition();
+            if (condition.getMinValue() != null
+                    && condition.getMaxValue() != null
+                    && condition.getMinValue() > condition.getMaxValue()) {
+                Double minValue = condition.getMinValue();
+                condition.setMinValue(condition.getMaxValue());
+                condition.setMaxValue(minValue);
+                condition.setRange(1);
+            } else {
+                condition.setRange(0);
+            }
+            billSaveVO.setCondition(condition);
+        }
+
+        if (billSaveVO.getRelationId() == null) {
+            //新增
+            if(billSaveVO.getRuleType().equals("1")){
+                //文本类型,新建关系
+                Long relationId=billManRepository.createRelation(billSaveVO.getConcept().getName(),
+                        billSaveVO.getConcept().getConceptLabel(),
+                        billSaveVO.getCondition().getName(),
+                        billSaveVO.getCondition().getConditionLabel(),
+                        relationType,
+                        billSaveVO.getRuleType());
+
+            }else if(billSaveVO.getRuleType().equals("2")){
+                //数值类型
+
+            }
+
+        } else {
+            //修改
+        }
+
+
+        //体征和实验室检查、实验室检查名称新增一个节点
+
+
+        return true;
+    }
 }

+ 76 - 4
src/main/java/com/diagbot/repository/BillManRepository.java

@@ -3,6 +3,7 @@ package com.diagbot.repository;
 import com.diagbot.entity.node.BillConcept;
 import com.diagbot.entity.node.BillCondition;
 import com.diagbot.entity.node.BillItem;
+import com.diagbot.entity.node.BillItemDetail;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.neo4j.annotation.Query;
@@ -16,7 +17,7 @@ import java.util.List;
  * @Author:zhaops
  * @time: 2020/11/17 13:26
  */
-public interface BillManRepository extends Neo4jRepository<BillItem,Long> {
+public interface BillManRepository extends Neo4jRepository<BillItemDetail,Long> {
 
     @Query(value = "match(m)-[r]->(n) \n" +
             "where 1 = 1 \n" +
@@ -65,21 +66,21 @@ public interface BillManRepository extends Neo4jRepository<BillItem,Long> {
             "WHERE (toLower(n.`name`) = toLower($name) OR toLower(n.`拼音编码`) = toLower($pycode))  \n" +
             "AND labels(n)[0] in {labels}  \n" +
             "AND (case {notInIds} is not null and size({notInIds})>0 when true then not(id(n) in {notInIds}) else 1 = 1 end ) \n" +
-            "RETURN ID(n) as id, n.name as name,n.状态 as status,labels(n)[0] as conditionLabel \n" +
+            "RETURN ID(n) as id, n.name as name,n.状态 as status,labels(n)[0] as conditionLabel,n.最小值 as minValue,n.最大值 as maxValue,n.单位 as unit,n.范围 as range \n" +
             "union \n" +
             "MATCH (n) \n " +
             "WHERE (toLower(n.`name`) starts with toLower($name) OR toLower(n.`拼音编码`) starts with toLower($pycode)) \n " +
             "AND labels(n)[0] in {labels}  \n" +
             "AND (case {notInIds} is not null and size({notInIds})>0 when true then not(id(n) in {notInIds}) else 1 = 1 end ) \n" +
             "WITH n SKIP 0 LIMIT $size \n" +
-            "RETURN ID(n) as id, n.name as name,n.状态 as status,labels(n)[0] as conditionLabel  \n" +
+            "RETURN ID(n) as id, n.name as name,n.状态 as status,labels(n)[0] as conditionLabel,n.最小值 as minValue,n.最大值 as maxValue,n.单位 as unit,n.范围 as range \n" +
             "union \n" +
             "MATCH (n) \n" +
             "WHERE (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  \n" +
             "AND labels(n)[0] in {labels}  \n" +
             "AND (case {notInIds} is not null and size({notInIds})>0 when true then not(id(n) in {notInIds}) else 1 = 1 end ) \n" +
             "WITH n SKIP 0 LIMIT $size \n" +
-            "RETURN ID(n) as id, n.name as name,n.状态 as status,labels(n)[0] as conditionLabel \n")
+            "RETURN ID(n) as id, n.name as name,n.状态 as status,labels(n)[0] as conditionLabel,n.最小值 as minValue,n.最大值 as maxValue,n.单位 as unit,n.范围 as range \n")
     List<BillCondition> conditionIndex(@Param("labels") List<String> labels,
                                        @Param("notInIds") List<Long> notInIds,
                                        @Param("name") String name,
@@ -113,4 +114,75 @@ public interface BillManRepository extends Neo4jRepository<BillItem,Long> {
                                    @Param("name") String name,
                                    @Param("pycode") String pycode,
                                    @Param("size") Integer size);
+
+    @Query("MATCH (m)-[r]->(n) \n" +
+            "where m.name={conceptName} \n" +
+            "and n.name={conditionName}\n" +
+            "and type(r) ={relationType} \n" +
+            "and {conceptLabel} in labels(m)\n" +
+            "and {conditionLabel} in labels(n)\n" +
+            "RETURN ID(n) as id, n.name as name,n.状态 as status,labels(n)[0] as conditionLabel,n.最小值 as minValue,n.最大值 as maxValue,n.单位 as unit,n.范围 as range \n")
+    BillCondition isExistCondition(@Param("conceptName") String conceptName,
+                                   @Param("conceptLabel") String conceptLabel,
+                                   @Param("relationType") String relationType,
+                                   @Param("conditionName") String conditionName,
+                                   @Param("conditionLabel") String conditionLabel);
+
+    @Query("MATCH (m)-[r]->(n) \n" +
+            "where id(r) ={relationId} \n" +
+            "RETURN id(m) as conceptId,\n" +
+            "m.name as conceptName,\n" +
+            "labels(m)[0] as conceptLabel,\n" +
+            "m.状态 as conceptStatus,\n" +
+            "r.规则类型 as ruleType,\n" +
+            "id(r) as relationId,\n" +
+            "type(r) as relationName,\n" +
+            "r.状态 as relationStatus,\n" +
+            "id(n) as conditionId,\n" +
+            "n.name as conditionName,\n" +
+            "labels(n)[0] as conditionLabel,\n" +
+            "n.最小值 as conditionMinValue,\n" +
+            "n.最大值 as conditionMaxValue,\n" +
+            "n.单位 as conditionUnit,\n" +
+            "n.范围 as conditionRange,\n" +
+            "n.状态 as conditionStatus")
+    BillItem getRecordByRelationId(@Param("relationId") Long relationId);
+
+    @Query("MATCH (m)-[r]->(n) \n" +
+            "where m.name ={conceptName} \n" +
+            "and n.name={conditionName} \n" +
+            "and type(r) ={relationType} \n" +
+            "RETURN id(m) as conceptId,\n" +
+            "m.name as conceptName,\n" +
+            "labels(m)[0] as conceptLabel,\n" +
+            "m.状态 as conceptStatus,\n" +
+            "r.规则类型 as ruleType,\n" +
+            "id(r) as relationId,\n" +
+            "type(r) as relationName,\n" +
+            "r.状态 as relationStatus,\n" +
+            "id(n) as conditionId,\n" +
+            "n.name as conditionName,\n" +
+            "labels(n)[0] as conditionLabel,\n" +
+            "n.最小值 as conditionMinValue,\n" +
+            "n.最大值 as conditionMaxValue,\n" +
+            "n.单位 as conditionUnit,\n" +
+            "n.范围 as conditionRange,\n" +
+            "n.状态 as conditionStatus")
+    BillItem isExistRelation(@Param("conceptName") String conceptName,
+                             @Param("conditionName") String conditionName,
+                             @Param("relationType") String relationType);
+
+    @Query("match (m),(n) \n" +
+            "where {conceptLabel} in labels(m) and {conditionLabel} in labels(n)\n" +
+            "and m.name={conceptName} \n" +
+            "and n.name={conditionName}\n" +
+            "create (m)-[r:{relationType}]->(n)  \n" +
+            "set r.规则类型={ruleType},r.状态=1 \n" +
+            "return id(r)")
+    Long createRelation(@Param("conceptName") String conceptName,
+                        @Param("conceptLabel") String conceptLabel,
+                        @Param("conditionName") String conditionName,
+                        @Param("conditionLabel") String conditionLabel,
+                        @Param("relationType") String relationType,
+                        @Param("ruleType") String ruleType);
 }

+ 1 - 0
src/main/java/com/diagbot/vo/BillSaveVO.java

@@ -20,6 +20,7 @@ public class BillSaveVO {
     private String relationName;
     private Integer relationStatus;
     private String ruleType;
+    private String ruleName;
 
     private BillCondition condition;
 }

+ 15 - 0
src/main/java/com/diagbot/vo/RelationIdVO.java

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/11/24 14:47
+ */
+@Getter
+@Setter
+public class RelationIdVO {
+    private Long relationId;
+}

+ 21 - 3
src/main/java/com/diagbot/web/BillManController.java

@@ -1,13 +1,15 @@
 package com.diagbot.web;
 
 import com.diagbot.dto.RespDTO;
-import com.diagbot.entity.node.BillItem;
 import com.diagbot.entity.node.BillConcept;
 import com.diagbot.entity.node.BillCondition;
+import com.diagbot.entity.node.BillItem;
 import com.diagbot.facade.BillManFacade;
+import com.diagbot.vo.BillPageVO;
+import com.diagbot.vo.BillSaveVO;
 import com.diagbot.vo.ConceptIndexVO;
 import com.diagbot.vo.ConditionIndexVO;
-import com.diagbot.vo.BillPageVO;
+import com.diagbot.vo.RelationIdVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -48,7 +50,7 @@ public class BillManController {
     @ApiOperation(value = "条件明细检索[zhaops]",
             notes = "type:开单类型(1-检验套餐、2-检查、3-检查子项、4-手术和操作、5-药品注册名)<br>" +
                     "conceptName:开单项<br>" +
-                    "ruleType:规则类型:文本类型、数值类型<br>" +
+                    "ruleType:规则类型(1-文本类型、2-数值类型)<br>" +
                     "conditionName:条件明细(模糊匹配)<br>")
     @PostMapping("/conditionIndex")
     public RespDTO<BillCondition> conditionIndex(@RequestBody ConditionIndexVO conditionIndexVO) {
@@ -64,4 +66,20 @@ public class BillManController {
         List<BillConcept> data = billManFacade.conceptIndex(conceptIndexVO);
         return RespDTO.onSuc(data);
     }
+
+    @ApiOperation(value = "查询单条规则[zhaops]",
+            notes = "relationId:关系id<br>")
+    @PostMapping("/getRecordByRelationId")
+    public RespDTO<BillSaveVO> getRecordByRelationId(@RequestBody RelationIdVO relationIdVO) {
+        BillSaveVO data = billManFacade.getRecordByRelationId(relationIdVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "保存规则[zhaops]",
+            notes = "")
+    @PostMapping("/saveRecord")
+    public RespDTO<Boolean> saveRecord(@RequestBody BillSaveVO billSaveVO) {
+        Boolean data = billManFacade.saveRecord(billSaveVO);
+        return RespDTO.onSuc(data);
+    }
 }