Sfoglia il codice sorgente

住院病案管理人员月均负担和病案编码人员月均负担整合,及入院记录24小时,手术记录24小时,出院24h,医师查房完成率 基本代码

zhanghang 4 anni fa
parent
commit
dbab58b465

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

@@ -97,6 +97,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/console/homePageLevelStatistics").permitAll()
                 .antMatchers("/console/leaveHosCount").permitAll()
                 .antMatchers("/console/hospitalMonthly").permitAll()
+                .antMatchers("/console/medicalRecordIndicator").permitAll()
                 .antMatchers("/console/codingMonthly").permitAll()
                 .antMatchers("/console/levelPercentGroupByDeptPage").permitAll()
                 .antMatchers("/console/levelStatistics").permitAll()

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

@@ -146,6 +146,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/console/mrCount", request)
                 || matchers("/console/mrStatistics", request)
                 || matchers("/console/hospitalMonthly", request)
+                || matchers("/console/medicalRecordIndicator", request)
                 || matchers("/console/codingMonthly", request)
                 || matchers("/console/qcResultShortPage", request)
                 || matchers("/console/resultStatistics", request)

+ 53 - 0
src/main/java/com/diagbot/entity/FilterRecordVO.java

@@ -0,0 +1,53 @@
+package com.diagbot.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class FilterRecordVO implements Serializable {
+        private Integer type;
+        /**
+         * 起始时间
+         */
+        @NotBlank(message = "请输入起始时间")
+        private String startDate;
+        /**
+         * 结束时间
+         */
+        @NotBlank(message = "请输入结束时间")
+        private String endDate;
+
+        /**
+         * 医院id
+         */
+        @ApiModelProperty(hidden = true)
+        private String hospitalId;
+        /**
+         * 限制条数
+         */
+        @ApiModelProperty(hidden = true)
+        private Integer limitCount = 10;
+
+        @ApiModelProperty(hidden = true)
+        private Long userId;
+
+        /**
+         * 科室分类
+         */
+        private String deptClass;
+        //科室名称
+        private String deptName;
+
+        private String level;
+        /**
+         * 是否归档(0:未归档,1:已归档)
+         */
+        private String isPlacefile = "1";
+
+
+}

+ 221 - 0
src/main/java/com/diagbot/entity/MedQcresultInfo.java

@@ -0,0 +1,221 @@
+package com.diagbot.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 质控评分主表信息
+每次评分增加一条信息,前面所有评分is_deleted全部设置为Y
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-03-26
+ */
+public class MedQcresultInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 病人住院ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 等级
+     */
+    private String level;
+
+    /**
+     * 页面数据
+     */
+    private String pageData;
+
+    /**
+     * 菜单数据
+     */
+    private String menuData;
+
+    /**
+     * 评分类型(1:机器,2:人工)
+     */
+    private Integer gradeType;
+
+    /**
+     * 最后得分
+     */
+    private BigDecimal scoreRes;
+
+    /**
+     * 是否有病案首页(0:无,1:有)
+     */
+    private Integer haveHomePage;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private LocalDateTime gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private LocalDateTime gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+    public String getBehospitalCode() {
+        return behospitalCode;
+    }
+
+    public void setBehospitalCode(String behospitalCode) {
+        this.behospitalCode = behospitalCode;
+    }
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+    public String getPageData() {
+        return pageData;
+    }
+
+    public void setPageData(String pageData) {
+        this.pageData = pageData;
+    }
+    public String getMenuData() {
+        return menuData;
+    }
+
+    public void setMenuData(String menuData) {
+        this.menuData = menuData;
+    }
+    public Integer getGradeType() {
+        return gradeType;
+    }
+
+    public void setGradeType(Integer gradeType) {
+        this.gradeType = gradeType;
+    }
+    public BigDecimal getScoreRes() {
+        return scoreRes;
+    }
+
+    public void setScoreRes(BigDecimal scoreRes) {
+        this.scoreRes = scoreRes;
+    }
+    public Integer getHaveHomePage() {
+        return haveHomePage;
+    }
+
+    public void setHaveHomePage(Integer haveHomePage) {
+        this.haveHomePage = haveHomePage;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public LocalDateTime getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(LocalDateTime gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public LocalDateTime getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(LocalDateTime gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "MedQcresultInfo{" +
+            "id=" + id +
+            ", hospitalId=" + hospitalId +
+            ", behospitalCode=" + behospitalCode +
+            ", level=" + level +
+            ", pageData=" + pageData +
+            ", menuData=" + menuData +
+            ", gradeType=" + gradeType +
+            ", scoreRes=" + scoreRes +
+            ", haveHomePage=" + haveHomePage +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 24 - 4
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -425,7 +425,8 @@ public class ConsoleFacade {
             medQualityControlDTO.setAdmissionStr(admissionStrString);
             medQualityControlDTO.setAdmissionNum(admissionNumString);
         } catch (ParseException e) {
-            e.printStackTrace();
+            medQualityControlDTO.setAdmissionStr("0");
+            medQualityControlDTO.setAdmissionNum(0.0);
         }
         return medQualityControlDTO;
     }
@@ -473,8 +474,10 @@ public class ConsoleFacade {
                         Date behospitalDate = behospitalInfo.getBehospitalDate();
                        /* //出院时间
                         Date leaveHospitalDate = behospitalInfo.getLeaveHospitalDate();*/
-                        if(belongCalendar(behospitalDate, startDate, endDate)){
-                            number++;
+                        if(behospitalCode!=null) {
+                            if (belongCalendar(behospitalDate, startDate, endDate)) {
+                                number++;
+                            }
                         }
 
                     }
@@ -483,12 +486,29 @@ public class ConsoleFacade {
         Double numDou = Double.valueOf(num.intValue());
         Double numberDou = Double.valueOf(number);
         //完成率为
-        Double finishingRate= numberDou/ numDou;
+        Double finishingRate= null;
+        try {
+            finishingRate = numberDou/ numDou;
+        } catch (Exception e) {
+            stringDoubleHashMap.put("完成量",0.0);
+            stringDoubleHashMap.put("完成率",0.0);
+        }
         stringDoubleHashMap.put("完成量",numberDou);
         stringDoubleHashMap.put("完成率",finishingRate);
         return stringDoubleHashMap;
     }
 
+    /**
+     * 病案指标
+     * @param filterRecordVO
+     * @return   2170
+     */
+public MedQualityControlDTO medicalRecordIndicator(FilterRecordVO filterRecordVO){
+    List<MedManagementInfo> list = medManagementInfoService.list();
+    MedQualityControlDTO medQualityControlDTOS = medManagementInfoService.medicalRecordIndicator(filterRecordVO,list);
+    return medQualityControlDTOS;
+}
+
     //判断时间是否在一个时间段内
     public static boolean belongCalendar(Date nowTime, Date beginTime, Date endTime) {
         //设置当前时间

+ 7 - 1
src/main/java/com/diagbot/mapper/MedManagementInfoMapper.java

@@ -2,6 +2,12 @@ package com.diagbot.mapper;
 
 import com.diagbot.entity.MedManagementInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.FilterRecordVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -12,5 +18,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2021-03-25
  */
 public interface MedManagementInfoMapper extends BaseMapper<MedManagementInfo> {
-
+    List<Map<String, Object>> medicalRecordIndicator(@Param("filterRecordVO") FilterRecordVO filterRecordVO, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end);
 }

+ 17 - 0
src/main/java/com/diagbot/mapper/MedQcresultInfoMapper.java

@@ -0,0 +1,17 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.MedQcresultInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 质控评分主表信息
+每次评分增加一条信息,前面所有评分is_deleted全部设置为Y Mapper 接口
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-03-26
+ */
+public interface MedQcresultInfoMapper extends BaseMapper<MedQcresultInfo> {
+
+}

+ 5 - 1
src/main/java/com/diagbot/service/MedManagementInfoService.java

@@ -1,7 +1,11 @@
 package com.diagbot.service;
 
+import com.diagbot.dto.MedQualityControlDTO;
 import com.diagbot.entity.MedManagementInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.FilterRecordVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2021-03-25
  */
 public interface MedManagementInfoService extends IService<MedManagementInfo> {
-
+    MedQualityControlDTO medicalRecordIndicator(FilterRecordVO filterRecordVO, List list);
 }

+ 17 - 0
src/main/java/com/diagbot/service/MedQcresultInfoService.java

@@ -0,0 +1,17 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.MedQcresultInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 质控评分主表信息
+每次评分增加一条信息,前面所有评分is_deleted全部设置为Y 服务类
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-03-26
+ */
+public interface MedQcresultInfoService extends IService<MedQcresultInfo> {
+
+}

+ 330 - 0
src/main/java/com/diagbot/service/impl/MedManagementInfoServiceImpl.java

@@ -1,11 +1,24 @@
 package com.diagbot.service.impl;
 
+
+import com.diagbot.dto.MedQualityControlDTO;
 import com.diagbot.entity.MedManagementInfo;
 import com.diagbot.mapper.MedManagementInfoMapper;
 import com.diagbot.service.MedManagementInfoService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.diagbot.util.ListUtil;
+import com.diagbot.entity.FilterRecordVO;
+
 import org.springframework.stereotype.Service;
 
+
+import java.time.Duration;
+import java.time.LocalDateTime;
+
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
 /**
  * <p>
  * 病案管理人员表 服务实现类
@@ -16,5 +29,322 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class MedManagementInfoServiceImpl extends ServiceImpl<MedManagementInfoMapper, MedManagementInfo> implements MedManagementInfoService {
+    public MedQualityControlDTO medicalRecordIndicator(FilterRecordVO filterRecordVO, List list) {
+        String startDate = filterRecordVO.getStartDate();
+        String endDate = filterRecordVO.getEndDate();
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime sta = LocalDateTime.parse(startDate, df);
+        LocalDateTime end = LocalDateTime.parse(endDate, df);
+        MedQualityControlDTO medQualityControlDTO = new MedQualityControlDTO();
+        // type==1  时间为出院
+        filterRecordVO.setType(1);
+        List<Map<String, Object>> medicalRecordIndicatorStaList = baseMapper.medicalRecordIndicator(filterRecordVO,sta,end);
+        //时间段出院人数为
+        Object countNumSta = medicalRecordIndicatorStaList.get(0).get("countNum");
+        int totleCountSta = Integer.parseInt(countNumSta.toString());
+        //获取病案管理人员工作
+        HashMap<String, Long> longHashMap = getTimeCount(list, sta, end);
+        Long timeCount = longHashMap.get("病案管理");
+        Long codingCount = longHashMap.get("编码管理");
+        double monthlyDou = 0;
+        double monthlyCoding = 0;
+        try {
+            if(timeCount==0||totleCountSta==0){
+                medQualityControlDTO.setManagerMouthNum("0");
+            }
+            double timeMonth = timeCount / 30;
+            // 住院病案管理人员月均负担出院患者病历
+            monthlyDou = (totleCountSta / timeMonth);
+            double ceil = Math.ceil(monthlyDou);
+            String monthlyInt = String.valueOf(ceil);
+            medQualityControlDTO.setManagerMouthNum(monthlyInt);
+            //编码
+            if(codingCount==0||totleCountSta==0){
+                medQualityControlDTO.setCoderMouthNum("0");
+            }
+            monthlyCoding = totleCountSta / (codingCount/30);
+            double roundCod = Math.ceil(monthlyCoding);
+            String codingInt = String.valueOf(roundCod);
+            medQualityControlDTO.setCoderMouthNum(codingInt);
+        } catch (Exception e) {
+            e.printStackTrace();
+            //throw new CommonException(CommonErrorCode.NOT_EXISTS, "该病历无关联的质控条目!");
+        }
+        //type=2   时间为住院对比
+        filterRecordVO.setType(2);
+        List<Map<String, Object>> medicalRecordIndicatorOutList = baseMapper.medicalRecordIndicator(filterRecordVO,sta,end);
+       // List<Map<String, Object>> medicalRecordIndicatorOutList = baseMapper.medicalRecordIndicator(filterRecordVO,sta,end);
+        //同期住院人数
+        Object countNumOut = medicalRecordIndicatorOutList.get(0).get("countNum");
+        int totleCountOut = Integer.parseInt(countNumOut.toString());
+        //type=3   住院时间缺陷情况
+        filterRecordVO.setType(3);
+        List<Map<String, Object>> blemishList = baseMapper.medicalRecordIndicator(filterRecordVO,sta,end);
+        if (ListUtil.isNotEmpty(blemishList)) {
+            for (Map<String, Object> blemishMap : blemishList) {
+                //入院记录未在术后24h内完成
+                if (("2658").equals(blemishMap.get("cases_entry_id"))) {
+                    //未完成个数
+                    Object obj = blemishMap.get("2658入院记录未在术后24h内完成");
+                    double i = Double.parseDouble(obj.toString());
+                    //完成率为
+                    if (totleCountOut != 0) {
+                        double admissionDou = (totleCountOut - i) / totleCountOut;
+                        String admissionStr = Double.toString(admissionDou);
+                        medQualityControlDTO.setAdmissionStr(admissionStr);
+                        //完成个数
+                        medQualityControlDTO.setAdmissionNum((totleCountOut - i));
+                    }
+                }
+                //手术记录未在术后24h内完成
+                if (("2170").equals(blemishMap.get("cases_entry_id"))) {
+                    //未完成个数
+                    Object obj = blemishMap.get("2170手术记录未在术后24h内完成");
+                    double i = Double.parseDouble(obj.toString());
+                    //完成率为
+                    if (totleCountOut != 0) {
+                        double admissionDou = (totleCountOut - i) / totleCountOut;
+                        String admissionStr = Double.toString(admissionDou);
+                        medQualityControlDTO.setOperationStr(admissionStr);
+                        //完成个数
+                        medQualityControlDTO.setOperationNum((totleCountOut - i));
+                    }
+                }
+
+            }
+        }
+        if(medQualityControlDTO.getAdmissionStr()==null){
+            medQualityControlDTO.setAdmissionStr("1");
+            //完成个数
+            medQualityControlDTO.setAdmissionNum((Double.valueOf(totleCountOut)));
+        }
+        if(medQualityControlDTO.getOperationStr()==null){
+            medQualityControlDTO.setOperationStr("1");
+            //完成个数
+            medQualityControlDTO.setOperationNum((Double.valueOf(totleCountOut)));
+        }
+        //type=4   出院时间缺陷情况
+        filterRecordVO.setType(4);
+        List<Map<String, Object>> blemishListF = baseMapper.medicalRecordIndicator(filterRecordVO,sta,end);
+        if (ListUtil.isNotEmpty(blemishListF)) {
+            for (Map<String, Object> blemishMap : blemishListF) {
+                //出院记录未在术后24h内完成
+                if (("2635").equals(blemishMap.get("cases_entry_id"))) {
+                    //未完成个数
+                    Object obj = blemishMap.get("2635出院记录未在术后24h内完成");
+                    double i = Double.parseDouble(obj.toString());
+                    //完成率为
+                    if (totleCountSta != 0) {
+                        double leaveHospitalDou = (totleCountSta - i) / totleCountSta;
+                        String leaveHospitalStr = Double.toString(leaveHospitalDou);
+                        medQualityControlDTO.setLeaveHospitalStr(leaveHospitalStr);
+                        //完成个数
+                        medQualityControlDTO.setLeaveHospitalNum((totleCountOut - i));
+                    }
+                }
+            }
+        }
+        if(medQualityControlDTO.getLeaveHospitalStr()==null){
+            medQualityControlDTO.setLeaveHospitalStr("1");
+            //完成个数
+            medQualityControlDTO.setLeaveHospitalNum((Double.valueOf(totleCountOut)));
+        }
+
+        //查房记录完成率
+        filterRecordVO.setType(0);
+        List<Map<String, Object>> blemishListOne = baseMapper.medicalRecordIndicator(filterRecordVO,sta,end);
+        int roundNum=0;
+        String code=null;
+        int record=0;
+        //获得住院日期所有数据未分组的缺陷
+        for (int i = 0; i < blemishListOne.size(); i++) {
+            String casesEntryId = blemishListOne.get(i).get("cases_entry_id").toString();
+            //只要符合其中任何一个
+            if(casesEntryId.equals("2655") || casesEntryId.equals("2656")|| casesEntryId.equals("2427")|| casesEntryId.equals("2654")|| casesEntryId.equals("2214")){
+                if(i!=0) {
+                    code = blemishListOne.get(i).get("acode").toString();
+                    String recordCode = blemishListOne.get(record).get("acode").toString();
+                    if(code.equals(recordCode)){
+                        continue;
+                    }
+                    record = i;
+                    roundNum=roundNum+1;
+                    //获得此次的code
+                    continue;
+                }
+                record = i;
+                roundNum=roundNum+1;
+
+            }
+        }
+        //医师完整记录完成量为
+        if(roundNum==0){
+            medQualityControlDTO.setWardRoundStr("1");
+            //完成个数
+            medQualityControlDTO.setWardRoundNum((Double.valueOf(totleCountOut)));
+        }
+        medQualityControlDTO.setWardRoundNum(Double.valueOf(roundNum));
+        //医师完整记录完成率
+        Double medHomePage = (Double.valueOf(roundNum) / totleCountOut);
+        medQualityControlDTO.setWardRoundStr(medHomePage.toString());
+
+
+        return medQualityControlDTO;
+    }
+
+/*    //判断时间是否在一个时间段内
+    public static boolean belongCalendar(Date nowTime, Date beginTime, Date endTime) {
+        if (nowTime != null && beginTime != null && endTime != null) {
+            //设置当前时间
+            Calendar date = Calendar.getInstance();
+            date.setTime(nowTime);
+            //设置开始时间
+            Calendar begin = Calendar.getInstance();
+            begin.setTime(beginTime);
+            //设置结束时间
+            Calendar end = Calendar.getInstance();
+            end.setTime(endTime);
+            //处于开始时间之后,和结束时间之前的判断
+            if (date.after(begin) && date.before(end)) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+    }*/
+
+
+
+    public HashMap<String, Long> getTimeCount(List<MedManagementInfo> list, LocalDateTime sta, LocalDateTime end) {
+        HashMap<String, Long> longHashMap = new HashMap<>();
+        long timeCount = 0;
+        long codingCount = 0;
+        if (ListUtil.isNotEmpty(list)) {
+            for (MedManagementInfo managementInfo : list) {
+                //开始工作时间
+                LocalDateTime hireDate = managementInfo.getHireDate();
+                //辞职时间
+                LocalDateTime resignationTime = managementInfo.getResignationTime();
+                //开始工作时间和离职时间均不为空
+                if (hireDate != null && resignationTime != null) {
+                    //单位时间内开始时间大于等于工作时间且小于结束时间结束时间大于等于离职时间
+                    if ((resignationTime.isAfter(sta))&&(sta.isAfter(hireDate) || sta.equals(hireDate)) && (end.isAfter(resignationTime) || end.equals(resignationTime))) {
+                        //  开始时间---离职时间  相差的天数
+                        Duration duration = Duration.between(sta, resignationTime);
+                        long days = duration.toDays();
+                        //病案管理人员
+                        if (1 == managementInfo.getPosition()) {
+                            timeCount = timeCount + days;
+                            continue;
+                        }
+                        //病案编码管理人员
+                        if (2 == managementInfo.getPosition()) {
+                            codingCount = codingCount + days;
+                            continue;
+                        }
+                    }
+                    //单位时间内开始时间大于等于工作时间小于结束时间且离职时间大于等于结束时间
+                    if ((resignationTime.isAfter(sta))&&(sta.isAfter(hireDate) || sta.equals(hireDate)) && (resignationTime.isAfter(end) || end.equals(resignationTime))) {
+                        // 开始时间---结束时间
+                        Duration duration = Duration.between(sta, end);
+                        long days = duration.toDays();
+                        //病案管理人员
+                        if (1 == managementInfo.getPosition()) {
+                            timeCount = timeCount + days;
+                            continue;
+                        }
+                        //病案编码管理人员
+                        if (2 == managementInfo.getPosition()) {
+                            codingCount = codingCount + days;
+                            continue;
+                        }
+                    }
+                    // 开始时间< =工作时间  <  离职时间<=结束时间
+                    if ((resignationTime.isAfter(sta))&&(hireDate.isAfter(sta) || sta.equals(hireDate)) && (end.isAfter(resignationTime) || end.equals(resignationTime))) {
+                        //  结束时间 ---离职时间
+                        Duration duration = Duration.between(hireDate, resignationTime);
+                        long days = duration.toDays();
+                        //病案管理人员
+                        if (1 == managementInfo.getPosition()) {
+                            timeCount = timeCount + days;
+                            continue;
+                        }
+                        //病案编码管理人员
+                        if (2 == managementInfo.getPosition()) {
+                            codingCount = codingCount + days;
+                            continue;
+                        }
+                    }
+                    // 开始时间<=工作时间     离职时间>=结束时间
+                    if ((hireDate.isAfter(sta) || sta.equals(hireDate)) && (resignationTime.isAfter(end) || end.equals(resignationTime))) {
+                        // 工作时间---结束时间
+                        Duration duration = Duration.between(hireDate, end);
+                        long days = duration.toDays();
+                        //病案管理人员
+                        if (1 == managementInfo.getPosition()) {
+                            timeCount = timeCount + days;
+                            continue;
+                        }
+                        //病案编码管理人员
+                        if (2 == managementInfo.getPosition()) {
+                            codingCount = codingCount + days;
+                            continue;
+                        }
+                    }
+
+                }
+                //离职时间为空
+                if (hireDate != null && resignationTime == null) {
+                    //开始时间<=工作时间
+                    if (hireDate.isAfter(sta) || sta.equals(hireDate)) {
+                        Duration duration = Duration.between(hireDate, end);
+                        long days = duration.toDays();
+                        //病案管理人员
+                        if (1 == managementInfo.getPosition()) {
+                            timeCount = timeCount + days;
+                            continue;
+                        }
+                        //病案编码管理人员
+                        if (2 == managementInfo.getPosition()) {
+                            codingCount = codingCount + days;
+                            continue;
+                        }
+                    }
+                    // 结束时间>开始时间>=工作时间
+                    if ((sta.isAfter(hireDate) || sta.equals(hireDate))&&(end.isAfter(hireDate))) {
+                        Duration duration = Duration.between(sta, end);
+                        long days = duration.toDays();
+                        //病案管理人员
+                        if (1 == managementInfo.getPosition()) {
+                            timeCount = timeCount + days;
+                            continue;
+                        }
+                        //病案编码管理人员
+                        if (2 == managementInfo.getPosition()) {
+                            codingCount = codingCount + days;
+                            continue;
+                        }
+                    }
+                    //开始时间大于结束时间
+                    if((sta.isAfter(end))){
+                        //病案管理人员
+                        if (1 == managementInfo.getPosition()) {
+                            timeCount = timeCount + 0;
+                            continue;
+                        }
+                        //病案编码管理人员
+                        if (2 == managementInfo.getPosition()) {
+                            codingCount = codingCount + 0;
+                            continue;
+                        }
+                    }
+                }
+
 
+            }
+            longHashMap.put("病案管理", timeCount);
+            longHashMap.put("编码管理", codingCount);
+        }
+        return longHashMap;
+    }
 }

+ 21 - 0
src/main/java/com/diagbot/service/impl/MedQcresultInfoServiceImpl.java

@@ -0,0 +1,21 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.MedQcresultInfo;
+import com.diagbot.mapper.MedQcresultInfoMapper;
+import com.diagbot.service.MedQcresultInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 质控评分主表信息
+每次评分增加一条信息,前面所有评分is_deleted全部设置为Y 服务实现类
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-03-26
+ */
+@Service
+public class MedQcresultInfoServiceImpl extends ServiceImpl<MedQcresultInfoMapper, MedQcresultInfo> implements MedQcresultInfoService {
+
+}

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

@@ -3,6 +3,7 @@ package com.diagbot.web;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.*;
+import com.diagbot.entity.FilterRecordVO;
 import com.diagbot.facade.ConsoleFacade;
 import com.diagbot.vo.*;
 import io.swagger.annotations.Api;
@@ -177,7 +178,20 @@ public class ConsoleController {
         return RespDTO.onSuc(consoleFacade.hospitalMonthly(filterVO));
     }
 
-
+    /**
+     * 住院病案管理人员月均负担出院患者病历
+     * @param filterRecordVO
+     * @return
+     */
+    @ApiOperation(value = "病案指标[by:zh]",
+            notes = "startDate: 起始时间 <br>" +
+                    "endDate: 结束时间 <br>" +
+                    "isPlacefile: 是否归档(0:未归档,1:已归档) <br>")
+    @PostMapping("/medicalRecordIndicator")
+    @SysLogger("medicalRecordIndicator")
+    public RespDTO<Integer> medicalRecordIndicator(@RequestBody @Valid FilterRecordVO filterRecordVO) {
+        return RespDTO.onSuc(consoleFacade.medicalRecordIndicator(filterRecordVO));
+    }
     /**
      * 质控病历统计
      *

+ 21 - 0
src/main/java/com/diagbot/web/MedQcresultInfoController.java

@@ -0,0 +1,21 @@
+package com.diagbot.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 质控评分主表信息
+每次评分增加一条信息,前面所有评分is_deleted全部设置为Y 前端控制器
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-03-26
+ */
+@Controller
+@RequestMapping("/medQcresultInfo")
+public class MedQcresultInfoController {
+
+}

+ 73 - 13
src/main/resources/mapper/MedManagementInfoMapper.xml

@@ -4,19 +4,79 @@
 
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.diagbot.entity.MedManagementInfo">
-        <id column="id" property="id" />
-        <result column="hospital_id" property="hospitalId" />
-        <result column="department" property="department" />
-        <result column="position_id" property="positionId" />
-        <result column="position" property="position" />
-        <result column="name" property="name" />
-        <result column="hire_date" property="hireDate" />
-        <result column="resignation_time" property="resignationTime" />
-        <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" />
+        <id column="id" property="id"/>
+        <result column="hospital_id" property="hospitalId"/>
+        <result column="department" property="department"/>
+        <result column="position_id" property="positionId"/>
+        <result column="position" property="position"/>
+        <result column="name" property="name"/>
+        <result column="hire_date" property="hireDate"/>
+        <result column="resignation_time" property="resignationTime"/>
+        <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.entity.FilterRecordVO" resultType="java.util.Map">
+      select a.behospital_code as acode,
+             b.`name`,
+             b.hospital_id,
+             b.beh_dept_id ,
+             b.behospital_date,
+             b.leave_hospital_date,
+             b.diagnose_icd ,
+             b.diagnose ,
+             b.is_placefile,
+             c.cases_entry_id ,
+             c.msg
+             <if test="filterRecordVO.type != null and (filterRecordVO.type== 1 or filterRecordVO.type==2)">
+                 ,COUNT(DISTINCT a.behospital_code) as countNum
+             </if>
+             <if test="filterRecordVO.type != null and (filterRecordVO.type== 3 or filterRecordVO.type==4)">
+                 ,sum(c.cases_entry_id = 2170) as '2170手术记录未在术后24h内完成',
+                 sum(c.cases_entry_id = 2287) as '2287会诊记录次数与会诊次数不一致',
+                 sum(c.cases_entry_id = 2658) as '2287会诊记录次数与会诊次数不一致',
+                 sum(c.cases_entry_id = 2635) as '2635出院记录未在患者出院24小时内完成'
+             </if>
+      from
+             med_qcresult_cases a,
+             med_behospital_info b,
+             med_qcresult_detail c,
+             qc_cases_entry d
+
+       where
+             a.hospital_id = #{filterRecordVO.hospitalId}
+        and  a.hospital_id = b.hospital_id
+        and  a.hospital_id = c.hospital_id
+        and  a.cases_id = 243
+        and  b.is_placefile = #{filterRecordVO.isPlacefile}
+        and  a.behospital_code = b.behospital_code
+        and  a.behospital_code = c.behospital_code
+        and  c.cases_entry_id = d.id
+        and  a.is_deleted='N'
+        and  b.is_deleted ='N'
+        and c.is_deleted = 'N'
+        and d.is_deleted = 'N'
+        <if test="filterRecordVO.type != null and filterRecordVO.type==1 ">
+            and #{start} &lt;= b.leave_hospital_date
+            and b.leave_hospital_date &lt;= #{end}
+        </if>
+        <if test="filterRecordVO.type != null and (filterRecordVO.type==2 or filterRecordVO.type==0) ">
+            and #{start} &lt;= b.behospital_date
+            and b.behospital_date &lt;= #{end}
+        </if>
+        <if test="filterRecordVO.type != null and filterRecordVO.type== 3 ">
+            and #{start} &lt;= b.behospital_date
+            and  b.behospital_date &lt;= #{end}
+            GROUP BY  c.cases_entry_id
+        </if>
+        <if test="filterRecordVO.type != null and filterRecordVO.type== 4 ">
+            and #{start} &lt;= b.leave_hospital_date
+            and  b.leave_hospital_date &lt;= #{end}
+            GROUP BY  c.cases_entry_id
+        </if>
+
+    </select>
 </mapper>

+ 24 - 0
src/main/resources/mapper/MedQcresultInfoMapper.xml

@@ -0,0 +1,24 @@
+<?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.MedQcresultInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.MedQcresultInfo">
+        <id column="id" property="id" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="behospital_code" property="behospitalCode" />
+        <result column="level" property="level" />
+        <result column="page_data" property="pageData" />
+        <result column="menu_data" property="menuData" />
+        <result column="grade_type" property="gradeType" />
+        <result column="score_res" property="scoreRes" />
+        <result column="have_home_page" property="haveHomePage" />
+        <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" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>