Browse Source

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

chengyao 4 năm trước cách đây
mục cha
commit
dbcab5d7ed
24 tập tin đã thay đổi với 675 bổ sung270 xóa
  1. 24 13
      doc/031.20210326v2.0.2/qc_initv2.0.2.sql
  2. 77 0
      src/main/java/com/diagbot/entity/MedIndexRelevance.java
  3. 2 1
      src/main/java/com/diagbot/enums/QualityContent.java
  4. 0 4
      src/main/java/com/diagbot/enums/TimeContent.java
  5. 13 25
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  6. 334 107
      src/main/java/com/diagbot/facade/ConsoleFacade.java
  7. 30 13
      src/main/java/com/diagbot/facade/FilterFacade.java
  8. 14 0
      src/main/java/com/diagbot/facade/MedIndexRelevanceFacade.java
  9. 1 1
      src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java
  10. 16 0
      src/main/java/com/diagbot/mapper/MedIndexRelevanceMapper.java
  11. 0 1
      src/main/java/com/diagbot/mapper/MedPacsResultMapper.java
  12. 1 1
      src/main/java/com/diagbot/service/BehospitalInfoService.java
  13. 16 0
      src/main/java/com/diagbot/service/MedIndexRelevanceService.java
  14. 1 1
      src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java
  15. 20 0
      src/main/java/com/diagbot/service/impl/MedIndexRelevanceServiceImpl.java
  16. 5 15
      src/main/java/com/diagbot/task/MedIndexTask.java
  17. 1 1
      src/main/java/com/diagbot/util/ExcelUtils.java
  18. 1 1
      src/main/java/com/diagbot/vo/BasDeptInfoVO.java
  19. 38 0
      src/main/java/com/diagbot/vo/IndexTimeVO.java
  20. 3 11
      src/main/java/com/diagbot/web/BehospitalInfoController.java
  21. 3 3
      src/main/java/com/diagbot/web/ConsoleController.java
  22. 52 70
      src/main/resources/mapper/BehospitalInfoMapper.xml
  23. 21 0
      src/main/resources/mapper/MedIndexRelevanceMapper.xml
  24. 2 2
      src/main/resources/mapper/MedIndexResultMapper.xml

+ 24 - 13
doc/031.20210326v2.0.2/qc_initv2.0.2.sql

@@ -242,23 +242,16 @@ CREATE TABLE `med_outpatient_info` (
 
 
 --  菜单添加
-INSERT INTO `sys_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '医疗质量控制', '-1', 'YH-ZKK-YLZLKZ', '1', '1', '-4', '用户-医疗质量');
+INSERT INTO `sys_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '医疗质量控制', '-1', 'YH-ZKK-YLZLKZZB_XQ', '1', '1', '-4', '用户-医疗质量');
 SET @id =@@identity;
 INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', @id, NULL);
 INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', @id, NULL);
-
-INSERT INTO `sys_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '医疗质量控制指标', @id, 'YH-ZKK-YLZLKZZB_XQ', '1', '1', '0', '用户-科室主任-医疗质量控制指标_详情');
-SET @id2 =@@identity;
-INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', @id2, NULL);
-INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', @id2, NULL);
-
-
-INSERT INTO `sys_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '医疗质量控制指标', 'FUNC000110', '/qc/behospitalInfo/getMedQualityCoList', 'ALL', '医疗质量控制指标表', NULL);
+INSERT INTO `sys_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '医疗质量控制指标', 'FUNC000110', '/console/medicalRecordIndicator', 'ALL', '医疗质量控制指标表', NULL);
 SET @id3 =@@identity;
 INSERT INTO `sys_role_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', @id3, NULL);
 INSERT INTO `sys_role_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', @id3, NULL);
 
-INSERT INTO `sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `remark`, `order_nu`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', @id2, @id3, '医疗质量控制指标表', NULL);
+INSERT INTO `sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `remark`, `order_nu`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', @id , @id3, '医疗质量控制指标表', NULL);
 
 
 -- 病案指标列表返回
@@ -284,14 +277,12 @@ CREATE TABLE `med_index_result` (
   `operation_complete_result` double(5,0) DEFAULT NULL COMMENT '手术相关记录完成率-分母',
   `implants_result` double(5,0) DEFAULT NULL COMMENT '植入物相关记录符合率-分母',
   `blood_result` double(5,0) DEFAULT NULL COMMENT '临床用血相关记录符合率-分母',
-  `
-ward_round_result` double(5,0) DEFAULT NULL COMMENT '医师查房记录完整率-分母',
+  `ward_round_result` double(5,0) DEFAULT NULL COMMENT '医师查房记录完整率-分母',
   `rescue_result` double(5,0) DEFAULT NULL COMMENT '患者抢救记录及时完成率-分母',
   `sec_file_result` double(5,0) DEFAULT NULL COMMENT '出院患者病历2日归档率-分子',
   `file_complete_result` double(5,0) DEFAULT NULL COMMENT '出院患者病历归档完整率-分母',
   `no_copy_result` double(5,0) DEFAULT NULL COMMENT '不合理复制病历发生率-分母',
   `record_sign_result` double(5,0) DEFAULT NULL COMMENT '知情同意书规范签署率-分母',
-  `fir_record_result` double(5,0) DEFAULT NULL COMMENT '甲级病历率-分母',
   `start_date` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,
   `end_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
   `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
@@ -304,3 +295,23 @@ ward_round_result` double(5,0) DEFAULT NULL COMMENT '医师查房记录完整率
 ) ENGINE=InnoDB AUTO_INCREMENT=1207 DEFAULT CHARSET=utf8;
 
 
+CREATE TABLE `med_index_relevance` (
+  `id` int(10) NOT NULL AUTO_INCREMENT,
+  `index_result_id` int(10) DEFAULT NULL COMMENT '主缓存表id',
+  `relevance_type` int(10) DEFAULT NULL COMMENT '病历条目关联表type',
+  `hospital_id` tinyint(3) DEFAULT NULL COMMENT '医院ID',
+  `behospital_code` varchar(255) DEFAULT NULL COMMENT '病人病历号',
+  `start_date` datetime DEFAULT NULL,
+  `end_date` datetime DEFAULT NULL,
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `index_all` (`relevance_type`,`hospital_id`,`behospital_code`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=345204 DEFAULT CHARSET=utf8;
+
+-- 注意 param参数为医院id,多家医院需执行对应医院id
+INSERT INTO `sys_task_cron` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `cron_code`, `cron`, `param`, `is_used`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', 'TASK_INDEX', '0 0 3 * * ?', '4', '1', '获取当前时间前一天的病案指标');
+

+ 77 - 0
src/main/java/com/diagbot/entity/MedIndexRelevance.java

@@ -0,0 +1,77 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-04-30
+ */
+@Data
+public class MedIndexRelevance implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 主缓存表id
+     */
+    private Integer indexResultId;
+
+    /**
+     * 病历条目关联表type
+     */
+    private Integer relevanceType;
+
+    /**
+     * 医院ID
+     */
+    private String hospitalId;
+
+    /**
+     * 病人病历号
+     */
+    private String behospitalCode;
+
+    private String startDate;
+
+    private String endDate;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+
+}

+ 2 - 1
src/main/java/com/diagbot/enums/QualityContent.java

@@ -13,6 +13,7 @@ public class QualityContent {
     public static final String NUMBER_OF_HOSPITAL = "入院人数";
     public static final String NO_RECORD_OPERATION = "无病案首页手术患者";
     public static final String NO_RECORD_OPERATION_PATHOLOGY = "无病案首页手术病理患者";
+    public static final double pathologyFee = 68.00;
     /**
      * 是否需要用到医嘱的指标名称
      */
@@ -92,7 +93,7 @@ public class QualityContent {
      * 医嘱CT相关
      */
     public static String[][] CT_LIST = {{"CT"},{"X线"}};
-    public static String[][] CT_REGULATION = {{"ATCH","TCT","HCT","OCT","NCT","LCT","ACT"},{"取消"},{"暂停"}};
+    public static String[][] CT_REGULATION = {{"ATCH"},{"TCT"},{"HCT"},{"OCT"},{"NCT"},{"LCT"},{"ACT"},{"取消"},{"暂停"}};
 
     /**
      * 医嘱手术相关

+ 0 - 4
src/main/java/com/diagbot/enums/TimeContent.java

@@ -30,10 +30,6 @@ public class TimeContent {
             "2021-11-06", "2021-11-07", "2021-11-13", "2021-11-14", "2021-11-20", "2021-11-21", "2021-11-27", "2021-11-28",//十一月周末假日
             "2021-12-04", "2021-12-06", "2021-12-11", "2021-12-12", "2021-12-18", "2021-12-19", "2021-12-25", "2021-12-26" //十二周末假日
     );
-
-    public static List<String> getHolidaysTimeList() {
-        return HolidaysTimeList;
-    }
 }
 
 

+ 13 - 25
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -15,10 +15,8 @@ import com.diagbot.util.*;
 import com.diagbot.vo.*;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Param;
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
@@ -162,7 +160,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
      * @param
      * @return
      */
-    public List<ColumnDTO> getMedQualityControl() {
+    public List<ColumnDTO> getMedQualityControl(BasDeptInfoVO basDeptInfoVO) {
         long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
         //colums
         QueryWrapper<SysHospitalSet> hospitalSetQueryWrapper = new QueryWrapper<>();
@@ -174,32 +172,23 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         if (hospitalSet == null || StringUtil.isBlank(hospitalSet.getValue())) {
             return columns;
         }
+       List<String> strings = new ArrayList<>();
 
         //表头生成
         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) {
+                strings.add(keyValue[1]);
+            }
+        }
+        for (String str : strings) {
+            if(str.contains(basDeptInfoVO.getInputStr())){
                 ColumnDTO columnNum = new ColumnDTO();
                 columnNum.setOrderNo(orderNo);
-                columnNum.setId(Long.valueOf(keyValue[0]));
-                columnNum.setFieldName("entry_" + keyValue[0] + "_name");
-                columnNum.setColumnName(keyValue[1]);
+                columnNum.setColumnName(str);
+                columnNum.setFieldName("entry_" + str + "_name");
                 columnNum.setIsShow(1);
                 columns.add(columnNum);
                 orderNo++;
@@ -331,7 +320,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         List<RecordContentDTO> recordContentDTOList = medicalRecordFacade.getRecordContentFac(recordContentVO);
         String recTitle = "";
         // 解密数据
-        if (false  && encryptFlag) {
+        if (encryptFlag) {
             try {
                 EncrypDES encrypDES = new EncrypDES();
                 for (RecordContentDTO recordContentDTO : recordContentDTOList) {
@@ -617,7 +606,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("behospital_code", analyzeVO.getBehospitalCode())
                 .eq("hospital_id", hospitalId)
-                .in("mode_id", Arrays.asList(53))
+                .in("mode_id", Arrays.asList(53,16))
                 .orderByAsc("rec_date")
         );
         List<MedicalRecordDTO> medicalRecordDTOList = BeanUtil.listCopyTo(recordList, MedicalRecordDTO.class);
@@ -731,7 +720,6 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         //使用sql进行关联优化数据查询
         List<MedPacsResultDTO> medPacsResultList = medPacsResultFacade.getMedPacsResultList(behospitalInfoList.get(0));
 
-
         /**
          * 结构化/文书数据兼容处理
          */
@@ -933,7 +921,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         addData("日常病程录", recMap, medrecVoList);
 
         DataWithKey("知情同意书", medicalRecordDTOList, medrecVoList);
-        addDataWithInnerKey("知情同意书", recMap, medrecVoList);
+        //addDataWithInnerKey("知情同意书", recMap, medrecVoList);
         addDataWithInnerKey("谈话告知书", recMap, medrecVoList);
 
         //==============文书====================
@@ -2327,7 +2315,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
      * @param filterVO
      * @return
      */
-    public Map<String,Long> selectOperationNum( FilterVO filterVO){
+    public List<Map<String, String>> selectOperationNum( FilterVO filterVO){
         return   baseMapper.selectOperationNum(filterVO);
     }
     /**

+ 334 - 107
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -21,6 +21,7 @@ import com.google.common.collect.Lists;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Param;
+import org.apache.poi.hssf.record.DVALRecord;
 import org.apache.poi.ss.formula.functions.Na;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -77,7 +78,8 @@ public class ConsoleFacade {
     private DoctorAdviceFacade doctorAdviceFacade;
     @Autowired
     private MedIndexResultFacade medIndexResultFacade;
-
+    @Autowired
+    private MedIndexRelevanceFacade medIndexRelevanceFacade;
     //region-----------------------聚合接口开始-------------------------------
 
     /**
@@ -417,6 +419,8 @@ public class ConsoleFacade {
         Long ct = triggeringRulesMap.get("CT");
         //MR
         Long mr = triggeringRulesMap.get("MR");
+        //细菌培养
+        Long bacterialCulture = 0L;
         //抗菌药物
         Long antibiosis = 0L;
         //恶性肿瘤化学治疗
@@ -508,6 +512,16 @@ public class ConsoleFacade {
                 hashMapArrayList.add(stringStringHashMap);
             }
         }
+        //细菌培养
+        if (indexName.equals(QualityContent.XJPY_JCJL_FHL)||indexName.equals(QualityContent.QB)) {
+            if (bacterialCultureNum != null && bacterialCulture != null) {
+                Map<String, String> stringStringHashMap = new LinkedHashMap<>();
+                stringStringHashMap.put("name", QualityContent.XJPY_JCJL_FHL);
+                stringStringHashMap.put("notCopiedStr", getResult(bacterialCultureNum - bacterialCulture, bacterialCultureNum));
+                stringStringHashMap.put("num", bacterialCultureNum.toString());
+                hashMapArrayList.add(stringStringHashMap);
+            }
+        }
         //抗菌
         if (indexName.equals(QualityContent.KJYW_SY_FHL)||indexName.equals(QualityContent.QB)) {
             if (antibiosisFeeNum != null && antibiosis != null) {
@@ -568,17 +582,24 @@ public class ConsoleFacade {
     /**
      * 病案指标数据保存
      *
-     * @param filterVO
+     * @param IndexTimeVO
      * @return 2170
      */
     @Transactional
-    public Boolean saveMedicaIndicator(FilterVO filterVO){
+    public Boolean saveMedicaIndicator(IndexTimeVO IndexTimeVO){
+        FilterVO filterVO = new FilterVO();
+        BeanUtils.copyProperties(IndexTimeVO,filterVO);
         List<String> timeList = filterFacade.getTimeList(filterVO);
         QueryWrapper<MedIndexResult> qw = new QueryWrapper<>();
         qw.eq("hospital_id",filterVO.getHospitalId());
         qw.ge("start_date",filterVO.getStartDate()+" 00:00:00");
         qw.le("end_date", handleTime(filterVO.getEndDate()));
         medIndexResultFacade.remove(qw);
+        QueryWrapper<MedIndexRelevance> qwa = new QueryWrapper<>();
+        qwa.eq("hospital_id",filterVO.getHospitalId());
+        qwa.ge("start_date",filterVO.getStartDate()+" 00:00:00");
+        qwa.le("end_date", handleTime(filterVO.getEndDate()));
+        medIndexRelevanceFacade.remove(qwa);
         for (String startTime : timeList) {
             filterVO.setStartDate(startTime);
             filterVO.setEndDate( handleTime(startTime));
@@ -587,7 +608,6 @@ public class ConsoleFacade {
         return true;
     }
 
-
     /**
      * 病案指标数据保存
      *
@@ -596,31 +616,97 @@ public class ConsoleFacade {
      */
     public void getMedicaIndicator(FilterVO filterVO){
         MedIndexResult medIndexResult = new MedIndexResult();
-        Map<String, Long> selectOperationNumMap = behospitalInfoFacade.selectOperationNum(filterVO);
-        //出院人数
-        Long startCount = selectOperationNumMap.get(QualityContent.DISCHARGED_PATIENTS);
+       List<Map<String, String>> selectOperationNumMap = behospitalInfoFacade.selectOperationNum(filterVO);
+            Set<String> outHospitalCode = new CopyOnWriteArraySet<>();
+            Set<String> operationCode = new CopyOnWriteArraySet<>();
+            Set<String> operationPathologyCode = new CopyOnWriteArraySet<>();
+            Set<String> antibiosisCode = new CopyOnWriteArraySet<>();
+            List<String> adviceVerify = adviceVerify(filterVO);
             Long operationFeeNum = 0L;
-                filterVO.setFlagStr("2");
-        List<MedManageParamsDTO> doctorAdviceMedManageParams = behospitalInfoFacade.getMedManageParams(filterVO);
-                Map<String, Long> adviceNum = getAdviceNum(filterVO,doctorAdviceMedManageParams);
-                //手术人数
-                operationFeeNum = selectOperationNumMap.get("operationFee");
-                Long operation = adviceNum.get("operation");
-                operationFeeNum = operationFeeNum + operation;
+            filterVO.setFlagStr("2");
+            List<MedManageParamsDTO> doctorAdviceMedManageParams = behospitalInfoFacade.getMedManageParams(filterVO);
+         Map<String, Set<String>> adviceNum = getAdviceNum(filterVO, doctorAdviceMedManageParams);
+        if(ListUtil.isNotEmpty(selectOperationNumMap)) {
+            for (Map<String, String> stringStringMap : selectOperationNumMap) {
+                String behospitalCode = stringStringMap.get("behospitalCode");
+                //出院code
+                outHospitalCode.add(behospitalCode);
+                if (Double.parseDouble(stringStringMap.get("operationFee")) > 0) {
+                    //手术code
+                    operationCode.add(behospitalCode);
+                }
+                if (Double.parseDouble(stringStringMap.get("operationFee")) > 0 && Double.parseDouble(stringStringMap.get("pathologyFee")) > QualityContent.pathologyFee) {
+                    //病理code
+                    operationPathologyCode.add(behospitalCode);
+                }
+                if (Double.parseDouble(stringStringMap.get("antibiosisFee")) > 0) {
+                    //抗菌code
+                    antibiosisCode.add(behospitalCode);
+                }
+            }
+        }
+                if(ListUtil.isNotEmpty(adviceVerify)){
+                    for (String code : adviceVerify) {
+                        outHospitalCode.add(code);
+                    }
+                }
+            Long startCount = Long.valueOf(outHospitalCode.size());
+            //手术人
+                Set<String> operationList = adviceNum.get("operation");
+                if(operationList!=null&&operationList.size()>0){
+                    for (String s : operationList) {
+                        operationCode.add(s);
+                    }
+                }
+                if(operationCode.size()>0&&operationCode!=null) {
+                    operationFeeNum = Long.valueOf(operationCode.size());
+                }
                 //CT人数
-                Long CTNum = adviceNum.get("CT");
+                  Set<String> ctList = adviceNum.get("CT");
+                Long CTNum=0L;
+                if(ctList!=null&&ctList.size()>0) {
+                    CTNum = Long.valueOf(ctList.size());
+                }
                 //MR人数
-                Long MRNum = adviceNum.get("MR");
+                  Set<String> mrList = adviceNum.get("MR");
+                Long MRNum=0L;
+                if(mrList!=null&&mrList.size()>0) {
+                    MRNum = Long.valueOf(mrList.size());
+                }
                 //手术病理人数
-                Long operationPathologyFeeNum = selectOperationNumMap.get("operationPathologyFee");
-                Long operationPathology = adviceNum.get("operationPathology");
-                operationPathologyFeeNum = operationPathologyFeeNum + operationPathology;
+                Long operationPathologyFeeNum=0L;
+                   Set<String> operationPathologyList = adviceNum.get("operationPathology");
+                if(operationPathologyList!=null&&operationPathologyList.size()>0){
+                    for (String s : operationPathologyList) {
+                        operationPathologyCode.add(s);
+                    }
+                }
+                if(operationPathologyCode.size()>0&&operationPathologyCode!=null) {
+                    operationPathologyFeeNum = Long.valueOf(operationPathologyCode.size());
+                }
+                //细菌培养人数
+                  Set<String> bacterialCultureList = adviceNum.get("bacterialCulture");
+                Long bacterialCultureNum=0L;
+                if(bacterialCultureList!=null&&bacterialCultureList.size()>0) {
+                    bacterialCultureNum = Long.valueOf(bacterialCultureList.size());
+                }
                 //抗菌药物人数
-                Long antibiosisFeeNum = selectOperationNumMap.get("antibiosisFee");
-                Long antibiosisNum = adviceNum.get("antibiosis");
-                antibiosisFeeNum = antibiosisFeeNum + antibiosisNum;
+                  Set<String> antibiosisList = adviceNum.get("antibiosis");
+                if(antibiosisList!=null&&antibiosisList.size()>0) {
+                    for (String s : antibiosisList) {
+                        antibiosisCode.add(s);
+                    }
+                }
+                Long antibiosisFeeNum =0L;
+                if(antibiosisCode.size()>0&&antibiosisCode!=null) {
+                    antibiosisFeeNum = Long.valueOf(antibiosisCode.size());
+                }
                 //恶性肿瘤化学治疗人数
-                Long chemotherapyMalignantTumorsNum = adviceNum.get("chemotherapyMalignantTumors");
+                Set<String> chemotherapyMalignantTumorsList = adviceNum.get("chemotherapyMalignantTumors");
+                Long chemotherapyMalignantTumorsNum =0L;
+                if(chemotherapyMalignantTumorsList!=null&&chemotherapyMalignantTumorsList.size()>0) {
+                    chemotherapyMalignantTumorsNum=Long.valueOf(chemotherapyMalignantTumorsList.size());
+                }
                 //出院人数
                     if(startCount!=null){
                         medIndexResult.setAdmissionResult(Double.valueOf(startCount));
@@ -641,6 +727,10 @@ public class ConsoleFacade {
                     if (operationPathologyFeeNum != null) {
                         medIndexResult.setPathologyResult(Double.valueOf(operationPathologyFeeNum));
                     }
+                 //细菌培养人数
+                    if (bacterialCultureNum != null) {
+                        medIndexResult.setGermResult(Double.valueOf(bacterialCultureNum));
+                    }
                 //抗菌人数
                     if (antibiosisFeeNum != null ) {
                         medIndexResult.setAntibiosisResult(Double.valueOf(antibiosisFeeNum));
@@ -656,28 +746,127 @@ public class ConsoleFacade {
         MedIndexFilterVO timeVo = new MedIndexFilterVO();
         BeanUtils.copyProperties(filterVO,timeVo);
         timeTrans(timeVo);
-        Map<String, Object> baseIndex = behospitalInfoFacade.getBaseIndex(timeVo);
+            Set<String> rescueCode = new CopyOnWriteArraySet<>();
+            Set<String> bloodCode = new CopyOnWriteArraySet<>();
         //指标二十七
 
-        //指标十七 医师查房记录
+        //指标18 医师查房记录 查询直接返回 -code需要加载
 
-        //指标十八 抢救记录
-        rescueMethods(doctorAdviceMedManageParams,medIndexResult);
-        //指标十九 出院患者病历2日归档
-        getfileSecAmounts(filterVO,baseIndex,medIndexResult);
-        //指标十四 手术记录
+        //指标19 抢救记录
+        rescueMethods(doctorAdviceMedManageParams,medIndexResult,rescueCode);
+        //指标20 出院患者病历2日归档
+        getfileSecAmounts(filterVO,medIndexResult);
+        //指标15 手术记录
         medIndexResult.setOperationCompleteResult(Double.parseDouble(operationFeeNum+""));
-        //指标十六  临床用血相关记录符合率
-        filterVO.setFlagStr("1");
-        List<MedManageParamsDTO> medManageParams = behospitalInfoFacade.getMedManageParams(filterVO);
-        bloodMethods(doctorAdviceMedManageParams, medManageParams,medIndexResult);
+        //指标17  临床用血相关记录符合率
+        bloodMethods(doctorAdviceMedManageParams, filterVO,medIndexResult,bloodCode);
         medIndexResult.setHospitalId(filterVO.getHospitalId());
         medIndexResult.setStartDate(filterVO.getStartDate());
         medIndexResult.setEndDate(filterVO.getEndDate());
         medIndexResult.setGmtCreate(new Date());
         medIndexResultFacade.save(medIndexResult);
-
-    }
+        Integer id = medIndexResult.getId();
+        MedIndexRelevance medIndexRelevance = new MedIndexRelevance();
+        medIndexRelevance.setIndexResultId(id);
+        medIndexRelevance.setHospitalId(filterVO.getHospitalId());
+        medIndexRelevance.setStartDate(filterVO.getStartDate());
+        medIndexRelevance.setEndDate(filterVO.getEndDate());
+        medIndexRelevance.setGmtCreate(new Date());
+            if(outHospitalCode.size()>0&&outHospitalCode!=null) {
+                medIndexRelevance.setRelevanceType(4);
+                for (String Code : outHospitalCode) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+                medIndexRelevance.setRelevanceType(6);
+                for (String Code : outHospitalCode) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+                medIndexRelevance.setRelevanceType(7);
+                for (String Code : outHospitalCode) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+            }
+            if(operationCode.size()>0&&operationCode!=null) {
+                medIndexRelevance.setRelevanceType(5);
+                for (String Code : operationCode) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+            }
+        if(ctList!=null&&ctList.size()>0) {
+            medIndexRelevance.setRelevanceType(8);
+            for (String CTCode : ctList) {
+                medIndexRelevance.setBehospitalCode(CTCode);
+                medIndexRelevanceFacade.save(medIndexRelevance);
+            }
+        }
+        if(mrList!=null&&mrList.size()>0) {
+            medIndexRelevance.setRelevanceType(9);
+            for (String MrCode : mrList) {
+                medIndexRelevance.setBehospitalCode(MrCode);
+                medIndexRelevanceFacade.save(medIndexRelevance);
+            }
+        }
+            if(operationPathologyCode.size()>0&&operationPathologyCode!=null) {
+                medIndexRelevance.setRelevanceType(10);
+                for (String Code : operationPathologyCode) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+            }
+            if(bacterialCultureList!=null&&bacterialCultureList.size()>0) {
+                medIndexRelevance.setRelevanceType(11);
+                for (String Code : bacterialCultureList) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+            }
+            if(antibiosisCode.size()>0&&antibiosisCode!=null) {
+                medIndexRelevance.setRelevanceType(12);
+                for (String Code : antibiosisCode) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+            }
+            if(chemotherapyMalignantTumorsList!=null&&chemotherapyMalignantTumorsList.size()>0) {
+                medIndexRelevance.setRelevanceType(13);
+                for (String Code : chemotherapyMalignantTumorsList) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+            }
+            if(operationCode.size()>0&&operationCode!=null) {
+                medIndexRelevance.setRelevanceType(15);
+                for (String Code : operationCode) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+            }
+            if(bloodCode.size()>0&&bloodCode!=null) {
+                medIndexRelevance.setRelevanceType(17);
+                for (String Code : bloodCode) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+            }
+            if(outHospitalCode.size()>0&&outHospitalCode!=null) {
+                medIndexRelevance.setRelevanceType(18);
+                for (String Code : outHospitalCode) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+            }
+            if(rescueCode.size()>0&&rescueCode!=null) {
+                medIndexRelevance.setRelevanceType(19);
+                for (String Code : rescueCode) {
+                    medIndexRelevance.setBehospitalCode(Code);
+                    medIndexRelevanceFacade.save(medIndexRelevance);
+                }
+            }
+        }
     /**
      * 两数据相除得到百分比
      * @param i
@@ -757,17 +946,18 @@ public class ConsoleFacade {
     /**
      * 遍历医嘱信息存入相关数据
      */
-    public Map<String,Long> getAdviceNum(FilterVO filterVO,List<MedManageParamsDTO> doctorAdviceMedManageParamsList) {
+    public Map<String,Set<String>> getAdviceNum(FilterVO filterVO, List<MedManageParamsDTO> doctorAdviceMedManageParamsList) {
         CopyOnWriteArrayList<MedManageParamsDTO> doctorAdviceMedManageParams = new CopyOnWriteArrayList<>(doctorAdviceMedManageParamsList);
         String indexName = filterVO.getIndexName();
-        Map map = new HashMap<String,Integer>();
-        List<String> CTBehospitalCode = new CopyOnWriteArrayList<>();
-        List<String> operationPathologyBehospitalCode = new CopyOnWriteArrayList<>();
-        List<String> MRBehospitalCode = new CopyOnWriteArrayList<>();
-        List<String> operationBehospitalCode = new CopyOnWriteArrayList<>();
-        List<String> pathologyBehospitalCode = new CopyOnWriteArrayList<>();
-        List<String> antibiosisBehospitalCode = new CopyOnWriteArrayList<>();
-        List<String> chemotherapyMalignantTumorsBehospitalCode = new CopyOnWriteArrayList<>();
+        Map mapCode = new HashMap<String,List<String>>();
+        Set<String> CTBehospitalCode = new CopyOnWriteArraySet<>();
+        Set<String> operationPathologyBehospitalCode = new CopyOnWriteArraySet<>();
+        Set<String> MRBehospitalCode = new CopyOnWriteArraySet<>();
+        Set<String> operationBehospitalCode = new CopyOnWriteArraySet<>();
+        Set<String> pathologyBehospitalCode = new CopyOnWriteArraySet<>();
+        Set<String> bacterialCultureCode = new CopyOnWriteArraySet<>();
+        Set<String> antibiosisBehospitalCode = new CopyOnWriteArraySet<>();
+        Set<String> chemotherapyMalignantTumorsBehospitalCode = new CopyOnWriteArraySet<>();
         //无首页code
         List<String> behospitalCodeList = adviceVerify(filterVO);
         //首页为肿瘤code
@@ -859,6 +1049,14 @@ public class ConsoleFacade {
                                         }
                                     }
                                 }
+                                //细菌培养
+                                if (indexName.equals(QualityContent.XJPY_JCJL_FHL) || indexName.equals(QualityContent.QB)) {
+                                    if(!bacterialCultureCode.contains(behospitalCode)){
+                                        if(daItemName.contains(QualityContent.BACTERIAL_CULTURE)){
+                                            bacterialCultureCode.add(behospitalCode);
+                                        }
+                                    }
+                                }
                             }
                         }
                         //获取为长期医嘱或临时医嘱的医嘱
@@ -891,43 +1089,48 @@ public class ConsoleFacade {
         }finally {
             myPool.shutdown();
 
-            if(ListUtil.isEmpty(CTBehospitalCode)){
-                map.put("CT",Long.valueOf(0));
+            if(CTBehospitalCode !=null && CTBehospitalCode.size()>0){
+                mapCode.put("CT",CTBehospitalCode);
             }else {
-                map.put("CT",Long.valueOf(CTBehospitalCode.size()));
+                mapCode.put("CT",null);
             }
-            if(ListUtil.isEmpty(MRBehospitalCode)){
-                map.put("MR",Long.valueOf(0));
+            if(MRBehospitalCode!=null && MRBehospitalCode.size()>0){
+                mapCode.put("MR",MRBehospitalCode);
             }else {
-                map.put("MR",Long.valueOf(MRBehospitalCode.size()));
+                mapCode.put("MR",null);
             }
-            if(ListUtil.isEmpty(operationBehospitalCode)){
-                map.put("operation",Long.valueOf(0));
+            if(operationBehospitalCode!=null && operationBehospitalCode.size()>0){
+                mapCode.put("operation",operationBehospitalCode);
             }else {
-                map.put("operation",Long.valueOf(operationBehospitalCode.size()));
+                mapCode.put("operation",null);
             }
-            if(ListUtil.isEmpty(operationBehospitalCode)||ListUtil.isEmpty(operationPathologyBehospitalCode)){
-                map.put("operationPathology",Long.valueOf(0));
-            }else {
+            if((operationBehospitalCode!=null)&&(pathologyBehospitalCode!=null&&pathologyBehospitalCode.size()>0)){
                 for (String operation : operationBehospitalCode) {
                     if(pathologyBehospitalCode.contains(operation)){
                         operationPathologyBehospitalCode.add(operation);
                     }
                 }
-                map.put("operationPathology",Long.valueOf(operationPathologyBehospitalCode.size()));
+                mapCode.put("operationPathology",operationPathologyBehospitalCode);
+            }else {
+                mapCode.put("operationPathology",null);
             }
-            if(ListUtil.isEmpty(antibiosisBehospitalCode)){
-                map.put("antibiosis",Long.valueOf(0));
+            if(bacterialCultureCode!=null && bacterialCultureCode.size()>0){
+                mapCode.put("bacterialCulture",bacterialCultureCode);
+
             }else {
-                map.put("antibiosis",Long.valueOf(antibiosisBehospitalCode.size()));
+                mapCode.put("bacterialCulture",null);
             }
-            if(ListUtil.isEmpty(chemotherapyMalignantTumorsBehospitalCode)){
-                map.put("chemotherapyMalignantTumors",Long.valueOf(0));
+            if(antibiosisBehospitalCode!=null && antibiosisBehospitalCode.size()>0){
+                mapCode.put("antibiosis",antibiosisBehospitalCode);
             }else {
-                map.put("chemotherapyMalignantTumors",Long.valueOf(chemotherapyMalignantTumorsBehospitalCode.size()));
+                mapCode.put("antibiosis",null);
             }
-
-            return map;
+            if(antibiosisBehospitalCode!=null && antibiosisBehospitalCode.size()>0){
+                mapCode.put("chemotherapyMalignantTumors",antibiosisBehospitalCode);
+            }else {
+                mapCode.put("chemotherapyMalignantTumors",null);
+            }
+            return mapCode;
         }
     }
     /**
@@ -2772,14 +2975,19 @@ public class ConsoleFacade {
 
     //指标十八 抢救记录
     private  List<Map<String, String>> rescueMethod( Map<String, Double> medManageParams, List<Map<String, String>> retList,Map<String, Long> triggeringRulesMap){
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
         //接受抢救的质控病历总数
         double count = medManageParams.get("rescue_result");
         String num = null;
         if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
             double rescueDo = currencyCal(count, triggeringRulesMap.get("rescueNum"));
             num = String.valueOf(rescueDo);
+            if(rescueDo<0d){
+                num = null;
+            }
+            firMap.put("num",String.valueOf(count));
         };
-        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+
         firMap.put("name","患者抢救记录及时完成率");
         firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
         retList.add(firMap);
@@ -2788,12 +2996,16 @@ public class ConsoleFacade {
 
     //指标十七 医师查房记录
     private List<Map<String, String>> WardRoundMethod( List<Map<String, String>> retList, Map<String, Object> baseIndex, Map<String, Long> triggeringRulesMap){
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
         String num = null;
         if( triggeringRulesMap.containsKey("WardRoundNum") && baseIndex.containsKey("forWorkNum") && !baseIndex.get("forWorkNum").toString().equals("0")){
             double wardRoundDo = currencyCal(baseIndex.get("forWorkNum"), triggeringRulesMap.get("WardRoundNum"));
             num = String.valueOf(wardRoundDo);
+            if(wardRoundDo<0d){
+                num = null;
+            }
+            firMap.put("num",baseIndex.get("forWorkNum").toString());
         };
-        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
         firMap.put("name","医师查房记录完成率");
         firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
         retList.add(firMap);
@@ -2802,30 +3014,42 @@ public class ConsoleFacade {
 
     //指标十四 手术记录
     private  List<Map<String, String>> operationMethod(Map<String, Double> medManageParams, List<Map<String, String>>retList, Map<String, Long> triggeringRulesMap){
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
         String operationFeeNum = medManageParams.get("operationFeeNum")+"";
         String num = null;
         if( triggeringRulesMap.containsKey("operationRecordNum") && StringUtils.isNotEmpty(operationFeeNum) && ! operationFeeNum.equals("0")){
             double operationRecordDo = currencyCal(operationFeeNum, triggeringRulesMap.get("operationRecordNum"));
             num = String.valueOf(operationRecordDo);
+            if(operationRecordDo<0d){
+                num = null;
+            }
+            firMap.put("num",operationFeeNum);
         };
-        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
         firMap.put("name","手术相关记录完成率");
+        if("0.0".equals(num)){
+            num = "0.00";
+        }
         firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+
         retList.add(firMap);
         return retList;
     }
 
     //指标十六  临床用血相关记录符合率
     private  List<Map<String, String>> bloodMethod( List<Map<String, String>>retList,Map<String, Double> bloodRes,Map<String, Long> triggeringRulesMap){
-
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
         double count = bloodRes.get("blood_result");
         String num = null;
         if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
             //指标十七
-            double rescueDo = currencyCal(count, triggeringRulesMap.get("bloodNum"));
-            num = String.valueOf(rescueDo);
+            double bloodDo = currencyCal(count, triggeringRulesMap.get("bloodNum"));
+            num = String.valueOf(bloodDo);
+            if(bloodDo<0d){
+                num = null;
+            }
+            firMap.put("num",String.valueOf(count));
         }
-        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+
         firMap.put("name","临床用血相关记录符合率");
         firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
         retList.add(firMap);
@@ -2845,15 +3069,17 @@ public class ConsoleFacade {
 
     //指标十九 出院患者病历2日归档
     private List<Map<String, String>> getfileSecAmount(Map<String, Double> medManageParams, List<Map<String, String>>retList, Map<String, Object> baseIndex){
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
         DecimalFormat df = new DecimalFormat("#0.00");
         double count = medManageParams.get("sec_file_result");
         String num = null;
-        if(StringUtils.isNotEmpty( baseIndex.get("firWorkNum").toString()) && ! baseIndex.get("firWorkNum").toString().equals("0") ){
-            double retNum =count* 100/Double.parseDouble(baseIndex.get("firWorkNum").toString());
+        if(StringUtils.isNotEmpty( baseIndex.get("sevenWorkNum").toString()) && ! baseIndex.get("sevenWorkNum").toString().equals("0") ){
+            double retNum =count* 100/Double.parseDouble(baseIndex.get("sevenWorkNum").toString());
             double firGradeStr = Double.parseDouble(df.format(retNum));
             num = String.valueOf(firGradeStr);
+            firMap.put("num",baseIndex.get("sevenWorkNum").toString());
         }
-        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+
         firMap.put("name","出院患者病历2日归档率");
         firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
         retList.add(firMap);
@@ -2880,10 +3106,13 @@ public class ConsoleFacade {
             if(secOp.isPresent()){
                 secMouth = secOp.get();
             }
+            if(secMouth == 0d){
+                secMouth = 5d;
+            }
             //指标一
             String num1 = "0";
             if(secMouth != 0d && secMouth != null && StringUtils.isNotEmpty( baseIndex.get("firWorkNum").toString())){
-                num1 = String.valueOf(Math.ceil(Double.parseDouble(baseIndex.get("firWorkNum").toString()) / secMouth));
+                num1 = String.valueOf(Math.round(Double.parseDouble(baseIndex.get("firWorkNum").toString()) / secMouth));
             }
             LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
             firMap.put("name","住院病案管理人员月均负担出院患者病历数");
@@ -2898,10 +3127,13 @@ public class ConsoleFacade {
             if(firOp.isPresent()){
                 firMouth = firOp.get();
             }
+            if(firMouth == 0d){
+                firMouth = 5d;
+            }
             String num3 = "0";
             if(firMouth != 0d && firMouth != null  && StringUtils.isNotEmpty( baseIndex.get("secWorkNum").toString())){
                 //指标二
-                num3 = String.valueOf(Math.ceil(Double.parseDouble(baseIndex.get("secWorkNum").toString())/firMouth));
+                num3 = String.valueOf(Math.round(Double.parseDouble(baseIndex.get("secWorkNum").toString())/firMouth));
             }
             LinkedHashMap<String, String> thrMap = new LinkedHashMap<>();
             thrMap.put("name","门诊病案管理人员月均负担门诊患者病历数");
@@ -2916,11 +3148,13 @@ public class ConsoleFacade {
             if(thrOp.isPresent()){
                 thrMouth = thrOp.get();
             }
-
+            if(thrMouth == 0d){
+                thrMouth = 5d;
+            }
             //指标三
             String num2 = "0";
             if(thrMouth != 0d && thrMouth != null && StringUtils.isNotEmpty( baseIndex.get("firWorkNum").toString())){
-                num2 = String.valueOf(Math.ceil(Double.parseDouble(baseIndex.get("firWorkNum").toString())/thrMouth));
+                num2 = String.valueOf(Math.round(Double.parseDouble(baseIndex.get("firWorkNum").toString())/thrMouth));
 
             }
             LinkedHashMap<String, String> secMap = new LinkedHashMap<>();
@@ -2936,6 +3170,7 @@ public class ConsoleFacade {
         DecimalFormat df = new DecimalFormat("0.00");
         if(indexName.equals(QualityContent.JJBLL)||indexName.equals(QualityContent.QB)) {
             //指标二十七 -甲级病历率
+        LinkedHashMap<String, String> fouMap = new LinkedHashMap<>();
             Double firRecord = 0d;
             String num4= null;
             if(StringUtils.isNotEmpty( baseIndex.get("forWorkNum").toString())){
@@ -2944,9 +3179,9 @@ public class ConsoleFacade {
             if( firRecord != 0d && StringUtils.isNotEmpty( baseIndex.get("sixWorkNum").toString()) ){
                 double retNum = Double.parseDouble(baseIndex.get("sixWorkNum").toString()) * 100 / firRecord;
                 double firGradeStr = Double.parseDouble(df.format(retNum));
-                num4 = String.valueOf(Math.ceil(firGradeStr));
+                num4 = String.valueOf(firGradeStr);
+                fouMap.put("num",String.valueOf(firRecord));
             }
-            LinkedHashMap<String, String> fouMap = new LinkedHashMap<>();
             fouMap.put("name","甲级病历率");
             fouMap.put("notCopiedStr",StringUtils.isEmpty(num4) ? "0.00%":(num4+"%"));
             retList.add(fouMap);
@@ -2958,8 +3193,8 @@ public class ConsoleFacade {
     /**
      * ==============================后台维护===============================
      */
-    //指标十八 抢救记录
-    private  void rescueMethods(List<MedManageParamsDTO> medManageParams,MedIndexResult medIndexResult){
+    //指标19 抢救记录
+    private  void rescueMethods(List<MedManageParamsDTO> medManageParams,MedIndexResult medIndexResult, Set<String> rescueCode){
         List<MedManageParamsDTO> manageList= new ArrayList<>();
         List<String> rescueDrugList = QualityContent.RESCUEDRUGLIST;
         for (int i = 0; i < medManageParams.size(); i++) {
@@ -2967,12 +3202,12 @@ public class ConsoleFacade {
             String doctorAdviceType = medManageParams.get(i).getDoctorAdviceType();
             String da_status = medManageParams.get(i).getDaStatus();
             for (String str : rescueDrugList) {
-                if(StringUtils.isNotEmpty(daItemName) && daItemName.contains(str) && StringUtils.isNotEmpty(doctorAdviceType) && doctorAdviceType.equals(QualityContent.STAT_ORDER) && (StringUtils.isEmpty(da_status) || (StringUtils.isNotEmpty(da_status) && ! doctorAdviceType.equals(QualityContent.CANCELLATION_ORDER)))){
+                if(StringUtils.isNotEmpty(daItemName) && daItemName.contains(str) && StringUtils.isNotEmpty(doctorAdviceType) && doctorAdviceType.equals(QualityContent.STAT_ORDER) && (StringUtils.isEmpty(da_status) || (StringUtils.isNotEmpty(da_status) && ! da_status.equals(QualityContent.CANCELLATION_ORDER)))){
                     manageList.add(medManageParams.get(i));
+                    rescueCode.add(medManageParams.get(i).getBehospitalCode());
                 }
             }
         }
-
         //接受抢救的质控病历总数
         double count = manageList.stream().map(MedManageParamsDTO::getBehospitalCode).distinct().count();
         if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
@@ -2980,8 +3215,10 @@ public class ConsoleFacade {
         }
     }
 
-    //指标十六  临床用血相关记录符合率
-    private void bloodMethods(List<MedManageParamsDTO> doctorAdviceList, List<MedManageParamsDTO> medManageParams,MedIndexResult medIndexResult){
+    //指标17  临床用血相关记录符合率
+    private void bloodMethods(List<MedManageParamsDTO> doctorAdviceList,FilterVO filterVO,MedIndexResult medIndexResult, Set<String> bloodCode){
+        filterVO.setFlagStr("1");
+        List<MedManageParamsDTO> medManageParams = behospitalInfoFacade.getMedManageParams(filterVO);
         Set<String> manageList= new CopyOnWriteArraySet<>();
         List<String> blood_list = QualityContent.BLOODLIST;
         //lis项目存在用血住院病历号
@@ -2996,10 +3233,10 @@ public class ConsoleFacade {
         doctorAdviceList.parallelStream()
                 .filter(obj -> beCode.contains(obj.getBehospitalCode()) && obj.getDoctorAdviceType()
                         .equals(QualityContent.STAT_ORDER) && blood_list.contains(obj.getDaItemName()) &&
-                        (StringUtils.isEmpty(obj.getDaStatus())) || (StringUtils.isNotEmpty(obj.getDaStatus()) && ! obj.getDaStatus()
-                        .equals(QualityContent.CANCELLATION_ORDER)))
+                        (StringUtils.isEmpty(obj.getDaStatus()) || (StringUtils.isNotEmpty(obj.getDaStatus()) && ! obj.getDaStatus()
+                        .equals(QualityContent.CANCELLATION_ORDER))))
                 .distinct()
-                .map(obj -> manageList.add(obj.getBehospitalCode()))
+                .map(obj -> {manageList.add(obj.getBehospitalCode());return bloodCode.add(obj.getBehospitalCode());})
                 .collect(Collectors.toList());
         long xx3= System.currentTimeMillis();
         System.out.println("advice体现lis项目存在用血的住院病历号 = " + (xx3-xx2));
@@ -3013,8 +3250,8 @@ public class ConsoleFacade {
     }
 
 
-    //指标十九 出院患者病历2日归档
-    private void getfileSecAmounts(FilterVO filterVO,Map<String, Object> baseIndex,MedIndexResult medIndexResult){
+    //指标20 出院患者病历2日归档
+    private void getfileSecAmounts(FilterVO filterVO,MedIndexResult medIndexResult){
         QueryWrapper<BehospitalInfo> query = new QueryWrapper<>();
         DecimalFormat df = new DecimalFormat("#0.00");
         query.eq("hospital_id", filterVO.getHospitalId())
@@ -3029,7 +3266,7 @@ public class ConsoleFacade {
         Iterator<BehospitalInfo> iterator = list.iterator();
         while (iterator.hasNext()){
             BehospitalInfo beh = iterator.next();
-            Boolean flag = getTrueSecFile(beh.getLeaveHospitalDate(), beh.getPlacefileDate(), TimeContent.getHolidaysTimeList());
+            Boolean flag = getTrueSecFile(beh.getLeaveHospitalDate(), beh.getPlacefileDate(), TimeContent.HolidaysTimeList);
             //时间截止则删除元素
             if(!flag){
                 iterator.remove();
@@ -3043,6 +3280,9 @@ public class ConsoleFacade {
     }
 
     private Boolean getTrueSecFile(Date date1,Date date2, List<String> holidaysTimeList){
+        if(date1.after(date2)){
+            return false;
+        }
         Date date = date1;
         Date dateSec = date2;
         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -3077,19 +3317,6 @@ public class ConsoleFacade {
         return false;
     }
 
-    private void firMethods(String indexName, Map<String, Object> baseIndex, MedIndexResult medIndexResult){
-        DecimalFormat df = new DecimalFormat("0.00");
-        //指标二十七 -甲级病历率
-        Double firRecord = 0d;
-        if(StringUtils.isNotEmpty( baseIndex.get("forWorkNum").toString())){
-            firRecord =Double.parseDouble(baseIndex.get("forWorkNum").toString());
-        }
-        if( firRecord != 0d && StringUtils.isNotEmpty( baseIndex.get("sixWorkNum").toString()) ){
-            double retNum = Double.parseDouble(baseIndex.get("sixWorkNum").toString()) * 100 / firRecord;
-            double firGradeStr = Double.parseDouble(df.format(retNum));
-            medIndexResult.setFirRecordResult(firGradeStr);
-        }
-    };
 
     private void timeTrans( MedIndexFilterVO  filterVO){
         SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");

+ 30 - 13
src/main/java/com/diagbot/facade/FilterFacade.java

@@ -244,21 +244,38 @@ public class FilterFacade {
      * @param filterVO
      */
           List<String> getTimeList(FilterVO filterVO) {
-              String hospitalId = SysUserUtils.getCurrentHospitalID();
-              String userId = SysUserUtils.getCurrentPrincipleID();
-              filterVO.setHospitalId(hospitalId);
-              filterVO.setUserId(Long.valueOf(userId));
-        // 返回的日期集合
-        List<String> days = new ArrayList<String>();
-
-        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        try {
-            Date start = dateFormat.parse(filterVO.getStartDate()+" 00:00:00");
-            Date end = dateFormat.parse(filterVO.getEndDate()+" 00:00:00");
-
+              DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+              // 返回的日期集合
+              List<String> days = new ArrayList<String>();
+              Date start =new Date();
+              Date end =new Date();
+              try {
+              if(StringUtils.isEmpty(filterVO.getHospitalId())){
+                  String hospitalId = SysUserUtils.getCurrentHospitalID();
+                  String userId = SysUserUtils.getCurrentPrincipleID();
+                  filterVO.setHospitalId(hospitalId);
+                  filterVO.setUserId(Long.valueOf(userId));
+                   start = dateFormat.parse(filterVO.getStartDate()+" 00:00:00");
+                   end = dateFormat.parse(filterVO.getEndDate()+" 00:00:00");
+              }else{
+                  //执行上一天的操作
+                  Date dNow = new Date(); //当前时间
+                  Date dBefore = new Date();
+                  Calendar calendar = Calendar.getInstance(); //得到日历
+                  calendar.setTime(dNow);//把当前时间赋给日历
+                  calendar.add(Calendar.DAY_OF_MONTH, -1); //设置为前一天
+                  dBefore = calendar.getTime(); //得到前一天的时间
+                  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式
+                  String defaultStartDate = sdf.format(dBefore); //格式化前一天
+                  filterVO.setStartDate(defaultStartDate);
+                  filterVO.setEndDate(defaultStartDate);
+                  defaultStartDate = defaultStartDate+" 00:00:00";
+                  String defaultEndDate = defaultStartDate;
+                   start = dateFormat.parse(defaultStartDate);
+                   end = dateFormat.parse(defaultEndDate);
+              }
             Calendar tempStart = Calendar.getInstance();
             tempStart.setTime(start);
-
             Calendar tempEnd = Calendar.getInstance();
             tempEnd.setTime(end);
             tempEnd.add(Calendar.DATE, +1);

+ 14 - 0
src/main/java/com/diagbot/facade/MedIndexRelevanceFacade.java

@@ -0,0 +1,14 @@
+package com.diagbot.facade;
+import com.diagbot.service.impl.MedIndexRelevanceServiceImpl;
+
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/12 11:39
+ */
+@Component
+public class MedIndexRelevanceFacade extends MedIndexRelevanceServiceImpl {
+}

+ 1 - 1
src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java

@@ -707,7 +707,7 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @param filterVO
      * @return
      */
-    public Map<String,Long> selectOperationNum(@Param("filterVO") FilterVO filterVO);
+    public List<Map<String, String>> selectOperationNum(@Param("filterVO") FilterVO filterVO);
 
     /**
      * 病理CT/MR触发多规则人数

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.MedIndexRelevance;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-04-30
+ */
+public interface MedIndexRelevanceMapper extends BaseMapper<MedIndexRelevance> {
+
+}

+ 0 - 1
src/main/java/com/diagbot/mapper/MedPacsResultMapper.java

@@ -17,6 +17,5 @@ import java.util.List;
  */
 public interface MedPacsResultMapper extends BaseMapper<MedPacsResult> {
     public List<MedPacsResultDTO> getMedPacsResults(BehospitalInfo behospitalInfo);
-
     void updateBatchByKey(List<MedPacsResult> list);
 }

+ 1 - 1
src/main/java/com/diagbot/service/BehospitalInfoService.java

@@ -662,7 +662,7 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @param filterVO
      * @return
      */
-    public Map<String,Long> selectOperationNum(@Param("filterVO")FilterVO filterVO);
+    public List<Map<String, String>> selectOperationNum(@Param("filterVO")FilterVO filterVO);
 
     /**
      * 触发规则人数

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.MedIndexRelevance;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-04-30
+ */
+public interface MedIndexRelevanceService extends IService<MedIndexRelevance> {
+
+}

+ 1 - 1
src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java

@@ -1101,7 +1101,7 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
      * @param  filterVO
      * @return
      */
-    public Map<String,Long> selectOperationNum(@Param("filterVO")FilterVO filterVO){
+    public List<Map<String, String>> selectOperationNum(@Param("filterVO")FilterVO filterVO){
         return  baseMapper.selectOperationNum(filterVO);
 
     }

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.MedIndexRelevance;
+import com.diagbot.mapper.MedIndexRelevanceMapper;
+import com.diagbot.service.MedIndexRelevanceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-04-30
+ */
+@Service
+public class MedIndexRelevanceServiceImpl extends ServiceImpl<MedIndexRelevanceMapper, MedIndexRelevance> implements MedIndexRelevanceService {
+
+}

+ 5 - 15
src/main/java/com/diagbot/task/MedIndexTask.java

@@ -8,6 +8,7 @@ import com.diagbot.facade.SysTaskCronFacade;
 import com.diagbot.facade.data.ADoctorAdviceFacade;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.IndexTimeVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
@@ -51,10 +52,9 @@ public class MedIndexTask implements SchedulingConfigurer{
                         && task001.getIsDeleted().equals(IsDeleteEnum.N.getKey())
                         && task001.getIsUsed().equals(1)) {
                     log.info("执行动态定时任务: " + LocalDateTime.now().toLocalTime());
-                    FilterVO filterVO = new FilterVO();
-                    filterVO.setHospitalId(task001.getParam());
-                    timeHandle(filterVO);
-                    consoleFacade.saveMedicaIndicator(filterVO);
+                    IndexTimeVO IndexTimeVO = new IndexTimeVO();
+                    IndexTimeVO.setHospitalId(task001.getParam());
+                    consoleFacade.saveMedicaIndicator(IndexTimeVO);
                 }
             }
         }, new Trigger() {
@@ -63,7 +63,7 @@ public class MedIndexTask implements SchedulingConfigurer{
                 //2.1 从数据库获取执行周期
                 task001 = sysTaskCronFacade.getOne(new QueryWrapper<SysTaskCron>()
                         .eq("cron_code", "TASK_INDEX"), false);
-                String cron = "* 22 * * * ?";
+                String cron = "0 0 3 * * ?";
                 //2.2 合法性校验.
                 if (null != task001 && StringUtil.isNotBlank(task001.getCron())) {
                     cron = task001.getCron();
@@ -73,14 +73,4 @@ public class MedIndexTask implements SchedulingConfigurer{
             }
         });
     }
-    private void timeHandle( FilterVO filterVO){
-        SimpleDateFormat simpleDateFormatRe = new SimpleDateFormat("yyyy-MM-dd");
-        LocalDate now = LocalDate.now();
-        LocalDate localDate = now.plusDays(-1);
-        ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
-        Date time = Date.from(zonedDateTime.toInstant());
-        String format = simpleDateFormatRe.format(time);
-        filterVO.setStartDate(format+" 00:00:00");
-        filterVO.setEndDate(format+" 23:59:59");
-    }
 }

+ 1 - 1
src/main/java/com/diagbot/util/ExcelUtils.java

@@ -115,7 +115,7 @@ public class ExcelUtils {
 
     private static void userExport2(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response,
                                     ExportParams exportParams, float height, Boolean havTitle) {
-        if(exportParams.getTitle().equals("病历质控报表")){
+        if(StringUtils.isNotEmpty(exportParams.getTitle()) && exportParams.getTitle().equals("病历质控报表")){
             exportParams.setTitleHeight(Short.valueOf("20"));
         };
         Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);

+ 1 - 1
src/main/java/com/diagbot/vo/BasDeptInfoVO.java

@@ -15,7 +15,7 @@ public class BasDeptInfoVO {
     /**
      * 搜索参数
      */
-    private String inputStr;
+    private String inputStr = "";
 
     @ApiModelProperty(hidden = true)
     private Long hospitalId;

+ 38 - 0
src/main/java/com/diagbot/vo/IndexTimeVO.java

@@ -0,0 +1,38 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/15 16:04
+ */
+@Getter
+@Setter
+public class IndexTimeVO {
+
+    /**
+     * 起始时间
+     */
+    @NotBlank(message = "请输入起始时间")
+    private String startDate;
+    /**
+     * 结束时间
+     */
+    @NotBlank(message = "请输入结束时间")
+    private String endDate;
+
+    /**
+     * 医院id
+     */
+    @ApiModelProperty(hidden = true)
+    private String hospitalId;
+
+    @ApiModelProperty(hidden = true)
+    private Long userId;
+
+}

+ 3 - 11
src/main/java/com/diagbot/web/BehospitalInfoController.java

@@ -6,15 +6,7 @@ import com.diagbot.dto.*;
 import com.diagbot.entity.QcCasesRelevanceEntry;
 import com.diagbot.facade.BehospitalInfoFacade;
 import com.diagbot.facade.QcresultInfoFacade;
-import com.diagbot.vo.AnalyzeApiVO;
-import com.diagbot.vo.AnalyzeCdsVO;
-import com.diagbot.vo.AnalyzeRunVO;
-import com.diagbot.vo.AnalyzeVO;
-import com.diagbot.vo.BehospitalPageVO;
-import com.diagbot.vo.ExportQcresultVO;
-import com.diagbot.vo.GetDetailVO;
-import com.diagbot.vo.QcresultVO;
-import com.diagbot.vo.TaskVO;
+import com.diagbot.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -82,8 +74,8 @@ public class BehospitalInfoController {
             notes = "")
     @PostMapping("/getMedQualityCoList")
     @SysLogger("getMedQualityCoList")
-    public RespDTO<List<ColumnDTO>> getMedQualityControl() {
-        List<ColumnDTO> data = behospitalInfoFacade.getMedQualityControl();
+    public RespDTO<List<ColumnDTO>> getMedQualityControl(@RequestBody BasDeptInfoVO basDeptInfoVO) {
+        List<ColumnDTO> data = behospitalInfoFacade.getMedQualityControl(basDeptInfoVO);
         return  RespDTO.onSuc(data);
     }
 

+ 3 - 3
src/main/java/com/diagbot/web/ConsoleController.java

@@ -179,7 +179,7 @@ public class ConsoleController {
 
     /**
      * 病案指标后台维护接口
-     * @param filterVO
+     * @param indexTimeVO
      * @return
      */
     @ApiOperation(value = "病案指标数据存储[by:cy]",
@@ -187,8 +187,8 @@ public class ConsoleController {
                     "endDate: 结束时间-样例[2021-01-01]请严格按照日历时间传参!!!<br>")
     @PostMapping("/saveMedicaIndicator")
     @SysLogger("saveMedicaIndicator")
-    public RespDTO<Boolean> saveMedicaIndicator(@RequestBody @Valid FilterVO filterVO) {
-        Boolean flag = consoleFacade.saveMedicaIndicator(filterVO);
+    public RespDTO<Boolean> saveMedicaIndicator(@RequestBody @Valid IndexTimeVO indexTimeVO) {
+        Boolean flag = consoleFacade.saveMedicaIndicator(indexTimeVO);
         return RespDTO.onSuc(flag);
     }
 

+ 52 - 70
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -721,9 +721,10 @@
         f2.secWorkNum,
         f3.thrWorkNum,
         f3.forWorkNum,
-        f3.sixWorkNum
+        f3.sixWorkNum,
+        f4.sevenWorkNum
         from (
-        SELECT  count(*)  as firWorkNum
+        SELECT count(DISTINCT a.behospital_code)  as firWorkNum
         FROM
         med_behospital_info a
         WHERE
@@ -739,7 +740,7 @@
         <if test="endDate != null and endDate != ''">
             <![CDATA[ AND a.leave_hospital_date <= #{lastEndDate}]]>
         </if>)f1,
-            ( SELECT count(*) AS secWorkNum
+            ( SELECT count(DISTINCT a.behospital_code) AS secWorkNum
         FROM
         med_outpatient_info a
         WHERE
@@ -754,10 +755,10 @@
             AND a.hospital_id = #{hospitalId}
         </if>)f2,(
            select
-        count(case when  <![CDATA[m.behospital_date >= #{startDate}]]>  and  <![CDATA[m.behospital_date <= #{endDate}]]>
+        count(DISTINCT case when  <![CDATA[m.behospital_date >= #{startDate}]]>  and  <![CDATA[m.behospital_date <= #{endDate}]]>
         and m.is_placefile = 0 then m.behospital_code else null end) as thrWorkNum,
-        count(case when  <![CDATA[m.leave_hospital_date >= #{startDate}]]>  and  <![CDATA[m.leave_hospital_date <= #{endDate}]]>  and m.is_placefile = 1 then m.behospital_code else null end) as forWorkNum,
-        count(case when  <![CDATA[m.leave_hospital_date >= #{startDate}]]> and <![CDATA[m.leave_hospital_date <= #{endDate}]]> and m.is_placefile = 1 and m.level = '甲' then m.behospital_code else null end) as sixWorkNum
+        count(DISTINCT case when  <![CDATA[m.leave_hospital_date >= #{startDate}]]>  and  <![CDATA[m.leave_hospital_date <= #{endDate}]]>  and m.is_placefile = 1 then m.behospital_code else null end) as forWorkNum,
+        count(DISTINCT case when  <![CDATA[m.leave_hospital_date >= #{startDate}]]> and <![CDATA[m.leave_hospital_date <= #{endDate}]]> and m.is_placefile = 1 and m.level = '甲' then m.behospital_code else null end) as sixWorkNum
            from(
            SELECT DISTINCT a.*,b.level
             FROM
@@ -772,7 +773,23 @@
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
         </if>)m
-            )f3
+            )f3,(
+        SELECT count(DISTINCT a.behospital_code)  as sevenWorkNum
+        FROM
+        med_behospital_info a
+        WHERE
+        a.is_deleted = 'N'
+        AND a.is_placefile = 1
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ AND a.leave_hospital_date >= #{startDate}]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[ AND a.leave_hospital_date <= #{endDate}]]>
+        </if>)f4
     </select>
 
     <!-- 病案管理规则质控缺陷病历总数查询-->
@@ -17565,9 +17582,7 @@
         AND a.is_placefile = #{filterVO.isPlacefile}
         <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}]]>
+            <![CDATA[ AND a.leave_hospital_date <= #{filterVO.endDate}]]>
         </if>
         <![CDATA[ and  a.qc_type_id <>'0' ]]>
         AND a.behospital_code = c.behospital_code
@@ -17589,54 +17604,10 @@
     <!--  时间段出院,住院, 手术费,抗菌药物,手术和病理费等含有人数 -->
     <select id="selectOperationNum" parameterType="com.diagbot.vo.FilterVO" resultType="java.util.Map">
         select
-        <if test="filterVO.startDate != null and  filterVO.endDate != null">
-        count(
-        CASE
-        WHEN   <![CDATA[  d.leave_hospital_date >= #{filterVO.startDate}]]>
-            <![CDATA[ AND d.leave_hospital_date <= #{filterVO.endDate}]]> THEN
-        1
-        ELSE
-        NULL
-        END
-        )  AS '出院人数',
-        count(
-        CASE
-        WHEN   <![CDATA[  d.leave_hospital_date >= #{filterVO.startDate}]]>
-            <![CDATA[ AND d.leave_hospital_date <= #{filterVO.endDate}]]> THEN
-        1
-        ELSE
-        NULL
-        END
-        )  AS '入院人数',
-        </if>
-        count(
-        CASE
-        WHEN   b.operation_fee > 0
-        THEN
-        1
-        ELSE
-        NULL
-        END
-        ) AS 'operationFee',
-        count(
-        CASE
-        WHEN   b.antibiosis_fee > 0
-        THEN
-        1
-        ELSE
-        NULL
-        END
-        ) AS 'antibiosisFee',
-        count(
-        CASE
-        WHEN   b.operation_fee > 0
-        AND   b.pathology_fee > 0
-        THEN
-        1
-        ELSE
-        NULL
-        END
-        ) AS 'operationPathologyFee'
+        d.behospital_code behospitalCode,
+        b.operation_fee operationFee,
+        b.pathology_fee pathologyFee,
+        b.antibiosis_fee antibiosisFee
         FROM
         (
         SELECT
@@ -17660,7 +17631,7 @@
         AND a.hospital_id = #{filterVO.hospitalId}
         and a.behospital_code = c.behospital_code
         ) d
-        LEFT JOIN med_home_page b ON b.behospital_code = d.behospital_code
+        JOIN med_home_page b ON b.behospital_code = d.behospital_code
         AND d.hospital_id = b.hospital_id
         AND b.is_deleted = 'N'
     </select>
@@ -17670,7 +17641,7 @@
         count(
         DISTINCT
         CASE
-        WHEN q.type=5 THEN
+        WHEN a.type=5 THEN
         a.behospital_code
         ELSE
         NULL
@@ -17679,7 +17650,7 @@
         count(
         DISTINCT
         CASE
-        WHEN q.type = 4 THEN
+        WHEN a.type = 4 THEN
         a.behospital_code
         ELSE
         NULL
@@ -17688,7 +17659,7 @@
         count(
         DISTINCT
         CASE
-        WHEN q.type = 6 THEN
+        WHEN a.type = 6 THEN
         a.behospital_code
         ELSE
         NULL
@@ -17697,7 +17668,7 @@
         count(
         DISTINCT
         CASE
-        WHEN q.type = 7 THEN
+        WHEN a.type = 7 THEN
         a.behospital_code
         ELSE
         NULL
@@ -17706,7 +17677,7 @@
         count(
         DISTINCT
         CASE
-        WHEN q.type=8 THEN
+        WHEN a.type=8 THEN
         a.behospital_code
         ELSE
         NULL
@@ -17715,7 +17686,7 @@
         count(
         DISTINCT
         CASE
-        WHEN q.type = 9 THEN
+        WHEN a.type = 9 THEN
         a.behospital_code
         ELSE
         NULL
@@ -17724,7 +17695,7 @@
         count(
         DISTINCT
         CASE
-        WHEN q.type = 10 THEN
+        WHEN a.type = 10 THEN
         a.behospital_code
         ELSE
         NULL
@@ -17733,7 +17704,7 @@
         count(
         DISTINCT
         CASE
-        WHEN q.type = 15 THEN
+        WHEN a.type = 15 THEN
         a.behospital_code
         ELSE
         NULL
@@ -17742,7 +17713,7 @@
         count(
         DISTINCT
         CASE
-        WHEN q.type = 17 THEN
+        WHEN a.type = 17 THEN
         a.behospital_code
         ELSE
         NULL
@@ -17751,7 +17722,7 @@
         count(
         DISTINCT
         CASE
-        WHEN q.type = 18 THEN
+        WHEN a.type = 18 THEN
         a.behospital_code
         ELSE
         NULL
@@ -17760,7 +17731,7 @@
         count(
         DISTINCT
         CASE
-        WHEN q.type = 19 THEN
+        WHEN a.type = 19 THEN
         a.behospital_code
         ELSE
         NULL
@@ -17770,6 +17741,12 @@
         (
         SELECT
         a.behospital_code,
+        a.hospital_id,
+        q.type
+        FROM
+        (
+        SELECT
+        a.behospital_code,
         a.cases_entry_id,
         a.hospital_id
         FROM
@@ -17807,6 +17784,11 @@
         ) a
         JOIN qc_cases_relevance_entry q ON a.cases_entry_id = q.relevance_id
         AND a.hospital_id = q.hospital_id
+        ) a
+        JOIN med_index_relevance r ON r.behospital_code = a.behospital_code
+        AND r.relevance_type = a.type
+        AND r.is_deleted = 'N'
+        AND a.hospital_id = r.hospital_id
     </select>
 
 <!--    跟病案首页关联的出院病历-->

+ 21 - 0
src/main/resources/mapper/MedIndexRelevanceMapper.xml

@@ -0,0 +1,21 @@
+<?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.MedIndexRelevanceMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.MedIndexRelevance">
+        <id column="id" property="id" />
+        <result column="index_result_id" property="indexResultId" />
+        <result column="relevance_type" property="relevanceType" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="behospital_code" property="behospitalCode" />
+        <result column="start_date" property="startDate" />
+        <result column="end_date" property="endDate" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+    </resultMap>
+
+</mapper>

+ 2 - 2
src/main/resources/mapper/MedIndexResultMapper.xml

@@ -51,8 +51,8 @@
             COALESCE (sum(a.implants_result), 0) AS 'implants_result',
             COALESCE (sum(a.blood_result), 0) AS 'blood_result',
             COALESCE (sum(a.rescue_result), 0) AS 'rescue_result',
-            COALESCE (sum(a.sec_file_result), 0) AS 'sec_file_result',
-            COALESCE (sum(a.fir_record_result), 0) AS 'fir_record_result'
+            COALESCE (sum(a.sec_file_result), 0) AS 'sec_file_result'
+
         FROM
             med_index_result a
         WHERE