浏览代码

Merge remote-tracking branch 'origin/dev/20210326_2.0.3' into dev/20210326_2.0.3

chengyao 4 年之前
父节点
当前提交
47d7ea2a03

+ 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', '医学人员');

+ 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评分";
     /**
      * 抗菌药物目录
      */

+ 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:

+ 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}]]>