| 
					
				 | 
			
			
				@ -28,6 +28,8 @@ import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.jdbc.core.JdbcTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.xml.soap.SAAJMetaFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.security.acl.LastOwnerException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.text.DecimalFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.text.ParseException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.text.SimpleDateFormat; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -976,6 +978,17 @@ public class StatisticsEsService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        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) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (second == 0 && first > 0) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1723,5 +1736,182 @@ 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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |