Browse Source

病案指标后台维护接口

chengyao 4 years ago
parent
commit
def61c57af

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

@@ -240,6 +240,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/consoleByDept/qualityControlByDept").permitAll()
                 .antMatchers("/print/export/qualityControlExportByDept").permitAll()
                 .antMatchers("/qc/behospitalInfo/getMedQualityCoList").permitAll()
+                .antMatchers("/console/saveMedicaIndicator").permitAll()
                 .antMatchers("/**").authenticated();
         //                .antMatchers("/**").permitAll();
     }

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

@@ -284,6 +284,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/consoleByDept/qualityControlByDept", request)
                 || matchers("/print/export/qualityControlExportByDept", request)
                 || matchers("/qc/behospitalInfo/getMedQualityCoList", request)
+                || matchers("/console/saveMedicaIndicator", request)
                 || matchers("/", request)) {
             return true;
         }

+ 31 - 26
src/main/java/com/diagbot/entity/MedIndexResult.java

@@ -4,8 +4,8 @@ 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>
@@ -24,113 +24,118 @@ public class MedIndexResult implements Serializable {
     private Integer id;
 
     /**
-     * 入院记录24小时内完成率
+     * 医院id
+     */
+    private String hospitalId;
+
+    /**
+     * 入院记录24小时内完成率--分母
      */
     private Double admissionResult;
 
     /**
-     * 手术记录24小时内完成率
+     * 手术记录24小时内完成率--分母
      */
     private Double operationResult;
 
     /**
-     * 出院记录24小时内完成率
+     * 出院记录24小时内完成率--分母
      */
     private Double leaveHospitalResult;
 
     /**
-     * 病案首页24小时内完成率
+     * 病案首页24小时内完成率--分母
      */
     private Double medHomeResult;
 
     /**
-     * CT检查记录符合率
+     * CT检查记录符合率--分母
      */
     private Double ctResult;
 
     /**
-     * MRI检查记录符合率
+     * MRI检查记录符合率--分母
      */
     private Double mriResult;
 
     /**
-     * 病理检查记录符合率
+     * 病理检查记录符合率--分母
      */
     private Double pathologyResult;
 
     /**
-     * 细菌培养检查记录符合率
+     * 细菌培养检查记录符合率--分母
      */
     private Double germResult;
 
     /**
-     * 抗菌药物使用记录符合率
+     * 抗菌药物使用记录符合率--分母
      */
     private Double antibiosisResult;
 
     /**
-     * 恶性肿瘤化学治疗记录符合率
+     * 恶性肿瘤化学治疗记录符合率--分母
      */
     private Double tumorChemistryResult;
 
     /**
-     * 恶性肿瘤放射治疗记录符合率
+     * 恶性肿瘤放射治疗记录符合率--分母
      */
     private Double tumorRadiationResult;
 
     /**
-     * 手术相关记录完成率
+     * 手术相关记录完成率--分母
      */
     private Double operationCompleteResult;
 
     /**
-     * 植入物相关记录符合率
+     * 植入物相关记录符合率--分母
      */
     private Double implantsResult;
 
     /**
-     * 临床用血相关记录符合率
+     * 临床用血相关记录符合率--分母
      */
     private Double bloodResult;
 
     /**
-     * 医师查房记录完整率
+     * 医师查房记录完整率--分母
      */
     private Double wardRoundResult;
 
     /**
-     * 患者抢救记录及时完成率
+     * 患者抢救记录及时完成率--分母
      */
     private Double rescueResult;
 
     /**
-     * 出院患者病历2日归档率
+     * 出院患者病历2日归档率--分母
      */
     private Double secFileResult;
 
     /**
-     * 出院患者病历归档完整率
+     * 出院患者病历归档完整率--分母
      */
     private Double fileCompleteResult;
 
     /**
-     * 不合理复制病历发生率
+     * 不合理复制病历发生率--分母
      */
     private Double noCopyResult;
 
     /**
-     * 知情同意书规范签署率
+     * 知情同意书规范签署率--分母
      */
     private Double recordSignResult;
 
     /**
-     * 甲级病历率
+     * 甲级病历率--分母
      */
     private Double firRecordResult;
 
-    private LocalDateTime startDate;
+    private String startDate;
 
-    private LocalDateTime endDate;
+    private String endDate;
 
     /**
      * 是否删除,N:未删除,Y:删除
@@ -140,12 +145,12 @@ public class MedIndexResult implements Serializable {
     /**
      * 记录创建时间
      */
-    private LocalDateTime gmtCreate;
+    private Date gmtCreate;
 
     /**
      * 记录修改时间,如果时间是1970年则表示纪录未修改
      */
-    private LocalDateTime gmtModified;
+    private Date gmtModified;
 
     /**
      * 创建人,0表示无创建人值

+ 52 - 44
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -384,7 +384,17 @@ public class ConsoleFacade {
         }
         return retMap;
     }
+    public String handleTime(String startDate){
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Date parse = null;
+        try {
+            parse = dateFormat.parse(startDate);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
 
+        return (dateFormat.format(parse)+" 23:59:59");
+    };
 
     /**
      * 病案指标
@@ -486,7 +496,21 @@ public class ConsoleFacade {
     }
 
 
-
+    /**
+     * 病案指标数据保存
+     *
+     * @param filterVO
+     * @return 2170
+     */
+    public Boolean saveMedicaIndicator(FilterVO filterVO){
+        List<String> timeList = filterFacade.getTimeList(filterVO);
+        for (String startTime : timeList) {
+            filterVO.setStartDate(startTime);
+            filterVO.setEndDate( handleTime(startTime));
+            getMedicaIndicator(filterVO);
+        }
+        return true;
+    }
 
     /**
      * 病案指标数据保存
@@ -495,14 +519,12 @@ public class ConsoleFacade {
      * @return 2170
      */
     @Transactional
-    public void saveMedicaIndicator(FilterVO filterVO){
+    public void getMedicaIndicator(FilterVO filterVO){
         MedIndexResult medIndexResult = new MedIndexResult();
-        String indexName = filterVO.getIndexName();
         Map<String, Long> selectOperationNumMap = behospitalInfoFacade.selectOperationNum(filterVO);
         //出院人数
             Long operationFeeNum = 0L;
             List<MedManageParamsDTO> doctorAdviceMedManageParams  = new ArrayList<>();
-            if (QualityContent.NEED_MEDICAL_ADVICE.contains(indexName)) {
                 filterVO.setFlagStr("2");
                 doctorAdviceMedManageParams = behospitalInfoFacade.getMedManageParams(filterVO);
                 Map<String, Long> adviceNum = getAdviceNum(filterVO,doctorAdviceMedManageParams);
@@ -549,26 +571,31 @@ public class ConsoleFacade {
                     if (chemotherapyMalignantTumorsNum != null ) {
                         medIndexResult.setTumorChemistryResult(Double.valueOf(chemotherapyMalignantTumorsNum));
                     }
-            }
+
         /**
          * =================================标示线========================================
          */
-           /* Map<String, Object> baseIndex = behospitalInfoFacade.getBaseIndex(filterVO);
-            //指标二十七
-                 firMethod(indexName,baseIndex,medIndexResult);
-            //指标十七 医师查房记录
-                WardRoundMethod(baseIndex, triggeringRulesMap,medIndexResult);
-            //指标十八 抢救记录
-                rescueMethod(doctorAdviceMedManageParams,triggeringRulesMap,medIndexResult);
+        Map<String, Object> baseIndex = behospitalInfoFacade.getBaseIndex(filterVO);
+        //指标二十七
+
+        //指标十七 医师查房记录
+
+        //指标十八 抢救记录
+        rescueMethod(doctorAdviceMedManageParams,medIndexResult);
         //指标十九 出院患者病历2日归档
-                getfileSecAmount(filterVO,baseIndex,medIndexResult);
+        getfileSecAmount(filterVO,baseIndex,medIndexResult);
         //指标十四 手术记录
-                operationMethod(operationFeeNum+"", triggeringRulesMap,medIndexResult);
+        medIndexResult.setOperationCompleteResult(Double.parseDouble(operationFeeNum+""));
         //指标十六  临床用血相关记录符合率
-                filterVO.setFlagStr("1");
-                List<MedManageParamsDTO> medManageParams = behospitalInfoFacade.getMedManageParams(filterVO);
-                bloodMethod(hashMapArrayList,doctorAdviceMedManageParams, medManageParams, triggeringRulesMap,medIndexResult);
-                medIndexResultFacade.save(medIndexResult);*/
+        filterVO.setFlagStr("1");
+        List<MedManageParamsDTO> medManageParams = behospitalInfoFacade.getMedManageParams(filterVO);
+        bloodMethod(doctorAdviceMedManageParams, medManageParams,medIndexResult);
+        medIndexResult.setHospitalId(filterVO.getHospitalId());
+        medIndexResult.setStartDate(filterVO.getStartDate());
+        medIndexResult.setEndDate(filterVO.getEndDate());
+        medIndexResult.setGmtCreate(new Date());
+        medIndexResultFacade.save(medIndexResult);
+
     }
 
     /**
@@ -2665,7 +2692,7 @@ public class ConsoleFacade {
 
 
     //指标十八 抢救记录
-    private  void rescueMethod(List<MedManageParamsDTO> medManageParams,Map<String, Long> triggeringRulesMap,MedIndexResult medIndexResult){
+    private  void rescueMethod(List<MedManageParamsDTO> medManageParams,MedIndexResult medIndexResult){
         List<MedManageParamsDTO> manageList= new ArrayList<>();
         List<String> rescueDrugList = QualityContent.RESCUEDRUGLIST;
         for (int i = 0; i < medManageParams.size(); i++) {
@@ -2682,29 +2709,12 @@ public class ConsoleFacade {
         //接受抢救的质控病历总数
         double count = manageList.stream().map(MedManageParamsDTO::getBehospitalCode).distinct().count();
         if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
-            double rescueDo = currencyCal(count, triggeringRulesMap.get("rescueNum"));
-            medIndexResult.setRescueResult(rescueDo);
-        }
-    }
-
-    //指标十七 医师查房记录
-    private void WardRoundMethod( Map<String, Object> baseIndex, Map<String, Long> triggeringRulesMap,MedIndexResult medIndexResult){
-        if( triggeringRulesMap.containsKey("WardRoundNum") && baseIndex.containsKey("forWorkNum") && !baseIndex.get("forWorkNum").toString().equals("0")){
-            double wardRoundDo = currencyCal(baseIndex.get("forWorkNum"), triggeringRulesMap.get("WardRoundNum"));
-            medIndexResult.setWardRoundResult(wardRoundDo);
-        }
-    }
-
-    //指标十四 手术记录
-    private  void operationMethod(String operationFeeNum, Map<String, Long> triggeringRulesMap,MedIndexResult medIndexResult){
-        if( triggeringRulesMap.containsKey("operationRecordNum") && StringUtils.isNotEmpty(operationFeeNum) && ! operationFeeNum.equals("0")){
-            double operationRecordDo = currencyCal(operationFeeNum, triggeringRulesMap.get("operationRecordNum"));
-            medIndexResult.setOperationCompleteResult(operationRecordDo);
+            medIndexResult.setRescueResult(count);
         }
     }
 
     //指标十六  临床用血相关记录符合率
-    private  void bloodMethod( List<Map<String, String>>retList,List<MedManageParamsDTO> doctorAdviceList, List<MedManageParamsDTO> medManageParams, Map<String, Long> triggeringRulesMap,MedIndexResult medIndexResult){
+    private void bloodMethod(List<MedManageParamsDTO> doctorAdviceList, List<MedManageParamsDTO> medManageParams,MedIndexResult medIndexResult){
         Set<String> manageList= new CopyOnWriteArraySet<>();
         List<String> blood_list = QualityContent.BLOODLIST;
         //lis项目存在用血住院病历号
@@ -2731,8 +2741,7 @@ public class ConsoleFacade {
             double count = manageList.size();
             if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
                 //指标十七
-                double bloodNum = currencyCal(count, triggeringRulesMap.get("bloodNum"));
-                medIndexResult.setBloodResult(bloodNum);
+                medIndexResult.setBloodResult(count);
             }
     }
 
@@ -2767,11 +2776,10 @@ public class ConsoleFacade {
             }
         }
         double count = list.stream().distinct().map(BehospitalInfo::getBedCode).count();
-        if(StringUtils.isNotEmpty( baseIndex.get("firWorkNum").toString()) && ! baseIndex.get("firWorkNum").toString().equals("0") ){
-            double retNum =count* 100/Double.parseDouble(baseIndex.get("firWorkNum").toString());
-            double firGradeStr = Double.parseDouble(df.format(retNum));
-          medIndexResult.setSecFileResult(firGradeStr);
+        if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+            medIndexResult.setSecFileResult(count);
         }
+
     }
 
     private Boolean getTrueSecFile(Date date1,Date date2, List<String> holidaysTimeList){

+ 47 - 10
src/main/java/com/diagbot/facade/FilterFacade.java

@@ -7,11 +7,13 @@ import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
-
+import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Description:
@@ -222,17 +224,52 @@ public class FilterFacade {
         if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
             filterVO.setLimitCount(10);
         }
-            try {
-                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
-                SimpleDateFormat dateFormatSec = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                Date dateStart = dateFormat.parse(filterVO.getStartDate());
-                Date dateEnd = dateFormat.parse(filterVO.getEndDate());
-                filterVO.setStartDate(dateFormatSec.format(dateStart));
-                filterVO.setEndDate(dateFormatSec.format(dateEnd));
-            } catch (ParseException e) {
+        try {
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+            SimpleDateFormat dateFormatSec = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date dateStart = dateFormat.parse(filterVO.getStartDate());
+            Date dateEnd = dateFormat.parse(filterVO.getEndDate());
+            filterVO.setStartDate(dateFormatSec.format(dateStart));
+            filterVO.setEndDate(dateFormatSec.format(dateEnd));
+        } catch (ParseException e) {
 
-            }
+        }
+
+    }
+
+
+    /**
+     * 入参拼接
+     *
+     * @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");
+
+            Calendar tempStart = Calendar.getInstance();
+            tempStart.setTime(start);
+
+            Calendar tempEnd = Calendar.getInstance();
+            tempEnd.setTime(end);
+            tempEnd.add(Calendar.DATE, +1);
+            while (tempStart.before(tempEnd)) {
+                days.add(dateFormat.format(tempStart.getTime()));
+                tempStart.add(Calendar.DAY_OF_YEAR, 1);
+            }
+        } catch (ParseException e) {
+            throw new IllegalArgumentException("参数异常");
+        }
+        return days;
     }
 
     /**

+ 17 - 1
src/main/java/com/diagbot/web/ConsoleController.java

@@ -162,7 +162,7 @@ public class ConsoleController {
     }
 
 
-    /**
+  /**
      * 病案指标
      * @param filterVO
      * @return
@@ -176,6 +176,22 @@ public class ConsoleController {
     public RespDTO<List<Map<String,String>>> medicalRecordIndicator(@RequestBody @Valid FilterVO filterVO) {
         return RespDTO.onSuc(consoleFacade.medicalRecordIndicator(filterVO));
     }
+
+    /**
+     * 病案指标后台维护接口
+     * @param filterVO
+     * @return
+     */
+    @ApiOperation(value = "病案指标数据存储[by:cy]",
+            notes = "startDate: 起始时间 <br>" +
+                    "endDate: 结束时间 <br>")
+    @PostMapping("/saveMedicaIndicator")
+    @SysLogger("saveMedicaIndicator")
+    public RespDTO<Boolean> saveMedicaIndicator(@RequestBody @Valid FilterVO filterVO) {
+        Boolean flag = consoleFacade.saveMedicaIndicator(filterVO);
+        return RespDTO.onSuc(flag);
+    }
+
     /**
      * 质控病历统计
      *