Browse Source

准确率为负数

chenyongxing 6 years ago
parent
commit
f5654d5718

+ 88 - 2
src/main/java/com/yihu/ehr/analyze/service/dataQuality/DataCorrectService.java

@ -251,7 +251,9 @@ public class DataCorrectService extends DataQualityBaseService {
        double totalNum = 0;//平台总数
        double totalHospitalNum = 0;//医院总数
        //机构数据
        List<Map<String,Object>> groupList = getOrgDataMap(dataLevel,"create_date",startDate,end,null);
        //List<Map<String,Object>> groupList = getOrgDataMap(dataLevel,"create_date",startDate,end,null);
        //准确性算法,由于之前算法依赖到  医院总数据量,   医院数据量经常未做上报,导致数据问题,先改成 根据接收总数计算
        List<Map<String,Object>> groupList = getReceiveMap(dataLevel,startDate,end,null);
        //平台接收错误数据量
        Map<String, Object> platformErrorGroup = getErrorPlatformData(dataLevel,"receive_date",startDate, endDate,null);
        // 计算
@ -301,7 +303,9 @@ public class DataCorrectService extends DataQualityBaseService {
        double totalNum = 0;//平台总数
        double totalHospitalNum = 0;//医院总数
        //机构数据
        List<Map<String,Object>> groupList = getOrgDataMap(dataLevel,"create_date",startDate,end,areaCode);
//        List<Map<String,Object>> groupList = getOrgDataMap(dataLevel,"create_date",startDate,end,areaCode);
        //准确性算法,由于之前算法依赖到  医院总数据量,   医院数据量经常未做上报,导致数据问题,先改成 根据接收总数计算
        List<Map<String,Object>> groupList = getReceiveMap(dataLevel,startDate,end,areaCode);
        //平台接收数据量
        Map<String, Object> platformDataGroup = getErrorPlatformData(dataLevel,"receive_date",startDate, endDate,areaCode);
        // 计算
@ -344,4 +348,86 @@ public class DataCorrectService extends DataQualityBaseService {
    }
    /**
     * 获取医院总数据量
     *  (1. orgArea为空时,根据区域分组查询
     *   2. orgArea不为空时,根据机构分组查询)
     *   @param dataLevel 数据级别:  0:区县,1:机构
     * @param start
     * @param end
     * @param orgArea
     * @return
     */
    public List<Map<String, Object>> getReceiveMap(Integer dataLevel,String start, String end, String orgArea) throws IOException {
        List<Map<String, Object>> resultList = new ArrayList<>();
        double totalAreaCout = 0;
        try {
            String dateStr = DateUtil.toString(new Date());
            if (StringUtils.isBlank(start)) {
                start = dateStr;
            }
            if (StringUtils.isBlank(end)) {
                end = dateStr;
            }
            start = start +" 00:00:00";
            end = end +" 23:59:59";
            List<String> fields = new ArrayList<String>();
            String sql1 = "";
            if (StringUtils.isNotEmpty(orgArea)) {
                fields.add("org_code");
                sql1 = "SELECT org_code,count(distinct profile_id) as count from json_archives where org_area='" + orgArea + "' and receive_date>='" + start + "' and receive_date<='" + end + "' group by org_code";
            } else {
                if (dataLevel == 0) {
                    fields.add("org_area");
                    sql1 = "SELECT org_area,count(distinct profile_id) as count from json_archives where " +
                            "receive_date >='" + start + "' and receive_date <='" + end + "' group by org_area";
                }else {
                    fields.add("org_code");
                    sql1 = "SELECT org_code,count(distinct profile_id) as count from json_archives where " +
                            "receive_date >='" + start + "' and receive_date <='" + end + "' group by org_code";
                }
            }
            fields.add("count");
            resultList = elasticSearchUtil.findBySql(fields, sql1);
            //设置机构,区域名称
            if (resultList != null && resultList.size() > 0) {
                for (Map<String, Object> map1 : resultList) {
                    String name = "";
                    if (StringUtils.isNotEmpty(orgArea) || ( dataLevel ==1 && StringUtils.isEmpty(orgArea))) {
                        String code = (String) map1.get("org_code");
                        name = redisClient.get("organizations:" + code + ":name");
                    }else {
                        String code =  map1.get("org_area").toString();
                        name = redisClient.get("area:" + code + ":name");
                        totalAreaCout += getDoubleValue( map1.get("count"));
                    }
                    map1.put("name",name);
                }
            }
            if (!resultList.isEmpty()) {
                Map<String, Object> total = new HashMap<>();
                if (dataLevel ==0) {
                    // 临时写死上饶市
                    total.put("name", "上饶市");
                    total.put("org_area", "");
                    total.put("", totalAreaCout);
                    total.put("count", totalAreaCout);
                } else {
                    total.put("name", "全部机构");
                    total.put("org_code", "");
                    total.put("count", totalAreaCout);
                }
                resultList.add(0, total);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultList;
    }
}