|  | @ -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,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;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | }
 |  | }
 |