浏览代码

Merge branch 'dev' of wangzhinan/wlyy2.0 into dev

wangzhinan 5 年之前
父节点
当前提交
202a857318

+ 191 - 0
business/es-service/src/main/java/com/yihu/jw/es/service/StatisticsEsService.java

@ -28,6 +28,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Service;
import javax.xml.soap.SAAJMetaFactory;
import java.security.acl.LastOwnerException;
import java.text.DecimalFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.text.SimpleDateFormat;
@ -976,6 +978,17 @@ public class StatisticsEsService {
        return filesize + "%";
        return filesize + "%";
    }
    }
    public String getTwoRange(int first, int second, int i) {
        if (second == 0 && first > 0) {
            return "100%";
        } else if (second == 0 && first == 0) {
            return "0%";
        }
        float size = (float) (first * 100) / second;
        DecimalFormat df = new DecimalFormat("0.00");//格式化小数,不足的补0
        String filesize = df.format(size);
        return filesize + "%";
    }
    public Double getDoubleRange(Double first, Double second, int i) {
    public Double getDoubleRange(Double first, Double second, int i) {
        if (second == 0 && first > 0) {
        if (second == 0 && first > 0) {
@ -1723,5 +1736,183 @@ public class StatisticsEsService {
    }
    }
    /**
     * 医生排班
     * @param startTime
     * @param endTime
     * @param index
     * @param level
     * @param area
     * @return
     * @throws Exception
     */
    public JSONObject getScheduleTotal(String startTime,String endTime,String index,Integer level, String area) throws Exception {
        JSONObject jsonObject = new JSONObject();
        String condition = "";
        if (SaveModel.cityLevel.equalsIgnoreCase(level.toString())){
            condition +="";
        }else if (SaveModel.OrgLevel.equalsIgnoreCase(level.toString())){
            condition +=" and dh.org_code ='"+area+"' ";
        }else if (SaveModel.townLevel.equalsIgnoreCase(level.toString())){
            condition +=" ";
        }else if (SaveModel.deptLevel.equalsIgnoreCase(level.toString())){
            condition +=" and dh.dept_code = '"+area+"'";
        }else if (SaveModel.doctorLevel.equalsIgnoreCase(level.toString())){
            condition +=" and dh.doctor_code = '"+area+"'";
        }
        String sql = "SELECT COUNT(*) total FROM `base_doctor_role` dr LEFT JOIN base_doctor_hospital dh ON dr.doctor_code = dh.doctor_code where dr.role_code='specialist' "+condition;
        List<Map<String,Object>> mapList = jdbcTemplate.queryForList(sql);
        Long doctorCount = 0L;
        if (mapList!=null&&mapList.size()!=0){
            doctorCount = Long.parseLong(mapList.get(0).get("total").toString());
        }
        List<SaveModel> saveModels = elasticsearchUtil.findLineChartDateQuotaLevel0(startTime, endTime, area, level, index, SaveModel.timeLevel_ZL, SaveModel.interval_day);
        Set<String> set = new HashSet<>();
        Long days = 0L;
        for (SaveModel saveModel1:saveModels){
            if(saveModel1.getResult1()!=0){
                days+=1;
            }
        }
        List<SaveModel> saveModels1 = elasticsearchUtil.findDateQuotaLevel0(startTime, endTime, area, level, index, SaveModel.timeLevel_ZL, SaveModel.interval_day,SaveModel.doctorLevel);
        for (SaveModel saveModel1:saveModels1){
            if(saveModel1.getResult1()!=0){
                set.add(saveModel1.getDoctor());
            }
        }
        Integer total = set.size();
        jsonObject.put("rate",getTwoRange(total,doctorCount.intValue(),0));//排班比例
        jsonObject.put("doctorCount",doctorCount);
        jsonObject.put("days",days);
        jsonObject.put("total",total);
        return  jsonObject;
    }
    /**
     * 通用查询曲线
     * @param startDate
     * @param endDate
     * @param area
     * @param level
     * @param index
     * @param interval 1按日统计,2按周统计,3按月统计
     * @return
     * @throws Exception
     */
    public JSONObject getScheduleLine(String startDate, String endDate, String area, int level, String index,int interval) throws Exception {
        //问诊量
        JSONObject object = new JSONObject();
        if (interval==1){
            JSONArray array = dateTotalStatistics2(startDate,endDate,area,level,index,null,SaveModel.timeLevel_ZL,null);
            object.put("data",array);
        }else if (interval==2){
            JSONArray array = weekTotalStatistics(startDate,endDate,area,level,index,null,SaveModel.timeLevel_ZL);
            object.put("data",array);
        }else if (interval==3){
            JSONArray array = monthTotalStatistics2(startDate,endDate,area,level,index,null,SaveModel.timeLevel_ZL);
            object.put("data",array);
        }
        return object;
    }
    public JSONObject getScheduleList(String startTime,String endTime,String index,int level, String area, String lowLevel) throws Exception {
        JSONObject result1 = new JSONObject();
        List<SaveModel> total = elasticsearchUtil.findDateQuotaLevel0(startTime, endTime, area, level, index, SaveModel.timeLevel_ZL,null, lowLevel);
        List<SaveModel> total1 = elasticsearchUtil.findDateQuotaLevel0AndPaibanList(startTime, endTime, area, level, index, SaveModel.timeLevel_ZL,null, lowLevel);
        Map<String, Object> totalMap = new HashMap<>();
        String low_level = StringUtils.isEmpty(lowLevel) ? String.valueOf(level + 1) : lowLevel;
        List<String> codes = new ArrayList<>();
        for (SaveModel saveModel:total){
            for (SaveModel saveModel1:total1){
                if (SaveModel.doctorLevel.equals(low_level)) {
                    if (saveModel.getDoctor().equalsIgnoreCase(saveModel1.getDoctor())){
                        saveModel.setResult1(saveModel1.getResult1());
                        saveModel.setResult2(saveModel1.getResult2());
                        codes.add(saveModel1.getDoctor());
                    }
                } else if (SaveModel.deptLevel.equals(low_level)) {
                    if (saveModel.getDept().equalsIgnoreCase(saveModel1.getDept())){
                        saveModel.setResult1(saveModel1.getResult1());
                        saveModel.setResult2(saveModel1.getResult2());
                        codes.add(saveModel1.getDept());
                    }
                }else if (SaveModel.OrgLevel.equals(low_level)) {
                    if (saveModel.getHospital().equalsIgnoreCase(saveModel1.getHospital())){
                        saveModel.setResult1(saveModel1.getResult1());
                        saveModel.setResult2(saveModel1.getResult2());
                        codes.add(saveModel1.getHospital());
                    }
                }
            }
        }
        for (SaveModel saveModel:total){
            if (SaveModel.doctorLevel.equals(low_level)) {
                if (!codes.contains(saveModel.getDoctor())){
                    saveModel.setResult1(0.0);
                    saveModel.setResult2(0.0);
                }
            } else if (SaveModel.deptLevel.equals(low_level)) {
                if (!codes.contains(saveModel.getDept())){
                    saveModel.setResult1(0.0);
                    saveModel.setResult2(0.0);
                }
            }else if (SaveModel.OrgLevel.equals(low_level)) {
                if (!codes.contains(saveModel.getHospital())){
                    saveModel.setResult1(0.0);
                    saveModel.setResult2(0.0);
                }
            }
        }
        for (SaveModel saveModel : total) {
            if (SaveModel.doctorLevel.equals(low_level)) {
                totalMap.put(saveModel.getDoctor(), saveModel);
            } else if (SaveModel.deptLevel.equals(low_level)) {
                totalMap.put(saveModel.getDept(), saveModel);
            }else if (SaveModel.OrgLevel.equals(low_level)) {
                totalMap.put(saveModel.getHospital(), saveModel);
            }
        }
        ;
        List<Map<String, Object>> resultMaps = new ArrayList<>();
        for (String key : totalMap.keySet()) {
            Map<String, Object> rs = new HashMap<>();
            SaveModel totalRs = (SaveModel) totalMap.get(key);
            if (totalRs == null) {
                continue;
            }
            //合并结果集
            Double totalNm = totalRs.getResult2();//总人数
            Double scoreNm = totalRs.getResult1();//总分数
            if (SaveModel.doctorLevel.equals(low_level)) {
                rs.put("name", totalRs.getDoctorName());
            } else if (SaveModel.deptLevel.equals(low_level)) {
                rs.put("name", totalRs.getDeptName());
            } else if (SaveModel.OrgLevel.equals(low_level)) {
                rs.put("name", totalRs.getHospitalName());
            }
            rs.put("total", totalNm);
            rs.put("scoreRate",getDoubleRange(scoreNm,totalNm,0));
            rs.put("code", key);
            resultMaps.add(rs);
        }
        //根据为回复数排序
        Collections.sort(resultMaps, new Comparator<Map<String, Object>>() {
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                return (Double) o1.get("total") < (Double) o2.get("total") ? 1 : ((Double) o1.get("total") == (Double) o2.get("total") ? 0 : -1);
            }
        });
        result1.put("resultList", resultMaps);
        return result1;
    }
}
}

+ 104 - 0
business/es-service/src/main/java/com/yihu/jw/es/util/ElasticsearchUtil.java

@ -377,6 +377,107 @@ public class ElasticsearchUtil {
    }
    }
    /**
     * 按照医生人数统计-不重复
     * 获取所有指标的增量、到达量
     * 备注:原来接口的一级指标对应现在的
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param area      区域code
     * @param level     等级
     * @param index     指标
     * @param timeLevel 1增量 2到达量
     * @param interval  1日 2周 3月
     * @param lowLevel  下一级区域等级
     * @return
     * @throws Exception
     */
    public List findDateQuotaLevel0AndPaibanList(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel) throws Exception {
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if (StringUtils.isNotEmpty(startDate)) {
            if (startDate.length() > 10) {
                startDate = changeTime(startDate);
            } else {
                startDate = changeDate(startDate);
            }
        }
        if (StringUtils.isNotEmpty(endDate)) {
            if (endDate.length() > 10) {
                endDate = changeTime(endDate);
            } else {
                endDate = changeDate(endDate);
            }
        }
        StringBuffer sql = new StringBuffer();
        StringBuffer groupBy = new StringBuffer();
        String low_level = level + "";
        if (StringUtils.isNotEmpty(lowLevel)) {
            low_level = lowLevel;
        }
        if (SaveModel.doctorLevel.equals(low_level)) {
            sql.append("select doctor,doctorName,count(doctor) result1, count(doctor) result2 from " + esIndex + " where ");
            groupBy.append("  group by doctor,doctorName");
        }else if (SaveModel.deptLevel.equals(low_level)) {
            sql.append("select dept,deptName,count(DISTINCT doctor) result1, count(DISTINCT doctor) result2 from " + esIndex + " where ");
            groupBy.append("  group by dept,deptName");
        } else if (SaveModel.OrgLevel.equals(low_level)) {
            sql.append("select hospital,hospitalName,count(DISTINCT doctor) result1,count(DISTINCT doctor) result2 from " + esIndex + " where ");
            groupBy.append("  group by hospital,hospitalName");
        } else if (SaveModel.townLevel.equals(low_level)) {
            sql.append("select town,townName,count(DISTINCT doctor) result1,count(DISTINCT doctor) result2 from " + esIndex + " where ");
            groupBy.append("  group by town,townName");
        } else if (SaveModel.cityLevel.equals(low_level)) {
            sql.append("select city,cityName,count(DISTINCT doctor) result1,count(DISTINCT doctor) result2 from " + esIndex + " where ");
            groupBy.append("  group by city,cityName");
        }
        if (StringUtils.isNotEmpty(area)) {
            if (SaveModel.doctorLevel.equals(level + "")) {
                sql.append(" doctor='" + area + "'");
            }else if (SaveModel.deptLevel.equals(level + "")) {
                sql.append(" dept='" + area + "'");
            } else if (SaveModel.OrgLevel.equals(level + "")) {
                sql.append(" hospital='" + area + "'");
            } else if (SaveModel.townLevel.equals(level + "")) {
                sql.append(" town='" + area + "'");
            } else if (SaveModel.cityLevel.equals(level + "")) {
                sql.append(" city='" + area + "'");
            }
            sql.append(" and ");
        }
//        sql.append(" quotaCode='" + index + "'  ");
        sql.append(" quotaCode in(" + index + ")  ");
        sql.append(" and timeLevel='" + timeLevel + "'  ");
        sql.append(" and areaLevel='6'");
        sql.append(" and result1<>0 ");
        if (StringUtils.isNotEmpty(startDate)) {
            sql.append(" and quotaDate>='" + startDate + "'");
        }
        if (StringUtils.isNotEmpty(endDate)) {
            sql.append(" and quotaDate<='" + endDate + "'");
        }
        //根据时间维度分组
        if (StringUtils.isNotEmpty(interval)) {
            if (SaveModel.interval_month.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00','alias'='quotaDate') ");
            } else if (SaveModel.interval_week.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00','alias'='quotaDate') ");
            } else if (SaveModel.interval_day.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00','alias'='quotaDate') ");
            }
        }
        sql.append(groupBy);
        return excute(sql.toString(), SaveModel.class, "", "");
    }
    /**
    /**
     * 一级指标查询列表
     * 一级指标查询列表
     * 获取一级指标的增量、到达量
     * 获取一级指标的增量、到达量
@ -832,6 +933,9 @@ public class ElasticsearchUtil {
        }
        }
    }
    }
    /**
    /**
     * 1级维度
     * 1级维度
     * 查询某一天某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者
     * 查询某一天某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者

+ 3 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java

@ -656,6 +656,9 @@ public class BaseHospitalRequestMapping {
        public static final String scoreHead = "/scoreHead";
        public static final String scoreHead = "/scoreHead";
        public static final String scoreLine = "/scoreLine";
        public static final String scoreLine = "/scoreLine";
        public static final String scoreList = "/scoreList";
        public static final String scoreList = "/scoreList";
        public static final String scheduleHead = "/scheduleHead";
        public static final String scheduleLine = "/scheduleLine";
        public static final String scheduleList = "/scheduleList";
    }
    }

+ 60 - 0
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/statistics/EsStatisticsEndpoint.java

@ -443,4 +443,64 @@ public class EsStatisticsEndpoint extends EnvelopRestEndpoint {
        return success(result);
        return success(result);
    }
    }
    @GetMapping(value = BaseHospitalRequestMapping.Statistics.scheduleHead)
    @ApiOperation(value = "排班头部")
    public ObjEnvelop getScheduleTotal(
            @RequestParam(required = true) String startDate,
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @RequestParam(required = true) String index) {
        JSONObject result = new JSONObject();
        try {
            result= statisticsEsService.getScheduleTotal(startDate, endDate,index,level,area);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return success(result);
    }
    @GetMapping(value = BaseHospitalRequestMapping.Statistics.scheduleLine)
    @ApiOperation(value = "排班曲线")
    public ObjEnvelop getScheduleLine(
            @RequestParam(required = true) String startDate,
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @RequestParam(required = true) String index,
            @RequestParam(required = true)Integer interval) {
        JSONObject result = new JSONObject();
        try {
            result= statisticsEsService.getScheduleLine(startDate, endDate,area,level,index,interval);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return success(result);
    }
    @GetMapping(value = BaseHospitalRequestMapping.Statistics.scheduleList)
    @ApiOperation(value = "排班表格")
    public ObjEnvelop getScheduleList(
            @RequestParam(required = true) String startDate,
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @RequestParam(required = true) String index,
            @RequestParam(required = true)String levelCode) {
        JSONObject result = new JSONObject();
        try {
            result= statisticsEsService.getScheduleList(startDate, endDate,index,level,area,levelCode);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return success(result);
    }
}
}