Преглед на файлове

后台查询规则接口新增

wangsy преди 10 месеца
родител
ревизия
b986401153

+ 1 - 0
src/main/java/com/diagbot/dto/RuleConditionDTO.java

@@ -19,5 +19,6 @@ public class RuleConditionDTO {
     private Integer hasSubCond;
     private String ruleGroup;
     private String msg;
+    private String description;
     private List<RuleBaseDTO> ruleBaseDTOList = new ArrayList<>();
 }

+ 29 - 0
src/main/java/com/diagbot/dto/RuleQueryDTO.java

@@ -0,0 +1,29 @@
+package com.diagbot.dto;
+
+import com.diagbot.enums.LexiconEnum;
+import com.diagbot.enums.RuleTypeEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2021/12/30 13:21
+ */
+@Getter
+@Setter
+public class RuleQueryDTO {
+    private String libName;
+    private Integer libType;
+    private String libTypeName;
+    private Integer ruleType;
+    private String ruleTypeName;
+
+    public String getLibTypeName() {
+        return LexiconEnum.getName(libType);
+    }
+
+    public String getRuleTypeName() {
+        return RuleTypeEnum.getName(ruleType);
+    }
+}

+ 132 - 19
src/main/java/com/diagbot/facade/KlRuleFacade.java

@@ -3,36 +3,25 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.diagbot.dto.IndicationExportDTO;
-import com.diagbot.dto.KlRuleByIdDTO;
-import com.diagbot.dto.KlRuleByIdParDTO;
-import com.diagbot.dto.KlRuleByIdSubDTO;
-import com.diagbot.dto.KlRuleInfoDTO;
+import com.diagbot.dto.*;
 import com.diagbot.entity.KlRule;
 import com.diagbot.entity.KlRuleBase;
 import com.diagbot.entity.KlRuleCondition;
+import com.diagbot.enums.CommonEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.RedisEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.KlRuleServiceImpl;
-import com.diagbot.util.BeanUtil;
-import com.diagbot.util.DateUtil;
-import com.diagbot.util.ExcelUtils;
-import com.diagbot.util.ListUtil;
-import com.diagbot.util.StringUtil;
-import com.diagbot.vo.KlRuleByIdVO;
-import com.diagbot.vo.KlRuleInfoClearVO;
-import com.diagbot.vo.KlRuleInfoSaveSubVO;
-import com.diagbot.vo.KlRuleInfoSaveVO;
-import com.diagbot.vo.KlRuleInfoVO;
-import com.diagbot.vo.KlRuleSatartOrdisaVO;
+import com.diagbot.util.*;
+import com.diagbot.vo.*;
+import com.google.common.collect.Lists;
+import io.github.lvyahui8.spring.facade.DataFacade;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * @Description:
@@ -45,6 +34,8 @@ public class KlRuleFacade extends KlRuleServiceImpl {
     KlRuleConditionFacade klRuleConditionFacade;
     @Autowired
     KlRuleBaseFacade klRuleBaseFacade;
+    @Autowired
+    private RedisUtil redisUtil;
 
     /**
      * @param klRuleInfoVO
@@ -250,4 +241,126 @@ public class KlRuleFacade extends KlRuleServiceImpl {
         ExcelUtils.exportExcel(indicationExportDTOS, null, "开单合理性", IndicationExportDTO.class, "indication.xlsx",
                 response, 12.8f);
     }
+
+
+    /**
+     * 是否集合类型
+     *
+     * @param type
+     * @return
+     */
+    public Boolean isGatherType(Integer type) {
+        if (type == null) {
+            return false;
+        }
+        return (type >= 308 && type <= 329) || (type >= 301 && type <= 304);
+    }
+
+    /**
+     * 查询所有有效的规则
+     *
+     * @param ruleQueryVO
+     * @return
+     */
+    public IPage<RuleQueryDTO> getRulePageFac(RuleQueryVO ruleQueryVO) {
+        if (StringUtil.isNotBlank(ruleQueryVO.getBaseLibName()) || !IntegerUtil.isNull(ruleQueryVO.getBaseLibType())) {
+            try {
+                //取得所有基础规则条目的上级规则的ID
+                Map<String, Object> invokeParams = new HashMap<>();
+                RuleBaseQueryVO ruleBaseQueryVO = new RuleBaseQueryVO();
+                ruleBaseQueryVO.setBaseLibType(ruleQueryVO.getBaseLibType());
+                ruleBaseQueryVO.setBaseLibName(ruleQueryVO.getBaseLibName());
+                invokeParams.put("ruleBaseQueryVO",ruleBaseQueryVO);
+                List<Long> ruleIds = DataFacade.get("getAllRuleIds", invokeParams, List.class);
+                ruleQueryVO.setRuleIds(ruleIds);
+            } catch (Exception e) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "查询所有有效规则失败" + e.getMessage());
+            }
+        }
+        return this.getRulePage(ruleQueryVO);
+    }
+
+    /**
+     * 根据录入内容查询有效规则的明细
+     *
+     * @param ruleQueryKeyVO
+     * @return
+     */
+    public RuleDTO getRuleDetail(RuleQueryKeyVO ruleQueryKeyVO) {
+        String key = RedisEnum.allRule.getName() + ruleQueryKeyVO.getLibType() + "_" + ruleQueryKeyVO.getLibName() + "_" + ruleQueryKeyVO.getRuleType();
+        RuleDTO ruleDTO = redisUtil.get(key);
+
+        // 规则名称入参,转大写
+        String descriptionVO = toUpperCase(ruleQueryKeyVO.getDescription());
+        // 基础术语名称入参,转大写
+        String baseLibNameVO = toUpperCase(ruleQueryKeyVO.getBaseLibName());
+
+        // 基础术语类型入参
+        Integer baseLibTypeVO = ruleQueryKeyVO.getBaseLibType();
+
+        // 有条件才去遍历筛选
+        if (StringUtil.isNotEmpty(descriptionVO) || StringUtil.isNotEmpty(baseLibNameVO) || baseLibTypeVO != null) {
+            List<RuleConditionDTO> ruleConditionDTOList = ruleDTO.getRuleConditionDTOList();
+            Iterator<RuleConditionDTO> iterator = ruleConditionDTOList.iterator();
+            while (iterator.hasNext()) {
+                RuleConditionDTO ruleConditionDTO = iterator.next();
+                // 过滤规则名称
+                if (StringUtil.isNotBlank(descriptionVO)) {
+                    if (!toUpperCase(ruleConditionDTO.getDescription()).contains(descriptionVO)) {
+                        iterator.remove();
+                        continue;
+                    }
+                }
+
+                // 过滤基础术语类型和名称
+                if ((baseLibTypeVO != null || StringUtil.isNotEmpty(ruleQueryKeyVO.getBaseLibName()))) {
+                    if (ListUtil.isEmpty(ruleConditionDTO.getRuleBaseDTOList())) {
+                        iterator.remove();
+                        continue;
+                    }
+                    List<RuleBaseDTO> ruleBaseDTOList = ruleConditionDTO.getRuleBaseDTOList();
+                    boolean hasFlag = false; // 是否匹配
+                    for (RuleBaseDTO ruleBaseDTO : ruleBaseDTOList) {
+                        Integer baseLibType = ruleBaseDTO.getBaseLibType();
+                        String baseLibName = toUpperCase(ruleBaseDTO.getBaseLibName());
+
+                        if (StringUtil.isNotBlank(baseLibNameVO) && baseLibTypeVO != null) {
+                            if (baseLibName.contains(baseLibNameVO) && baseLibTypeVO.equals(baseLibType)) {
+                                hasFlag = true;
+                                break;
+                            }
+                        } else if (StringUtil.isNotBlank(baseLibNameVO)) {
+                            if (baseLibName.contains(baseLibNameVO)) {
+                                hasFlag = true;
+                                break;
+                            }
+                        } else if (baseLibTypeVO != null) {
+                            if (baseLibTypeVO.equals(baseLibType)) {
+                                hasFlag = true;
+                                break;
+                            }
+                        }
+                    }
+                    if (!hasFlag) {
+                        iterator.remove();
+                        continue;
+                    }
+                }
+            }
+        }
+        return ruleDTO;
+    }
+
+    /**
+     * 转大写
+     *
+     * @param name
+     * @return
+     */
+    public String toUpperCase(String name) {
+        if (StringUtil.isNotBlank(name)) {
+            return name.toUpperCase();
+        }
+        return "";
+    }
 }

+ 4 - 7
src/main/java/com/diagbot/mapper/KlRuleMapper.java

@@ -1,17 +1,12 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.diagbot.dto.IndicationExportDTO;
-import com.diagbot.dto.KlRuleByIdDTO;
-import com.diagbot.dto.KlRuleInfoDTO;
-import com.diagbot.dto.RuleBaseInitDTO;
-import com.diagbot.dto.RuleConditionInitDTO;
-import com.diagbot.dto.RuleDTO;
-import com.diagbot.dto.RuleInitDTO;
+import com.diagbot.dto.*;
 import com.diagbot.entity.KlRule;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.diagbot.vo.KlRuleByIdVO;
 import com.diagbot.vo.KlRuleInfoVO;
+import com.diagbot.vo.RuleQueryVO;
 
 import java.util.List;
 
@@ -43,6 +38,8 @@ public interface KlRuleMapper extends BaseMapper<KlRule> {
 
     List<RuleInitDTO> getRuleInitDTOHaveClass();
 
+    IPage<RuleQueryDTO> getRulePage(RuleQueryVO ruleQueryVO);
+
     List<RuleBaseInitDTO> getRuleBaseInitDTONotHaveClass();
 
     List<RuleBaseInitDTO> getRuleBaseInitDTOHaveClass();

+ 4 - 7
src/main/java/com/diagbot/service/KlRuleService.java

@@ -2,16 +2,11 @@ package com.diagbot.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.diagbot.dto.IndicationExportDTO;
-import com.diagbot.dto.KlRuleByIdDTO;
-import com.diagbot.dto.KlRuleInfoDTO;
-import com.diagbot.dto.RuleBaseInitDTO;
-import com.diagbot.dto.RuleConditionInitDTO;
-import com.diagbot.dto.RuleDTO;
-import com.diagbot.dto.RuleInitDTO;
+import com.diagbot.dto.*;
 import com.diagbot.entity.KlRule;
 import com.diagbot.vo.KlRuleByIdVO;
 import com.diagbot.vo.KlRuleInfoVO;
+import com.diagbot.vo.RuleQueryVO;
 
 import java.util.List;
 
@@ -39,6 +34,8 @@ public interface KlRuleService extends IService<KlRule> {
 
     List<RuleInitDTO> getRuleInitDTOHaveClass();
 
+    IPage<RuleQueryDTO> getRulePage(RuleQueryVO queryVO);
+
     List<RuleBaseInitDTO> getRuleBaseInitDTONotHaveClass();
 
     List<RuleBaseInitDTO> getRuleBaseInitDTOHaveClass();

+ 7 - 7
src/main/java/com/diagbot/service/impl/KlRuleServiceImpl.java

@@ -2,18 +2,13 @@ package com.diagbot.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.diagbot.dto.IndicationExportDTO;
-import com.diagbot.dto.KlRuleByIdDTO;
-import com.diagbot.dto.KlRuleInfoDTO;
-import com.diagbot.dto.RuleBaseInitDTO;
-import com.diagbot.dto.RuleConditionInitDTO;
-import com.diagbot.dto.RuleDTO;
-import com.diagbot.dto.RuleInitDTO;
+import com.diagbot.dto.*;
 import com.diagbot.entity.KlRule;
 import com.diagbot.mapper.KlRuleMapper;
 import com.diagbot.service.KlRuleService;
 import com.diagbot.vo.KlRuleByIdVO;
 import com.diagbot.vo.KlRuleInfoVO;
+import com.diagbot.vo.RuleQueryVO;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -78,6 +73,11 @@ public class KlRuleServiceImpl extends ServiceImpl<KlRuleMapper, KlRule> impleme
         return baseMapper.getRuleBaseInitDTONotHaveClass();
     }
 
+    @Override
+    public IPage<RuleQueryDTO> getRulePage(RuleQueryVO ruleQueryVO) {
+        return baseMapper.getRulePage(ruleQueryVO);
+    }
+
     @Override
     public List<RuleBaseInitDTO> getRuleBaseInitDTOHaveClass(){
         return baseMapper.getRuleBaseInitDTOHaveClass();

+ 18 - 0
src/main/java/com/diagbot/vo/RuleBaseQueryVO.java

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2022/2/25 14:46
+ */
+@Getter
+@Setter
+public class RuleBaseQueryVO {
+    //基础医学标准术语
+    private String baseLibName;
+    //基础规则术语类型
+    private Integer baseLibType;
+}

+ 29 - 0
src/main/java/com/diagbot/vo/RuleQueryKeyVO.java

@@ -0,0 +1,29 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2021/12/30 13:21
+ */
+@Getter
+@Setter
+public class RuleQueryKeyVO {
+    @NotBlank(message = "医学标准术语不可为空")
+    private String libName;
+    @NotNull(message = "术语类型不可为空")
+    private Integer libType;
+    @NotNull(message = "规则类型不可为空")
+    private Integer ruleType;
+    //规则名称
+    private String description;
+    //基础医学标准术语
+    private String baseLibName;
+    //基础规则术语类型
+    private Integer baseLibType;
+}

+ 33 - 0
src/main/java/com/diagbot/vo/RuleQueryVO.java

@@ -0,0 +1,33 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2021/12/30 13:21
+ */
+@Getter
+@Setter
+public class RuleQueryVO extends Page {
+    //医学标准术语
+    private String libName;
+    //术语类型
+    private Integer libType;
+    //规则类型
+    private Integer ruleType;
+    //规则名称
+    private String description;
+    //基础医学标准术语
+    private String baseLibName;
+    //基础规则术语类型
+    private Integer baseLibType;
+    @ApiModelProperty(hidden = true)
+    private List<Long> ruleIds = new ArrayList<>(); //隐藏规则Id列表
+}

+ 28 - 8
src/main/java/com/diagbot/web/KlRuleController.java

@@ -3,16 +3,10 @@ package com.diagbot.web;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
-import com.diagbot.dto.KlRuleByIdParDTO;
-import com.diagbot.dto.KlRuleInfoDTO;
-import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.*;
 import com.diagbot.enums.StatusEnum;
 import com.diagbot.facade.KlRuleFacade;
-import com.diagbot.vo.KlRuleByIdVO;
-import com.diagbot.vo.KlRuleInfoClearVO;
-import com.diagbot.vo.KlRuleInfoSaveVO;
-import com.diagbot.vo.KlRuleInfoVO;
-import com.diagbot.vo.KlRuleSatartOrdisaVO;
+import com.diagbot.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -85,4 +79,30 @@ public class KlRuleController {
         return RespDTO.onSuc(klRuleFacade.startOrDisableRule(klRuleSatartOrdisaVO,StatusEnum.Enable.getKey()));
     }
 
+    @ApiOperation(value = "查询所有有效的规则[by:gaodm]",
+            notes = "libName: 医学标准术语<br>" +
+                    "libType: 术语类型<br>" +
+                    "ruleType: 规则类型<br>" +
+                    "description: 规则名称<br>" +
+                    "baseLibName: 基础医学标准术语<br>" +
+                    "baseLibType: 基础规则术语类型")
+    @PostMapping("/getRulePage")
+    @SysLogger("getRulePage")
+    public RespDTO<IPage<RuleQueryDTO>> getRulePage(@RequestBody RuleQueryVO ruleQueryVO) {
+        return RespDTO.onSuc(klRuleFacade.getRulePageFac(ruleQueryVO));
+    }
+
+    @ApiOperation(value = "根据录入内容查询有效规则的明细[by:zhoutg]",
+            notes = "libName: 医学标准术语<br>" +
+                    "libType: 术语类型<br>" +
+                    "ruleType: 规则类型<br>" +
+                    "description: 规则名称<br>" +
+                    "baseLibName: 基础医学标准术语<br>" +
+                    "baseLibType: 基础规则术语类型")
+    @PostMapping("/getRuleDetail")
+    @SysLogger("getRuleDetail")
+    public RespDTO<RuleDTO> getRuleDetail(@RequestBody @Valid RuleQueryKeyVO ruleQueryKeyVO) {
+        return RespDTO.onSuc(klRuleFacade.getRuleDetail(ruleQueryKeyVO));
+    }
+
 }

+ 100 - 0
src/main/resources/mapper/KlRuleMapper.xml

@@ -410,6 +410,106 @@
         AND t3.concept_id = t5.id
     </select>
 
+    <select id="getRulePage" resultType="com.diagbot.dto.RuleQueryDTO" parameterType="com.diagbot.vo.RuleQueryVO">
+        SELECT DISTINCT
+        t12.libName AS libName,
+        t12.libType AS libType,
+        t12.ruleType AS ruleType
+        FROM
+        (
+        SELECT
+        t1.concept_id AS conceptId,
+        t1.id AS ruleId,
+        t4.lib_name AS libName,
+        t4.lib_type AS libType,
+        t1.rule_type AS ruleType,
+        t1.has_sub_cond AS hasSubCond,
+        t1.gmt_modified AS gmtModified
+        FROM
+        kl_rule t1,
+        kl_rule_search t3,
+        kl_concept t4
+        WHERE
+        t1.is_deleted = "N"
+        AND t3.is_deleted = "N"
+        AND t3.id = t1.id
+        AND t4.is_deleted = "N"
+        AND t1.concept_id = t4.id
+        AND t1. STATUS = 1
+        AND t4. STATUS = 1
+        AND t4.lib_type BETWEEN 100
+        AND 299
+        <if test="description!=null and description!=''">
+            AND UPPER(t1.description) LIKE CONCAT('%', UPPER(trim(#{description})), '%')
+        </if>
+        <if test="libName!=null and libName!=''">
+            AND UPPER(t4.lib_name) LIKE CONCAT('%', UPPER(trim(#{libName})), '%')
+        </if>
+        <if test="libType !=null">
+            AND t4.lib_type = #{libType}
+        </if>
+        <if test="ruleType !=null">
+            AND t1.rule_type = #{ruleType}
+        </if>
+        UNION ALL
+        SELECT
+        t11.id AS conceptId,
+        t1.id AS ruleId,
+        t11.lib_name AS libName,
+        t11.lib_type AS libType,
+        t1.rule_type AS ruleType,
+        t1.has_sub_cond AS hasSubCond,
+        t1.gmt_modified AS gmtModified
+        FROM
+        kl_rule t1,
+        kl_rule_search t3,
+        kl_concept t4,
+        kl_relation t10,
+        kl_concept t11
+        WHERE
+        t1.is_deleted = "N"
+        AND t4.is_deleted = "N"
+        AND t3.is_deleted = "N"
+        AND t3.id = t1.id
+        AND t1.concept_id = t4.id
+        AND t1. STATUS = 1
+        AND t4. STATUS = 1
+        AND t4.lib_type BETWEEN 300
+        AND 399
+        AND t10.start_id = t4.id
+        AND t10.relation_id = 600
+        AND t10.end_id = t11.id
+        AND t11.lib_type BETWEEN 100
+        AND 299
+        AND t10.is_deleted = "N"
+        AND t11.is_deleted = "N"
+        AND t10. STATUS = 1
+        AND t11. STATUS = 1
+        <if test="description!=null and description!=''">
+            AND UPPER(t1.description) LIKE CONCAT('%', UPPER(trim(#{description})), '%')
+        </if>
+        <if test="libName!=null and libName!=''">
+            AND UPPER(t11.lib_name) LIKE CONCAT('%', UPPER(trim(#{libName})), '%')
+        </if>
+        <if test="libType !=null">
+            AND t11.lib_type = #{libType}
+        </if>
+        <if test="ruleType !=null">
+            AND t1.rule_type = #{ruleType}
+        </if>
+        ) t12
+        <if test="(baseLibType!=null) or (baseLibName!=null and baseLibName!='')">
+            WHERE t12.ruleId IN
+            <foreach collection="ruleIds" open="(" close=")" separator="," item="ruleId">
+                #{ruleId}
+            </foreach>
+        </if>
+        ORDER BY
+        t12.gmtModified DESC,
+        t12.ruleId DESC,
+        t12.conceptId DESC
+    </select>
+
     <select id="getRuleInitDTONotHaveClass" resultType="com.diagbot.dto.RuleInitDTO">
         SELECT
             CONCAT_WS("_",t1.concept_id,t1.rule_type) AS conceptGroup,