Quellcode durchsuchen

Merge branch 'dev/20210120_2.0.1' into debug

chengyao vor 4 Jahren
Ursprung
Commit
46aeb25675

+ 151 - 0
src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java

@@ -1071,6 +1071,7 @@ public class ConsoleByDeptFacade {
         List<CaseScoreDTO>caseScoreDTOS= behospitalInfoFacade.getQualityCaseSorce(caseScoreVO);
         if(ListUtil.isNotEmpty(qualityControlDTOs)){
             qualityControlDTOs.forEach(qualityControlDTO->{
+                Double rePlaceTolScore = qualityControlDTO.getTotalScore();
                 StringBuffer admissionNote = new StringBuffer();
                 StringBuffer firstCourseNote = new StringBuffer();
                 StringBuffer dischargeNote = new StringBuffer();
@@ -1094,11 +1095,23 @@ public class ConsoleByDeptFacade {
                 Double courseRecordScoreOn = 0d;
                 Double courseRecordScoreTw = 0d;
                 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())) {
                             double targetScore =  Double.valueOf(df.format(caseScoreDTO.getScore()));
+
+                            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);
+
                             switch (caseScoreDTO.getModelId()) {
                                 case "1":
                                     String admissionMsg = caseScoreDTO.getMsg() + ";";
@@ -1204,6 +1217,9 @@ public class ConsoleByDeptFacade {
                             break;
                         }
                     };
+                    algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
+                    Double toltalScore = getScoreForCx(algorithmVO).doubleValue();
+                    qualityControlDTO.setTotalScore(toltalScore);
                     qualityControlDTO.setAdmissionNoteScoreOn(admissionNoteScoreOn);
                     qualityControlDTO.setAdmissionNoteScoreTw(admissionNoteScoreTw);
                     qualityControlDTO.setFirstCourseNoteScoreOn(firstCourseNoteScoreOn);
@@ -1332,6 +1348,7 @@ public class ConsoleByDeptFacade {
                     }
                     otherCaseScore =  Double.valueOf(df.format(otherScore));
                     qualityControlDTO.setOtherCaseScore(otherCaseScore == null ? 0d : otherCaseScore  );
+                    qualityControlDTO.setTotalScore(rePlaceTolScore);
                 }else{
                     QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
                     BeanUtil.copyProperties(qualityControlNullDTO,qualityControlDTO);
@@ -1601,6 +1618,140 @@ public class ConsoleByDeptFacade {
         behospitalPageVO.setUserId(Long.valueOf(SysUserUtils.getCurrentPrincipleID()));
     }
 
+    /**
+     * 评结果分数(长兴)
+     *
+     * @param algorithmVO 操作条目的所有信息
+     * @return 评结果分数
+     */
+    private BigDecimal getScoreForCx(AlgorithmVO algorithmVO) {
+        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);
+            }
+        }
+        List<MedQcresultCasesVO> medQcresultCasesVOList = new ArrayList<>();
+        //病案首页
+        AlgorithmVO homePage = new AlgorithmVO();
+        BeanUtil.copyProperties(algorithmVO, homePage);
+        homePage.setQcResultAlgVOList(qcResultAlgHomePage);
+        homePage.setIsHomePage(true);
+        BigDecimal homePageRes = cal(homePage);
+        String level = getHomePageLevel(homePageRes);
+        MedQcresultCasesVO medQcresultCasesVOHp = new MedQcresultCasesVO();
+        medQcresultCasesVOHp.setHospitalId(algorithmVO.getHospitalId());
+        medQcresultCasesVOHp.setBehospitalCode(algorithmVO.getBehospitalCode());
+        medQcresultCasesVOHp.setCasesId(243L);
+        medQcresultCasesVOHp.setScoreRes(homePageRes);
+        medQcresultCasesVOHp.setLevel(level);
+        medQcresultCasesVOList.add(medQcresultCasesVOHp);
+        //病案首页以外
+        AlgorithmVO homePageExt = new AlgorithmVO();
+        BeanUtil.copyProperties(algorithmVO, homePageExt);
+        homePageExt.setQcResultAlgVOList(qcResultAlgHomePageExt);
+        BigDecimal homePageExtRes = cal(homePageExt);
+        MedQcresultCasesVO medQcresultCasesVOHpExt = new MedQcresultCasesVO();
+        medQcresultCasesVOHpExt.setHospitalId(algorithmVO.getHospitalId());
+        medQcresultCasesVOHpExt.setBehospitalCode(algorithmVO.getBehospitalCode());
+        medQcresultCasesVOHpExt.setCasesId(0L);
+        medQcresultCasesVOHpExt.setScoreRes(homePageExtRes);
+        medQcresultCasesVOHpExt.setLevel("");
+        medQcresultCasesVOList.add(medQcresultCasesVOHpExt);
+        algorithmVO.setMedQcresultCasesVOList(medQcresultCasesVOList);
+        //计算分数
+        BigDecimal res = homePageRes
+                .add(homePageExtRes)
+                .multiply(new BigDecimal(100))
+                .divide(new BigDecimal(120), 2, RoundingMode.HALF_UP);
+        // 判断是否是百分制
+        if (sysHospitalSetFacade.getScoreType(algorithmVO.getHospitalId()).equals("1")
+                ||(algorithmVO.getHospitalId().intValue() == 1
+                && StringUtil.isNotBlank(algorithmVO.getIsPlacefile())
+                && algorithmVO.getIsPlacefile().equals("0"))) {
+            res = cal(algorithmVO);
+        }
+        return res;
+    }
 
+    /**
+     * 计算分数
+     *
+     * @param algorithmVO 操作条目的所有信息
+     * @return 评分分数
+     */
+    private BigDecimal cal(AlgorithmVO algorithmVO) {
+        BigDecimal res = new BigDecimal(100);
+        //统一为长兴的算法
+        if (algorithmVO.getIsHomePage().equals(true)) {
+            res = new BigDecimal(20);
+        }
+        //模块总分
+        Map<Long, BigDecimal> casesMap = new HashMap<>();
+        //单票否决计分
+        BigDecimal rejectScore = BigDecimal.ZERO;
+        //模块计分
+        Map<Long, BigDecimal> casesScoreMap = 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);
+                }
+                //单票否决计分
+                if (qcResultAlgVO.getIsReject().equals(1)) {
+                    rejectScore = rejectScore.add(qcResultAlgVO.getScore());
+                } else {
+                    //非单票否决计分
+                    if (casesScoreMap.containsKey(qcResultAlgVO.getCasesId())) {
+                        BigDecimal casesScore = casesScoreMap.get(qcResultAlgVO.getCasesId());
+                        casesScore = casesScore.add(qcResultAlgVO.getScore());
+                        casesScoreMap.put(qcResultAlgVO.getCasesId(), casesScore);
+                    }
+                }
+            }
+
+            //结果先减去单票否决计分总和
+            res = res.subtract(rejectScore);
+            //结果小于0按0计算
+            if (BigDecimalUtil.lt(res, BigDecimal.ZERO)) {
+                return BigDecimal.ZERO;
+            } else {
+                //模块计分
+                for (Map.Entry<Long, BigDecimal> casesScore : casesScoreMap.entrySet()) {
+                    BigDecimal allSccore = casesMap.get(casesScore.getKey());
+                    if (BigDecimalUtil.le(allSccore, casesScore.getValue())) {
+                        //模块标准分小于等于模块减分总和就用模块标准分
+                        res = res.subtract(allSccore);
+                    } else {
+                        //模块标准分大于模块减分总和就用模块减分总和
+                        res = res.subtract(casesScore.getValue());
+                    }
+                }
+            }
+            //结果小于0按0计算
+            if (BigDecimalUtil.lt(res, BigDecimal.ZERO)) {
+                res = BigDecimal.ZERO;
+            }
+        }
+        return res;
+    }
+    private String getHomePageLevel(BigDecimal score) {
+        String level = "不合格";
+        //得分≥18分为甲级
+        if (BigDecimalUtil.ge(score, new BigDecimal(18))) {
+            level = "合格";
+        }
+        return level;
+    }
 
 }

+ 154 - 2
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1257,13 +1257,13 @@ public class ConsoleFacade {
         behospitalPageSet(behospitalPageVO);
         DecimalFormat df=new DecimalFormat("0.0");
         IPage<QualityControlDTO> records = behospitalInfoFacade.getQualityControl(behospitalPageVO);
-      //  List<QualityControlDTO> qualityControlDTO = records.getRecords();
         List<QualityControlDTO> qualityControlDTOs = records.getRecords();
         CaseScoreVO caseScoreVO = new CaseScoreVO();
         BeanUtil.copyProperties(behospitalPageVO,caseScoreVO);
         List<CaseScoreDTO>caseScoreDTOS= behospitalInfoFacade.getQualityCaseSorce(caseScoreVO);
         if(ListUtil.isNotEmpty(qualityControlDTOs)){
         qualityControlDTOs.forEach(qualityControlDTO->{
+            Double rePlaceTolScore = qualityControlDTO.getTotalScore();
             StringBuffer admissionNote = new StringBuffer();
             StringBuffer firstCourseNote = new StringBuffer();
             StringBuffer dischargeNote = new StringBuffer();
@@ -1287,11 +1287,23 @@ public class ConsoleFacade {
             Double courseRecordScoreOn = 0d;
             Double courseRecordScoreTw = 0d;
             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())) {
                             double targetScore =  Double.valueOf(df.format(caseScoreDTO.getScore()));
+
+                            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);
+
                             switch (caseScoreDTO.getModelId()) {
                                 case "1":
                                     String admissionMsg = caseScoreDTO.getMsg() + ";";
@@ -1397,7 +1409,10 @@ public class ConsoleFacade {
                            break;
                         }
                     };
-             qualityControlDTO.setAdmissionNoteScoreOn(admissionNoteScoreOn);
+                algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
+                Double toltalScore = getScoreForCx(algorithmVO).doubleValue();
+                qualityControlDTO.setTotalScore(toltalScore);
+                qualityControlDTO.setAdmissionNoteScoreOn(admissionNoteScoreOn);
              qualityControlDTO.setAdmissionNoteScoreTw(admissionNoteScoreTw);
              qualityControlDTO.setFirstCourseNoteScoreOn(firstCourseNoteScoreOn);
              qualityControlDTO.setFirstCourseNoteScoreTw(firstCourseNoteScoreTw);
@@ -1525,6 +1540,7 @@ public class ConsoleFacade {
                 }
                 otherCaseScore =  Double.valueOf(df.format(otherScore));
                 qualityControlDTO.setOtherCaseScore(otherCaseScore == null ? 0d : otherCaseScore  );
+                qualityControlDTO.setTotalScore(rePlaceTolScore);
             }else{
                 QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
                 BeanUtil.copyProperties(qualityControlNullDTO,qualityControlDTO);
@@ -2632,5 +2648,141 @@ public class ConsoleFacade {
 
         return columns;
     }
+
+    /**
+     * 评结果分数(长兴)
+     *
+     * @param algorithmVO 操作条目的所有信息
+     * @return 评结果分数
+     */
+    private BigDecimal getScoreForCx(AlgorithmVO algorithmVO) {
+        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);
+            }
+        }
+        List<MedQcresultCasesVO> medQcresultCasesVOList = new ArrayList<>();
+        //病案首页
+        AlgorithmVO homePage = new AlgorithmVO();
+        BeanUtil.copyProperties(algorithmVO, homePage);
+        homePage.setQcResultAlgVOList(qcResultAlgHomePage);
+        homePage.setIsHomePage(true);
+        BigDecimal homePageRes = cal(homePage);
+        String level = getHomePageLevel(homePageRes);
+        MedQcresultCasesVO medQcresultCasesVOHp = new MedQcresultCasesVO();
+        medQcresultCasesVOHp.setHospitalId(algorithmVO.getHospitalId());
+        medQcresultCasesVOHp.setBehospitalCode(algorithmVO.getBehospitalCode());
+        medQcresultCasesVOHp.setCasesId(243L);
+        medQcresultCasesVOHp.setScoreRes(homePageRes);
+        medQcresultCasesVOHp.setLevel(level);
+        medQcresultCasesVOList.add(medQcresultCasesVOHp);
+        //病案首页以外
+        AlgorithmVO homePageExt = new AlgorithmVO();
+        BeanUtil.copyProperties(algorithmVO, homePageExt);
+        homePageExt.setQcResultAlgVOList(qcResultAlgHomePageExt);
+        BigDecimal homePageExtRes = cal(homePageExt);
+        MedQcresultCasesVO medQcresultCasesVOHpExt = new MedQcresultCasesVO();
+        medQcresultCasesVOHpExt.setHospitalId(algorithmVO.getHospitalId());
+        medQcresultCasesVOHpExt.setBehospitalCode(algorithmVO.getBehospitalCode());
+        medQcresultCasesVOHpExt.setCasesId(0L);
+        medQcresultCasesVOHpExt.setScoreRes(homePageExtRes);
+        medQcresultCasesVOHpExt.setLevel("");
+        medQcresultCasesVOList.add(medQcresultCasesVOHpExt);
+        algorithmVO.setMedQcresultCasesVOList(medQcresultCasesVOList);
+        //计算分数
+        BigDecimal res = homePageRes
+                .add(homePageExtRes)
+                .multiply(new BigDecimal(100))
+                .divide(new BigDecimal(120), 2, RoundingMode.HALF_UP);
+        // 判断是否是百分制
+        if (sysHospitalSetFacade.getScoreType(algorithmVO.getHospitalId()).equals("1")
+                ||(algorithmVO.getHospitalId().intValue() == 1
+                && StringUtil.isNotBlank(algorithmVO.getIsPlacefile())
+                && algorithmVO.getIsPlacefile().equals("0"))) {
+            res = cal(algorithmVO);
+        }
+        return res;
+    }
+
+    /**
+     * 计算分数
+     *
+     * @param algorithmVO 操作条目的所有信息
+     * @return 评分分数
+     */
+    private BigDecimal cal(AlgorithmVO algorithmVO) {
+        BigDecimal res = new BigDecimal(100);
+        //统一为长兴的算法
+        if (algorithmVO.getIsHomePage().equals(true)) {
+            res = new BigDecimal(20);
+        }
+        //模块总分
+        Map<Long, BigDecimal> casesMap = new HashMap<>();
+        //单票否决计分
+        BigDecimal rejectScore = BigDecimal.ZERO;
+        //模块计分
+        Map<Long, BigDecimal> casesScoreMap = 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);
+                }
+                //单票否决计分
+                if (qcResultAlgVO.getIsReject().equals(1)) {
+                    rejectScore = rejectScore.add(qcResultAlgVO.getScore());
+                } else {
+                    //非单票否决计分
+                    if (casesScoreMap.containsKey(qcResultAlgVO.getCasesId())) {
+                        BigDecimal casesScore = casesScoreMap.get(qcResultAlgVO.getCasesId());
+                        casesScore = casesScore.add(qcResultAlgVO.getScore());
+                        casesScoreMap.put(qcResultAlgVO.getCasesId(), casesScore);
+                    }
+                }
+            }
+
+            //结果先减去单票否决计分总和
+            res = res.subtract(rejectScore);
+            //结果小于0按0计算
+            if (BigDecimalUtil.lt(res, BigDecimal.ZERO)) {
+                return BigDecimal.ZERO;
+            } else {
+                //模块计分
+                for (Map.Entry<Long, BigDecimal> casesScore : casesScoreMap.entrySet()) {
+                    BigDecimal allSccore = casesMap.get(casesScore.getKey());
+                    if (BigDecimalUtil.le(allSccore, casesScore.getValue())) {
+                        //模块标准分小于等于模块减分总和就用模块标准分
+                        res = res.subtract(allSccore);
+                    } else {
+                        //模块标准分大于模块减分总和就用模块减分总和
+                        res = res.subtract(casesScore.getValue());
+                    }
+                }
+            }
+            //结果小于0按0计算
+            if (BigDecimalUtil.lt(res, BigDecimal.ZERO)) {
+                res = BigDecimal.ZERO;
+            }
+        }
+        return res;
+    }
+    private String getHomePageLevel(BigDecimal score) {
+        String level = "不合格";
+        //得分≥18分为甲级
+        if (BigDecimalUtil.ge(score, new BigDecimal(18))) {
+            level = "合格";
+        }
+        return level;
+    }
 }
 

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

@@ -300,7 +300,7 @@
 -->
 
     <select id="getQualityCaseSorce" resultType="com.diagbot.dto.CaseScoreDTO">
-     SELECT c.behospital_code as behospitalCode,a.mode_id as modelId,c.score,c.cases_score as casesScore,c.msg,c.is_reject as isReject
+     SELECT  a.cases_id as casesId,c.cases_entry_id as casesEntryId,c.behospital_code as behospitalCode,a.mode_id as modelId,c.score,c.cases_score as casesScore,c.msg,c.is_reject as isReject
         FROM `qc_cases_entry` a, med_qcresult_detail c,med_behospital_info e
         where a.is_deleted = 'N' and c.is_deleted = 'N'AND e.is_deleted = 'N'
         and a.id = c.cases_entry_id
@@ -333,7 +333,7 @@
     </select>
 
     <select id="getQualityCaseSorceByDept" resultType="com.diagbot.dto.CaseScoreDTO">
-        SELECT c.behospital_code as behospitalCode,a.mode_id as modelId,c.score,c.cases_score as casesScore,c.msg,c.is_reject as isReject
+        SELECT a.cases_id as casesId,c.cases_entry_id as casesEntryId,c.behospital_code as behospitalCode,a.mode_id as modelId,c.score,c.cases_score as casesScore,c.msg,c.is_reject as isReject
         FROM `qc_cases_entry` a, med_qcresult_detail c,sys_user_dept d,med_behospital_info e
         where a.is_deleted = 'N' and c.is_deleted = 'N' AND d.is_deleted = 'N' AND e.is_deleted = 'N'
         and a.id = c.cases_entry_id