Browse Source

指标十八:抢救记录及时完成率

chengyao 4 years ago
parent
commit
2f83870e28

+ 33 - 10
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -2479,31 +2479,52 @@ public MedQualityControlDTO medicalRecordIndicator(FilterRecordVO filterRecordVO
      * @return
      */
     public MedQualityControlDTO getMedManageIndex(FilterVO filterVO) {
-        Map<String, Object> baseIndex = behospitalInfoFacade.getBaseIndex(filterVO);
-        Map<String, Object> entryCountMap = behospitalInfoFacade.getCountByEntry(filterVO);
         MedQualityControlDTO medQualityControlDTO = new MedQualityControlDTO();
+        Map<String, Object> baseIndex = behospitalInfoFacade.getBaseIndex(filterVO);
         //指标一、二、三、二十七
         medQualityControlDTO = ManageIndexMethod(medQualityControlDTO, baseIndex, filterVO);
+        filterVO.setFlagStr("0");
+        Map<String, Object> entryCountMap = behospitalInfoFacade.getCountByEntry(filterVO);
         //指标十七
-        medQualityControlDTO = ruleIndexMethod(medQualityControlDTO, baseIndex, entryCountMap);
+        medQualityControlDTO = ruleIndexMethod(filterVO,medQualityControlDTO, baseIndex, entryCountMap);
+        //指标十八
+        filterVO.setFlagStr("1");
+                             entryCountMap = behospitalInfoFacade.getCountByEntry(filterVO);
+        medQualityControlDTO = ruleIndexMethod(filterVO,medQualityControlDTO, baseIndex, entryCountMap);
+
         return medQualityControlDTO;
     }
 
 
-    private MedQualityControlDTO ruleIndexMethod(MedQualityControlDTO medQualityControlDTO, Map<String, Object> baseIndex, Map<String, Object> entryCountMap){
-        if(entryCountMap.containsKey("WardRoundAmount") && baseIndex.containsKey("thrMouthNum") && entryCountMap.get("WardRoundAmount").toString()!="0"){
+    private MedQualityControlDTO ruleIndexMethod(FilterVO filterVO,MedQualityControlDTO medQualityControlDTO, Map<String, Object> baseIndex, Map<String, Object> entryCountMap){
+        if(filterVO.getFlagStr().equals("0") && entryCountMap.containsKey("WardRoundAmount") && baseIndex.containsKey("thrMouthNum") && entryCountMap.get("WardRoundAmount").toString()!="0"){
             //指标十七
-            DecimalFormat df = new DecimalFormat("0.0");
-            double firDouble = Double.parseDouble(baseIndex.get("thrMouthNum").toString())-Double.parseDouble(entryCountMap.get("WardRoundAmount").toString());
-            double thrMouthNum = Double.parseDouble(baseIndex.get("thrMouthNum").toString());
-            medQualityControlDTO.setWardRoundNum( Double.parseDouble(df.format(firDouble/thrMouthNum)));
+            double wardRoundDo = currencyCal(baseIndex.get("thrMouthNum"), entryCountMap.get("WardRoundAmount"));
+            medQualityControlDTO.setWardRoundNum(wardRoundDo);
+            medQualityControlDTO.setWardRoundStr(wardRoundDo+"%");
+
         };
+        if(filterVO.getFlagStr().equals("1") && entryCountMap.containsKey("rescueNumDe") && entryCountMap.containsKey("rescueAmount") && entryCountMap.get("rescueNumDe").toString()!="0"){
+            //指标十八
+            double rescueDo = currencyCal(entryCountMap.get("rescueNumDe"), entryCountMap.get("rescueAmount"));
+            medQualityControlDTO.setRescueNum(rescueDo);
+            medQualityControlDTO.setRescueStr(rescueDo+"%");
+        }
         return medQualityControlDTO;
     }
 
+    private double currencyCal(Object objFir,Object objSec){
+        DecimalFormat df = new DecimalFormat("0.0");
+        double firDouble = Double.parseDouble(objFir.toString()) - Double.parseDouble(objSec.toString());
+        double thrMouthNum = Double.parseDouble(objFir.toString());
+        double retData = Double.parseDouble(df.format(firDouble * 100 / thrMouthNum));
+        return retData;
+    };
+
 
      private MedQualityControlDTO ManageIndexMethod(MedQualityControlDTO medQualityControlDTO, Map<String, Object> baseIndex,FilterVO filterVO){
          QueryWrapper<MedManagementInfo> query = new QueryWrapper<>();
+         DecimalFormat df = new DecimalFormat("0.0");
          query.eq("hospital_id", filterVO.getHospitalId())
                  .eq("is_deleted", IsDeleteEnum.N)
                  //指标1、2、3与是否归档没有直接关系 出院时间在单位时间内即可
@@ -2541,7 +2562,9 @@ public MedQualityControlDTO medicalRecordIndicator(FilterRecordVO filterRecordVO
              firRecord =Double.parseDouble(baseIndex.get("forMouthNum").toString());
          }
          if( firRecord != 0d && StringUtils.isNotEmpty( baseIndex.get("sixMouthNum").toString()) ){
-             medQualityControlDTO.setFirGradeNum(Math.ceil(Double.parseDouble(baseIndex.get("sixMouthNum").toString())/ firRecord));
+             double retNum = Double.parseDouble(baseIndex.get("sixMouthNum").toString()) * 100 / firRecord;
+             double firGradeStr = Double.parseDouble(df.format(retNum));
+             medQualityControlDTO.setFirGradeStr(firGradeStr+"%");
          }
 
          return medQualityControlDTO;

+ 5 - 0
src/main/java/com/diagbot/vo/FilterVO.java

@@ -67,4 +67,9 @@ public class FilterVO {
      * 是否归档(0:未归档,1:已归档)
      */
     private String isPlacefile = "1";
+
+    /**
+     * 辅助标识
+     */
+    private String flagStr = "0";
 }

+ 22 - 2
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -778,10 +778,23 @@
             )f3
     </select>
 
-    <!-- 病案管理规则质控数查询-->
+    <!-- 病案管理规则质控缺陷病历总数查询-->
     <select id="getCountByEntry"  parameterType="com.diagbot.vo.FilterVO" resultType="java.util.Map">
         SELECT
-        count(DISTINCT case when  <![CDATA[a.behospital_date >= #{startDate}]]>  and  <![CDATA[a.behospital_date <= #{endDate}]]> and (c.cases_entry_id = 2655 or c.cases_entry_id = 2654) then c.behospital_code end) as WardRoundAmount
+        true as flagNum
+        <if test="flagStr != null and flagStr == 0 ">
+            ,count(DISTINCT case when  <![CDATA[f1.behospital_date >= #{startDate}]]>  and  <![CDATA[f1.behospital_date <= #{endDate}]]> and (f1.cases_entry_id = 2655 or f1.cases_entry_id = 2654) then f1.behospital_code end) as WardRoundAmount
+        </if>
+        <if test="flagStr != null and flagStr == 1 ">
+        ,count(DISTINCT case when  <![CDATA[f1.behospital_date >= #{startDate}]]>  and  <![CDATA[f1.behospital_date <= #{endDate}]]> and (f1.cases_entry_id = 2852) then f1.behospital_code end) as rescueAmount
+        ,count(DISTINCT f1.behospital_code) AS rescueNumDe
+        </if>
+        from(
+        select
+        a.behospital_code,
+        a.hospital_id,
+        a.behospital_date,
+        c.cases_entry_id
         FROM
         med_behospital_info a,
         med_qcresult_info b,
@@ -800,6 +813,13 @@
         AND a.qc_type_id != 0
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
+        </if>)f1
+        <if test="flagStr != null and flagStr == 1 ">
+            ,  str_rescue_note f2
+            where
+            f2.is_deleted = 'N'
+            AND f1.hospital_id = f2.hospital_id
+            AND f1.behospital_code = f2.behospital_code
         </if>
     </select>