Selaa lähdekoodia

控制台、报表代码迁移

chengyao 3 vuotta sitten
vanhempi
commit
ec7a83b456
26 muutettua tiedostoa jossa 4448 lisäystä ja 178 poistoa
  1. 29 0
      common/src/main/java/com/lantone/common/util/ObjectUtil.java
  2. 127 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/report/BehospitalInfoMapper.java
  3. 8 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/report/QcresultInfoMapper.java
  4. 1827 3
      dblayer-mbg/src/main/resources/mapper/report/BehospitalInfoMapper.xml
  5. 130 3
      dblayer-mbg/src/main/resources/mapper/report/QcresultInfoMapper.xml
  6. 116 0
      report-service/src/main/java/com/lantone/report/aggregate/HomePageStatisticsAggregate.java
  7. 9 159
      report-service/src/main/java/com/lantone/report/aggregate/LeaveHosStatisticsAggregate.java
  8. 228 0
      report-service/src/main/java/com/lantone/report/facade/EntryCaseManagementFacade.java
  9. 196 0
      report-service/src/main/java/com/lantone/report/facade/HomePageManagementFacade.java
  10. 28 1
      report-service/src/main/java/com/lantone/report/facade/LeaveHospitalManagementFacade.java
  11. 188 0
      report-service/src/main/java/com/lantone/report/facade/MedicalCheckManagementFacade.java
  12. 449 0
      report-service/src/main/java/com/lantone/report/facade/MedicalControlManagementFacade.java
  13. 2 4
      report-service/src/main/java/com/lantone/report/facade/MrScoreManagementFacade.java
  14. 153 0
      report-service/src/main/java/com/lantone/report/facade/QcCheckManagementFacade.java
  15. 192 0
      report-service/src/main/java/com/lantone/report/facade/ReHos31DaysManagementFacade.java
  16. 319 0
      report-service/src/main/java/com/lantone/report/facade/TimelinessManagementFacade.java
  17. 52 0
      report-service/src/main/java/com/lantone/report/web/EntryCaseManagementController.java
  18. 74 0
      report-service/src/main/java/com/lantone/report/web/HomePageManagementController.java
  19. 19 5
      report-service/src/main/java/com/lantone/report/web/LeaveHospitalManagementController.java
  20. 61 0
      report-service/src/main/java/com/lantone/report/web/MedicalCheckManagementController.java
  21. 59 0
      report-service/src/main/java/com/lantone/report/web/MedicalControlManagementController.java
  22. 2 2
      report-service/src/main/java/com/lantone/report/web/MrScoreManagementController.java
  23. 60 0
      report-service/src/main/java/com/lantone/report/web/QcCheckManagementController.java
  24. 60 0
      report-service/src/main/java/com/lantone/report/web/ReHos31DaysManagementController.java
  25. 59 0
      report-service/src/main/java/com/lantone/report/web/TimelinessManagementController.java
  26. 1 1
      report-service/src/main/resources/bootstrap.yml

+ 29 - 0
common/src/main/java/com/lantone/common/util/ObjectUtil.java

@@ -39,4 +39,33 @@ public class ObjectUtil {
         return (T) object;
     }
 
+    /**
+     * 单个对象的某个键的值
+     *
+     * @param obj 对象
+     * @param key 键
+     * @return Object 键在对象中所对应得值 没有查到时返回空字符串
+     */
+    public static Object getValueByKey(Object obj, String key) {
+        // 得到类对象
+        Class userCla = (Class) obj.getClass();
+        // 得到类中的所有属性集合
+        Field[] fs = userCla.getDeclaredFields();
+        for (int i = 0; i < fs.length; i++) {
+            Field f = fs[i];
+            f.setAccessible(true); // 设置些属性是可以访问的
+            try {
+                if (f.getName().endsWith(key)) {
+                    return f.get(obj);
+                }
+            } catch (IllegalArgumentException e) {
+                e.printStackTrace();
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            }
+        }
+        // 没有查到时返回空字符串
+        return null;
+    }
+
 }

+ 127 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/report/BehospitalInfoMapper.java

@@ -2,12 +2,27 @@ package com.lantone.dblayermbg.mapper.report;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.lantone.common.dto.report.CaseScoreDTO;
+import com.lantone.common.dto.report.EntryStatisticsDTO;
 import com.lantone.common.dto.report.ExportExcelDTO;
+import com.lantone.common.dto.report.HomePageImproveDTO;
+import com.lantone.common.dto.report.HomePageNumDTO;
 import com.lantone.common.dto.report.LevelStatisticsDTO;
 import com.lantone.common.dto.report.LevelStatisticsTZDTO;
+import com.lantone.common.dto.report.MedicalCheckDTO;
+import com.lantone.common.dto.report.MedicalCheckExportDTO;
+import com.lantone.common.dto.report.MedicalCheckIdNameDTO;
+import com.lantone.common.dto.report.NumDTO;
 import com.lantone.common.dto.report.QcResultShortDTO;
+import com.lantone.common.dto.report.QualityControlDTO;
 import com.lantone.common.dto.report.ReBeHosMergeDTO;
+import com.lantone.common.dto.report.UnModifyMRDetailDTO;
+import com.lantone.common.vo.report.BehospitalPageVO;
+import com.lantone.common.vo.report.CaseScoreVO;
+import com.lantone.common.vo.report.EntryStatisticsVO;
+import com.lantone.common.vo.report.FilterMedicalCheckVO;
 import com.lantone.common.vo.report.FilterOrderVO;
+import com.lantone.common.vo.report.FilterUnModifyMRVO;
 import com.lantone.common.vo.report.FilterVO;
 import com.lantone.common.vo.report.QcResultShortPageVO;
 import com.lantone.common.vo.report.ReBeHosPageVO;
@@ -102,5 +117,117 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      */
     public List<LevelStatisticsTZDTO> levelStatisticsByDeptClass_TZ(FilterOrderVO filterOrderVO);
 
+    /**
+     * 病案首页质控病历数统计-全院(首页)
+     *
+     * @param filterVO
+     * @return
+     */
+    public HomePageNumDTO homePageQcPercent(FilterVO filterVO);
+
+    /**
+     * 病案首页完整率统计-全院(首页)
+     *
+     * @param filterVO
+     * @return
+     */
+    public HomePageNumDTO hmEmptyEntryPercent(FilterVO filterVO);
+
+    /**
+     * 改善率统计-全院(首页)
+     *
+     * @param filterVO
+     * @return
+     */
+    public HomePageImproveDTO homePageImproveCount(FilterVO filterVO);
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<HomePageNumDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO);
+
+    /**
+     * 入院人数统计-首页
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> beHosCount(FilterVO filterVO);
+
+    /**
+     * 单条条目缺陷统计-首页
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> casesEntryStatisticsById(FilterVO filterVO);
+
+    /**
+     * 关键条目缺陷占比统计
+     *
+     * @param entryStatisticsVO
+     * @return
+     */
+    public List<EntryStatisticsDTO> entryStatistics(EntryStatisticsVO entryStatisticsVO);
+
+    /**
+     * 质控核查统计(内页)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<HomePageImproveDTO> qcCheckStatistics(FilterOrderVO filterOrderVO);
+
+    /**
+     * 时效性相关统计
+     *
+     * @param filterUnModifyMRVO
+     * @return
+     */
+    public List<UnModifyMRDetailDTO> unModifyMRStatistics(FilterUnModifyMRVO filterUnModifyMRVO);
+
+    /**
+     * 病历稽查表-1
+     *
+     * @param filterVO
+     * @return
+     */
+    public IPage<MedicalCheckDTO> getMedicalCheck(@Param("filterVO") FilterMedicalCheckVO filterVO);
+
+    /**
+     * 病历稽查表-2
+     *
+     * @param casesEntryIds
+     * @return
+     */
+
+    public List<MedicalCheckIdNameDTO> getMedicalEntryIds(@Param("casesEntryIds") List<Long> casesEntryIds);
+
+    /**
+     * 病历稽查表导出
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<MedicalCheckExportDTO> getMedicalCheckExport(@Param("filterVO") FilterMedicalCheckVO filterVO);
+
+    /**
+     * 病历质控报表
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    public IPage<QualityControlDTO> getQualityControl(BehospitalPageVO behospitalPageVO);
+
+    /**
+     * 病历质控报表-扣分数据
+     *
+     * @param caseScoreVO
+     * @return
+     */
+    public List<CaseScoreDTO> getQualityCaseSorce(CaseScoreVO caseScoreVO);
 
 }

+ 8 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/report/QcresultInfoMapper.java

@@ -77,6 +77,7 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
 
     /**
      * 各科室甲/乙/丙级病历占比
+     *
      * @param filterVO
      * @return
      */
@@ -98,5 +99,12 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
      */
     public List<AverageStatisticsDTO> getAverageScoreByDeptClass(FilterVO filterVO);
 
+    /**
+     * 单项否决缺陷占比
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<EntryNumDTO> entryRejectPercent(FilterVO filterVO);
 
 }

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1827 - 3
dblayer-mbg/src/main/resources/mapper/report/BehospitalInfoMapper.xml


+ 130 - 3
dblayer-mbg/src/main/resources/mapper/report/QcresultInfoMapper.xml

@@ -548,7 +548,8 @@
     </select>
 
     <!-- 各科室甲/乙/丙级病历占比 -->
-    <select id="qcResultLevelPercent" parameterType="com.lantone.common.vo.report.FilterVO" resultType="com.lantone.common.dto.report.DeptNumDTO">
+    <select id="qcResultLevelPercent" parameterType="com.lantone.common.vo.report.FilterVO"
+            resultType="com.lantone.common.dto.report.DeptNumDTO">
         SELECT
         a.beh_dept_id AS deptId,
         a.beh_dept_name AS deptName,
@@ -592,13 +593,14 @@
         GROUP BY
         a.beh_dept_id,
         a.beh_dept_name
-        ORDER  BY
+        ORDER BY
         percent DESC,
         a.beh_dept_name ASC
     </select>
 
     <!-- 各科室质控平均分(首页) -->
-    <select id="getAverageScore" parameterType="com.lantone.common.vo.report.FilterVO" resultType="com.lantone.common.dto.report.AverageStatisticsDTO">
+    <select id="getAverageScore" parameterType="com.lantone.common.vo.report.FilterVO"
+            resultType="com.lantone.common.dto.report.AverageStatisticsDTO">
         select
         m1.id,
         m1.name,
@@ -815,4 +817,129 @@
         m1.id = m2.id
         and m1.name = m2.name
     </select>
+
+    <!-- 单项否决缺陷占比(首页) -->
+    <select id="entryRejectPercent" resultType="com.lantone.common.dto.report.EntryNumDTO">
+        SELECT
+        t1.id AS id,
+        t1.NAME AS NAME,
+        t1.casesId AS casesId,
+        t1.casesName AS casesName,
+        t1.num AS num,
+        t2.mrNum AS totleNum,
+        t1.score AS score,
+        t1.isReject AS isReject,
+        Round( t1.num / t2.mrNum, 4 ) AS percent,
+        CONCAT( Round( t1.num / t2.mrNum * 100, 2 ), '%' ) AS percentStr
+        FROM
+        (
+        SELECT
+        tt2.id,
+        tt2.NAME,
+        tt2.cases_id AS casesId,
+        tt2.cases_name AS casesName,
+        tt1.num,
+        <if test="isPlacefile != null and isPlacefile == 0">
+            tt3.score_run as score,
+        </if>
+        <if test="isPlacefile != null and isPlacefile == 1">
+            tt3.score,
+        </if>
+        tt1.is_reject AS isReject
+        FROM
+        (
+        SELECT
+        d.cases_entry_id,
+        d.cases_id,
+        a.hospital_id,
+        count(*) AS num,
+        d.is_reject
+        FROM
+        med_behospital_info a,
+        med_qcresult_info c,
+        med_qcresult_detail d
+        WHERE
+        a.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND a.hospital_id = c.hospital_id
+        AND a.hospital_id = d.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.behospital_code = d.behospital_code
+        <if test="isPlacefile != null and isPlacefile != ''">
+            and a.is_placefile = #{isPlacefile}
+        </if>
+        AND d.is_reject = 1
+        AND a.qc_type_id != 0
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="isPlacefile != null and isPlacefile == 0">
+            <if test="startDate != null and startDate != ''">
+                <![CDATA[ AND a.behospital_date >= #{startDate}]]>
+            </if>
+            <if test="endDate != null and endDate != ''">
+                <![CDATA[ AND a.behospital_date <= #{endDate}]]>
+            </if>
+        </if>
+        <if test="isPlacefile != null and isPlacefile == 1">
+            <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>
+        </if>
+        GROUP BY
+        d.cases_entry_id,
+        d.cases_id
+        ) tt1,
+        qc_cases_entry tt2,
+        qc_cases_entry_hospital tt3
+        WHERE
+        tt2.is_deleted = 'N'
+        AND tt3.is_deleted = 'N'
+        AND tt1.hospital_id = tt3.hospital_id
+        AND tt1.cases_id = tt2.cases_id
+        AND tt1.cases_entry_id = tt2.id
+        AND tt2.id = tt3.cases_entry_id
+        ) t1,
+        (
+        SELECT
+        count(*) AS mrNum
+        FROM
+        med_behospital_info a,
+        med_qcresult_info c
+        WHERE
+        a.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        <if test="isPlacefile != null and isPlacefile != ''">
+            and a.is_placefile = #{isPlacefile}
+        </if>
+        AND a.qc_type_id != 0
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="isPlacefile != null and isPlacefile == 0">
+            <if test="startDate != null and startDate != ''">
+                <![CDATA[ AND a.behospital_date >= #{startDate}]]>
+            </if>
+            <if test="endDate != null and endDate != ''">
+                <![CDATA[ AND a.behospital_date <= #{endDate}]]>
+            </if>
+        </if>
+        <if test="isPlacefile != null and isPlacefile == 1">
+            <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>
+        </if>
+        ) t2
+        ORDER BY
+        percent DESC
+    </select>
 </mapper>

+ 116 - 0
report-service/src/main/java/com/lantone/report/aggregate/HomePageStatisticsAggregate.java

@@ -0,0 +1,116 @@
+package com.lantone.report.aggregate;
+
+import com.lantone.common.dto.report.HomePageImproveDTO;
+import com.lantone.common.dto.report.HomePageNumDTO;
+import com.lantone.common.dto.report.NumDTO;
+import com.lantone.common.vo.report.FilterVO;
+import com.lantone.dblayermbg.facade.report.BehospitalInfoFacade;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/7/22 11:45
+ */
+@Component
+public class HomePageStatisticsAggregate {
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+
+    @DataProvider("setAllHomePage")
+    public Map<String, Object> setAllHomePage(
+            @InvokeParameter("filterVO") FilterVO filterVO,
+            @DataConsumer("getQcNumDTO") HomePageNumDTO qcNumDTO,
+            @DataConsumer("getEmptyNumDTO") HomePageNumDTO emptyNumDTO,
+            @DataConsumer("getImproveDTO") HomePageImproveDTO improveDTO) {
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        retMap.put("合格率", null);
+        retMap.put("不合格率", null);
+        retMap.put("完整率", null);
+        retMap.put("改善率", null);
+
+        if (qcNumDTO != null) {
+            //合格率
+            NumDTO pass = new NumDTO();
+            pass.setName("合格率");
+            pass.setNum(qcNumDTO.getFirstLevelNum());
+            pass.setTotleNum(qcNumDTO.getMrNum());
+            pass.setPercent(qcNumDTO.getFirstLevelPercent());
+            pass.setPercentStr(qcNumDTO.getFirstLevelPercentStr());
+            //不合格率
+            NumDTO unPass = new NumDTO();
+            unPass.setName("不合格率");
+            unPass.setNum(qcNumDTO.getSecondLevelNum());
+            unPass.setTotleNum(qcNumDTO.getMrNum());
+            unPass.setPercent(qcNumDTO.getSecondLevelPercent());
+            unPass.setPercentStr(qcNumDTO.getSecondLevelPercentStr());
+
+            retMap.put("合格率", pass);
+            retMap.put("不合格率", unPass);
+        }
+        if (emptyNumDTO != null) {
+            //完整率
+            NumDTO full = new NumDTO();
+            full.setName("完整率");
+            full.setNum(emptyNumDTO.getEntryTotleNum() - emptyNumDTO.getEmptyNum());
+            full.setTotleNum(emptyNumDTO.getEntryTotleNum());
+            full.setPercent(emptyNumDTO.getEmptyPercent());
+            full.setPercentStr(emptyNumDTO.getEmptyPercentStr());
+
+            retMap.put("完整率", full);
+        }
+
+        if (improveDTO != null) {
+            //改善率
+            NumDTO improve = new NumDTO();
+            improve.setName("改善率");
+            improve.setNum(improveDTO.getImproveNum());
+            improve.setTotleNum(improveDTO.getHomePageMRNum());
+            improve.setPercent(improveDTO.getImprovePercent());
+            improve.setPercentStr(improveDTO.getImprovePercentStr());
+
+            retMap.put("改善率", improve);
+        }
+        return retMap;
+    }
+
+    /**
+     * 合格率
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("getQcNumDTO")
+    public HomePageNumDTO getQcNumDTO(@InvokeParameter("filterVO") FilterVO filterVO) {
+        return behospitalInfoFacade.getBaseMapper().homePageQcPercent(filterVO);
+    }
+
+    /**
+     * 完整率
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("getEmptyNumDTO")
+    public HomePageNumDTO getEmptyNumDTO(@InvokeParameter("filterVO") FilterVO filterVO) {
+        return behospitalInfoFacade.getBaseMapper().hmEmptyEntryPercent(filterVO);
+    }
+
+    /**
+     * 改善率
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("getImproveDTO")
+    public HomePageImproveDTO getImproveDTO(@InvokeParameter("filterVO") FilterVO filterVO) {
+        return behospitalInfoFacade.getBaseMapper().homePageImproveCount(filterVO);
+    }
+}

+ 9 - 159
report-service/src/main/java/com/lantone/report/aggregate/LeaveHosStatisticsAggregate.java

@@ -2,20 +2,14 @@ package com.lantone.report.aggregate;
 
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.google.common.collect.Lists;
 import com.lantone.common.dto.report.ReBeHosDTO;
-import com.lantone.common.dto.report.ReBeHosDetailDTO;
-import com.lantone.common.dto.report.ReBeHosMergeDTO;
-import com.lantone.common.util.ListUtil;
 import com.lantone.common.vo.report.FilterVO;
 import com.lantone.common.vo.report.ReBeHosPageVO;
 import com.lantone.dblayermbg.facade.report.BehospitalInfoFacade;
-import com.lantone.report.facade.FilterFacade;
+import com.lantone.report.facade.ReHos31DaysManagementFacade;
 import io.github.lvyahui8.spring.annotation.DataConsumer;
 import io.github.lvyahui8.spring.annotation.DataProvider;
 import io.github.lvyahui8.spring.annotation.InvokeParameter;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -23,7 +17,6 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -39,7 +32,8 @@ public class LeaveHosStatisticsAggregate {
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
     @Autowired
-    private FilterFacade filterFacade;
+    private ReHos31DaysManagementFacade reHos31DaysManagementFacade;
+
 
     @DataProvider("setAllLeaveHos")
     public Map<String, Object> setAllLeaveHos(
@@ -61,6 +55,7 @@ public class LeaveHosStatisticsAggregate {
         return retMap;
 
     }
+
     /**
      * 总人数
      *
@@ -125,152 +120,22 @@ public class LeaveHosStatisticsAggregate {
     @DataProvider("get31DaysBehospitalCount")
     public Integer get31DaysBehospitalCount(@InvokeParameter("filterVO") FilterVO filterVO) {
         ReBeHosPageVO reBeHosPageVO = new ReBeHosPageVO();
-        BeanUtil.copyProperties(filterVO,reBeHosPageVO);
+        BeanUtil.copyProperties(filterVO, reBeHosPageVO);
         reBeHosPageVO.setStartDate(timeTrans(filterVO.getStartDate()));
         reBeHosPageVO.setEndDate(timeTrans(filterVO.getEndDate()));
         reBeHosPageVO.setFlag(31);
-        IPage<ReBeHosDTO> reBeHosDTOIPage = reHos31DaysPage(reBeHosPageVO);
+        IPage<ReBeHosDTO> reBeHosDTOIPage = reHos31DaysManagementFacade.reHos31DaysPage(reBeHosPageVO);
         List<ReBeHosDTO> records = reBeHosDTOIPage.getRecords();
         Set<String> codeList = new HashSet<>();
-        records.forEach(obj->{
-            obj.getDetails().forEach(opj->{
+        records.forEach(obj -> {
+            obj.getDetails().forEach(opj -> {
                 codeList.add(opj.getBehospitalCode());
             });
         });
         return codeList.size();
     }
 
-    /**
-     * 31天再入院详情页
-     *
-     * @param reBeHosPageVO
-     * @return
-     */
-    public IPage<ReBeHosDTO> reHos31DaysPage(ReBeHosPageVO reBeHosPageVO) {
-        filterFacade.reBeHosPageVOSet(reBeHosPageVO);
-        long size = reBeHosPageVO.getSize();
-        long current = reBeHosPageVO.getCurrent();
-        reBeHosPageVO.setCurrent(1L);
-        reBeHosPageVO.setSize(Long.MAX_VALUE);
-        IPage<ReBeHosMergeDTO> page = behospitalInfoFacade.getBaseMapper().reHos31DaysPage(reBeHosPageVO);
-        List<ReBeHosMergeDTO> records = page.getRecords();
-        IPage<ReBeHosDTO> retPage = new Page<>();
-        if (ListUtil.isNotEmpty(records)) {
-            BeanUtil.copyProperties(page, retPage);
-            List<ReBeHosDTO> retRecords = Lists.newLinkedList();
-            Iterator<ReBeHosMergeDTO> iterator = records.iterator();
-            while(iterator.hasNext()){
-                ReBeHosMergeDTO record = iterator.next();
-                strTrans(record);
-                Boolean flag = isContainDiagnose(record);
-                if(!flag){
-                    iterator.remove();
-                    continue;
-                }
-                ReBeHosDTO retRecord = new ReBeHosDTO();
-                BeanUtil.copyProperties(record, retRecord);
-                List<ReBeHosDetailDTO> details = Lists.newLinkedList();
-                ReBeHosDetailDTO detailRecord = new ReBeHosDetailDTO();
-                BeanUtil.copyProperties(record, detailRecord);
-                details.add(detailRecord);
-                ReBeHosDetailDTO lastDetailRecord = new ReBeHosDetailDTO();
-                lastDetailRecord.setName(record.getName());
-                lastDetailRecord.setAge(record.getLastAge());
-                lastDetailRecord.setDiagnose(record.getLastDiagnose());
-                lastDetailRecord.setDiagnoseName(record.getLastDiagnoseName());
-                lastDetailRecord.setBehDeptId(record.getLastBehDeptId());
-                lastDetailRecord.setBehDeptName(record.getLastBehDeptName());
-                lastDetailRecord.setBehospitalCode(record.getLastBehospitalCode());
-                lastDetailRecord.setBehospitalDate(record.getLastBehospitalDate());
-                lastDetailRecord.setLeaveHospitalDate(record.getLastLeaveHospitalDate());
-                lastDetailRecord.setLevel(record.getLastLevel());
-                lastDetailRecord.setScoreRes(record.getLastScoreRes());
-                lastDetailRecord.setBehospitalDayNum(record.getLastBehospitalDayNum());
-                lastDetailRecord.setTotleFee(record.getLastTotleFee());
-                details.add(lastDetailRecord);
-                retRecord.setDetails(details);
-                retRecords.add(retRecord);
-            }
-            //首页返回全部数据
-            if(reBeHosPageVO.getFlag()==31){
-                retPage.setRecords(retRecords);
-                return retPage;
-            }
-            //导出操作
-            if(reBeHosPageVO.getFlag()==1){
-                size = retRecords.size();
-            }
-            retPage.setSize(size);
-            retPage.setTotal(retRecords.size());
-            retPage.setCurrent(current);
-            //数据返回索引处理
-            if(0 == current){
-                current = 1;
-            }
-            int startIndex = ((int)current -1)*10;
-            int endIndex = startIndex + (int) size;
-
-            if(retRecords.size()>1){
-                if( retRecords.size()-startIndex<(int)size){
-                    retRecords = retRecords.subList(startIndex,retRecords.size());
-                }else{
-                    retRecords = retRecords.subList(startIndex,endIndex );
-                }
-            }
-            retPage.setRecords(retRecords);
-        }
-        return retPage;
-    }
-
-    static Boolean isContainDiagnose(ReBeHosMergeDTO record){
-        // String lastDiagnoseName = replace(record.getLastDiagnoseName());本身使用,分隔
-        String diagnose =replace(record.getDiagnose());//手动分隔
-        String lastDiagnose = replace(record.getLastDiagnose());
-        record.setDiagnose(diagnose);
-        record.setLastDiagnose(lastDiagnose);
-        Set lastDiagnoseNames = strTranListMethod(record.getLastDiagnoseName());
-        Set diagnoses = strTranListMethod(record.getDiagnose());
-        long count = diagnoses.stream().filter(obj ->null != lastDiagnoseNames && null != obj && lastDiagnoseNames.contains(obj)).count();
-        if(count<=0){
-            return false;
-        }
-        return true;
-    };
-
-
-    static Set strTranListMethod(String str){
-        Set<String> names = new HashSet<>();
-        if(StringUtils.isNotEmpty(str)){
-            if(str.contains(",") && str.length()>1){
-                for (String diagnoseName : str.split(",")) {
-                    names.add(diagnoseName);
-                }
-            }else{
-                names.add(str);
-            }
-        }
-        return names;
-    };
-
-    static String replace(String str){
-        if(StringUtils.isEmpty(str)){
-            return null;
-        }
-        str = str.trim().replace(";", ",").replace(";", ",")
-                .replace("、", ",").replace(",", ",")
-                .replace("|", ",").replace(" ", ",")
-                .replace(":", ",") .replace(":", ",");
-        if(str.startsWith(",")){
-            str = str.substring(1);
-        }
-        if(str.endsWith(",")){
-            str = str.substring(0,str.length()-1);
-        }
-
-        return str;
-    }
-
-    public static Date timeTrans(String time){
+    public static Date timeTrans(String time) {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         try {
             Date date = format.parse(time);
@@ -280,19 +145,4 @@ public class LeaveHosStatisticsAggregate {
         }
         return new Date();
     }
-
-
-    public static void strTrans(ReBeHosMergeDTO record) {
-        String replace = record.getLastAgainBehospitalPlan();
-        if(StringUtils.isEmpty(replace)){
-            replace = "否";
-            record.setLastAgainBehospitalPlan(replace);
-            return;
-        }
-        replace = replace.replace("无", "否")
-                .replace("-", "无").replace("是一周后", "是")
-                .replace("1", "否").replace("2", "是")
-                .replace("有", "是");
-        record.setLastAgainBehospitalPlan(replace);
-    }
 }

+ 228 - 0
report-service/src/main/java/com/lantone/report/facade/EntryCaseManagementFacade.java

@@ -1,12 +1,16 @@
 package com.lantone.report.facade;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
 import com.lantone.common.dto.report.EntryNumDTO;
+import com.lantone.common.dto.report.EntryStatisticsDTO;
 import com.lantone.common.dto.report.NumDTO;
 import com.lantone.common.util.ExcelUtils;
 import com.lantone.common.util.ListUtil;
+import com.lantone.common.vo.report.EntryStatisticsVO;
 import com.lantone.common.vo.report.FilterPageVO;
 import com.lantone.common.vo.report.FilterVO;
+import com.lantone.dblayermbg.facade.report.BehospitalInfoFacade;
 import com.lantone.dblayermbg.facade.report.QcresultInfoFacade;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.ibatis.annotations.Param;
@@ -14,6 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -30,6 +36,8 @@ public class EntryCaseManagementFacade {
     private FilterFacade filterFacade;
     @Autowired
     private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
 
     /**
      * 条目缺陷占比-控制台
@@ -106,4 +114,224 @@ public class EntryCaseManagementFacade {
         String fileName = "条目缺陷占比.xls";
         ExcelUtils.exportExcel(page.getRecords(), null, "sheet1", EntryNumDTO.class, fileName, response, 12.8f);
     }
+
+    /**
+     * 单项否决缺陷占比
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<EntryNumDTO> entryRejectPercent(FilterVO filterVO) {
+        List<EntryNumDTO> retList = Lists.newLinkedList();
+        filterFacade.filterVOSet(filterVO);
+        Integer limitCount = filterVO.getLimitCount();
+        List<EntryNumDTO> numDTOList = qcresultInfoFacade.getBaseMapper().entryRejectPercent(filterVO);
+        if (ListUtil.isNotEmpty(numDTOList)) {
+            if (numDTOList.size() <= limitCount) {
+                retList = numDTOList;
+            } else {
+                retList = numDTOList.subList(0, limitCount);
+            }
+        }
+        return retList;
+    }
+
+    /**
+     * 单条条目缺陷统计(首页)
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> casesEntryStatisticsById(FilterVO filterVO) {
+        filterFacade.filterVOSet(filterVO);
+        List<NumDTO> records = behospitalInfoFacade.getBaseMapper().casesEntryStatisticsById(filterVO);
+
+        if (ListUtil.isNotEmpty(records)) {
+            NumDTO globleRecord = new NumDTO();
+            globleRecord.setName("全院");
+            Integer num = records.stream()
+                    .map(NumDTO::getNum)
+                    .reduce(0, Integer::sum);
+            globleRecord.setNum(num);
+            records.add(0, globleRecord);
+        }
+
+        if (ListUtil.isNotEmpty(records) && records.size() > filterVO.getLimitCount()) {
+            records = records.subList(0, 10);
+        }
+        return records;
+    }
+
+    /**
+     * 关键条目缺陷占比统计
+     *
+     * @param entryStatisticsVO
+     * @return
+     */
+    public List<EntryStatisticsDTO> entryStatistics(EntryStatisticsVO entryStatisticsVO) {
+        filterFacade.entryStatisticsVOSet(entryStatisticsVO);
+        if (entryStatisticsVO.getDeptName().equals("全院")) {
+            entryStatisticsVO.setDeptName("");
+        }
+        List<EntryStatisticsDTO> records = behospitalInfoFacade.getBaseMapper().entryStatistics(entryStatisticsVO);
+        //增加全院数据
+        if (entryStatisticsVO.getDeptName().equals("")) {
+            EntryStatisticsDTO record = getEntryGlobleRecord(records);
+            if (record != null) {
+                records.add(0, record);
+            }
+        }
+        return records;
+    }
+
+    /**
+     * 关键条目缺陷占比统计
+     *
+     * @param entryStatisticsVO
+     * @return
+     */
+    public void entryStatisticsExport(HttpServletResponse response, EntryStatisticsVO entryStatisticsVO) {
+        List<EntryStatisticsDTO> records = this.entryStatistics(entryStatisticsVO);
+        String fileName = "关键条目缺陷占比统计.xls";
+        ExcelUtils.exportExcel(records, null, "sheet1", EntryStatisticsDTO.class, fileName, response, 12.8f);
+    }
+
+    /**
+     * 关键条目缺陷占比统计增加全院记录
+     *
+     * @param records
+     * @return
+     */
+    private EntryStatisticsDTO getEntryGlobleRecord(List<EntryStatisticsDTO> records) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        if (ListUtil.isEmpty(records)) {
+            return null;
+        }
+
+        EntryStatisticsDTO record = new EntryStatisticsDTO();
+        record.setDeptName("全院");
+        //未在24小时内完成会诊
+        Integer consultationNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getConsultationNum)
+                .reduce(0, Integer::sum);
+        record.setConsultationNum(consultationNum);
+        record.setConsultationEntryId(records.get(0).getConsultationEntryId());
+        Integer consultationMRNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getConsultationMRNum)
+                .reduce(0, Integer::sum);
+        record.setConsultationMRNum(consultationMRNum);
+        if (consultationMRNum != null && !consultationMRNum.equals(0)) {
+            Double consultationPercent = BigDecimal.valueOf(consultationNum)
+                    .divide(BigDecimal.valueOf(consultationMRNum), 4, RoundingMode.HALF_UP)
+                    .doubleValue();
+            String consultationPercentStr
+                    = df.format(BigDecimal.valueOf(consultationPercent).multiply(BigDecimal.valueOf(100))) + "%";
+            record.setConsultationPercent(consultationPercent);
+            record.setConsultationPercentStr(consultationPercentStr);
+        }
+        //手术记录名称不匹配
+        Integer operationNameNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getOperationNameNum)
+                .reduce(0, Integer::sum);
+        record.setOperationNameNum(operationNameNum);
+        record.setOperationNameEntryId(records.get(0).getOperationNameEntryId());
+        Integer operationMRNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getOperationMRNum)
+                .reduce(0, Integer::sum);
+        record.setOperationMRNum(operationMRNum);
+        if (operationMRNum != null && !operationMRNum.equals(0)) {
+            Double operationNamePercent = BigDecimal.valueOf(operationNameNum)
+                    .divide(BigDecimal.valueOf(operationMRNum), 4, RoundingMode.HALF_UP)
+                    .doubleValue();
+            String operationNamePercentStr
+                    = df.format(BigDecimal.valueOf(operationNamePercent).multiply(BigDecimal.valueOf(100))) + "%";
+            record.setOperationNamePercent(operationNamePercent);
+            record.setOperationNamePercentStr(operationNamePercentStr);
+        }
+        //术后首程未在15分钟内完成
+        Integer operation15MinuteNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getOperation15MinuteNum)
+                .reduce(0, Integer::sum);
+        record.setOperation15MinuteNum(operation15MinuteNum);
+        record.setOperation15MinuteEntryId(records.get(0).getOperation15MinuteEntryId());
+        if (operationMRNum != null && !operationMRNum.equals(0)) {
+            Double operation15MinutePercent = BigDecimal.valueOf(operation15MinuteNum)
+                    .divide(BigDecimal.valueOf(operationMRNum), 4, RoundingMode.HALF_UP)
+                    .doubleValue();
+            String operation15MinutePercentStr
+                    = df.format(BigDecimal.valueOf(operation15MinutePercent).multiply(BigDecimal.valueOf(100))) + "%";
+            record.setOperation15MinutePercent(operation15MinutePercent);
+            record.setOperation15MinutePercentStr(operation15MinutePercentStr);
+        }
+        //病案首页手术时间不匹配
+        Integer operationTimeNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getOperationTimeNum)
+                .reduce(0, Integer::sum);
+        record.setOperationTimeNum(operationTimeNum);
+        record.setOperationTimeEntryId(records.get(0).getOperationTimeEntryId());
+        if (operationMRNum != null && !operationMRNum.equals(0)) {
+            Double operationTimePercent = BigDecimal.valueOf(operationTimeNum)
+                    .divide(BigDecimal.valueOf(operationMRNum), 4, RoundingMode.HALF_UP)
+                    .doubleValue();
+            String operationTimePercentStr
+                    = df.format(BigDecimal.valueOf(operationTimePercent).multiply(BigDecimal.valueOf(100))) + "%";
+            record.setOperationTimePercent(operationTimePercent);
+            record.setOperationTimePercentStr(operationTimePercentStr);
+        }
+        //未在6小时内书写危机值记录
+        Integer crisisNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getCrisisNum)
+                .reduce(0, Integer::sum);
+        record.setCrisisNum(crisisNum);
+        record.setCrisisEntryId(records.get(0).getCrisisEntryId());
+        Integer crisisMRNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getCrisisMRNum)
+                .reduce(0, Integer::sum);
+        record.setCrisisMRNum(crisisMRNum);
+        if (crisisMRNum != null && !crisisMRNum.equals(0)) {
+            Double crisisPercent = BigDecimal.valueOf(crisisNum)
+                    .divide(BigDecimal.valueOf(crisisMRNum), 4, RoundingMode.HALF_UP)
+                    .doubleValue();
+            String crisisPercentStr
+                    = df.format(BigDecimal.valueOf(crisisPercent).multiply(BigDecimal.valueOf(100))) + "%";
+            record.setCrisisPercent(crisisPercent);
+            record.setCrisisPercentStr(crisisPercentStr);
+        }
+        //病人住院超过30天,阶段小节书写
+        Integer stageSummaryNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getStageSummaryNum)
+                .reduce(0, Integer::sum);
+        record.setStageSummaryNum(stageSummaryNum);
+        record.setStageSummaryEntryId(records.get(0).getStageSummaryEntryId());
+        Integer stageSummaryMRNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getStageSummaryMRNum)
+                .reduce(0, Integer::sum);
+        record.setStageSummaryMRNum(stageSummaryMRNum);
+        if (stageSummaryMRNum != null && !stageSummaryMRNum.equals(0)) {
+            Double stageSummaryPercent = BigDecimal.valueOf(stageSummaryNum)
+                    .divide(BigDecimal.valueOf(stageSummaryMRNum), 4, RoundingMode.HALF_UP)
+                    .doubleValue();
+            String stageSummaryPercentStr
+                    = df.format(BigDecimal.valueOf(stageSummaryPercent).multiply(BigDecimal.valueOf(100))) + "%";
+            record.setStageSummaryPercent(stageSummaryPercent);
+            record.setStageSummaryPercentStr(stageSummaryPercentStr);
+        }
+        //住院超过31日病人数
+        Integer beHosGT31DaysMRNum = records
+                .stream()
+                .map(EntryStatisticsDTO::getBeHosGT31DaysMRNum)
+                .reduce(0, Integer::sum);
+        record.setBeHosGT31DaysMRNum(beHosGT31DaysMRNum);
+        return record;
+    }
 }

+ 196 - 0
report-service/src/main/java/com/lantone/report/facade/HomePageManagementFacade.java

@@ -0,0 +1,196 @@
+package com.lantone.report.facade;
+
+import com.lantone.common.api.ResultCode;
+import com.lantone.common.dto.report.HomePageNumDTO;
+import com.lantone.common.exception.ApiException;
+import com.lantone.common.util.ExcelUtils;
+import com.lantone.common.util.ListUtil;
+import com.lantone.common.util.StringUtil;
+import com.lantone.common.vo.report.FilterOrderVO;
+import com.lantone.common.vo.report.FilterVO;
+import com.lantone.dblayermbg.facade.report.BehospitalInfoFacade;
+import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Component
+public class HomePageManagementFacade {
+
+    @Autowired
+    private FilterFacade filterFacade;
+    @Autowired
+    private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+
+    /**
+     * 病案首页合格率、完整率、改善率统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> homePageMRCount(FilterVO filterVO) {
+        Map<String, Object> retMap = new HashMap<>();
+        retMap.put("合格率", null);
+        retMap.put("不合格率", null);
+        retMap.put("完整率", null);
+        retMap.put("改善率", null);
+        filterFacade.filterVOSet(filterVO);
+        try {
+            Map<String, Object> invokeParams = new HashMap<>();
+            invokeParams.put("filterVO", filterVO);
+            retMap
+                    = dataBeanAggregateQueryFacade.get("setAllHomePage", invokeParams, Map.class);
+        } catch (Exception e) {
+            throw new ApiException(ResultCode.SERVER_IS_ERROR);
+        }
+        return retMap;
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<HomePageNumDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO) {
+        filterFacade.filterOrderVOSet(filterOrderVO);
+        List<HomePageNumDTO> records = behospitalInfoFacade.getBaseMapper().homePageLevelStatistics(filterOrderVO);
+        //没有科室过滤时增加全院数据
+        if (StringUtil.isBlank(filterOrderVO.getDeptName()) || filterOrderVO.getDeptName().equals("全院")) {
+            HomePageNumDTO item = getGlobleRecord(records);
+            if (item != null) {
+                records.add(0, item);
+            }
+        }
+        return records;
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public void homePageLevelExport(HttpServletResponse response, FilterOrderVO filterOrderVO) {
+        List<HomePageNumDTO> res = this.homePageLevelStatistics(filterOrderVO);
+        String fileName = "病案首页合格率占比.xls";
+        ExcelUtils.exportExcel(res, null, "sheet1", HomePageNumDTO.class, fileName, response, 12.8f);
+    }
+
+
+    /**
+     * 增加全院记录
+     *
+     * @param records
+     * @return
+     */
+    public HomePageNumDTO getGlobleRecord(List<HomePageNumDTO> records) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        HomePageNumDTO item = new HomePageNumDTO();
+
+        if (ListUtil.isEmpty(records)) {
+            return null;
+        }
+
+        //总病历数
+        Integer mrNum = records
+                .stream()
+                .map(HomePageNumDTO::getMrNum)
+                .reduce(0, Integer::sum);
+        if (mrNum == null || mrNum == 0) {
+            return null;
+        }
+        //总缺陷数
+        Integer entryNum = records
+                .stream()
+                .map(HomePageNumDTO::getEntryNum)
+                .reduce(0, Integer::sum);
+        //总分
+        Double totleValue = records
+                .stream()
+                .map(i -> BigDecimal.valueOf(i.getTotleValue()))
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .doubleValue();
+        //平均分
+        Double averageValue = BigDecimal.valueOf(totleValue)
+                .divide(BigDecimal.valueOf(mrNum), 2, RoundingMode.HALF_UP)
+                .doubleValue();
+        //合格病历总数
+        Integer firstLevelNum = records
+                .stream()
+                .map(HomePageNumDTO::getFirstLevelNum)
+                .reduce(0, Integer::sum);
+        //合格病历占比
+        Double firstLevelPercent = BigDecimal.valueOf(firstLevelNum)
+                .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String firstLevelPercentStr
+                = df.format(BigDecimal.valueOf(firstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        //不合格病历数
+        Integer secondLevelNum = records
+                .stream()
+                .map(HomePageNumDTO::getSecondLevelNum)
+                .reduce(0, Integer::sum);
+        //不合格病历占比
+        Double secondLevelPercent = BigDecimal.valueOf(secondLevelNum)
+                .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String secondLevelPercentStr
+                = df.format(BigDecimal.valueOf(secondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        //条目缺陷总数(模块下条目*病历数)
+        Integer entryTotleNum = records
+                .stream()
+                .map(HomePageNumDTO::getEntryTotleNum)
+                .reduce(0, Integer::sum);
+        //空项总数
+        Integer emptyNum = records
+                .stream()
+                .map(HomePageNumDTO::getEmptyNum)
+                .reduce(0, Integer::sum);
+        Double emptyPercent = BigDecimal.valueOf(entryTotleNum - emptyNum)
+                .divide(BigDecimal.valueOf(entryTotleNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String emptyPercentStr
+                = df.format(BigDecimal.valueOf(emptyPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        //错误项总数
+        Integer errorNum = records
+                .stream()
+                .map(HomePageNumDTO::getErrorNum)
+                .reduce(0, Integer::sum);
+        Double errorPercent = BigDecimal.valueOf(entryTotleNum - errorNum)
+                .divide(BigDecimal.valueOf(entryTotleNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String errorPercentStr
+                = df.format(BigDecimal.valueOf(errorPercent).multiply(BigDecimal.valueOf(100))) + "%";
+
+        item.setDeptName("全院");
+        item.setEntryNum(entryNum);
+        item.setMrNum(mrNum);
+        item.setTotleValue(totleValue);
+        item.setAverageValue(averageValue);
+        item.setFirstLevelNum(firstLevelNum);
+        item.setFirstLevelPercent(firstLevelPercent);
+        item.setFirstLevelPercentStr(firstLevelPercentStr);
+        item.setSecondLevelNum(secondLevelNum);
+        item.setSecondLevelPercent(secondLevelPercent);
+        item.setSecondLevelPercentStr(secondLevelPercentStr);
+        item.setEntryTotleNum(entryTotleNum);
+        item.setEmptyNum(emptyNum);
+        item.setEmptyPercent(emptyPercent);
+        item.setEmptyPercentStr(emptyPercentStr);
+        item.setErrorNum(errorNum);
+        item.setErrorPercent(errorPercent);
+        item.setErrorPercentStr(errorPercentStr);
+        return item;
+    }
+}

+ 28 - 1
report-service/src/main/java/com/lantone/report/facade/LeaveHospitalManagementFacade.java

@@ -6,6 +6,7 @@ import com.lantone.common.dto.report.ExportExcelBehospitalDTO;
 import com.lantone.common.dto.report.ExportExcelDTO;
 import com.lantone.common.dto.report.ExportExcelWideBehospitalDTO;
 import com.lantone.common.dto.report.ExportWideExcelDTO;
+import com.lantone.common.dto.report.NumDTO;
 import com.lantone.common.dto.report.QcResultShortDTO;
 import com.lantone.common.exception.ApiException;
 import com.lantone.common.util.ExcelUtils;
@@ -29,7 +30,7 @@ import java.util.Map;
 
 
 @Component
-public class LeaveHospitalManagementFacade {
+public class LeaveBeHospitalManagementFacade {
 
     @Autowired
     private FilterFacade filterFacade;
@@ -153,4 +154,30 @@ public class LeaveHospitalManagementFacade {
         }
         return resWide;
     }
+
+    /**
+     * 入院人数统计(首页)
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> beHosCount(FilterVO filterVO) {
+        filterFacade.filterVOSet(filterVO);
+        List<NumDTO> records = behospitalInfoFacade.getBaseMapper().beHosCount(filterVO);
+
+        if (ListUtil.isNotEmpty(records)) {
+            NumDTO globleRecord = new NumDTO();
+            globleRecord.setName("全院");
+            Integer num = records.stream()
+                    .map(NumDTO::getNum)
+                    .reduce(0, Integer::sum);
+            globleRecord.setNum(num);
+            records.add(0, globleRecord);
+        }
+
+        if (ListUtil.isNotEmpty(records) && records.size() > filterVO.getLimitCount()) {
+            records = records.subList(0, 10);
+        }
+        return records;
+    }
 }

+ 188 - 0
report-service/src/main/java/com/lantone/report/facade/MedicalCheckManagementFacade.java

@@ -0,0 +1,188 @@
+package com.lantone.report.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
+import com.lantone.common.dto.report.MedicalCheckDTO;
+import com.lantone.common.dto.report.MedicalCheckExportDTO;
+import com.lantone.common.dto.report.MedicalCheckIdNameDTO;
+import com.lantone.common.util.ExcelUtils;
+import com.lantone.common.util.StringUtil;
+import com.lantone.common.vo.report.FilterMedicalCheckVO;
+import com.lantone.dblayermbg.entity.HospitalSet;
+import com.lantone.dblayermbg.facade.HospitalSetFacade;
+import com.lantone.dblayermbg.facade.report.BehospitalInfoFacade;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+
+
+@Component
+public class MedicalCheckManagementFacade {
+
+    @Autowired
+    private FilterFacade filterFacade;
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private HospitalSetFacade hospitalSetFacade;
+
+    /**
+     * 病历稽查表
+     *
+     * @param filterVO
+     * @return
+     */
+    public IPage<MedicalCheckDTO> getMedicalCheck(@Param("filterVO") FilterMedicalCheckVO filterVO) {
+        filterFacade.getMedicalCheckVOSet(filterVO);
+        //colums
+        QueryWrapper<HospitalSet> hospitalSetQueryWrapper = new QueryWrapper<>();
+        hospitalSetQueryWrapper.eq("is_deleted", 'N')
+                .eq("hospital_id", filterVO.getHospitalId())
+                .eq("code", "medical_check_form");
+        HospitalSet hospitalSet = hospitalSetFacade.getOne(hospitalSetQueryWrapper);
+
+        //表头生成
+        List<String> columnSet = Arrays.asList(hospitalSet.getVal().split(","));
+
+        //目标条目
+        List<Long> casesEntryIds = Lists.newArrayList();
+        //遍历第一个条目
+        for (String valueStr : columnSet) {
+            if (StringUtil.isBlank(valueStr)) {
+                continue;
+            }
+            String[] keyValue = valueStr.split("--");
+            if (keyValue != null || keyValue.length > 1) {
+                casesEntryIds.add(Long.valueOf(keyValue[0]));
+            }
+        }
+        IPage<MedicalCheckDTO> medicalCheck = getMedicalCheck(filterVO, casesEntryIds);
+        return medicalCheck;
+    }
+
+    /**
+     * 病历稽查表
+     *
+     * @param filterVO
+     * @return
+     */
+    public IPage<MedicalCheckDTO> getMedicalCheck(@Param("filterVO") FilterMedicalCheckVO filterVO, @Param("casesEntryIds") List<Long> casesEntryIds) {
+        IPage<MedicalCheckDTO> medicalCheck = behospitalInfoFacade.getBaseMapper().getMedicalCheck(filterVO);
+        List<MedicalCheckIdNameDTO> medicalEntryIds = behospitalInfoFacade.getBaseMapper().getMedicalEntryIds(casesEntryIds);
+
+        List<MedicalCheckDTO> records = medicalCheck.getRecords();
+        for (MedicalCheckDTO record : records) {
+            for (MedicalCheckIdNameDTO medicalEntryId : medicalEntryIds) {
+                if ("2170".equals(medicalEntryId.getId())) {
+                    record.setEntry_2170_id(medicalEntryId.getId());
+                    record.setEntry_2170_name(medicalEntryId.getName());
+                }
+                if ("2217".equals(medicalEntryId.getId())) {
+                    record.setEntry_2217_id(medicalEntryId.getId());
+                    record.setEntry_2217_name(medicalEntryId.getName());
+                }
+                if ("2218".equals(medicalEntryId.getId())) {
+                    record.setEntry_2218_id(medicalEntryId.getId());
+                    record.setEntry_2218_name(medicalEntryId.getName());
+                }
+                if ("2220".equals(medicalEntryId.getId())) {
+                    record.setEntry_2220_id(medicalEntryId.getId());
+                    record.setEntry_2220_name(medicalEntryId.getName());
+                }
+                if ("2229".equals(medicalEntryId.getId())) {
+                    record.setEntry_2229_id(medicalEntryId.getId());
+                    record.setEntry_2229_name(medicalEntryId.getName());
+                }
+                if ("2287".equals(medicalEntryId.getId())) {
+                    record.setEntry_2287_id(medicalEntryId.getId());
+                    record.setEntry_2287_name(medicalEntryId.getName());
+                }
+                if ("2486".equals(medicalEntryId.getId())) {
+                    record.setEntry_2486_id(medicalEntryId.getId());
+                    record.setEntry_2486_name(medicalEntryId.getName());
+                }
+                if ("2495".equals(medicalEntryId.getId())) {
+                    record.setEntry_2495_id(medicalEntryId.getId());
+                    record.setEntry_2495_name(medicalEntryId.getName());
+                }
+                if ("2654".equals(medicalEntryId.getId())) {
+                    record.setEntry_2654_id(medicalEntryId.getId());
+                    record.setEntry_2654_name(medicalEntryId.getName());
+                }
+                if ("2655".equals(medicalEntryId.getId())) {
+                    record.setEntry_2655_id(medicalEntryId.getId());
+                    record.setEntry_2655_name(medicalEntryId.getName());
+                }
+                if ("2657".equals(medicalEntryId.getId())) {
+                    record.setEntry_2657_id(medicalEntryId.getId());
+                    record.setEntry_2657_name(medicalEntryId.getName());
+                }
+                if ("2658".equals(medicalEntryId.getId())) {
+                    record.setEntry_2658_id(medicalEntryId.getId());
+                    record.setEntry_2658_name(medicalEntryId.getName());
+                }
+                if ("2686".equals(medicalEntryId.getId())) {
+                    record.setEntry_2686_id(medicalEntryId.getId());
+                    record.setEntry_2686_name(medicalEntryId.getName());
+                }
+                if ("2852".equals(medicalEntryId.getId())) {
+                    record.setEntry_2852_id(medicalEntryId.getId());
+                    record.setEntry_2852_name(medicalEntryId.getName());
+                }
+                if ("2900".equals(medicalEntryId.getId())) {
+                    record.setEntry_2900_id(medicalEntryId.getId());
+                    record.setEntry_2900_name(medicalEntryId.getName());
+                }
+                if ("2930".equals(medicalEntryId.getId())) {
+                    record.setEntry_2930_id(medicalEntryId.getId());
+                    record.setEntry_2930_name(medicalEntryId.getName());
+                }
+                if ("3010".equals(medicalEntryId.getId())) {
+                    record.setEntry_3010_id(medicalEntryId.getId());
+                    record.setEntry_3010_name(medicalEntryId.getName());
+                }
+                if ("3025".equals(medicalEntryId.getId())) {
+                    record.setEntry_3025_id(medicalEntryId.getId());
+                    record.setEntry_3025_name(medicalEntryId.getName());
+                }
+                if ("3062".equals(medicalEntryId.getId())) {
+                    record.setEntry_3062_id(medicalEntryId.getId());
+                    record.setEntry_3062_name(medicalEntryId.getName());
+                }
+                if ("3063".equals(medicalEntryId.getId())) {
+                    record.setEntry_3063_id(medicalEntryId.getId());
+                    record.setEntry_3063_name(medicalEntryId.getName());
+                }
+            }
+        }
+
+        return medicalCheck;
+
+    }
+
+    /**
+     * 稽查统计导出(首页)
+     *
+     * @param filterVO
+     * @return
+     */
+    public void medicalCheckExport(HttpServletResponse response, FilterMedicalCheckVO filterVO) {
+        filterVO.setCurrent(1L);
+        filterVO.setSize(Long.MAX_VALUE);
+        filterVO.setSearchCount(false);
+        String fileName = null;
+        if ("1".equals(filterVO.getIsPlacefile())) {
+            fileName = "终末病历稽查表.xls";
+        } else {
+            fileName = "运行病历稽查表.xls";
+        }
+        filterFacade.getMedicalCheckVOSet(filterVO);
+        List<MedicalCheckExportDTO> records = behospitalInfoFacade.getBaseMapper().getMedicalCheckExport(filterVO);
+        ExcelUtils.exportExcel(records, null, "sheet1", MedicalCheckExportDTO.class, fileName, response, 15.8f);
+    }
+}

+ 449 - 0
report-service/src/main/java/com/lantone/report/facade/MedicalControlManagementFacade.java

@@ -0,0 +1,449 @@
+package com.lantone.report.facade;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.lantone.common.dto.report.CaseScoreDTO;
+import com.lantone.common.dto.report.QualityControlDTO;
+import com.lantone.common.dto.report.QualityControlNullDTO;
+import com.lantone.common.exception.ApiException;
+import com.lantone.common.util.BeanUtil;
+import com.lantone.common.util.BigDecimalUtil;
+import com.lantone.common.util.DateUtil;
+import com.lantone.common.util.ExcelUtils;
+import com.lantone.common.util.ListUtil;
+import com.lantone.common.util.SysUserUtils;
+import com.lantone.common.vo.report.AlgorithmVO;
+import com.lantone.common.vo.report.BehospitalPageVO;
+import com.lantone.common.vo.report.CaseScoreVO;
+import com.lantone.common.vo.report.QcResultAlgVO;
+import com.lantone.dblayermbg.facade.report.BehospitalInfoFacade;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Component
+public class MedicalControlManagementFacade {
+
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+
+    /**
+     * 病历质控报表
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    public IPage<QualityControlDTO> getQualityControl(BehospitalPageVO behospitalPageVO) {
+        behospitalPageSet(behospitalPageVO);
+        IPage<QualityControlDTO> records = behospitalInfoFacade.getBaseMapper().getQualityControl(behospitalPageVO);
+        List<QualityControlDTO> qualityControlDTOs = records.getRecords();
+        CaseScoreVO caseScoreVO = new CaseScoreVO();
+        BeanUtil.copyProperties(behospitalPageVO, caseScoreVO);
+        List<CaseScoreDTO> caseScoreDTOS = behospitalInfoFacade.getBaseMapper().getQualityCaseSorce(caseScoreVO);
+        if (ListUtil.isNotEmpty(qualityControlDTOs)) {
+            qualityControlDTOs.forEach(qualityControlDTO -> {
+                if (ListUtil.isNotEmpty(caseScoreDTOS)) {
+                    AlgorithmVO algorithmVO = new AlgorithmVO();
+                    BeanUtil.copyProperties(behospitalPageVO, algorithmVO);
+                    algorithmVO.setType(0);
+                    List<QcResultAlgVO> qcResultAlgVOList = new ArrayList<QcResultAlgVO>();
+                    for (CaseScoreDTO caseScoreDTO : caseScoreDTOS) {
+                        if (StringUtils.isNotEmpty(qualityControlDTO.getBehospitalCode()) &&
+                                StringUtils.isNotEmpty(caseScoreDTO.getBehospitalCode()) &&
+                                qualityControlDTO.getBehospitalCode().equals(caseScoreDTO.getBehospitalCode())) {
+                            QcResultAlgVO qcResultAlgVO = new QcResultAlgVO();
+                            BeanUtil.copyProperties(caseScoreDTO, qcResultAlgVO);
+                            qcResultAlgVO.setIsReject(Integer.valueOf(caseScoreDTO.getIsReject()));
+                            qcResultAlgVO.setScore(new BigDecimal(caseScoreDTO.getScore()));
+                            qcResultAlgVO.setCasesScore(new BigDecimal(caseScoreDTO.getCasesScore()));
+                            qcResultAlgVOList.add(qcResultAlgVO);
+                        }
+                    }
+                    algorithmVO.setType(0);
+                    algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
+                    getScoreForCx(algorithmVO, qualityControlDTO);
+                }
+                if (qualityControlDTO.getLevel().equals("未评分")) {
+                    QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
+                    BeanUtil.copyProperties(qualityControlNullDTO, qualityControlDTO);
+                }
+            });
+        }
+        ;
+        return records;
+    }
+
+    /**
+     * 病历质控报表导出
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    public void qualityControlExport(HttpServletResponse response, BehospitalPageVO behospitalPageVO) {
+        behospitalPageVO.setHospitalId(SysUserUtils.getCurrentHospitalId());
+        Date startDate = behospitalPageVO.getLeaveHosDateStart();
+        Date endDate = behospitalPageVO.getLeaveHosDateEnd();
+        //时间间隔30天
+        long interval = 30 * 24l * 60l * 60l * 1000l;
+        if (endDate.getTime() < startDate.getTime()) {
+            throw new ApiException("截止时间不能小于起始时间");
+        }
+        if (endDate.getTime() - startDate.getTime() > interval) {
+            throw new ApiException("统计区间不能大于30天");
+        }
+
+        behospitalPageVO.setCurrent(1L);
+        behospitalPageVO.setSize(Long.MAX_VALUE);
+        behospitalPageVO.setSearchCount(false);
+        IPage<QualityControlDTO> page = this.getQualityControl(behospitalPageVO);
+        List<QualityControlDTO> records = page.getRecords();
+
+        String fileName = "病历质控报表详情页.xls";
+        ExcelUtils.exportExcel(records, "病历质控报表", "sheet1", QualityControlDTO.class, fileName, response, 26.8f);
+    }
+
+
+    private void behospitalPageSet(BehospitalPageVO behospitalPageVO) {
+        //入参验证
+        //入院时间
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart()) {
+            behospitalPageVO.setBehosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getBehosDateStart()));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateEnd()) {
+            behospitalPageVO.setBehosDateEnd(DateUtil.getFirstTimeOfDay(DateUtil.addDay(behospitalPageVO.getBehosDateEnd(), 1)));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart() && null != behospitalPageVO.getBehosDateEnd()) {
+            if (DateUtil.after(behospitalPageVO.getBehosDateStart(), behospitalPageVO.getBehosDateEnd())) {
+                throw new ApiException("入院时间的开始时间必须小于结束时间!");
+            }
+        }
+        //出院时间
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart()) {
+            behospitalPageVO.setLeaveHosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getLeaveHosDateStart()));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateEnd()) {
+            behospitalPageVO.setLeaveHosDateEnd(DateUtil.getFirstTimeOfDay(DateUtil.addDay(behospitalPageVO.getLeaveHosDateEnd(), 1)));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart() && null != behospitalPageVO.getLeaveHosDateEnd()) {
+            if (DateUtil.after(behospitalPageVO.getLeaveHosDateStart(), behospitalPageVO.getLeaveHosDateEnd())) {
+                throw new ApiException("出院时间的开始时间必须小于结束时间!");
+            }
+        }
+        behospitalPageVO.setHospitalId(SysUserUtils.getCurrentHospitalId());
+
+    }
+
+    /**
+     * 评结果分数(长兴)
+     *
+     * @param algorithmVO 操作条目的所有信息
+     * @return 评结果分数
+     */
+    private void getScoreForCx(AlgorithmVO algorithmVO, QualityControlDTO qualityControlDTO) {
+        List<QcResultAlgVO> qcResultAlgHomePage = new ArrayList<>();
+        List<QcResultAlgVO> qcResultAlgHomePageExt = new ArrayList<>();
+        for (QcResultAlgVO qcResultAlgVO : algorithmVO.getQcResultAlgVOList()) {
+            //首页的情况
+            if (qcResultAlgVO.getCasesId().equals(243L)) {
+                qcResultAlgHomePage.add(qcResultAlgVO);
+            } else {
+                //非首页
+                qcResultAlgHomePageExt.add(qcResultAlgVO);
+            }
+        }
+
+        //病案首页
+        AlgorithmVO homePage = new AlgorithmVO();
+        BeanUtil.copyProperties(algorithmVO, homePage);
+        homePage.setQcResultAlgVOList(qcResultAlgHomePage);
+        homePage.setIsHomePage(true);
+        cal(homePage, qualityControlDTO);
+
+        //病案首页以外
+        AlgorithmVO homePageExt = new AlgorithmVO();
+        BeanUtil.copyProperties(algorithmVO, homePageExt);
+        homePageExt.setQcResultAlgVOList(qcResultAlgHomePageExt);
+        cal(homePageExt, qualityControlDTO);
+    }
+
+    /**
+     * 计算分数
+     *
+     * @param algorithmVO 操作条目的所有信息
+     * @return 评分分数
+     */
+    private void cal(AlgorithmVO algorithmVO, QualityControlDTO qualityControlDTO) {
+
+        //模块总分
+        Map<Long, BigDecimal> casesMap = new HashMap<>();
+        //单票否决计分
+        Map<Long, BigDecimal> rejectScoreMap = new HashMap<>();
+        //模块计分
+        Map<Long, BigDecimal> casesScoreMap = new HashMap<>();
+        //模块缺陷统计
+        Map<Long, String> casesNameMap = new HashMap<>();
+        //扣分统计
+        Map<Long, BigDecimal> scoreMap = new HashMap<>();
+
+        List<QcResultAlgVO> qcResultAlgVOList = algorithmVO.getQcResultAlgVOList();
+        if (ListUtil.isNotEmpty(qcResultAlgVOList)) {
+            for (QcResultAlgVO qcResultAlgVO : qcResultAlgVOList) {
+                if (!casesMap.containsKey(qcResultAlgVO.getCasesId())) {
+                    //模块总分
+                    casesMap.put(qcResultAlgVO.getCasesId(), qcResultAlgVO.getCasesScore());
+                }
+                if (!casesScoreMap.containsKey(qcResultAlgVO.getCasesId())) {
+                    casesScoreMap.put(qcResultAlgVO.getCasesId(), BigDecimal.ZERO);
+                    rejectScoreMap.put(qcResultAlgVO.getCasesId(), BigDecimal.ZERO);
+                    casesNameMap.put(qcResultAlgVO.getCasesId(), "");
+                }
+                //单票否决计分
+                if (qcResultAlgVO.getIsReject().equals(1)) {
+                    if (rejectScoreMap.containsKey(qcResultAlgVO.getCasesId())) {
+                        BigDecimal casesScore = rejectScoreMap.get(qcResultAlgVO.getCasesId());
+                        casesScore = casesScore.add(qcResultAlgVO.getScore());
+                        rejectScoreMap.put(qcResultAlgVO.getCasesId(), casesScore);
+                    }
+                } else {
+                    //非单票否决计分
+                    if (casesScoreMap.containsKey(qcResultAlgVO.getCasesId())) {
+                        BigDecimal casesScore = casesScoreMap.get(qcResultAlgVO.getCasesId());
+                        casesScore = casesScore.add(qcResultAlgVO.getScore());
+                        casesScoreMap.put(qcResultAlgVO.getCasesId(), casesScore);
+                    }
+                }
+                String casesName = casesNameMap.get(qcResultAlgVO.getCasesId());
+                if (StringUtils.isEmpty(casesName)) {
+                    casesName = casesName + qcResultAlgVO.getMsg();
+                } else {
+                    casesName = casesName + ";" + qcResultAlgVO.getMsg();
+                }
+                casesNameMap.put(qcResultAlgVO.getCasesId(), casesName);
+            }
+
+
+            //模块计分
+            for (Map.Entry<Long, BigDecimal> casesScore : casesScoreMap.entrySet()) {
+                BigDecimal allSccore = casesMap.get(casesScore.getKey());
+                if (BigDecimalUtil.le(allSccore, casesScore.getValue())) {
+                    //模块标准分小于等于模块减分总和就用模块标准分
+                    allSccore = allSccore.add(rejectScoreMap.get(casesScore.getKey()));
+                } else {
+                    //模块标准分大于模块减分总和就用模块减分总和
+                    allSccore = casesScore.getValue().add(rejectScoreMap.get(casesScore.getKey()));
+
+                }
+                if (BigDecimalUtil.lt(allSccore, BigDecimal.ZERO)) {
+                    allSccore = BigDecimal.ZERO;
+                }
+                scoreMap.put(casesScore.getKey(), allSccore);
+            }
+
+
+            DecimalFormat df = new DecimalFormat("0.0");
+
+            if (StringUtils.isNotEmpty(casesNameMap.get(237L))) {
+                qualityControlDTO.setAdmissionNote(casesNameMap.get(237L));
+            }
+            if (scoreMap.get(237L) != null) {
+                qualityControlDTO.setAdmissionNoteScore(Double.valueOf(df.format(scoreMap.get(237L))));
+            }
+
+
+            if (StringUtils.isNotEmpty(casesNameMap.get(238L))) {
+                qualityControlDTO.setFirstCourseNote(casesNameMap.get(238L));
+            }
+            if (scoreMap.get(238L) != null) {
+                qualityControlDTO.setFirstCourseNoteScore(Double.valueOf(df.format(scoreMap.get(238L))));
+            }
+
+
+            if (StringUtils.isNotEmpty(casesNameMap.get(242L))) {
+                qualityControlDTO.setDischargeNote(casesNameMap.get(242L));
+            }
+            if (scoreMap.get(242L) != null) {
+                qualityControlDTO.setDischargeNoteScore(Double.valueOf(df.format(scoreMap.get(242L))));
+            }
+
+
+            if (StringUtils.isNotEmpty(casesNameMap.get(243L))) {
+                qualityControlDTO.setMedHomePage(casesNameMap.get(243L));
+            }
+            if (scoreMap.get(243L) != null) {
+                qualityControlDTO.setMedHomePageScore(Double.valueOf(df.format(scoreMap.get(243L))));
+            }
+
+
+            if (StringUtils.isNotEmpty(casesNameMap.get(280L))) {
+                qualityControlDTO.setDocAdviceNote(casesNameMap.get(280L));
+            }
+            if (scoreMap.get(280L) != null) {
+                qualityControlDTO.setDocAdviceNoteScore(Double.valueOf(df.format(scoreMap.get(280L))));
+            }
+
+
+            String operationInfo = "";
+            if (StringUtils.isNotEmpty(casesNameMap.get(248L))) {
+                operationInfo = "围手术期病历讨论:" + casesNameMap.get(248L);
+            }
+            if (StringUtils.isNotEmpty(casesNameMap.get(249L))) {
+                operationInfo = operationInfo + ";" + "术前讨论制度:" + casesNameMap.get(249L);
+            }
+            if (operationInfo.contains(";")) {
+                String[] split = operationInfo.split(";");
+                if (StringUtils.isEmpty(split[0])) {
+                    operationInfo = operationInfo.substring(operationInfo.indexOf(split[1]));
+                }
+            }
+
+            qualityControlDTO.setOperationInfo(StringUtils.isEmpty(operationInfo) == true ? "无缺陷" : operationInfo);
+
+            Double score_248 = 0d;
+            Double score_11 = 0d;
+            Double score_249 = 0d;
+            if (scoreMap.get(248L) != null) {
+                score_248 = Double.valueOf(df.format(scoreMap.get(248L)));
+            }
+            if (scoreMap.get(11L) != null) {
+                score_11 = Double.valueOf(df.format(scoreMap.get(11L)));
+            }
+            if (scoreMap.get(249L) != null) {
+                score_249 = Double.valueOf(df.format(scoreMap.get(249L)));
+            }
+            qualityControlDTO.setOperationInfoScore(score_248 + score_11 + score_249);
+        }
+
+        String courseRecord = "";
+        if (StringUtils.isNotEmpty(casesNameMap.get(239L))) {
+            courseRecord = "死亡病例讨论制度:" + casesNameMap.get(239L);
+        }
+        if (StringUtils.isNotEmpty(casesNameMap.get(240L))) {
+            courseRecord = courseRecord + ";" + "疑难病例讨论制度:" + casesNameMap.get(240L);
+        }
+        if (StringUtils.isNotEmpty(casesNameMap.get(241L))) {
+            courseRecord = courseRecord + ";" + "三级查房制度:" + casesNameMap.get(241L);
+        }
+        if (StringUtils.isNotEmpty(casesNameMap.get(244L))) {
+            courseRecord = courseRecord + ";" + "会诊制度:" + casesNameMap.get(244L);
+        }
+        if (StringUtils.isNotEmpty(casesNameMap.get(245L))) {
+            courseRecord = courseRecord + ";" + "分级护理制度:" + casesNameMap.get(245L);
+        }
+        if (StringUtils.isNotEmpty(casesNameMap.get(246L))) {
+            courseRecord = courseRecord + ";" + "值班及交接班制度:" + casesNameMap.get(246L);
+        }
+        if (StringUtils.isNotEmpty(casesNameMap.get(247L))) {
+            courseRecord = courseRecord + ";" + "临床用血审核制度:" + casesNameMap.get(247L);
+        }
+        if (StringUtils.isNotEmpty(casesNameMap.get(250L))) {
+            courseRecord = courseRecord + ";" + "死亡记录:" + casesNameMap.get(250L);
+        }
+        if (courseRecord.contains(";")) {
+            String[] courseRecordSplit = courseRecord.split(";");
+            if (StringUtils.isEmpty(courseRecordSplit[0])) {
+                courseRecord = courseRecord.substring(courseRecord.indexOf(courseRecordSplit[1]));
+            }
+        }
+        qualityControlDTO.setCourseRecord(StringUtils.isEmpty(courseRecord) == true ? "无缺陷" : courseRecord);
+
+
+        Double score_239 = 0d;
+        Double score_240 = 0d;
+        Double score_241 = 0d;
+        Double score_244 = 0d;
+        Double score_245 = 0d;
+        Double score_246 = 0d;
+        Double score_247 = 0d;
+        Double score_250 = 0d;
+        DecimalFormat df = new DecimalFormat("0.0");
+        if (scoreMap.get(239L) != null) {
+            score_239 = Double.valueOf(df.format(scoreMap.get(239L)));
+        }
+        if (scoreMap.get(240L) != null) {
+            score_240 = Double.valueOf(df.format(scoreMap.get(240L)));
+        }
+        if (scoreMap.get(241L) != null) {
+            score_241 = Double.valueOf(df.format(scoreMap.get(241L)));
+        }
+        if (scoreMap.get(244L) != null) {
+            score_244 = Double.valueOf(df.format(scoreMap.get(244L)));
+        }
+        if (scoreMap.get(245L) != null) {
+            score_245 = Double.valueOf(df.format(scoreMap.get(245L)));
+        }
+        if (scoreMap.get(246L) != null) {
+            score_246 = Double.valueOf(df.format(scoreMap.get(246L)));
+        }
+        if (scoreMap.get(247L) != null) {
+            score_247 = Double.valueOf(df.format(scoreMap.get(247L)));
+        }
+        if (scoreMap.get(250L) != null) {
+            score_250 = Double.valueOf(df.format(scoreMap.get(250L)));
+
+        }
+        qualityControlDTO.setCourseRecordScore(score_239 + score_240 + score_241 + score_244 + score_245 + score_246 + score_247 + score_250);
+                  /*  qualityControlDTO.setCourseRecord(name_239+";"+name_240
+                                    +";"+name_241+";"+name_244+";"+name_245
+                                    +";"+name_246+";"+name_247+";"+name_250);
+                    qualityControlDTO.setCourseRecordScore(score_239+score_240+score_241+score_244+score_245+score_246
+                            +score_247+score_250);*/
+
+
+        Double score_262 = 0d;
+        Double score_281 = 0d;
+        Double score_282 = 0d;
+        Double score_283 = 0d;
+        Double score_284 = 0d;
+        if (scoreMap.get(262L) != null) {
+            score_262 = Double.valueOf(df.format(scoreMap.get(262L)));
+        }
+        if (scoreMap.get(281L) != null) {
+            score_281 = Double.valueOf(df.format(scoreMap.get(281L)));
+        }
+        if (scoreMap.get(282L) != null) {
+            score_282 = Double.valueOf(df.format(scoreMap.get(282L)));
+        }
+        if (scoreMap.get(283L) != null) {
+            score_283 = Double.valueOf(df.format(scoreMap.get(283L)));
+        }
+        if (scoreMap.get(284L) != null) {
+            score_284 = Double.valueOf(df.format(scoreMap.get(284L)));
+
+        }
+
+        String otherCase = "";
+        if (StringUtils.isNotEmpty(casesNameMap.get(262L))) {
+            otherCase = "危急值报告制度:" + casesNameMap.get(262L);
+        }
+        if (StringUtils.isNotEmpty(casesNameMap.get(281L))) {
+            otherCase = otherCase + ";" + "危急值报告制度:" + casesNameMap.get(281L);
+        }
+        if (StringUtils.isNotEmpty(casesNameMap.get(282L))) {
+            otherCase = otherCase + ";" + "危急值报告制度:" + casesNameMap.get(282L);
+        }
+        if (StringUtils.isNotEmpty(casesNameMap.get(283L))) {
+            otherCase = otherCase + ";" + "危急值报告制度:" + casesNameMap.get(283L);
+        }
+        if (StringUtils.isNotEmpty(casesNameMap.get(284L))) {
+            otherCase = otherCase + ";" + "危急值报告制度:" + casesNameMap.get(284L);
+        }
+        if (otherCase.contains(";")) {
+            String[] otherCaseSplit = otherCase.split(";");
+            if (StringUtils.isEmpty(otherCaseSplit[0])) {
+                otherCase = otherCase.substring(otherCase.indexOf(otherCaseSplit[1]));
+            }
+        }
+        qualityControlDTO.setOtherCase(StringUtils.isEmpty(otherCase) == true ? "无缺陷" : otherCase);
+        qualityControlDTO.setOtherCaseScore(score_262 + score_281 + score_282 + score_283 + score_284);
+
+    }
+}

+ 2 - 4
report-service/src/main/java/com/lantone/report/facade/MrScoreManagementFacade.java

@@ -358,7 +358,7 @@ public class MrScoreManagementFacade {
      * @param filterVO
      * @return
      */
-    public List<AverageStatisticsDTO> getAverageScores( FilterVO filterVO) {
+    public List<AverageStatisticsDTO> getAverageScores(FilterVO filterVO) {
         List<AverageStatisticsDTO> retAverageScoreList = Lists.newLinkedList();
         List<AverageStatisticsDTO> averageScoreList = qcresultInfoFacade.getBaseMapper().getAverageScore(filterVO);
         Integer limitCount = filterVO.getLimitCount();
@@ -489,7 +489,7 @@ public class MrScoreManagementFacade {
                     .divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP)
                     .doubleValue();
             Double lastYearAverageValue = 0d;
-            if(0 != sameNum){
+            if (0 != sameNum) {
                 lastYearAverageValue = BigDecimal.valueOf(sameTotleValue)
                         .divide(BigDecimal.valueOf(sameNum), 2, RoundingMode.HALF_UP)
                         .doubleValue();
@@ -570,8 +570,6 @@ public class MrScoreManagementFacade {
     }
 
 
-
-
     /**
      * 增加全院记录
      *

+ 153 - 0
report-service/src/main/java/com/lantone/report/facade/QcCheckManagementFacade.java

@@ -0,0 +1,153 @@
+package com.lantone.report.facade;
+
+import com.lantone.common.dto.report.HomePageImproveDTO;
+import com.lantone.common.util.ExcelUtils;
+import com.lantone.common.util.ListUtil;
+import com.lantone.common.util.StringUtil;
+import com.lantone.common.vo.report.FilterOrderVO;
+import com.lantone.dblayermbg.facade.report.BehospitalInfoFacade;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.List;
+
+
+@Component
+public class QcCheckManagementFacade {
+
+    @Autowired
+    private FilterFacade filterFacade;
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+
+    /**
+     * 质控核查统计(内页)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<HomePageImproveDTO> qcCheckStatistics(FilterOrderVO filterOrderVO) {
+        filterFacade.filterOrderVOSet(filterOrderVO);
+        List<HomePageImproveDTO> records = behospitalInfoFacade.getBaseMapper().qcCheckStatistics(filterOrderVO);
+        //增加全院数据
+        if (StringUtil.isBlank(filterOrderVO.getDeptName()) || filterOrderVO.getDeptName().equals("全院")) {
+            HomePageImproveDTO item = getGlobleRecord_improve(records);
+            if (item != null) {
+                records.add(0, item);
+            }
+        }
+        return records;
+    }
+
+    /**
+     * 质控核查统计导出
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public void qcCheckStatisticsExport(HttpServletResponse response, FilterOrderVO filterOrderVO) {
+        List<HomePageImproveDTO> records = this.qcCheckStatistics(filterOrderVO);
+        String fileName = "质控核查统计.xls";
+        ExcelUtils.exportExcel(records, null, "sheet1", HomePageImproveDTO.class, fileName, response, 12.8f);
+    }
+
+    /**
+     * 增加全院记录
+     *
+     * @param records
+     * @return
+     */
+    public HomePageImproveDTO getGlobleRecord_improve(List<HomePageImproveDTO> records) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        HomePageImproveDTO item = new HomePageImproveDTO();
+
+        if (ListUtil.isEmpty(records)) {
+            return null;
+        }
+
+        item.setDeptName("全院");
+
+        //总病历数
+        Integer mrNum = records
+                .stream()
+                .map(HomePageImproveDTO::getMrNum)
+                .reduce(0, Integer::sum);
+        if (mrNum == null || mrNum == 0) {
+            return null;
+        }
+        item.setMrNum(mrNum);
+        //核查病历数
+        Integer checkedNum = records
+                .stream()
+                .map(HomePageImproveDTO::getCheckedNum)
+                .reduce(0, Integer::sum);
+        item.setCheckedNum(checkedNum);
+        if (mrNum != null && !mrNum.equals(0)) {
+            //核查病历占比
+            Double checkedPercent = BigDecimal.valueOf(checkedNum)
+                    .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
+                    .doubleValue();
+            String checkedPercentStr
+                    = df.format(BigDecimal.valueOf(checkedPercent).multiply(BigDecimal.valueOf(100))) + "%";
+            item.setCheckedPercent(checkedPercent);
+            item.setCheckedPercentStr(checkedPercentStr);
+        }
+        //带病案首页的病历数
+        Integer homePageMRNum = records
+                .stream()
+                .map(HomePageImproveDTO::getHomePageMRNum)
+                .reduce(0, Integer::sum);
+        item.setHomePageMRNum(homePageMRNum);
+        if (homePageMRNum == null || homePageMRNum.equals(0)) {
+            return item;
+        }
+        //改善病历数
+        Integer improveNum = records
+                .stream()
+                .map(HomePageImproveDTO::getImproveNum)
+                .reduce(0, Integer::sum);
+        //改善率
+        Double improvePercent = BigDecimal.valueOf(improveNum)
+                .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String improvePercentStr
+                = df.format(BigDecimal.valueOf(improvePercent).multiply(BigDecimal.valueOf(100))) + "%";
+        //改善至合格病历数
+        Integer improveToPassNum = records
+                .stream()
+                .map(HomePageImproveDTO::getImproveToPassNum)
+                .reduce(0, Integer::sum);
+        //改善至合格占比
+        Double improveToPassPercent = BigDecimal.valueOf(improveToPassNum)
+                .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String improveToPassPercentStr
+                = df.format(BigDecimal.valueOf(improveToPassPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        //改善至满分病历数
+        Integer improveToFullNum = records
+                .stream()
+                .map(HomePageImproveDTO::getImproveToFullNum)
+                .reduce(0, Integer::sum);
+        //改善至满分占比
+        Double improveToFullPercent = BigDecimal.valueOf(improveToFullNum)
+                .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String improveToFullPercentStr
+                = df.format(BigDecimal.valueOf(improveToFullPercent).multiply(BigDecimal.valueOf(100))) + "%";
+
+        item.setImproveNum(improveNum);
+        item.setImprovePercent(improvePercent);
+        item.setImprovePercentStr(improvePercentStr);
+        item.setImproveToPassNum(improveToPassNum);
+        item.setImproveToPassPercent(improveToPassPercent);
+        item.setImproveToPassPercentStr(improveToPassPercentStr);
+        item.setImproveToFullNum(improveToFullNum);
+        item.setImproveToFullPercent(improveToFullPercent);
+        item.setImproveToFullPercentStr(improveToFullPercentStr);
+        return item;
+    }
+}

+ 192 - 0
report-service/src/main/java/com/lantone/report/facade/ReHos31DaysManagementFacade.java

@@ -0,0 +1,192 @@
+package com.lantone.report.facade;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+import com.lantone.common.dto.report.ReBeHosDTO;
+import com.lantone.common.dto.report.ReBeHosDetailDTO;
+import com.lantone.common.dto.report.ReBeHosMergeDTO;
+import com.lantone.common.util.ExcelUtils;
+import com.lantone.common.util.ListUtil;
+import com.lantone.common.vo.report.ReBeHosPageVO;
+import com.lantone.dblayermbg.facade.report.BehospitalInfoFacade;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+
+@Component
+public class ReHos31DaysManagementFacade {
+
+    @Autowired
+    private FilterFacade filterFacade;
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+
+    /**
+     * 31天再入院详情页
+     *
+     * @param reBeHosPageVO
+     * @return
+     */
+    public IPage<ReBeHosDTO> reHos31DaysPage(ReBeHosPageVO reBeHosPageVO) {
+        filterFacade.reBeHosPageVOSet(reBeHosPageVO);
+        long size = reBeHosPageVO.getSize();
+        long current = reBeHosPageVO.getCurrent();
+        reBeHosPageVO.setCurrent(1L);
+        reBeHosPageVO.setSize(Long.MAX_VALUE);
+        IPage<ReBeHosMergeDTO> page = behospitalInfoFacade.getBaseMapper().reHos31DaysPage(reBeHosPageVO);
+        List<ReBeHosMergeDTO> records = page.getRecords();
+        IPage<ReBeHosDTO> retPage = new Page<>();
+        if (ListUtil.isNotEmpty(records)) {
+            BeanUtil.copyProperties(page, retPage);
+            List<ReBeHosDTO> retRecords = Lists.newLinkedList();
+            Iterator<ReBeHosMergeDTO> iterator = records.iterator();
+            while (iterator.hasNext()) {
+                ReBeHosMergeDTO record = iterator.next();
+                strTrans(record);
+                Boolean flag = isContainDiagnose(record);
+                if (!flag) {
+                    iterator.remove();
+                    continue;
+                }
+                ReBeHosDTO retRecord = new ReBeHosDTO();
+                BeanUtil.copyProperties(record, retRecord);
+                List<ReBeHosDetailDTO> details = Lists.newLinkedList();
+                ReBeHosDetailDTO detailRecord = new ReBeHosDetailDTO();
+                BeanUtil.copyProperties(record, detailRecord);
+                details.add(detailRecord);
+                ReBeHosDetailDTO lastDetailRecord = new ReBeHosDetailDTO();
+                lastDetailRecord.setName(record.getName());
+                lastDetailRecord.setAge(record.getLastAge());
+                lastDetailRecord.setDiagnose(record.getLastDiagnose());
+                lastDetailRecord.setDiagnoseName(record.getLastDiagnoseName());
+                lastDetailRecord.setBehDeptId(record.getLastBehDeptId());
+                lastDetailRecord.setBehDeptName(record.getLastBehDeptName());
+                lastDetailRecord.setBehospitalCode(record.getLastBehospitalCode());
+                lastDetailRecord.setBehospitalDate(record.getLastBehospitalDate());
+                lastDetailRecord.setLeaveHospitalDate(record.getLastLeaveHospitalDate());
+                lastDetailRecord.setLevel(record.getLastLevel());
+                lastDetailRecord.setScoreRes(record.getLastScoreRes());
+                lastDetailRecord.setBehospitalDayNum(record.getLastBehospitalDayNum());
+                lastDetailRecord.setTotleFee(record.getLastTotleFee());
+                details.add(lastDetailRecord);
+                retRecord.setDetails(details);
+                retRecords.add(retRecord);
+            }
+            //首页返回全部数据
+            if (reBeHosPageVO.getFlag() == 31) {
+                retPage.setRecords(retRecords);
+                return retPage;
+            }
+            //导出操作
+            if (reBeHosPageVO.getFlag() == 1) {
+                size = retRecords.size();
+            }
+            retPage.setSize(size);
+            retPage.setTotal(retRecords.size());
+            retPage.setCurrent(current);
+            //数据返回索引处理
+            if (0 == current) {
+                current = 1;
+            }
+            int startIndex = ((int) current - 1) * 10;
+            int endIndex = startIndex + (int) size;
+
+            if (retRecords.size() > 1) {
+                if (retRecords.size() - startIndex < (int) size) {
+                    retRecords = retRecords.subList(startIndex, retRecords.size());
+                } else {
+                    retRecords = retRecords.subList(startIndex, endIndex);
+                }
+            }
+            retPage.setRecords(retRecords);
+        }
+        return retPage;
+    }
+
+    /**
+     * 31天再入院统计导出
+     *
+     * @param reBeHosPageVO
+     * @return
+     */
+    public void reHos31DaysPageExport(HttpServletResponse response, ReBeHosPageVO reBeHosPageVO) {
+        reBeHosPageVO.setSearchCount(false);
+        reBeHosPageVO.setFlag(1);
+        IPage<ReBeHosDTO> page = this.reHos31DaysPage(reBeHosPageVO);
+        List<ReBeHosDTO> records = page.getRecords();
+        String fileName = "31天再入院统计详情.xls";
+        ExcelUtils.exportExcel(records, null, "sheet1", ReBeHosDTO.class, fileName, response);
+    }
+
+    public static void strTrans(ReBeHosMergeDTO record) {
+        String replace = record.getLastAgainBehospitalPlan();
+        if (StringUtils.isEmpty(replace)) {
+            replace = "否";
+            record.setLastAgainBehospitalPlan(replace);
+            return;
+        }
+        replace = replace.replace("无", "否")
+                .replace("-", "无").replace("是一周后", "是")
+                .replace("1", "否").replace("2", "是")
+                .replace("有", "是");
+        record.setLastAgainBehospitalPlan(replace);
+    }
+
+    static Boolean isContainDiagnose(ReBeHosMergeDTO record) {
+        // String lastDiagnoseName = replace(record.getLastDiagnoseName());本身使用,分隔
+        String diagnose = replace(record.getDiagnose());//手动分隔
+        String lastDiagnose = replace(record.getLastDiagnose());
+        record.setDiagnose(diagnose);
+        record.setLastDiagnose(lastDiagnose);
+        Set lastDiagnoseNames = strTranListMethod(record.getLastDiagnoseName());
+        Set diagnoses = strTranListMethod(record.getDiagnose());
+        long count = diagnoses.stream().filter(obj -> null != lastDiagnoseNames && null != obj && lastDiagnoseNames.contains(obj)).count();
+        if (count <= 0) {
+            return false;
+        }
+        return true;
+    }
+
+    ;
+
+    static String replace(String str) {
+        if (StringUtils.isEmpty(str)) {
+            return null;
+        }
+        str = str.trim().replace(";", ",").replace(";", ",")
+                .replace("、", ",").replace(",", ",")
+                .replace("|", ",").replace(" ", ",")
+                .replace(":", ",").replace(":", ",");
+        if (str.startsWith(",")) {
+            str = str.substring(1);
+        }
+        if (str.endsWith(",")) {
+            str = str.substring(0, str.length() - 1);
+        }
+
+        return str;
+    }
+
+    static Set strTranListMethod(String str) {
+        Set<String> names = new HashSet<>();
+        if (StringUtils.isNotEmpty(str)) {
+            if (str.contains(",") && str.length() > 1) {
+                for (String diagnoseName : str.split(",")) {
+                    names.add(diagnoseName);
+                }
+            } else {
+                names.add(str);
+            }
+        }
+        return names;
+    }
+}

+ 319 - 0
report-service/src/main/java/com/lantone/report/facade/TimelinessManagementFacade.java

@@ -0,0 +1,319 @@
+package com.lantone.report.facade;
+
+import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Lists;
+import com.lantone.common.dto.report.ColumnDTO;
+import com.lantone.common.dto.report.UnModifyMRDTO;
+import com.lantone.common.dto.report.UnModifyMRDetailDTO;
+import com.lantone.common.exception.ApiException;
+import com.lantone.common.util.ClassUtil;
+import com.lantone.common.util.EntityUtil;
+import com.lantone.common.util.ExcelUtils;
+import com.lantone.common.util.ListUtil;
+import com.lantone.common.util.ObjectUtil;
+import com.lantone.common.util.StringUtil;
+import com.lantone.common.vo.report.FilterUnModifyMRVO;
+import com.lantone.dblayermbg.entity.HospitalSet;
+import com.lantone.dblayermbg.entity.report.CasesEntry;
+import com.lantone.dblayermbg.facade.HospitalSetFacade;
+import com.lantone.dblayermbg.facade.report.BehospitalInfoFacade;
+import com.lantone.dblayermbg.facade.report.CasesEntryFacade;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Component
+public class TimelinessManagementFacade {
+
+    @Autowired
+    private FilterFacade filterFacade;
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private HospitalSetFacade hospitalSetFacade;
+    @Autowired
+    private CasesEntryFacade casesEntryFacade;
+
+    /**
+     * 未整改病历统计
+     *
+     * @param filterUnModifyMRVO
+     * @return
+     */
+    public UnModifyMRDTO unModifyMRStatistics(FilterUnModifyMRVO filterUnModifyMRVO) {
+        UnModifyMRDTO unModifyMRDTO = new UnModifyMRDTO();
+        List<Object> retList = Lists.newLinkedList();
+        filterFacade.filterUnModifyMRVOSet(filterUnModifyMRVO);
+
+        //colums
+        QueryWrapper<HospitalSet> hospitalSetQueryWrapper = new QueryWrapper<>();
+        hospitalSetQueryWrapper.eq("is_deleted", 'N')
+                .eq("hospital_id", filterUnModifyMRVO.getHospitalId())
+                .eq("code", "unmodify_mr_entry");
+        HospitalSet hospitalSet = hospitalSetFacade.getOne(hospitalSetQueryWrapper);
+        if (hospitalSet == null || StringUtil.isBlank(hospitalSet.getVal())) {
+            return unModifyMRDTO;
+        }
+
+        //表头生成
+        List<String> columnSet = Arrays.asList(hospitalSet.getVal().split(","));
+        List<ColumnDTO> columns = Lists.newLinkedList();
+        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++;
+        List<Long> casesEntryIds = Lists.newArrayList();
+        for (String valueStr : columnSet) {
+            if (StringUtil.isBlank(valueStr)) {
+                continue;
+            }
+            String[] keyValue = valueStr.split("--");
+            if (keyValue != null || keyValue.length > 1) {
+                casesEntryIds.add(Long.valueOf(keyValue[0]));
+                ColumnDTO columnId = new ColumnDTO();
+                columnId.setOrderNo(orderNo);
+                columnId.setId(Long.valueOf(keyValue[0]));
+                columnId.setFieldName("entry_" + keyValue[0] + "_id");
+                columnId.setColumnName(keyValue[1] + "id");
+                columnId.setIsShow(0);
+                columns.add(columnId);
+                orderNo++;
+                ColumnDTO columnName = new ColumnDTO();
+                columnName.setOrderNo(orderNo);
+                columnName.setId(Long.valueOf(keyValue[0]));
+                columnName.setFieldName("entry_" + keyValue[0] + "_name");
+                columnName.setColumnName(keyValue[1] + "name");
+                columnName.setIsShow(0);
+                columns.add(columnName);
+                orderNo++;
+                ColumnDTO columnNum = new ColumnDTO();
+                columnNum.setOrderNo(orderNo);
+                columnNum.setId(Long.valueOf(keyValue[0]));
+                columnNum.setFieldName("entry_" + keyValue[0] + "_num");
+                columnNum.setColumnName(keyValue[1]);
+                columnNum.setIsShow(1);
+                columns.add(columnNum);
+                orderNo++;
+            }
+        }
+        //条目未维护
+        if (ListUtil.isEmpty(casesEntryIds)) {
+            return unModifyMRDTO;
+        }
+
+        //casesEntryIds
+        filterUnModifyMRVO.setCasesEntryIds(casesEntryIds);
+        QueryWrapper<CasesEntry> qcCasesEntryQueryWrapper = new QueryWrapper<>();
+        qcCasesEntryQueryWrapper.eq("is_deleted", "N")
+                .in("id", casesEntryIds);
+        List<CasesEntry> casesEntryList = casesEntryFacade.list(qcCasesEntryQueryWrapper);
+        // 实体类中将实体类转化为map形式,其中条目id对应目标条目名称
+        Map<Long, String> basCasesEntryMap = EntityUtil.makeMapWithKeyValue(casesEntryList, "id", "name");
+
+        List<UnModifyMRDetailDTO> records = behospitalInfoFacade.getBaseMapper().unModifyMRStatistics(filterUnModifyMRVO);
+        //以科室分组,将符合科室的每条数据以map形式存储
+        Map<String, List<UnModifyMRDetailDTO>> deptMap = EntityUtil.makeEntityListMap(records, "deptName");
+        //科室对应科室id
+        Map<String, String> deptInfoMap = EntityUtil.makeMapWithKeyValue(records, "deptName", "deptId");
+        Map<String, Map<Long, UnModifyMRDetailDTO>> deptEntryMap = new LinkedHashMap<>();
+        for (Map.Entry<String, List<UnModifyMRDetailDTO>> entry : deptMap.entrySet()) {
+            Map<Long, UnModifyMRDetailDTO> entryMap = EntityUtil.makeEntityMap(entry.getValue(), "casesEntryId");
+            deptEntryMap.put(entry.getKey(), entryMap);
+        }
+
+        try {
+            for (Map.Entry<String, Map<Long, UnModifyMRDetailDTO>> entry : deptEntryMap.entrySet()) {
+                Object obj = new Object();
+                HashMap addMap = new HashMap();
+                HashMap addValMap = new HashMap();
+
+                addMap.put("deptName", Class.forName("java.lang.String"));
+                addValMap.put("deptName", entry.getKey());
+                addMap.put("deptId", Class.forName("java.lang.String"));
+                addValMap.put("deptId", deptInfoMap.get(entry.getKey()));
+
+                for (ColumnDTO item : columns) {
+                    if (item.getFieldName().lastIndexOf("_id") > 0) {
+                        addMap.put(item.getFieldName(), Class.forName("java.lang.Long"));
+                        if (item.getId() != null) {
+                            addValMap.put(item.getFieldName(), item.getId());
+                        } else {
+                            addValMap.put(item.getFieldName(), null);
+                        }
+                    } else if (item.getFieldName().lastIndexOf("_name") > 0) {
+                        addMap.put(item.getFieldName(), Class.forName("java.lang.String"));
+                        if (basCasesEntryMap.containsKey(item.getId())) {
+                            addValMap.put(item.getFieldName(), basCasesEntryMap.get(item.getId()));
+                        } else {
+                            addValMap.put(item.getFieldName(), "");
+                        }
+                    } else if (item.getFieldName().lastIndexOf("_num") > 0) {
+                        addMap.put(item.getFieldName(), Class.forName("java.lang.Integer"));
+                        if (entry.getValue().containsKey(item.getId())) {
+                            addValMap.put(item.getFieldName(), entry.getValue().get(item.getId()).getCasesEntryNum());
+                        } else {
+                            addValMap.put(item.getFieldName(), 0);
+                        }
+                    }
+                }
+                obj = new ClassUtil().dynamicClass(obj, addMap, addValMap);
+                retList.add(obj);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        //排序
+        Collections.sort(retList, new Comparator<Object>() {
+            @Override
+            public int compare(Object o1, Object o2) {
+
+                if (StringUtil.isNotBlank(filterUnModifyMRVO.getAsc())) {
+                    //升序
+                    Object o1Val = ObjectUtil.getValueByKey(o1, filterUnModifyMRVO.getAsc());
+                    Object o2Val = ObjectUtil.getValueByKey(o2, filterUnModifyMRVO.getAsc());
+                    if (filterUnModifyMRVO.getAsc().lastIndexOf("_num") > 1) {
+                        return ((Integer) o1Val).compareTo((Integer) o2Val);
+                    }
+                    if (filterUnModifyMRVO.getAsc().lastIndexOf("_id") > 1) {
+                        return ((Long) o1Val).compareTo((Long) o2Val);
+                    } else {
+                        return ((String) o1Val).compareTo((String) o2Val);
+                    }
+                } else if (StringUtil.isNotBlank(filterUnModifyMRVO.getDesc())) {
+                    //降序
+                    Object o1Val = ObjectUtil.getValueByKey(o1, filterUnModifyMRVO.getDesc());
+                    Object o2Val = ObjectUtil.getValueByKey(o2, filterUnModifyMRVO.getDesc());
+                    if (filterUnModifyMRVO.getDesc().lastIndexOf("_num") > 1) {
+                        return ((Integer) o2Val).compareTo((Integer) o1Val);
+                    }
+                    if (filterUnModifyMRVO.getDesc().lastIndexOf("_id") > 1) {
+                        return ((Long) o2Val).compareTo((Long) o1Val);
+                    } else {
+                        return ((String) o2Val).compareTo((String) o1Val);
+                    }
+                } else {
+                    return 0;
+                }
+            }
+        });
+        //增加全院数据
+        if (ListUtil.isNotEmpty(retList) &&
+                (StringUtil.isBlank(filterUnModifyMRVO.getDeptName())
+                        || filterUnModifyMRVO.getDeptName().equals("全院"))) {
+            try {
+
+                Object globleObj = new Object();
+                HashMap addMap = new HashMap();
+                HashMap addValMap = new HashMap();
+                addMap.put("deptId", Class.forName("java.lang.String"));
+                addValMap.put("deptId", "");
+                addMap.put("deptName", Class.forName("java.lang.String"));
+                addValMap.put("deptName", "全院");
+
+                for (ColumnDTO item : columns) {
+                    if (item.getFieldName().lastIndexOf("_id") > 0) {
+                        addMap.put(item.getFieldName(), Class.forName("java.lang.Long"));
+                        if (item.getId() != null) {
+                            addValMap.put(item.getFieldName(), item.getId());
+                        } else {
+                            addValMap.put(item.getFieldName(), null);
+                        }
+
+                    } else if (item.getFieldName().lastIndexOf("_name") > 0) {
+                        addMap.put(item.getFieldName(), Class.forName("java.lang.String"));
+                        if (basCasesEntryMap.containsKey(item.getId())) {
+                            addValMap.put(item.getFieldName(), basCasesEntryMap.get(item.getId()));
+                        } else {
+                            addValMap.put(item.getFieldName(), "");
+                        }
+
+                    } else if (item.getFieldName().lastIndexOf("_num") > 0) {
+                        addMap.put(item.getFieldName(), Class.forName("java.lang.Integer"));
+                        Integer entryNum = retList
+                                .stream()
+                                .map(i -> ObjectUtil.getValueByKey(i, item.getFieldName()))
+                                .filter(i -> i != null)
+                                .map(i -> (Integer) i)
+                                .reduce(0, Integer::sum);
+                        addValMap.put(item.getFieldName(), entryNum);
+                    }
+                }
+                globleObj = new ClassUtil().dynamicClass(globleObj, addMap, addValMap);
+                retList.add(0, globleObj);
+
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        unModifyMRDTO.setColumns(columns);
+        unModifyMRDTO.setData(retList);
+        return unModifyMRDTO;
+    }
+
+    /**
+     * 未整改病历统计导出
+     *
+     * @param response
+     * @param filterUnModifyMRVO
+     */
+    public void unModifyMRStatisticsExport(HttpServletResponse response, FilterUnModifyMRVO filterUnModifyMRVO) {
+        filterFacade.filterUnModifyMRVOSet(filterUnModifyMRVO);
+        List<ExcelExportEntity> colList = Lists.newLinkedList();
+        ExcelExportEntity deptNameCol = new ExcelExportEntity("科室", "deptName");
+        deptNameCol.setWidth(50);
+        colList.add(deptNameCol);
+
+        QueryWrapper<HospitalSet> hospitalSetQueryWrapper = new QueryWrapper<>();
+        hospitalSetQueryWrapper.eq("is_deleted", 'N')
+                .eq("hospital_id", filterUnModifyMRVO.getHospitalId())
+                .eq("code", "unmodify_mr_entry");
+        HospitalSet hospitalSet = hospitalSetFacade.getOne(hospitalSetQueryWrapper);
+        //缺陷条目未维护
+        if (hospitalSet == null || StringUtil.isBlank(hospitalSet.getVal())) {
+            throw new ApiException("未整改病历条目未设置");
+        }
+
+        List<String> columnSet = Arrays.asList(hospitalSet.getVal().split(","));
+        for (String valueStr : columnSet) {
+            if (StringUtil.isBlank(valueStr)) {
+                continue;
+            }
+            String[] keyValue = valueStr.split("--");
+            if (keyValue != null || keyValue.length > 1) {
+                ExcelExportEntity entryCol = new ExcelExportEntity(keyValue[1], "entry_" + keyValue[0] + "_num");
+                entryCol.setWidth(20);
+                colList.add(entryCol);
+            }
+        }
+        UnModifyMRDTO unModifyMRDTO = this.unModifyMRStatistics(filterUnModifyMRVO);
+        List<Object> data = Lists.newLinkedList();
+        if (unModifyMRDTO != null && ListUtil.isNotEmpty(unModifyMRDTO.getData())) {
+            data = unModifyMRDTO.getData();
+        }
+        String fileName = "未整改病历统计.xls";
+        ExcelUtils.exportExcelDynamicCol(colList, data, null, "sheet1", fileName, response);
+    }
+}

+ 52 - 0
report-service/src/main/java/com/lantone/report/web/EntryCaseManagementController.java

@@ -3,6 +3,9 @@ package com.lantone.report.web;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.lantone.common.api.CommonResult;
 import com.lantone.common.dto.report.EntryNumDTO;
+import com.lantone.common.dto.report.EntryStatisticsDTO;
+import com.lantone.common.dto.report.NumDTO;
+import com.lantone.common.vo.report.EntryStatisticsVO;
 import com.lantone.common.vo.report.FilterPageVO;
 import com.lantone.common.vo.report.FilterVO;
 import com.lantone.report.facade.EntryCaseManagementFacade;
@@ -16,6 +19,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.util.List;
 import java.util.Map;
 
 
@@ -71,4 +75,52 @@ public class EntryCaseManagementController {
     public void entryGroupByEntryExport(HttpServletResponse response, @RequestBody @Valid FilterPageVO filterPageVO) {
         entryCaseManagementFacade.entryGroupByEntryExport(response, filterPageVO);
     }
+
+    /**
+     * 单项否决缺陷占比-控制台
+     *
+     * @param filterVO
+     * @return
+     */
+    @ApiOperation(value = "单项否决缺陷占比-控制台[by:zhaops]")
+    @PostMapping("/entryRejectPercent")
+    public CommonResult<List<EntryNumDTO>> entryRejectPercent(@RequestBody @Valid FilterVO filterVO) {
+        return CommonResult.success(entryCaseManagementFacade.entryRejectPercent(filterVO));
+    }
+
+    /**
+     * 入院记录24h内未完成
+     *
+     * @param filterVO
+     * @return
+     */
+    @ApiOperation(value = "入院记录24h内未完成-控制台[by:zhaops]")
+    @PostMapping("/casesEntryStatisticsById")
+    public CommonResult<List<NumDTO>> casesEntryStatisticsById(@RequestBody @Valid FilterVO filterVO) {
+        return CommonResult.success(entryCaseManagementFacade.casesEntryStatisticsById(filterVO));
+    }
+
+    /**
+     * 关键条目缺陷占比-报表
+     *
+     * @param entryStatisticsVO
+     * @return
+     */
+    @ApiOperation(value = "关键条目缺陷占比-报表[by:zhaops]")
+    @PostMapping("/entryStatistics")
+    public CommonResult<List<EntryStatisticsDTO>> entryStatistics(@RequestBody @Valid EntryStatisticsVO entryStatisticsVO) {
+        return CommonResult.success(entryCaseManagementFacade.entryStatistics(entryStatisticsVO));
+    }
+
+    /**
+     * 关键条目缺陷占比-报表导出
+     *
+     * @param entryStatisticsVO
+     * @return
+     */
+    @ApiOperation(value = "关键条目缺陷占比-报表导出[by:gaodm]")
+    @PostMapping("/entryStatisticsExport")
+    public void entryStatisticsExport(HttpServletResponse response, @RequestBody @Valid EntryStatisticsVO entryStatisticsVO) {
+        entryCaseManagementFacade.entryStatisticsExport(response, entryStatisticsVO);
+    }
 }

+ 74 - 0
report-service/src/main/java/com/lantone/report/web/HomePageManagementController.java

@@ -0,0 +1,74 @@
+package com.lantone.report.web;
+
+import com.lantone.common.api.CommonResult;
+import com.lantone.common.dto.report.HomePageNumDTO;
+import com.lantone.common.vo.report.FilterOrderVO;
+import com.lantone.common.vo.report.FilterVO;
+import com.lantone.report.facade.HomePageManagementFacade;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 病案首页管理统计相关API
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-04-27
+ */
+
+@RestController
+@RequestMapping("/console")
+@Api(value = "病案首页管理统计相关API", tags = { "病案首页管理统计相关API" })
+@SuppressWarnings("unchecked")
+public class HomePageManagementController {
+    @Autowired
+    private HomePageManagementFacade homePageManagementFacade;
+
+    /**
+     * 病案首页病历统计-控制台
+     *
+     * @param filterVO
+     * @return
+     */
+    @ApiOperation(value = "病案首页病历统计-控制台[by:zhaops]")
+    @PostMapping("/homePageMRCount")
+    public CommonResult<Map<String, Object>> homePageMRCount(@RequestBody @Valid FilterVO filterVO) {
+        return CommonResult.success(homePageManagementFacade.homePageMRCount(filterVO));
+    }
+
+    /**
+     * 病案首页合格率占比-报表
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @ApiOperation(value = "病案首页合格率占比-报表[by:zhaops]")
+    @PostMapping("/homePageLevelStatistics")
+    public CommonResult<List<HomePageNumDTO>> homePageLevelStatistics(@RequestBody @Valid FilterOrderVO filterOrderVO) {
+        return CommonResult.success(homePageManagementFacade.homePageLevelStatistics(filterOrderVO));
+    }
+
+    /**
+     * 病案首页合格率占比-报表导出
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @ApiOperation(value = "病案首页合格率占比-报表导出[by:gaodm]")
+    @PostMapping("/homePageLevelExport")
+    public void homePageLevelExport(HttpServletResponse response, @RequestBody @Valid FilterOrderVO filterOrderVO) {
+        homePageManagementFacade.homePageLevelExport(response, filterOrderVO);
+    }
+}

+ 19 - 5
report-service/src/main/java/com/lantone/report/web/LeaveHospitalManagementController.java

@@ -2,10 +2,11 @@ package com.lantone.report.web;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.lantone.common.api.CommonResult;
+import com.lantone.common.dto.report.NumDTO;
 import com.lantone.common.dto.report.QcResultShortDTO;
 import com.lantone.common.vo.report.FilterVO;
 import com.lantone.common.vo.report.QcResultShortPageVO;
-import com.lantone.report.facade.LeaveHospitalManagementFacade;
+import com.lantone.report.facade.LeaveBeHospitalManagementFacade;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,12 +17,13 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.util.List;
 import java.util.Map;
 
 
 /**
  * <p>
- * 出院管理统计相关API
+ * 出院管理统计相关API
  * </p>
  *
  * @author zhaops
@@ -30,11 +32,11 @@ import java.util.Map;
 
 @RestController
 @RequestMapping("/console")
-@Api(value = "出院管理统计相关API", tags = { "出院管理统计相关API" })
+@Api(value = "出院管理统计相关API", tags = { "出院管理统计相关API" })
 @SuppressWarnings("unchecked")
-public class LeaveHospitalManagementController {
+public class LeaveBeHospitalManagementController {
     @Autowired
-    private LeaveHospitalManagementFacade leaveHospitalManagementFacade;
+    private LeaveBeHospitalManagementFacade leaveHospitalManagementFacade;
 
     /**
      * 出院人数统计
@@ -71,4 +73,16 @@ public class LeaveHospitalManagementController {
     public void leaveHosMrPageExport(HttpServletResponse response, @RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
         leaveHospitalManagementFacade.leaveHosMrPageExportMethod(response, qcResultShortPageVO);
     }
+
+    /**
+     * 入院人数统计-控制台
+     *
+     * @param filterVO
+     * @return
+     */
+    @ApiOperation(value = "入院人数统计-控制台[by:zhaops]")
+    @PostMapping("/beHosCount")
+    public CommonResult<List<NumDTO>> beHosCount(@RequestBody @Valid FilterVO filterVO) {
+        return CommonResult.success(leaveHospitalManagementFacade.beHosCount(filterVO));
+    }
 }

+ 61 - 0
report-service/src/main/java/com/lantone/report/web/MedicalCheckManagementController.java

@@ -0,0 +1,61 @@
+package com.lantone.report.web;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.lantone.common.api.CommonResult;
+import com.lantone.common.dto.report.MedicalCheckDTO;
+import com.lantone.common.vo.report.FilterMedicalCheckVO;
+import com.lantone.report.facade.MedicalCheckManagementFacade;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+
+/**
+ * <p>
+ * 病历稽查管理统计相关API
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-04-27
+ */
+
+@RestController
+@RequestMapping("/console")
+@Api(value = "病历稽查管理统计相关API", tags = { "病历稽查管理统计相关API" })
+@SuppressWarnings("unchecked")
+public class MedicalCheckManagementController {
+    @Autowired
+    private MedicalCheckManagementFacade medicalCheckManagementFacade;
+
+
+    /**
+     * 病历稽查表-报表
+     *
+     * @param filterVO
+     * @return
+     */
+    @ApiOperation(value = "病历稽查统计[by:cy]")
+    @PostMapping("/medicalCheckForm")
+    public CommonResult<IPage<MedicalCheckDTO>> getMedicalCheck(@RequestBody @Valid FilterMedicalCheckVO filterVO) {
+        return CommonResult.success((medicalCheckManagementFacade.getMedicalCheck(filterVO)));
+    }
+
+    /**
+     * 病历稽查表-报表导出
+     *
+     * @param filterVO
+     * @return
+     */
+    @ApiOperation(value = "病历稽查表-报表导出[by:cy]")
+    @PostMapping("/medicalCheckExport")
+    public void medicalCheckExport(HttpServletResponse response, @RequestBody @Valid FilterMedicalCheckVO filterVO) {
+        medicalCheckManagementFacade.medicalCheckExport(response, filterVO);
+    }
+}

+ 59 - 0
report-service/src/main/java/com/lantone/report/web/MedicalControlManagementController.java

@@ -0,0 +1,59 @@
+package com.lantone.report.web;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.lantone.common.api.CommonResult;
+import com.lantone.common.dto.report.QualityControlDTO;
+import com.lantone.common.vo.report.BehospitalPageVO;
+import com.lantone.report.facade.MedicalControlManagementFacade;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * <p>
+ * 病历质控报表管理统计相关API
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-04-27
+ */
+
+@RestController
+@RequestMapping("/console")
+@Api(value = "病历质控报表管理统计相关API", tags = { "病历质控报表管理统计相关API" })
+@SuppressWarnings("unchecked")
+public class MedicalControlManagementController {
+    @Autowired
+    private MedicalControlManagementFacade medicalControlManagementFacade;
+
+    /**
+     * 病历质控报表-报表
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    @ApiOperation(value = "病历质控报表-报表[by:cy]")
+    @PostMapping("/qualityControl")
+    public CommonResult<IPage<QualityControlDTO>> getQualityControl(@RequestBody BehospitalPageVO behospitalPageVO) {
+        return CommonResult.success(medicalControlManagementFacade.getQualityControl(behospitalPageVO));
+    }
+
+    /**
+     * 病历质控报表-报表导出
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    @ApiOperation(value = "病历质控报表-报表导出[by:cy]")
+    @PostMapping("/qualityControlExport")
+    public void qualityControlExport(HttpServletResponse response, @RequestBody BehospitalPageVO behospitalPageVO) {
+        medicalControlManagementFacade.qualityControlExport(response, behospitalPageVO);
+    }
+}

+ 2 - 2
report-service/src/main/java/com/lantone/report/web/MrScoreManagementController.java

@@ -25,7 +25,7 @@ import java.util.Map;
 
 /**
  * <p>
- * 质控病历管理统计相关API
+ * 质控病历分数|等级管理统计相关API
  * </p>
  *
  * @author zhaops
@@ -34,7 +34,7 @@ import java.util.Map;
 
 @RestController
 @RequestMapping("/console")
-@Api(value = "质控病历管理统计相关API", tags = { "质控病历管理统计相关API" })
+@Api(value = "质控病历分数|等级管理统计相关API", tags = { "质控病历分数|等级管理统计相关API" })
 @SuppressWarnings("unchecked")
 public class MrScoreManagementController {
     @Autowired

+ 60 - 0
report-service/src/main/java/com/lantone/report/web/QcCheckManagementController.java

@@ -0,0 +1,60 @@
+package com.lantone.report.web;
+
+import com.lantone.common.api.CommonResult;
+import com.lantone.common.dto.report.HomePageImproveDTO;
+import com.lantone.common.vo.report.FilterOrderVO;
+import com.lantone.report.facade.QcCheckManagementFacade;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.List;
+
+
+/**
+ * <p>
+ * 质控核查管理统计相关API
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-04-27
+ */
+
+@RestController
+@RequestMapping("/console")
+@Api(value = "质控核查管理统计相关API", tags = { "质控核查管理统计相关API" })
+@SuppressWarnings("unchecked")
+public class QcCheckManagementController {
+    @Autowired
+    private QcCheckManagementFacade qcCheckManagementFacade;
+
+    /**
+     * 质控核查统计-报表
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @ApiOperation(value = "质控核查统计-报表[by:zhaops]")
+    @PostMapping("/qcCheckStatistics")
+    public CommonResult<List<HomePageImproveDTO>> qcCheckStatistics(@RequestBody @Valid FilterOrderVO filterOrderVO) {
+        return CommonResult.success(qcCheckManagementFacade.qcCheckStatistics(filterOrderVO));
+    }
+
+    /**
+     * 质控核查统计-报表导出
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @ApiOperation(value = "质控核查统计-报表导出[by:zhaops]")
+    @PostMapping("/qcCheckStatisticsExport")
+    public void qcCheckStatisticsExport(HttpServletResponse response, @RequestBody @Valid FilterOrderVO filterOrderVO) {
+        qcCheckManagementFacade.qcCheckStatisticsExport(response, filterOrderVO);
+    }
+}

+ 60 - 0
report-service/src/main/java/com/lantone/report/web/ReHos31DaysManagementController.java

@@ -0,0 +1,60 @@
+package com.lantone.report.web;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.lantone.common.api.CommonResult;
+import com.lantone.common.dto.report.ReBeHosDTO;
+import com.lantone.common.vo.report.ReBeHosPageVO;
+import com.lantone.report.facade.ReHos31DaysManagementFacade;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+
+/**
+ * <p>
+ * 31日再入院病人数管理统计相关API
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-04-27
+ */
+
+@RestController
+@RequestMapping("/console")
+@Api(value = "31日再入院病人数管理统计相关API", tags = { "31日再入院病人数管理统计相关API" })
+@SuppressWarnings("unchecked")
+public class ReHos31DaysManagementController {
+    @Autowired
+    private ReHos31DaysManagementFacade reHos31DaysManagementFacade;
+
+    /**
+     * 31日再入院病人数统计-报表
+     *
+     * @param reBeHosPageVO
+     * @return
+     */
+    @ApiOperation(value = "31天再入院人数(内页)[by:zhaops]")
+    @PostMapping("/reHos31DaysPage")
+    public CommonResult<IPage<ReBeHosDTO>> reHos31DaysPage(@RequestBody @Valid ReBeHosPageVO reBeHosPageVO) {
+        return CommonResult.success(reHos31DaysManagementFacade.reHos31DaysPage(reBeHosPageVO));
+    }
+
+    /**
+     * 31日再入院病人数统计-报表导出
+     *
+     * @param reBeHosPageVO
+     * @return
+     */
+    @ApiOperation(value = "31日再入院病人数统计-报表导出[by:zhaops]")
+    @PostMapping("/reHos31DaysPageExport")
+    public void reHos31DaysPageExport(HttpServletResponse response, @RequestBody @Valid ReBeHosPageVO reBeHosPageVO) {
+        reHos31DaysManagementFacade.reHos31DaysPageExport(response, reBeHosPageVO);
+    }
+}

+ 59 - 0
report-service/src/main/java/com/lantone/report/web/TimelinessManagementController.java

@@ -0,0 +1,59 @@
+package com.lantone.report.web;
+
+import com.lantone.common.api.CommonResult;
+import com.lantone.common.dto.report.UnModifyMRDTO;
+import com.lantone.common.vo.report.FilterUnModifyMRVO;
+import com.lantone.report.facade.TimelinessManagementFacade;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+
+/**
+ * <p>
+ * 时效性管理统计相关API
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-04-27
+ */
+
+@RestController
+@RequestMapping("/console")
+@Api(value = "时效性管理统计相关API", tags = { "时效性管理统计相关API" })
+@SuppressWarnings("unchecked")
+public class TimelinessManagementController {
+    @Autowired
+    private TimelinessManagementFacade timelinessManagementFacade;
+
+    /**
+     * 时效性相关统计-报表
+     *
+     * @param filterUnModifyMRVO
+     * @return
+     */
+    @ApiOperation(value = "未整改病历统计[by:zhaops]")
+    @PostMapping("/unModifyMRStatistics")
+    public CommonResult<UnModifyMRDTO> unModifyMRStatistics(@RequestBody @Valid FilterUnModifyMRVO filterUnModifyMRVO) {
+        return CommonResult.success(timelinessManagementFacade.unModifyMRStatistics(filterUnModifyMRVO));
+    }
+
+    /**
+     * 时效性相关统计-报表导出
+     *
+     * @param filterUnModifyMRVO
+     * @return
+     */
+    @ApiOperation(value = "时效性相关统计-报表导出[by:zhaops]")
+    @PostMapping("/unModifyMRStatisticsExport")
+    public void unModifyMRStatisticsExport(HttpServletResponse response, @RequestBody @Valid FilterUnModifyMRVO filterUnModifyMRVO) {
+        timelinessManagementFacade.unModifyMRStatisticsExport(response, filterUnModifyMRVO);
+    }
+}

+ 1 - 1
report-service/src/main/resources/bootstrap.yml

@@ -36,7 +36,7 @@ management:
       show-details: always
 
 io.github.lvyahui8.spring:
-  base-packages: com.lantone.report.aggregate.LeaveHosStatisticsAggregate
+  base-packages: com.lantone.report.aggregate
   thread-number: 12
 
 feign: