|
@@ -9,12 +9,14 @@ import com.diagbot.aggregate.ResultStatisticsAggregate;
|
|
|
import com.diagbot.dto.*;
|
|
|
import com.diagbot.entity.QcCasesEntry;
|
|
|
import com.diagbot.entity.SysHospitalSet;
|
|
|
+import com.diagbot.enums.IsDeleteEnum;
|
|
|
import com.diagbot.exception.CommonErrorCode;
|
|
|
import com.diagbot.exception.CommonException;
|
|
|
import com.diagbot.util.*;
|
|
|
import com.diagbot.vo.*;
|
|
|
import com.google.common.collect.Lists;
|
|
|
import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.ibatis.annotations.Param;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
@@ -1251,13 +1253,605 @@ public class ConsoleFacade {
|
|
|
* @param behospitalPageVO
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<QualityControlDTO> getQualityControl(BehospitalPageVO behospitalPageVO) {
|
|
|
+ public IPage<QualityControlDTO> getQualityControl(BehospitalPageVO behospitalPageVO) {
|
|
|
behospitalPageSet(behospitalPageVO);
|
|
|
- // QualityCaseScoreDTO qualityCaseScoreDTO = behospitalInfoFacade.getQualityCaseSorce(behospitalPageVO);
|
|
|
- List<QualityControlDTO> records = behospitalInfoFacade.getQualityControl(behospitalPageVO);
|
|
|
+ DecimalFormat df=new DecimalFormat("0.0");
|
|
|
+ IPage<QualityControlDTO> records = behospitalInfoFacade.getQualityControl(behospitalPageVO);
|
|
|
+ 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();
|
|
|
+ StringBuffer medHomePage = new StringBuffer();
|
|
|
+ StringBuffer docAdviceNote = new StringBuffer();
|
|
|
+ StringBuffer operationInfo = new StringBuffer();
|
|
|
+ StringBuffer courseRecord = new StringBuffer();
|
|
|
+ StringBuffer otherCase = new StringBuffer();
|
|
|
+ Double admissionNoteScoreOn = 0d;
|
|
|
+ Double admissionNoteScoreTw = 0d;
|
|
|
+ Double firstCourseNoteScoreOn = 0d;
|
|
|
+ Double firstCourseNoteScoreTw = 0d;
|
|
|
+ Double dischargeNoteScoreOn = 0d;
|
|
|
+ Double dischargeNoteScoreTw = 0d;
|
|
|
+ Double medHomePageScoreOn = 0d;
|
|
|
+ Double medHomePageScoreTw = 0d;
|
|
|
+ Double docAdviceNoteScoreOn = 0d;
|
|
|
+ Double docAdviceNoteScoreTw = 0d;
|
|
|
+ Double operationInfoScoreOn = 0d;
|
|
|
+ Double operationInfoScoreTw = 0d;
|
|
|
+ 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() + ";";
|
|
|
+ admissionNote.append(admissionMsg);
|
|
|
+ //对单个modeId进行扣分总和计算
|
|
|
+ //非单项否决总分
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ admissionNoteScoreOn += targetScore;
|
|
|
+ admissionNoteScoreOn = Double.valueOf(df.format(admissionNoteScoreOn));
|
|
|
+ }
|
|
|
+
|
|
|
+ //扣分总和
|
|
|
+ admissionNoteScoreTw += targetScore;
|
|
|
+ admissionNoteScoreTw = Double.valueOf(df.format(admissionNoteScoreTw));
|
|
|
+ qualityControlDTO.setAdmissionNoteTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ String firstCourseNoteMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ firstCourseNote.append(firstCourseNoteMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ firstCourseNoteScoreOn +=targetScore;
|
|
|
+ firstCourseNoteScoreOn = Double.valueOf(df.format(firstCourseNoteScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ firstCourseNoteScoreTw += targetScore;
|
|
|
+ firstCourseNoteScoreTw = Double.valueOf(df.format(firstCourseNoteScoreTw));
|
|
|
+ qualityControlDTO.setFirstCourseNoteTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "5":
|
|
|
+ String dischargeNoteMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ dischargeNote.append(dischargeNoteMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ dischargeNoteScoreOn += targetScore;
|
|
|
+ dischargeNoteScoreOn = Double.valueOf(df.format(dischargeNoteScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ dischargeNoteScoreTw += targetScore;
|
|
|
+ dischargeNoteScoreTw = Double.valueOf(df.format(dischargeNoteScoreTw));
|
|
|
+ qualityControlDTO.setDischargeNoteTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "6":
|
|
|
+ String medHomePageMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ medHomePage.append(medHomePageMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ medHomePageScoreOn += targetScore;
|
|
|
+ medHomePageScoreOn = Double.valueOf(df.format(medHomePageScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ medHomePageScoreTw += targetScore;
|
|
|
+ medHomePageScoreTw = Double.valueOf(df.format(medHomePageScoreTw));
|
|
|
+ qualityControlDTO.setMedHomePageTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "8":
|
|
|
+ String docAdviceNoteMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ docAdviceNote.append(docAdviceNoteMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ docAdviceNoteScoreOn += targetScore;
|
|
|
+ docAdviceNoteScoreOn = Double.valueOf(df.format(docAdviceNoteScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ docAdviceNoteScoreTw += targetScore;
|
|
|
+ docAdviceNoteScoreTw = Double.valueOf(df.format(docAdviceNoteScoreTw));
|
|
|
+ qualityControlDTO.setDocAdviceNoteTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "17":
|
|
|
+ String operationInfoMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ operationInfo.append(operationInfoMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ operationInfoScoreOn += targetScore;
|
|
|
+ operationInfoScoreOn = Double.valueOf(df.format(operationInfoScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ operationInfoScoreTw += targetScore;
|
|
|
+ operationInfoScoreTw = Double.valueOf(df.format(operationInfoScoreTw));
|
|
|
+ qualityControlDTO.setOperationInfoTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "56":
|
|
|
+ String courseRecordMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ courseRecord.append(courseRecordMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ courseRecordScoreOn += targetScore;
|
|
|
+ courseRecordScoreOn = Double.valueOf(df.format(courseRecordScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ courseRecordScoreTw += targetScore;
|
|
|
+ courseRecordScoreTw = Double.valueOf(df.format(courseRecordScoreTw));
|
|
|
+ qualityControlDTO.setCourseRecordTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ String modelId = caseScoreDTO.getModelId();
|
|
|
+ if(!(modelId.equals("1")||modelId.equals("2")||modelId.equals("5")||modelId.equals("6")||
|
|
|
+ modelId.equals("8")||modelId.equals("17")||modelId.equals("56"))){
|
|
|
+ String otherCaseMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ otherCase.append(otherCaseMsg);
|
|
|
+ }
|
|
|
+ //未评分
|
|
|
+ }
|
|
|
+ if(StringUtils.isEmpty(caseScoreDTO.getBehospitalCode())){
|
|
|
+ QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
|
|
|
+ BeanUtil.copyProperties(qualityControlNullDTO,qualityControlDTO);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
|
|
|
+ Double toltalScore = getScoreForCx(algorithmVO).doubleValue();
|
|
|
+ qualityControlDTO.setTotalScore(toltalScore);
|
|
|
+ qualityControlDTO.setAdmissionNoteScoreOn(admissionNoteScoreOn);
|
|
|
+ qualityControlDTO.setAdmissionNoteScoreTw(admissionNoteScoreTw);
|
|
|
+ qualityControlDTO.setFirstCourseNoteScoreOn(firstCourseNoteScoreOn);
|
|
|
+ qualityControlDTO.setFirstCourseNoteScoreTw(firstCourseNoteScoreTw);
|
|
|
+ qualityControlDTO.setDischargeNoteScoreOn(dischargeNoteScoreOn);
|
|
|
+ qualityControlDTO.setDischargeNoteScoreTw(dischargeNoteScoreTw);
|
|
|
+ qualityControlDTO.setMedHomePageScoreOn(medHomePageScoreOn);
|
|
|
+ qualityControlDTO.setMedHomePageScoreTw(medHomePageScoreTw);
|
|
|
+ qualityControlDTO.setDocAdviceNoteScoreOn(docAdviceNoteScoreOn);
|
|
|
+ qualityControlDTO.setDocAdviceNoteScoreTw(docAdviceNoteScoreTw);
|
|
|
+ qualityControlDTO.setOperationInfoScoreOn(operationInfoScoreOn);
|
|
|
+ qualityControlDTO.setOperationInfoScoreTw(operationInfoScoreTw);
|
|
|
+ qualityControlDTO.setCourseRecordScoreOn(courseRecordScoreOn);
|
|
|
+ qualityControlDTO.setCourseRecordScoreTw(courseRecordScoreTw);
|
|
|
+
|
|
|
+ String admissionNoteString = StringUtils.isEmpty(admissionNote) == true ?"无缺陷" : admissionNote.toString().substring(0, admissionNote.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setAdmissionNote(admissionNoteString);
|
|
|
+ String firstCourseNoteString = StringUtils.isEmpty(firstCourseNote) == true ?"无缺陷" :firstCourseNote.toString().substring(0, firstCourseNote.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setFirstCourseNote(firstCourseNoteString);
|
|
|
+ String dischargeNoteString = StringUtils.isEmpty(dischargeNote) == true ?"无缺陷" : dischargeNote.toString().substring(0, dischargeNote.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setDischargeNote(dischargeNoteString);
|
|
|
+ String medHomePageString = StringUtils.isEmpty(medHomePage) == true ?"无缺陷" : medHomePage.toString().substring(0, medHomePage.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setMedHomePage(medHomePageString);
|
|
|
+ String docAdviceNoteString = StringUtils.isEmpty(docAdviceNote) == true ?"无缺陷" : docAdviceNote.toString().substring(0, docAdviceNote.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setDocAdviceNote(docAdviceNoteString);
|
|
|
+ String operationInfoString = StringUtils.isEmpty(operationInfo) == true ?"无缺陷" : operationInfo.toString().substring(0, operationInfo.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setOperationInfo(operationInfoString);
|
|
|
+ String courseRecordString = StringUtils.isEmpty(courseRecord) == true ?"无缺陷" : courseRecord.toString().substring(0, courseRecord.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setCourseRecord(courseRecordString);
|
|
|
+ String otherCaseString = StringUtils.isEmpty(otherCase) == true ?"无缺陷" : otherCase.toString().substring(0, otherCase.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setOtherCase(otherCaseString);
|
|
|
+
|
|
|
+
|
|
|
+ for (CaseScoreDTO caseScoreDTO : caseScoreDTOS) {
|
|
|
+ if (StringUtils.isNotEmpty(qualityControlDTO.getBehospitalCode())&&
|
|
|
+ StringUtils.isNotEmpty(caseScoreDTO.getBehospitalCode())&&
|
|
|
+ qualityControlDTO.getBehospitalCode().equals(caseScoreDTO.getBehospitalCode())) {
|
|
|
+ switch (caseScoreDTO.getModelId()) {
|
|
|
+ case "1":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((admissionNoteScoreOn-qualityControlDTO.getAdmissionNoteTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setAdmissionNoteScore(qualityControlDTO.getAdmissionNoteTolScore()+(admissionNoteScoreTw-admissionNoteScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setAdmissionNoteScore(admissionNoteScoreOn+(admissionNoteScoreTw-admissionNoteScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((firstCourseNoteScoreOn-qualityControlDTO.getFirstCourseNoteTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setFirstCourseNoteScore(qualityControlDTO.getFirstCourseNoteTolScore()+(firstCourseNoteScoreTw-firstCourseNoteScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setFirstCourseNoteScore(firstCourseNoteScoreOn+(firstCourseNoteScoreTw-firstCourseNoteScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "5":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((dischargeNoteScoreOn-qualityControlDTO.getDischargeNoteTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setDischargeNoteScore(qualityControlDTO.getDischargeNoteTolScore()+(dischargeNoteScoreTw-dischargeNoteScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setDischargeNoteScore(dischargeNoteScoreOn+(dischargeNoteScoreTw-dischargeNoteScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "6":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((medHomePageScoreOn-qualityControlDTO.getMedHomePageTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setMedHomePageScore(qualityControlDTO.getMedHomePageTolScore()+(medHomePageScoreTw-medHomePageScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setMedHomePageScore(medHomePageScoreOn+(medHomePageScoreTw-medHomePageScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "8":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((docAdviceNoteScoreOn-qualityControlDTO.getDocAdviceNoteTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setDocAdviceNoteScore(qualityControlDTO.getDocAdviceNoteTolScore()+(docAdviceNoteScoreTw-docAdviceNoteScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setDocAdviceNoteScore(docAdviceNoteScoreOn+(docAdviceNoteScoreTw-docAdviceNoteScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "17":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((operationInfoScoreOn-qualityControlDTO.getOperationInfoTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setOperationInfoScore(qualityControlDTO.getOperationInfoTolScore()+(operationInfoScoreTw-operationInfoScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setOperationInfoScore(operationInfoScoreOn+(operationInfoScoreTw-operationInfoScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "56":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((courseRecordScoreOn-qualityControlDTO.getCourseRecordTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setCourseRecordScore(qualityControlDTO.getCourseRecordTolScore()+(courseRecordScoreTw-courseRecordScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setCourseRecordScore(courseRecordScoreOn+(courseRecordScoreTw-courseRecordScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ } if(StringUtils.isEmpty(caseScoreDTO.getBehospitalCode())){
|
|
|
+ QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
|
|
|
+ BeanUtil.copyProperties(qualityControlNullDTO,qualityControlDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+ };
|
|
|
+ Double otherScore = new Double(0d);
|
|
|
+ Double mainScore = new Double(0d);
|
|
|
+ Double otherCaseScore = null;
|
|
|
+ Double res = new Double(120d);
|
|
|
+ Double resPr = new Double(100d);
|
|
|
+ String scoreType = "0";
|
|
|
+ mainScore = qualityControlDTO.getMedHomePageScore()+qualityControlDTO.getAdmissionNoteScore()+qualityControlDTO.getFirstCourseNoteScore()+
|
|
|
+ qualityControlDTO.getCourseRecordScore()+qualityControlDTO.getOperationInfoScore()+qualityControlDTO.getDischargeNoteScore()+qualityControlDTO. getDocAdviceNoteScore();
|
|
|
+ scoreType = sysHospitalSetFacade.getScoreType(behospitalPageVO.getHospitalId());
|
|
|
+ if ("1".equals(scoreType)) {
|
|
|
+ otherScore = (resPr-qualityControlDTO.getTotalScore()-mainScore);
|
|
|
+ } else if ("0".equals(scoreType)) {
|
|
|
+ otherScore = res-(qualityControlDTO.getTotalScore()*res/resPr)-mainScore;
|
|
|
+ }
|
|
|
+ otherCaseScore = Double.valueOf(df.format(otherScore));
|
|
|
+ qualityControlDTO.setOtherCaseScore(otherCaseScore == null ? 0d : otherCaseScore );
|
|
|
+ qualityControlDTO.setTotalScore(rePlaceTolScore);
|
|
|
+ }else{
|
|
|
+ QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
|
|
|
+ BeanUtil.copyProperties(qualityControlNullDTO,qualityControlDTO);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ };
|
|
|
return records;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 病历质控报表-科室
|
|
|
+ *
|
|
|
+ * @param behospitalPageVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public IPage<QualityControlDTO> getQualityControlExport(BehospitalPageVO behospitalPageVO) {
|
|
|
+ behospitalPageSet(behospitalPageVO);
|
|
|
+ DecimalFormat df=new DecimalFormat("0.0");
|
|
|
+ IPage<QualityControlDTO> records = behospitalInfoFacade.getQualityControl(behospitalPageVO);
|
|
|
+ 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();
|
|
|
+ StringBuffer medHomePage = new StringBuffer();
|
|
|
+ StringBuffer docAdviceNote = new StringBuffer();
|
|
|
+ StringBuffer operationInfo = new StringBuffer();
|
|
|
+ StringBuffer courseRecord = new StringBuffer();
|
|
|
+ StringBuffer otherCase = new StringBuffer();
|
|
|
+ Double admissionNoteScoreOn = 0d;
|
|
|
+ Double admissionNoteScoreTw = 0d;
|
|
|
+ Double firstCourseNoteScoreOn = 0d;
|
|
|
+ Double firstCourseNoteScoreTw = 0d;
|
|
|
+ Double dischargeNoteScoreOn = 0d;
|
|
|
+ Double dischargeNoteScoreTw = 0d;
|
|
|
+ Double medHomePageScoreOn = 0d;
|
|
|
+ Double medHomePageScoreTw = 0d;
|
|
|
+ Double docAdviceNoteScoreOn = 0d;
|
|
|
+ Double docAdviceNoteScoreTw = 0d;
|
|
|
+ Double operationInfoScoreOn = 0d;
|
|
|
+ Double operationInfoScoreTw = 0d;
|
|
|
+ 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() + ";";
|
|
|
+ admissionNote.append(admissionMsg);
|
|
|
+ //对单个modeId进行扣分总和计算
|
|
|
+ //非单项否决总分
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ admissionNoteScoreOn += targetScore;
|
|
|
+ admissionNoteScoreOn = Double.valueOf(df.format(admissionNoteScoreOn));
|
|
|
+ }
|
|
|
+
|
|
|
+ //扣分总和
|
|
|
+ admissionNoteScoreTw += targetScore;
|
|
|
+ admissionNoteScoreTw = Double.valueOf(df.format(admissionNoteScoreTw));
|
|
|
+ qualityControlDTO.setAdmissionNoteTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ String firstCourseNoteMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ firstCourseNote.append(firstCourseNoteMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ firstCourseNoteScoreOn +=targetScore;
|
|
|
+ firstCourseNoteScoreOn = Double.valueOf(df.format(firstCourseNoteScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ firstCourseNoteScoreTw += targetScore;
|
|
|
+ firstCourseNoteScoreTw = Double.valueOf(df.format(firstCourseNoteScoreTw));
|
|
|
+ qualityControlDTO.setFirstCourseNoteTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "5":
|
|
|
+ String dischargeNoteMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ dischargeNote.append(dischargeNoteMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ dischargeNoteScoreOn += targetScore;
|
|
|
+ dischargeNoteScoreOn = Double.valueOf(df.format(dischargeNoteScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ dischargeNoteScoreTw += targetScore;
|
|
|
+ dischargeNoteScoreTw = Double.valueOf(df.format(dischargeNoteScoreTw));
|
|
|
+ qualityControlDTO.setDischargeNoteTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "6":
|
|
|
+ String medHomePageMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ medHomePage.append(medHomePageMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ medHomePageScoreOn += targetScore;
|
|
|
+ medHomePageScoreOn = Double.valueOf(df.format(medHomePageScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ medHomePageScoreTw += targetScore;
|
|
|
+ medHomePageScoreTw = Double.valueOf(df.format(medHomePageScoreTw));
|
|
|
+ qualityControlDTO.setMedHomePageTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "8":
|
|
|
+ String docAdviceNoteMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ docAdviceNote.append(docAdviceNoteMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ docAdviceNoteScoreOn += targetScore;
|
|
|
+ docAdviceNoteScoreOn = Double.valueOf(df.format(docAdviceNoteScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ docAdviceNoteScoreTw += targetScore;
|
|
|
+ docAdviceNoteScoreTw = Double.valueOf(df.format(docAdviceNoteScoreTw));
|
|
|
+ qualityControlDTO.setDocAdviceNoteTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "17":
|
|
|
+ String operationInfoMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ operationInfo.append(operationInfoMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ operationInfoScoreOn += targetScore;
|
|
|
+ operationInfoScoreOn = Double.valueOf(df.format(operationInfoScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ operationInfoScoreTw += targetScore;
|
|
|
+ operationInfoScoreTw = Double.valueOf(df.format(operationInfoScoreTw));
|
|
|
+ qualityControlDTO.setOperationInfoTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+ case "56":
|
|
|
+ String courseRecordMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ courseRecord.append(courseRecordMsg);
|
|
|
+ if (caseScoreDTO.getIsReject().equals("0")) {
|
|
|
+ courseRecordScoreOn += targetScore;
|
|
|
+ courseRecordScoreOn = Double.valueOf(df.format(courseRecordScoreOn));
|
|
|
+ }
|
|
|
+ //扣分总和
|
|
|
+ courseRecordScoreTw += targetScore;
|
|
|
+ courseRecordScoreTw = Double.valueOf(df.format(courseRecordScoreTw));
|
|
|
+ qualityControlDTO.setCourseRecordTolScore(caseScoreDTO.getCasesScore());
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ String modelId = caseScoreDTO.getModelId();
|
|
|
+ if(!(modelId.equals("1")||modelId.equals("2")||modelId.equals("5")||modelId.equals("6")||
|
|
|
+ modelId.equals("8")||modelId.equals("17")||modelId.equals("56"))){
|
|
|
+ String otherCaseMsg = caseScoreDTO.getMsg() + ";";
|
|
|
+ otherCase.append(otherCaseMsg);
|
|
|
+ }
|
|
|
+ //未评分
|
|
|
+ }
|
|
|
+ if(StringUtils.isEmpty(caseScoreDTO.getBehospitalCode())){
|
|
|
+ QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
|
|
|
+ BeanUtil.copyProperties(qualityControlNullDTO,qualityControlDTO);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
|
|
|
+ Double toltalScore = getScoreForCx(algorithmVO).doubleValue();
|
|
|
+ qualityControlDTO.setTotalScore(toltalScore);
|
|
|
+ qualityControlDTO.setAdmissionNoteScoreOn(admissionNoteScoreOn);
|
|
|
+ qualityControlDTO.setAdmissionNoteScoreTw(admissionNoteScoreTw);
|
|
|
+ qualityControlDTO.setFirstCourseNoteScoreOn(firstCourseNoteScoreOn);
|
|
|
+ qualityControlDTO.setFirstCourseNoteScoreTw(firstCourseNoteScoreTw);
|
|
|
+ qualityControlDTO.setDischargeNoteScoreOn(dischargeNoteScoreOn);
|
|
|
+ qualityControlDTO.setDischargeNoteScoreTw(dischargeNoteScoreTw);
|
|
|
+ qualityControlDTO.setMedHomePageScoreOn(medHomePageScoreOn);
|
|
|
+ qualityControlDTO.setMedHomePageScoreTw(medHomePageScoreTw);
|
|
|
+ qualityControlDTO.setDocAdviceNoteScoreOn(docAdviceNoteScoreOn);
|
|
|
+ qualityControlDTO.setDocAdviceNoteScoreTw(docAdviceNoteScoreTw);
|
|
|
+ qualityControlDTO.setOperationInfoScoreOn(operationInfoScoreOn);
|
|
|
+ qualityControlDTO.setOperationInfoScoreTw(operationInfoScoreTw);
|
|
|
+ qualityControlDTO.setCourseRecordScoreOn(courseRecordScoreOn);
|
|
|
+ qualityControlDTO.setCourseRecordScoreTw(courseRecordScoreTw);
|
|
|
+
|
|
|
+ String admissionNoteString = StringUtils.isEmpty(admissionNote) == true ?"无缺陷" : admissionNote.toString().substring(0, admissionNote.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setAdmissionNote(admissionNoteString);
|
|
|
+ String firstCourseNoteString = StringUtils.isEmpty(firstCourseNote) == true ?"无缺陷" :firstCourseNote.toString().substring(0, firstCourseNote.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setFirstCourseNote(firstCourseNoteString);
|
|
|
+ String dischargeNoteString = StringUtils.isEmpty(dischargeNote) == true ?"无缺陷" : dischargeNote.toString().substring(0, dischargeNote.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setDischargeNote(dischargeNoteString);
|
|
|
+ String medHomePageString = StringUtils.isEmpty(medHomePage) == true ?"无缺陷" : medHomePage.toString().substring(0, medHomePage.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setMedHomePage(medHomePageString);
|
|
|
+ String docAdviceNoteString = StringUtils.isEmpty(docAdviceNote) == true ?"无缺陷" : docAdviceNote.toString().substring(0, docAdviceNote.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setDocAdviceNote(docAdviceNoteString);
|
|
|
+ String operationInfoString = StringUtils.isEmpty(operationInfo) == true ?"无缺陷" : operationInfo.toString().substring(0, operationInfo.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setOperationInfo(operationInfoString);
|
|
|
+ String courseRecordString = StringUtils.isEmpty(courseRecord) == true ?"无缺陷" : courseRecord.toString().substring(0, courseRecord.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setCourseRecord(courseRecordString);
|
|
|
+ String otherCaseString = StringUtils.isEmpty(otherCase) == true ?"无缺陷" : otherCase.toString().substring(0, otherCase.toString().lastIndexOf(";"));
|
|
|
+ qualityControlDTO.setOtherCase(otherCaseString);
|
|
|
+
|
|
|
+
|
|
|
+ for (CaseScoreDTO caseScoreDTO : caseScoreDTOS) {
|
|
|
+ if (StringUtils.isNotEmpty(qualityControlDTO.getBehospitalCode())&&
|
|
|
+ StringUtils.isNotEmpty(caseScoreDTO.getBehospitalCode())&&
|
|
|
+ qualityControlDTO.getBehospitalCode().equals(caseScoreDTO.getBehospitalCode())) {
|
|
|
+ switch (caseScoreDTO.getModelId()) {
|
|
|
+ case "1":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((admissionNoteScoreOn-qualityControlDTO.getAdmissionNoteTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setAdmissionNoteScore(qualityControlDTO.getAdmissionNoteTolScore()+(admissionNoteScoreTw-admissionNoteScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setAdmissionNoteScore(admissionNoteScoreOn+(admissionNoteScoreTw-admissionNoteScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((firstCourseNoteScoreOn-qualityControlDTO.getFirstCourseNoteTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setFirstCourseNoteScore(qualityControlDTO.getFirstCourseNoteTolScore()+(firstCourseNoteScoreTw-firstCourseNoteScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setFirstCourseNoteScore(firstCourseNoteScoreOn+(firstCourseNoteScoreTw-firstCourseNoteScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "5":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((dischargeNoteScoreOn-qualityControlDTO.getDischargeNoteTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setDischargeNoteScore(qualityControlDTO.getDischargeNoteTolScore()+(dischargeNoteScoreTw-dischargeNoteScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setDischargeNoteScore(dischargeNoteScoreOn+(dischargeNoteScoreTw-dischargeNoteScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "6":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((medHomePageScoreOn-qualityControlDTO.getMedHomePageTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setMedHomePageScore(qualityControlDTO.getMedHomePageTolScore()+(medHomePageScoreTw-medHomePageScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setMedHomePageScore(medHomePageScoreOn+(medHomePageScoreTw-medHomePageScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "8":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((docAdviceNoteScoreOn-qualityControlDTO.getDocAdviceNoteTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setDocAdviceNoteScore(qualityControlDTO.getDocAdviceNoteTolScore()+(docAdviceNoteScoreTw-docAdviceNoteScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setDocAdviceNoteScore(docAdviceNoteScoreOn+(docAdviceNoteScoreTw-docAdviceNoteScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "17":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((operationInfoScoreOn-qualityControlDTO.getOperationInfoTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setOperationInfoScore(qualityControlDTO.getOperationInfoTolScore()+(operationInfoScoreTw-operationInfoScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setOperationInfoScore(operationInfoScoreOn+(operationInfoScoreTw-operationInfoScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "56":
|
|
|
+ // 非单项否决总扣分大于扣分总和
|
|
|
+ if((courseRecordScoreOn-qualityControlDTO.getCourseRecordTolScore())>=0){
|
|
|
+ //扣分总和+单项否决总分
|
|
|
+ qualityControlDTO.setCourseRecordScore(qualityControlDTO.getCourseRecordTolScore()+(courseRecordScoreTw-courseRecordScoreOn));
|
|
|
+ }else{
|
|
|
+ qualityControlDTO.setCourseRecordScore(courseRecordScoreOn+(courseRecordScoreTw-courseRecordScoreOn));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ } if(StringUtils.isEmpty(caseScoreDTO.getBehospitalCode())){
|
|
|
+ QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
|
|
|
+ BeanUtil.copyProperties(qualityControlNullDTO,qualityControlDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+ };
|
|
|
+ Double otherScore = new Double(0d);
|
|
|
+ Double mainScore = new Double(0d);
|
|
|
+ Double otherCaseScore = null;
|
|
|
+ Double res = new Double(120d);
|
|
|
+ Double resPr = new Double(100d);
|
|
|
+ String scoreType = "0";
|
|
|
+ mainScore = qualityControlDTO.getMedHomePageScore()+qualityControlDTO.getAdmissionNoteScore()+qualityControlDTO.getFirstCourseNoteScore()+
|
|
|
+ qualityControlDTO.getCourseRecordScore()+qualityControlDTO.getOperationInfoScore()+qualityControlDTO.getDischargeNoteScore()+qualityControlDTO. getDocAdviceNoteScore();
|
|
|
+ scoreType = sysHospitalSetFacade.getScoreType(behospitalPageVO.getHospitalId());
|
|
|
+ if ("1".equals(scoreType)) {
|
|
|
+ otherScore = (resPr-qualityControlDTO.getTotalScore()-mainScore);
|
|
|
+ } else if ("0".equals(scoreType)) {
|
|
|
+ otherScore = res-(qualityControlDTO.getTotalScore()*res/resPr)-mainScore;
|
|
|
+ }
|
|
|
+ otherCaseScore = Double.valueOf(df.format(otherScore));
|
|
|
+ qualityControlDTO.setOtherCaseScore(otherCaseScore == null ? 0d : otherCaseScore );
|
|
|
+ qualityControlDTO.setTotalScore(rePlaceTolScore);
|
|
|
+ }else{
|
|
|
+ QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
|
|
|
+ BeanUtil.copyProperties(qualityControlNullDTO,qualityControlDTO);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ };
|
|
|
+ return records;
|
|
|
+ }
|
|
|
private void behospitalPageSet(BehospitalPageVO behospitalPageVO) {
|
|
|
//入参验证
|
|
|
//入院时间
|
|
@@ -2226,5 +2820,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;
|
|
|
+ }
|
|
|
}
|
|
|
|