Bläddra i källkod

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

chengyao 4 år sedan
förälder
incheckning
9d6aa922ce

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
doc/031.20210326v2.0.3/qc_initv2.0.3.sql


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

+ 164 - 0
src/main/java/com/diagbot/entity/MedIndexResult.java

@@ -0,0 +1,164 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author cy
+ * @since 2021-04-26
+ */
+@Data
+public class MedIndexResult implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 医院id
+     */
+    private String hospitalId;
+
+    /**
+     * 入院记录24小时内完成率--分母
+     */
+    private Double admissionResult;
+
+    /**
+     * 手术记录24小时内完成率--分母
+     */
+    private Double operationResult;
+
+    /**
+     * 出院记录24小时内完成率--分母
+     */
+    private Double leaveHospitalResult;
+
+    /**
+     * 病案首页24小时内完成率--分母
+     */
+    private Double medHomeResult;
+
+    /**
+     * CT检查记录符合率--分母
+     */
+    private Double ctResult;
+
+    /**
+     * 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日归档率--分子
+     */
+    private Double secFileResult;
+
+    /**
+     * 出院患者病历归档完整率--分母
+     */
+    private Double fileCompleteResult;
+
+    /**
+     * 不合理复制病历发生率--分母
+     */
+    private Double noCopyResult;
+
+    /**
+     * 知情同意书规范签署率--分母
+     */
+    private Double recordSignResult;
+
+    /**
+     * 甲级病历率--分母
+     */
+    private Double firRecordResult;
+
+    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;
+}

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

@@ -82,6 +82,7 @@ public class QualityContent {
     public static final String LAST = "前一次";
     public static final String COUNTERMAND = "取消";
     public static final String PAUSE = "暂停";
+    public static final String BACTERIAL_CULTURE = "细菌培养";
     /**
      * 病理判断
      */

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 463 - 345
src/main/java/com/diagbot/facade/ConsoleFacade.java


+ 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;
     }
 
     /**

+ 13 - 0
src/main/java/com/diagbot/facade/MedIndexResultFacade.java

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

+ 27 - 0
src/main/java/com/diagbot/mapper/MedIndexResultMapper.java

@@ -0,0 +1,27 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.MedIndexResult;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.vo.FilterVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author cy
+ * @since 2021-04-26
+ */
+public interface MedIndexResultMapper extends BaseMapper<MedIndexResult> {
+
+    /**
+     * 指标分母人数
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Double> medicalRecordIndicator(@Param("filterVO") FilterVO filterVO);
+}

+ 26 - 0
src/main/java/com/diagbot/service/MedIndexResultService.java

@@ -0,0 +1,26 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.MedIndexResult;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.FilterVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author cy
+ * @since 2021-04-26
+ */
+public interface MedIndexResultService extends IService<MedIndexResult> {
+    /**
+     * 指标分母人数
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Double> medicalRecordIndicator(@Param("filterVO") FilterVO filterVO);
+}

+ 32 - 0
src/main/java/com/diagbot/service/impl/MedIndexResultServiceImpl.java

@@ -0,0 +1,32 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.MedIndexResult;
+import com.diagbot.mapper.MedIndexResultMapper;
+import com.diagbot.service.MedIndexResultService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.FilterVO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author cy
+ * @since 2021-04-26
+ */
+@Service
+public class MedIndexResultServiceImpl extends ServiceImpl<MedIndexResultMapper, MedIndexResult> implements MedIndexResultService {
+    /**
+     * 各指标分母
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Double> medicalRecordIndicator(@Param("filterVO") FilterVO filterVO){
+        return baseMapper.medicalRecordIndicator(filterVO);
+    }
+}

+ 86 - 0
src/main/java/com/diagbot/task/MedIndexTask.java

@@ -0,0 +1,86 @@
+package com.diagbot.task;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.entity.SysTaskCron;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.facade.ConsoleFacade;
+import com.diagbot.facade.SysTaskCronFacade;
+import com.diagbot.facade.data.ADoctorAdviceFacade;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.FilterVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.Trigger;
+import org.springframework.scheduling.TriggerContext;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.util.Date;
+
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+@Slf4j
+public class MedIndexTask implements SchedulingConfigurer{
+
+	@Autowired
+    private SysTaskCronFacade sysTaskCronFacade;
+
+    private SysTaskCron task001 = new SysTaskCron();
+
+    @Autowired
+    private ConsoleFacade consoleFacade;
+    
+    /**
+     * 执行定时任务.
+     */
+    @Override
+    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+        taskRegistrar.addTriggerTask(new Runnable() {
+            @Override
+            public void run() {
+                //1.添加任务内容(Runnable)
+                if (null != task001
+                        && 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);
+                }
+            }
+        }, new Trigger() {
+            @Override
+            public Date nextExecutionTime(TriggerContext triggerContext) {
+                //2.1 从数据库获取执行周期
+                task001 = sysTaskCronFacade.getOne(new QueryWrapper<SysTaskCron>()
+                        .eq("cron_code", "TASK_INDEX"), false);
+                String cron = "* 22 * * * ?";
+                //2.2 合法性校验.
+                if (null != task001 && StringUtil.isNotBlank(task001.getCron())) {
+                    cron = task001.getCron();
+                }
+                CronTrigger trigger = new CronTrigger(cron);
+                return trigger.nextExecutionTime(triggerContext);
+            }
+        });
+    }
+    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/vo/FilterVO.java

@@ -76,5 +76,5 @@ public class FilterVO {
     /**
      * 指标名称
      */
-    private String indexName;
+    private String indexName = "";
 }

+ 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);
+    }
+
     /**
      * 质控病历统计
      *

+ 67 - 0
src/main/resources/mapper/MedIndexResultMapper.xml

@@ -0,0 +1,67 @@
+<?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.MedIndexResultMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.MedIndexResult">
+        <id column="id" property="id" />
+        <result column="admission_result" property="admissionResult" />
+        <result column="operation_result" property="operationResult" />
+        <result column="leave_hospital_result" property="leaveHospitalResult" />
+        <result column="med_home_result" property="medHomeResult" />
+        <result column="ct_result" property="ctResult" />
+        <result column="mri_result" property="mriResult" />
+        <result column="pathology_result" property="pathologyResult" />
+        <result column="germ_result" property="germResult" />
+        <result column="antibiosis_result" property="antibiosisResult" />
+        <result column="tumor_chemistry_result" property="tumorChemistryResult" />
+        <result column="tumor_radiation_result" property="tumorRadiationResult" />
+        <result column="operation_complete_result" property="operationCompleteResult" />
+        <result column="implants_result" property="implantsResult" />
+        <result column="blood_result" property="bloodResult" />
+        <result column="
+ward_round_result" property="
+wardRoundResult" />
+        <result column="rescue_result" property="rescueResult" />
+        <result column="sec_file_result" property="secFileResult" />
+        <result column="file_complete_result" property="fileCompleteResult" />
+        <result column="no_copy_result" property="noCopyResult" />
+        <result column="record_sign_result" property="recordSignResult" />
+        <result column="fir_record_result" property="firRecordResult" />
+        <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>
+
+
+
+    <select id="medicalRecordIndicator" parameterType="com.diagbot.vo.FilterVO" resultType="java.util.Map">
+         SELECT
+            COALESCE (sum(a.admission_result), 0) AS 'startCount',
+            COALESCE (sum(a.operation_result), 0) AS 'operationFeeNum',
+            COALESCE (sum(a.ct_result), 0) AS 'CTNum',
+            COALESCE (sum(a.mri_result), 0) AS 'MRNum',
+            COALESCE (sum(a.pathology_result), 0) AS 'operationPathologyFeeNum',
+            COALESCE (sum(a.germ_result), 0) AS 'bacterialCultureNum',
+            COALESCE (sum(a.antibiosis_result), 0) AS 'antibiosisFeeNum',
+            COALESCE (sum(a.tumor_chemistry_result),0) AS 'chemotherapyMalignantTumorsNum',
+            COALESCE (sum(a.tumor_radiation_result),0) AS 'tumor_radiation_result',
+            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'
+        FROM
+            med_index_result a
+        WHERE
+            a.hospital_id = #{filterVO.hospitalId}
+        AND a.is_deleted = 'N'
+        AND (a.start_date BETWEEN #{filterVO.startDate} AND #{filterVO.endDate} )
+        AND (a.end_date BETWEEN #{filterVO.startDate} AND #{filterVO.endDate} )
+ </select>
+
+</mapper>