Просмотр исходного кода

Merge branch 'dev/20210326_2.0.3' into debug

chengyao 4 лет назад
Родитель
Сommit
f96be4aafc

+ 79 - 1
doc/031.20210326v2.0.3/qc_initv2.0.3.sql

@@ -10,5 +10,83 @@ CREATE TABLE `qc_cases_relevance_entry` (
   `cases_name` varchar(255) DEFAULT NULL COMMENT '指标名称',
   `relevance_id` bigint(20) DEFAULT NULL COMMENT '关联质控条目',
   `name` varchar(255) DEFAULT NULL COMMENT '条目',
+  `is_deleted` varchar(255) DEFAULT 'N',
   PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='质控关联条目表';
+) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8 COMMENT='质控关联条目表';
+
+-- ----------------------------
+-- Records of qc_cases_relevance_entry
+-- ----------------------------
+INSERT INTO `qc_cases_relevance_entry` VALUES ('1', '4', '4', '入院记录24小时内完成率', '2658', '入院记录未在患者入院24小时内完成', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('2', '5', '4', '手术记录24小时内完成率', '2170', '手术记录未在术后24h内完成', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('3', '6', '4', '出院记录24小时完成率', '2635', '出院记录未在患者入院24小时内完成', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('4', '7', '4', '病案首页24小时完成率', '3110', '病案首页未在患者出院24小时内完成', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('5', '8', '4', 'CT检查记录24小时内完成率', '3114', '医嘱存在CT,报告单未记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('6', '9', '4', 'MR检查记录24小时完成率', '3112', '医嘱存在MR,报告单未记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('7', '8', '4', 'CT检查记录24小时内完成率', '3115', '医嘱存在CT,病历记录未记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('8', '9', '4', 'MR检查记录24小时完成率', '3113', '医嘱存在MR,病历记录未记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('9', '10', '4', '病理检查完成率', '3116', '病理检查缺少病理检查报告单', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('10', '10', '4', '病理检查完成率', '3111', '手术病理检查存在手术记录中无病理相关记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('11', '10', '4', '病理检查完成率', '3117', '病理检查存在病程记录中无病理报告结果', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('12', '11', '4', '测试', '2528', '测试1111', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('13', '11', '4', '测试2', '2370', '测试2222', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('14', '11', '4', '测试3', '2522', '测试3333', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('15', '11', '4', '测试4', '2555', '测试4444', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('16', '11', '4', '测试5', '2560', '测试5555', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('17', '11', '4', '测试6', '2604', '测试6666', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('18', '17', '4', '医师查房记录完成率', '2655', '每周无2次副主任医师/主任医师查房记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('19', '17', '4', '医师查房记录完成率', '2654', '每周无3次主治医师查房记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('20', '17', '4', '医师查房记录完成率', '2468', '缺少术后首次病程记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('21', '14', '4', '手术相关记录完整率', '3107', '手术记录次数与手术次数不一致', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('22', '14', '4', '手术相关记录完整率', '2439', '手术记录中术前诊断未填写', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('23', '14', '4', '手术相关记录完整率', '2438', '手术记录中术(中)后诊断未填写', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('24', '14', '4', '手术相关记录完整率', '2437', '手术记录中手术经过未填写', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('25', '14', '4', '手术相关记录完整率', '2429', '手术患者缺麻醉记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('26', '14', '4', '手术相关记录完整率', '2480', '缺手术安全核查表', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('27', '14', '4', '手术相关记录完整率', '2478', '手术安全核查表填写时间不正确', 'Y');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('28', '14', '4', '手术相关记录完整率', '2479', '手术安全核查表内容不完整', 'Y');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('29', '14', '4', '手术相关记录完整率', '2467', '手术患者缺术前讨论或术前小结', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('30', '14', '4', '手术相关记录完整率', '2463', '术前讨论记录无术前准备内容', 'Y');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('31', '14', '4', '手术相关记录完整率', '2461', '术前讨论术中、术后注意事项未填写', 'Y');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('32', '14', '4', '手术相关记录完整率', '2466', '术前讨论记录无手术指征', 'Y');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('33', '16', '4', '临床用血相关记录符合率', '2247', '输血记录血型未填写', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('34', '16', '4', '临床用血相关记录符合率', '2245', '输血记录Rh血型未填写', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('35', '16', '4', '临床用血相关记录符合率', '2243', '输血记录输注前评估未填写', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('36', '16', '4', '临床用血相关记录符合率', '2248', '输血记录输血记录时间未填写', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('37', '16', '4', '临床用血相关记录符合率', '2249', '输血记录输血记录者未签名', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('38', '16', '4', '临床用血相关记录符合率', '2250', '输血记录输血结束时间填写不规范', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('39', '16', '4', '临床用血相关记录符合率', '2251', '输血记录输血结束时间未填写', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('40', '16', '4', '临床用血相关记录符合率', '2252', '输血记录开始输血时间填写不规范', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('41', '16', '4', '临床用血相关记录符合率', '2253', '输血记录开始输血时间未填写', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('42', '16', '4', '临床用血相关记录符合率', '2483', '输血记录中未记录有无不良反应', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('43', '16', '4', '临床用血相关记录符合率', '2484', '输血记录中无血液制品种类及量', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('44', '16', '4', '临床用血相关记录符合率', '2485', '输血记录中无输血指征', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('45', '16', '4', '临床用血相关记录符合率', '2486', '输血记录未在输注结束后24小时内完成', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('46', '16', '4', '临床用血相关记录符合率', '2491', '输血指征不严格', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('47', '16', '4', '临床用血相关记录符合率', '2492', '无输血/血制品病程记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('48', '16', '4', '临床用血相关记录符合率', '2482', '无输血或使用血液制品后效果评价', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('49', '16', '4', '临床用血相关记录符合率', '2490', '无输血或使用血液制品知情同意书', 'N未开发');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('50', '17', '4', '医师查房记录完成率', '2215', '整份病历无主治医师查房记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('51', '17', '4', '医师查房记录完成率', '2639', '患者出院前无上级医师(主治及以上)同意出院的病程记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('52', '17', '4', '医师查房记录完成率', '2214', '主刀医师在术后48小时内无查房记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('53', '17', '4', '医师查房记录完成率', '2378', '危重患者无上级医师(副高及以上)查房记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('54', '17', '4', '医师查房记录完成率', '2377', '疑难患者无上级医师(副高及以上)查房记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('55', '17', '4', '医师查房记录完成率', '2376', '抢救患者无上级医师(副高及以上)查房记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('56', '17', '4', '医师查房记录完成率', '2900', '术后24小时内无主刀或一助查房记录', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('57', '17', '4', '医师查房记录完成率', '2229', '术后查房没有连续记录3天', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('58', '17', '4', '医师查房记录完成率', '2468', '缺少术后首次病程记', 'N');
+INSERT INTO `qc_cases_relevance_entry` VALUES ('59', '18', '4', '患者抢救记录及时完成率', '2852', '抢救记录未在抢救结束后6小时内完成', 'N');
+
+
+/**
+编码添加
+ */
+
+INSERT INTO `qc`.`qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3117', '241', '三级查房制度', '4', 'THR03117', '病理检查存在病程记录中无病理报告结果', '2', '1', '0', '0', '3', '', NULL, '', 'N', '2021-04-16 11:04:42', '2021-04-16 11:04:42', '0', '医学人员');
+INSERT INTO `qc`.`qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3116', '283', '病历书写规范', '8', 'MEDI03116', '病理检查缺少病理检查报告单', '2', '1', '0', '0', '3', '', NULL, '', 'N', '2021-04-16 11:07:28', '2021-04-16 11:07:28', '0', '医学人员');
+INSERT INTO `qc`.`qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3115', '241', '三级查房制度', '4', 'THR03115', '医嘱存在CT,病历记录未记录', '2', '1', '0', '0', '3', '', NULL, '', 'N', '2021-04-16 11:17:24', '2021-04-16 11:17:24', '0', '医学人员');
+INSERT INTO `qc`.`qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3114', '283', '病历书写规范', '8', 'MEDI03114', '医嘱存在CT,报告单未记录', '2', '1', '0', '0', '3', '', NULL, '', 'N', '2021-04-16 11:16:51', '2021-04-16 11:16:51', '0', '医学人员');
+INSERT INTO `qc`.`qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3113', '241', '三级查房制度', '4', 'THR0', '医嘱存在MR,病历记录未记录', '2', '1', '0', '0', '3', '', NULL, '', 'N', '2021-04-16 11:17:46', '2021-04-16 11:17:46', '0', '医学人员');
+INSERT INTO `qc`.`qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3112', '283', '病历书写规范', '8', 'MEDI03112', '医嘱存在MR,报告单未记录', '2', '1', '0', '0', '3', '', NULL, '', 'N', '2021-04-16 10:58:38', '2021-04-16 10:58:38', '0', '医学人员');
+INSERT INTO `qc`.`qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3111', '248', '围手术期病历讨论', '17', 'OPE03111', '手术病理检查存在手术记录中无病理相关记录', '1', '1', '0', '0', '3', '', NULL, '', 'N', '2021-04-16 11:03:55', '2021-04-16 11:03:55', '0', '医学人员');
+INSERT INTO `qc`.`qc_cases_entry` (`id`, `cases_id`, `cases_name`, `mode_id`, `code`, `name`, `drgs`, `type`, `rule_type`, `dev_type`, `accuracy_type`, `precond`, `order_no`, `remark`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`) VALUES ('3110', '243', '病案首页', '6', 'FIRP03110', '病案首页未在患者出院院24小时内完成', '1', '1', '0', '0', '1', '', NULL, '', 'N', '2021-04-07 17:13:57', '2021-04-07 17:13:57', '0', '医学人员');

+ 1 - 1
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -239,7 +239,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/console/export/qualityControlExport").permitAll()
                 .antMatchers("/consoleByDept/qualityControlByDept").permitAll()
                 .antMatchers("/print/export/qualityControlExportByDept").permitAll()
-                .antMatchers("/console/getMedManageIndex").permitAll()
+                .antMatchers("/qc/behospitalInfo/getMedQualityControl").permitAll()
                 .antMatchers("/**").authenticated();
         //                .antMatchers("/**").permitAll();
     }

+ 1 - 1
src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -283,7 +283,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/console/export/qualityControlExport", request)
                 || matchers("/consoleByDept/qualityControlByDept", request)
                 || matchers("/print/export/qualityControlExportByDept", request)
-                || matchers("/console/getMedManageIndex", request)
+                || matchers("/qc/behospitalInfo/getMedQualityControl", request)
                 || matchers("/", request)) {
             return true;
         }

+ 54 - 0
src/main/java/com/diagbot/entity/QcCasesRelevanceEntry.java

@@ -0,0 +1,54 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 质控关联条目表
+ * </p>
+ *
+ * @author cy
+ * @since 2021-04-16
+ */
+@Data
+public class QcCasesRelevanceEntry implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 指标编号
+     */
+    private Integer type;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 指标名称
+     */
+    private String casesName;
+
+    /**
+     * 关联质控条目
+     */
+    private Long relevanceId;
+
+    /**
+     * 条目
+     */
+    private String name;
+
+    private String isDeleted;
+}

+ 45 - 0
src/main/java/com/diagbot/enums/QualityContent.java

@@ -9,6 +9,8 @@ import java.util.List;
 public class QualityContent {
     public static final String recordNumber = "关联首页表质控病历人数";
     public static final String NoRecordNumberId = "无病案首页病历ID";
+    public static final String DISCHARGED_PATIENTS = "出院人数";
+    public static final String NUMBER_OF_HOSPITAL = "入院人数";
     /**
      * 触发规则指标
      */
@@ -21,6 +23,49 @@ public class QualityContent {
      */
     public static final String STANDING_ORDER = "长期医嘱";
     public static final String STAT_ORDER = "临时医嘱";
+    /**
+     * 医嘱状态
+     */
+    public static final String EXECUTE_ORDER = "执行";
+    public static final String CANCELLATION_ORDER = "作废";
+    /**
+     * 医嘱判断相关
+     */
+    public static final String STOP = "停";
+    public static final String LAST = "前一次";
+    public static final String COUNTERMAND = "取消";
+    public static final String PAUSE = "暂停";
+    public static final String PATHOLOGY = "病理";
+
+    /**
+     * 医嘱手术患者相关
+     */
+    public static final String OPERATION = "手术";
+    public static final String NO_OPERATION = "非手术";
+    public static final String OPERATION_ROOM = "手术室";
+    public static final String VENIPUNCTURE_CATHETERIZATION  = "静脉穿刺置管术";
+    public static final String OPERATION_SPECIAL_PATIENTS = "特殊病人手术使用一次性卫生材料";
+    public static final String IMMUNODEFICIENCY_VIRUS_ANTIBODY = "人免疫缺陷病毒抗体检测免费";
+    /**
+     * 医嘱CT相关
+     */
+    public static final String CT = "CT";
+    public static final String X_RAY = "X线";
+    public static final String ATCH = "ATCH";
+    public static final String TCT = "TCT";
+    public static final String HCT = "HCT";
+    public static final String OCT = "OCT";
+    public static final String NCT = "NCT";
+    public static final String LCT = "LCT";
+    public static final String ACT = "ACT";
+    public static List<String> CT_REGULATION = Arrays.asList("TCT","HCT","OCT","NCT","LCT","ACT");
+    /**
+     * 医嘱MR相关
+     */
+    public static final String MR = "MR";
+    public static final String MRGNETIC_RESONANCE = "磁共振";
+    public static final String IMRT = "IMRT";
+    public static final String MRS = "mrs评分";
     /**
      * 抗菌药物目录
      */

+ 55 - 0
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -139,6 +139,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     MedNurseFacade medNurseFacade;
     @Autowired
     SysHospitalSetFacade sysHospitalSetFacade;
+    @Autowired
+    QcCasesRelevanceEntryFacade qcCasesRelevanceEntryFacade;
 
 
 
@@ -154,6 +156,59 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         return res;
     }
 
+    /**
+     * 分页
+     *
+     * @param
+     * @return
+     */
+    public List<ColumnDTO> getMedQualityControl() {
+        long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
+        //colums
+        QueryWrapper<SysHospitalSet> hospitalSetQueryWrapper = new QueryWrapper<>();
+        hospitalSetQueryWrapper.eq("is_deleted", 'N')
+                .eq("hospital_id", hospitalId)
+                .eq("code", "med_quality_control");
+        List<ColumnDTO> columns = Lists.newLinkedList();
+        SysHospitalSet hospitalSet = sysHospitalSetFacade.getOne(hospitalSetQueryWrapper);
+        if (hospitalSet == null || StringUtil.isBlank(hospitalSet.getValue())) {
+            return columns;
+        }
+
+        //表头生成
+        List<String> columnSet = Arrays.asList(hospitalSet.getValue().split(","));
+        Integer orderNo = 1;
+        ColumnDTO columnDeptId = new ColumnDTO();
+        columnDeptId.setOrderNo(orderNo);
+        columnDeptId.setFieldName("deptId");
+        columnDeptId.setColumnName("科室编码");
+        columnDeptId.setIsShow(0);
+        columns.add(columnDeptId);
+        orderNo++;
+        ColumnDTO columnDeptName = new ColumnDTO();
+        columnDeptName.setOrderNo(orderNo);
+        columnDeptName.setFieldName("deptName");
+        columnDeptName.setColumnName("科室");
+        columnDeptName.setIsShow(1);
+        columns.add(columnDeptName);
+        orderNo++;
+        for (String valueStr : columnSet) {
+            String[] keyValue = valueStr.split("--");
+            if (keyValue != null || keyValue.length > 1) {
+                ColumnDTO columnNum = new ColumnDTO();
+                columnNum.setOrderNo(orderNo);
+                columnNum.setId(Long.valueOf(keyValue[0]));
+                columnNum.setFieldName("entry_" + keyValue[0] + "_name");
+                columnNum.setColumnName(keyValue[1]);
+                columnNum.setIsShow(1);
+                columns.add(columnNum);
+                orderNo++;
+            }
+        }
+
+        return columns;
+    }
+
     /**
      * 获取明细
      *

+ 88 - 51
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -38,6 +38,8 @@ import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static io.netty.util.internal.SystemPropertyUtil.contains;
+
 /**
  * @Description:
  * @Author:zhaops
@@ -390,55 +392,65 @@ public class ConsoleFacade {
         filterFacade.filterVOSet(filterVO);
         MedQualityControlDTO medQualityControlDTO = new MedQualityControlDTO();
         Map<String, Long> selectOperationNumMap = behospitalInfoFacade.selectOperationNum(filterVO);
-        Long startCount = selectOperationNumMap.get("出院人数");
-        Long endCount = selectOperationNumMap.get("住院人数");
+        Long startCount = selectOperationNumMap.get(QualityContent.DISCHARGED_PATIENTS);
+        Long endCount = selectOperationNumMap.get(QualityContent.NUMBER_OF_HOSPITAL);
         //手术人数
         Long operationFeeNum = selectOperationNumMap.get("operationFee");
         int operationNum = getOperationNum(filterVO);
         Integer integer = Integer.valueOf(operationNum);
-        operationFeeNum=operationFeeNum+integer;
+        operationFeeNum = operationFeeNum + integer;
         //抗菌人数
         Long antibiosisFeeNum = selectOperationNumMap.get("antibiosisFee");
+        Integer antibiosis = Integer.valueOf(getAntibiosisNum(filterVO));
+        antibiosisFeeNum = antibiosisFeeNum + antibiosis;
         //手术病理人数
         Long operationPathologyFeeNum = selectOperationNumMap.get("operationPathologyFee");
         int operationPathologyNum = getOperationPathologyNum(filterVO);
         Integer operationPathologyInteger = Integer.valueOf(operationPathologyNum);
-        operationPathologyFeeNum=operationPathologyFeeNum+operationPathologyInteger;
+        operationPathologyFeeNum = operationPathologyFeeNum + operationPathologyInteger;
         Map<String, Long> recordIndicatorMap = behospitalInfoFacade.triggeringRules(filterVO);
         //各指标未完成人数情况
         Long operationCount = recordIndicatorMap.get(QualityContent.SSJLWCC_24H);
         Long InHospitalRecords = recordIndicatorMap.get(QualityContent.RYJLWWC_24H);
         Long OutHospitalRecords = recordIndicatorMap.get(QualityContent.CYJLWWC_24H);
         Long recordHomePage = recordIndicatorMap.get(QualityContent.BASYWWC_24H);
-        if(startCount.intValue()!=0){
-            //手术记录完成率
-            //手术完成人数为
-            medQualityControlDTO.setOperationNum(Double.valueOf(operationFeeNum-operationCount));
-            //手术完成率
-            medQualityControlDTO.setOperationStr(getResult(operationFeeNum-operationCount,operationFeeNum));
+        //手术记录完成率
+        //手术完成人数为
+        if (operationCount != null && operationFeeNum!=null){
+            medQualityControlDTO.setOperationNum(Double.valueOf(operationFeeNum - operationCount));
+        //手术完成率
+             medQualityControlDTO.setOperationStr(getResult(operationFeeNum - operationCount, operationFeeNum));
+        }
             //入院记录24小时完成率
             //入院记录完成人数为
-            medQualityControlDTO.setAdmissionNum(Double.valueOf(startCount-InHospitalRecords));
+        if (InHospitalRecords != null && startCount!=null) {
+            medQualityControlDTO.setAdmissionNum(Double.valueOf(startCount - InHospitalRecords));
             //入院记录完成率
-            medQualityControlDTO.setAdmissionStr(getResult(startCount-InHospitalRecords,startCount));
+            medQualityControlDTO.setAdmissionStr(getResult(startCount - InHospitalRecords, startCount));
+        }
             //出院记录24小时完成率
             //出院记录完成人数为
-            medQualityControlDTO.setLeaveHospitalNum(Double.valueOf(startCount-OutHospitalRecords));
+        if (OutHospitalRecords != null && startCount!=null) {
+            medQualityControlDTO.setLeaveHospitalNum(Double.valueOf(startCount - OutHospitalRecords));
             //出院记录完成率
-            medQualityControlDTO.setLeaveHospitalStr(getResult(startCount-OutHospitalRecords,startCount));
+            medQualityControlDTO.setLeaveHospitalStr(getResult(startCount - OutHospitalRecords, startCount));
+        }
             //病案首页24小时完成率
             //病案首页完成人数为
-            medQualityControlDTO.setMedHomePageNum(Double.valueOf(startCount-recordHomePage));
+        if (recordHomePage != null && startCount!=null) {
+            medQualityControlDTO.setMedHomePageNum(Double.valueOf(startCount - recordHomePage));
             //病案首页完成率
-            medQualityControlDTO.setMedHomePageStr(getResult(startCount-recordHomePage,startCount));
+            medQualityControlDTO.setMedHomePageStr(getResult(startCount - recordHomePage, startCount));
         }
+
+        Map<String, Long> longMap = getCTNum(filterVO);
         //CT人数
-        Long CTNum = getCTNum(filterVO).get("CT");
+        Long CTNum = longMap.get("CT");
         //MR人数
-        Long MRNum = getCTNum(filterVO).get("MR");
+        Long MRNum = longMap.get("MR");
 
         //触发规则
-        //病理
+        //病理手术
         Map<String, Long> triggeringRulesMap = behospitalInfoFacade.triggeringRules(filterVO);
         Long antibiosisNum = triggeringRulesMap.get("antibiosisNum");
         //细菌培养
@@ -447,12 +459,22 @@ public class ConsoleFacade {
         Long ct = triggeringRulesMap.get("CT");
         //MR
         Long mr = triggeringRulesMap.get("MR");
-        //病理完成率为
-        medQualityControlDTO.setPathologicalExamination(getResult(operationPathologyFeeNum - antibiosisNum,operationPathologyFeeNum));
+        if(operationPathologyFeeNum!=null && antibiosisNum!=null) {
+            //病理完成率为
+            medQualityControlDTO.setPathologicalExamination(getResult(operationPathologyFeeNum - antibiosisNum, operationPathologyFeeNum));
+        }
         //CT完成率
-        medQualityControlDTO.setCTExaminationConform(getResult(CTNum - ct,CTNum));
+        if(CTNum!=null && ct!=null) {
+            medQualityControlDTO.setCTExaminationConform(getResult(CTNum - ct, CTNum));
+        }
         //MR完成率
-        medQualityControlDTO.setMRIExaminationConform(getResult(MRNum - mr,MRNum));
+            if(MRNum!=null && mr!=null) {
+                medQualityControlDTO.setMRIExaminationConform(getResult(MRNum - mr, MRNum));
+            }
+        //抗菌完成率
+      //    medQualityControlDTO.setAdmissionStr(getResult(antibiosisFeeNum-0,antibiosisFeeNum));
+
+
         /**
          * =================================标示线========================================
          */
@@ -517,19 +539,19 @@ public class ConsoleFacade {
             dtoQueryWrapper.eq("behospital_code",behospitalCode)
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .eq("doctor_advice_type",QualityContent.STAT_ORDER)
-                    .eq("da_status","执行");
+                    .eq("da_status",QualityContent.EXECUTE_ORDER);
             //查医嘱表
             List<DoctorAdvice> doctorAdvices = doctorAdviceFacade.getBaseMapper().selectList(dtoQueryWrapper);
             for (DoctorAdvice doctorAdvice : doctorAdvices) {
                 String name = doctorAdvice.getDaItemName();
-                if(name.contains("手术")) {
-                    if (name.contains("非手术") || name.contains("手术室") || (name.contains("手术") && name.contains("取消")) || (name.contains("暂停") && name.contains("手术")) || name.contains("静脉穿刺置管术") || name.startsWith("停") || name.contains("前一次")
-                            || name.contains("特殊病人手术使用一次性卫生材料") || name.contains("人免疫缺陷病毒抗体检测免费")) {
+                if(name.contains(QualityContent.OPERATION)) {
+                    if (name.contains(QualityContent.NO_OPERATION) || name.contains(QualityContent.OPERATION_ROOM) || (name.contains(QualityContent.OPERATION) && name.contains(QualityContent.COUNTERMAND)) || (name.contains(QualityContent.PAUSE) && name.contains(QualityContent.OPERATION)) || name.contains(QualityContent.VENIPUNCTURE_CATHETERIZATION) || name.startsWith(QualityContent.STOP) || name.contains(QualityContent.LAST)
+                            || name.contains(QualityContent.OPERATION_SPECIAL_PATIENTS) || name.contains(QualityContent.IMMUNODEFICIENCY_VIRUS_ANTIBODY)) {
                         continue;
                     }else {
                         for (DoctorAdvice advice : doctorAdvices) {
                             String daItemName = advice.getDaItemName();
-                            if(daItemName.contains("病理")) {
+                            if(daItemName.contains(QualityContent.PATHOLOGY)) {
                                 operationNum++;
                                 break;
                             }
@@ -552,14 +574,14 @@ public class ConsoleFacade {
             dtoQueryWrapper.eq("behospital_code",behospitalCode)
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .eq("doctor_advice_type",QualityContent.STAT_ORDER)
-                    .eq("da_status","执行");
+                    .eq("da_status",QualityContent.EXECUTE_ORDER);
             //查医嘱表
             List<DoctorAdvice> doctorAdvices = doctorAdviceFacade.getBaseMapper().selectList(dtoQueryWrapper);
             for (DoctorAdvice doctorAdvice : doctorAdvices) {
                 String name = doctorAdvice.getDaItemName();
-                if(name.contains("手术")) {
-                    if (name.contains("非手术") || name.contains("手术室") || (name.contains("手术") && name.contains("取消")) || (name.contains("暂停") && name.contains("手术")) || name.contains("静脉穿刺置管术") || name.startsWith("停") || name.contains("前一次")
-                            || name.contains("特殊病人手术使用一次性卫生材料") || name.contains("人免疫缺陷病毒抗体检测免费")) {
+                if(name.contains(QualityContent.OPERATION)) {
+                    if (name.contains(QualityContent.NO_OPERATION) || name.contains(QualityContent.OPERATION_ROOM) || (name.contains(QualityContent.OPERATION) && name.contains(QualityContent.COUNTERMAND)) || (name.contains(QualityContent.PAUSE) && name.contains(QualityContent.OPERATION)) || name.contains(QualityContent.VENIPUNCTURE_CATHETERIZATION) || name.startsWith(QualityContent.STOP) || name.contains(QualityContent.LAST)
+                            || name.contains(QualityContent.OPERATION_SPECIAL_PATIENTS) || name.contains(QualityContent.IMMUNODEFICIENCY_VIRUS_ANTIBODY)) {
                         continue;
                     }else {
                         operationNum++;
@@ -578,15 +600,20 @@ public class ConsoleFacade {
         HashMap<String, Long> map = new HashMap<>();
         ArrayList<String> codeList = new ArrayList<>();
         for (Map<String, String> ctNumMap : getDoctorAdviceNum) {
-            if (ctNumMap.get("doctor_advice_type").contains(QualityContent.STAT_ORDER)) {
-                String behospitalCode = ctNumMap.get("behospital_code");
-                if (!codeList.contains(behospitalCode)) {
-                    String daItemName = ctNumMap.get("da_item_name");
-                    if (daItemName.contains("CT") || daItemName.contains("X线")) {
-                        if ((!daItemName.contains("ATCH") && !daItemName.contains("TCT") && !daItemName.contains("HCT") && !daItemName.contains("OCT") && !daItemName.contains("NCT") && !daItemName.contains("LCT") && !daItemName.contains("ACT")) || (daItemName.contains("停"))) {
-                            //都不包含为CT
-                            codeList.add(behospitalCode);
-                            continue;
+            String doctorAdviceType = ctNumMap.get("doctor_advice_type");
+            if(StringUtil.isNotEmpty(doctorAdviceType)) {
+                if (doctorAdviceType.contains(QualityContent.STAT_ORDER)) {
+                    String behospitalCode = ctNumMap.get("behospital_code");
+                    if (!codeList.contains(behospitalCode)) {
+                        String daItemName = ctNumMap.get("da_item_name");
+                        if ((daItemName.contains(QualityContent.CT) || daItemName.contains(QualityContent.X_RAY)) && StringUtil.isNotEmpty(daItemName)) {
+                            if ((!daItemName.contains(QualityContent.ATCH) && !daItemName.contains(QualityContent.TCT) && !daItemName.contains(QualityContent.HCT)
+                                    && !daItemName.contains(QualityContent.OCT) && !daItemName.contains(QualityContent.NCT) && !daItemName.contains(QualityContent.LCT)
+                                    && !daItemName.contains(QualityContent.ACT)) || (daItemName.contains(QualityContent.STOP))) {
+                                //都不包含为CT
+                                codeList.add(behospitalCode);
+                                continue;
+                            }
                         }
                     }
                 }
@@ -595,20 +622,30 @@ public class ConsoleFacade {
         ArrayList<String> codeMri = new ArrayList<>();
         for (Map<String, String> MRINumMap : getDoctorAdviceNum) {
             String behospitalCodeMri = MRINumMap.get("behospital_code");
-            if (MRINumMap.get("doctor_advice_type").contains(QualityContent.STAT_ORDER)) {
-                if (!codeList.contains(behospitalCodeMri)) {
-                    String daItemName = MRINumMap.get("da_item_name");
-                    if (daItemName.contains("磁共振") || daItemName.contains("MR")) {
-                        if (!daItemName.contains("IMRT") && !daItemName.contains("mrs评分")) {
-                            codeMri.add(behospitalCodeMri);
-                            continue;
+            if(StringUtil.isNotEmpty(MRINumMap.get("doctor_advice_type"))) {
+                if (contains(QualityContent.STAT_ORDER)) {
+                    if (!codeList.contains(behospitalCodeMri)) {
+                        String daItemName = MRINumMap.get("da_item_name");
+                        if (daItemName.contains(QualityContent.MRGNETIC_RESONANCE) || daItemName.contains(QualityContent.MR)) {
+                            if (!daItemName.contains(QualityContent.IMRT) && !daItemName.contains(QualityContent.MRS)) {
+                                codeMri.add(behospitalCodeMri);
+                                continue;
+                            }
                         }
                     }
                 }
             }
         }
-        map.put("CT",Long.valueOf(codeList.size()));
-        map.put("MR",Long.valueOf(codeMri.size()));
+        if(ListUtil.isNotEmpty(codeList)){
+            map.put("CT",Long.valueOf(0));
+        }else {
+            map.put("CT",Long.valueOf(codeList.size()));
+        }
+        if(ListUtil.isNotEmpty(codeMri)){
+            map.put("MR",Long.valueOf(0));
+        }else {
+            map.put("MR",Long.valueOf(codeMri.size()));
+        }
         return map;
     }
 
@@ -625,7 +662,7 @@ public class ConsoleFacade {
             dtoQueryWrapper.eq("behospital_code",behospitalCode)
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .eq("doctor_advice_type",QualityContent.STAT_ORDER)
-                    .eq("da_status","执行");
+                    .eq("da_status",QualityContent.EXECUTE_ORDER);
             //查医嘱表
             List<DoctorAdvice> doctorAdvices = doctorAdviceFacade.getBaseMapper().selectList(dtoQueryWrapper);
             doc:

+ 19 - 0
src/main/java/com/diagbot/facade/QcCasesRelevanceEntryFacade.java

@@ -0,0 +1,19 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.entity.SysHospitalSet;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.QcCasesRelevanceEntryServiceImpl;
+import com.diagbot.service.impl.SysHospitalSetServiceImpl;
+import com.diagbot.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: cy
+ * @time: 2021/4/16 12:29
+ */
+@Component
+public class QcCasesRelevanceEntryFacade extends QcCasesRelevanceEntryServiceImpl {
+
+}

+ 16 - 0
src/main/java/com/diagbot/mapper/QcCasesRelevanceEntryMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.QcCasesRelevanceEntry;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 质控关联条目表 Mapper 接口
+ * </p>
+ *
+ * @author cy
+ * @since 2021-04-16
+ */
+public interface QcCasesRelevanceEntryMapper extends BaseMapper<QcCasesRelevanceEntry> {
+
+}

+ 16 - 0
src/main/java/com/diagbot/service/QcCasesRelevanceEntryService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.QcCasesRelevanceEntry;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 质控关联条目表 服务类
+ * </p>
+ *
+ * @author cy
+ * @since 2021-04-16
+ */
+public interface QcCasesRelevanceEntryService extends IService<QcCasesRelevanceEntry> {
+
+}

+ 20 - 0
src/main/java/com/diagbot/service/impl/QcCasesRelevanceEntryServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.QcCasesRelevanceEntry;
+import com.diagbot.mapper.QcCasesRelevanceEntryMapper;
+import com.diagbot.service.QcCasesRelevanceEntryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 质控关联条目表 服务实现类
+ * </p>
+ *
+ * @author cy
+ * @since 2021-04-16
+ */
+@Service
+public class QcCasesRelevanceEntryServiceImpl extends ServiceImpl<QcCasesRelevanceEntryMapper, QcCasesRelevanceEntry> implements QcCasesRelevanceEntryService {
+
+}

+ 13 - 5
src/main/java/com/diagbot/web/BehospitalInfoController.java

@@ -2,11 +2,8 @@ package com.diagbot.web;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
-import com.diagbot.dto.AnalyzeDTO;
-import com.diagbot.dto.AnalyzeRunDTO;
-import com.diagbot.dto.BehospitalInfoDTO;
-import com.diagbot.dto.OutputInfo;
-import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.*;
+import com.diagbot.entity.QcCasesRelevanceEntry;
 import com.diagbot.facade.BehospitalInfoFacade;
 import com.diagbot.facade.QcresultInfoFacade;
 import com.diagbot.vo.AnalyzeApiVO;
@@ -30,6 +27,7 @@ import springfox.documentation.annotations.ApiIgnore;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -79,6 +77,16 @@ public class BehospitalInfoController {
         return RespDTO.onSuc(data);
     }
 
+
+    @ApiOperation(value = "质量控制指标获取[by:cy]",
+            notes = "")
+    @PostMapping("/getMedQualityControl")
+    @SysLogger("getMedQualityControl")
+    public RespDTO<List<ColumnDTO>> getMedQualityControl() {
+        List<ColumnDTO> data = behospitalInfoFacade.getMedQualityControl();
+        return  RespDTO.onSuc(data);
+    }
+
     @ApiOperation(value = "评分[by:zhoutg]",
             notes = "")
     @PostMapping("/analyze")

+ 20 - 0
src/main/java/com/diagbot/web/QcCasesRelevanceEntryController.java

@@ -0,0 +1,20 @@
+package com.diagbot.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 质控关联条目表 前端控制器
+ * </p>
+ *
+ * @author cy
+ * @since 2021-04-16
+ */
+@Controller
+@RequestMapping("/qcCasesRelevanceEntry")
+public class QcCasesRelevanceEntryController {
+
+}

+ 1 - 1
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -17834,7 +17834,7 @@
 		AND a.hospital_id = c.hospital_id
 		AND a.is_deleted = 'N'
 		AND c.is_deleted = 'N'
-		AND a.qc_type_id != 0
+        <![CDATA[ and  a.qc_type_id <>'0' ]]>
         <if test="filterVO.startDate != null and  filterVO.endDate != null ">
             <![CDATA[ AND a.leave_hospital_date >= #{filterVO.startDate}]]>
             <![CDATA[ AND a.leave_hospital_date <= #{filterVO.endDate}]]>

+ 16 - 0
src/main/resources/mapper/QcCasesRelevanceEntryMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.QcCasesRelevanceEntryMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.QcCasesRelevanceEntry">
+        <id column="id" property="id" />
+        <result column="type" property="type" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="cases_name" property="casesName" />
+        <result column="relevance_id" property="relevanceId" />
+        <result column="name" property="name" />
+        <result column="is_deleted" property="isDeleted" />
+    </resultMap>
+
+</mapper>