Explorar el Código

完整性、及时性、准确性趋势

zhengwei hace 6 años
padre
commit
a591db1943

+ 21 - 0
src/main/java/com/yihu/ehr/analyze/controller/dataQuality/DataQualityHomeEndpoint.java

@ -210,4 +210,25 @@ public class DataQualityHomeEndpoint extends EnvelopRestEndPoint {
        return envelop;
    }
    @RequestMapping(value = ServiceApi.DataQuality.HomeTrend, method = RequestMethod.GET)
    @ApiOperation(value = "质量监控首页--月趋势、日趋势")
    public Envelop homeTrend(
            @ApiParam(name = "flag", value = "类型(10:按月,20:按日)")
            @RequestParam(value = "flag", required = true) String flag,
            @ApiParam(name = "dataType", value = "数据维度  (0: 完整性,1:及时性,2:准确性)")
            @RequestParam(value = "dataType", required = false) Integer dataType,
            @ApiParam(name = "month", value = "月份")
            @RequestParam(value = "month", required = false) String month
           ) throws Exception {
        Envelop envelop = new Envelop();
        try {
            return success(dataQualityHomeService.homeTrend(flag, dataType, month));
        }catch (Exception e){
            e.printStackTrace();
            envelop.setSuccessFlg(false);
            envelop.setErrorMsg(e.getMessage());
        }
        return envelop;
    }
}

+ 97 - 0
src/main/java/com/yihu/ehr/analyze/service/dataQuality/DataQualityHomeService.java

@ -621,4 +621,101 @@ public class DataQualityHomeService extends BaseJpaService {
        return list;
    }
    /**
     * 完整率、准确率、及时率趋势
     * @param flag 10按月 20按日
     * @param dataType 0: 完整性,1:及时性,2:准确性
     * @param month
     * @return
     * @throws Exception
     */
    public Map<String, Object> homeTrend(String flag, int dataType, String month) throws Exception {
        Map<String, Object> map  = new HashMap<>();
        List<Double> data = new ArrayList<>();
        List<String> name = new ArrayList<>();
        if("10".equals(flag)){//按月
            for(int i=0;i<6;i++){
                String start =  DateUtil.formatDate(DateUtil.addMonth(0-i, DateUtil.formatCharDateYMD(month+"-01")), "yyyy-MM");
                String end =  DateUtil.getLastDate (start+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
                double rate = getRate(dataType, start+"-01", end);
                data.add((double) Math.round(rate * 100) / 100);
                name.add(start);
            }
        }else{//按日
            //当前月份显示最近30天,否则显示当月的数据
            if(month.equals(DateUtil.toString(new Date(), "yyyy-MM"))){
                for(int i=0;i<30;i++){
                    String date = DateUtil.toString(DateUtil.addDate(0-i,new Date()));
                    double rate = getRate(dataType, date, date);
                    data.add (0,(double) Math.round(rate * 100) / 100);
                    name.add(0,date);
                }
            }else{
                String end =  DateUtil.getLastDate (month+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
                for(int i=0;i<32;i++){
                    String date = DateUtil.toString(DateUtil.addDate(i,DateUtil.strToDate(month+"-01")));
                    double rate = getRate(dataType, date, date);
                    data.add ((double) Math.round(rate * 100) / 100);
                    name.add(date);
                    if(date.equals(end)){
                        break;
                    }
                }
            }
        }
        map.put("data", data);
        map.put("name", name);
        return map;
    }
    /**
     * 获取比例
     * @param dataType
     * @param start
     * @param end
     * @return
     */
    public double getRate(int dataType, String start, String end) throws Exception{
        int totalHospitalNum = 0;//医院总就诊数
        double totalInTime = 0;//总及时数
        double totalVisitNum = 0;//总完整数(平台总就诊数)
        double totalCorrect = 0;//总准确数
        //1. 获取医院档案量;
        Envelop envelop = packQcReportService.dailyReport("create_date", start + "T00:00:00Z", end + "T23:59:59Z", null);
        Map<String, Object> hospitalDataMap = (Map<String, Object>) envelop.getDetailModelList().get(0);
        //医院总数据量
        totalHospitalNum = (int) hospitalDataMap.get("total");
        if(dataType==0){
            //1. 平台就诊完整数
            Map<String, Object> dataMap = new HashMap<>();
            getPatientCount("receive_date",start, end, null, dataMap);
            totalVisitNum = Double.valueOf(dataMap.get("visitIntegrity").toString());//就诊完整数
            if(totalHospitalNum==0){
                return 0.0;
            }else{
                return totalVisitNum/totalHospitalNum*100;
            }
        }else if (dataType==1){
            //2. 及时数
            totalInTime = getInTimeNum("receive_date" ,start, end);
            if(totalHospitalNum==0){
                return 0.0;
            }else{
                return totalInTime/totalHospitalNum*100;
            }
        }else{
            //3. 去重准确数【】
            totalCorrect = getErrorDataSetData("receive_date",start, end, null);
            //4. 数据集总量
            int dataSetsMun = getDataSetsMap(start, end, null);
            if(dataSetsMun==0){
                return 0.0;
            }else{
                return totalCorrect/dataSetsMun*100;
            }
        }
    }
}