| 
					
				 | 
			
			
				@ -1,667 +0,0 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.jw.care.service.statistics; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.es.service.StatisticsEsService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.es.util.ElasticsearchUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.es.util.SaveModel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.util.date.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.commons.lang.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.text.DecimalFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 统计工具类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Created by yeshijie on 2020/12/14. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class StatisticsUtilService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Value("${es.type.Statistics}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String esType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Value("${es.index.Statistics}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String esIndex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private ElasticsearchUtil elasticsearchUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private StatisticsEsService statisticsESService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public final String commonParams = "xmijk_quota"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据开始时间 结束时间判断查询增量还是到达量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param startDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getDDLOrZL(String startDate,String endDate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String ddlOrZl = "1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(endDate.equals(startDate)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ddlOrZl = SaveModel.timeLevel_DDL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return ddlOrZl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取签约开始时间,7月1号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getSignStartDay(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return DateUtil.getSignYear()+"-07-01"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 如果开始时间是7月1号 就设置为结束时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param startDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getStartDate(String startDate,String endDate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(startDate.equals(getSignStartDay())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return endDate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return startDate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 是否是专科 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param level 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param area 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean isSpecialist(int level,String area){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(level == 4 && area.length() != 10){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取下转的map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param saveModel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param lowLevel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param result2Name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Map<String, Object> getMapTurnDownResult2(SaveModel saveModel,String lowLevel,String result2Name){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String, Object> map = getMapTurnDown(saveModel, lowLevel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put(result2Name, saveModel.getResult2().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Map<String, Object> getMapTurnDownResult12(SaveModel saveModel,String lowLevel,String result1Name,String result2Name){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String, Object> map = getMapTurnDown(saveModel, lowLevel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put(result1Name, saveModel.getResult1()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put(result2Name, saveModel.getResult2().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Map<String, Object> getMapTurnDown(SaveModel saveModel,String lowLevel){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String, Object> map = new HashMap<>(16); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (SaveModel.OrgLevel.equals(lowLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            map.put("code", saveModel.getHospital()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            map.put("name", saveModel.getHospitalName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.townLevel.equals(lowLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            map.put("code", saveModel.getTown()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            map.put("name", saveModel.getTownName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.cityLevel.equals(lowLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            map.put("code", saveModel.getCity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            map.put("name", saveModel.getCityName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.deptLevel.equals(lowLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            map.put("code", saveModel.getDept()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            map.put("name", saveModel.getDeptName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else if (SaveModel.doctorLevel.equals(lowLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            map.put("code", saveModel.getDoctor()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            map.put("name", saveModel.getDoctorName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean compareSaveModel(SaveModel saveModel1,SaveModel saveModel2,String lowLevel){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (SaveModel.OrgLevel.equals(lowLevel) && saveModel1.getHospital() != null && saveModel2.getHospital() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return saveModel1.getHospital().equals(saveModel2.getHospital()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.townLevel.equals(lowLevel) && saveModel1.getTown() != null && saveModel2.getTown() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return saveModel1.getTown().equals(saveModel2.getTown()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.cityLevel.equals(lowLevel) && saveModel1.getCity() != null && saveModel2.getCity() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return saveModel1.getCity().equals(saveModel2.getCity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.deptLevel.equals(lowLevel) && saveModel1.getDept() != null && saveModel2.getDept() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return saveModel1.getDept().equals(saveModel2.getDept()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else if (SaveModel.doctorLevel.equals(lowLevel) && saveModel1.getDoctor() != null && saveModel2.getDoctor() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return saveModel1.getDoctor().equals(saveModel2.getDoctor()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取到达量或者增量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param startDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param area 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param level 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param index 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param level2_type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @throws Exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public long getTotalAmountDDLOrZL(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(endDate.equals(startDate)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return getTotalAmount3DDL(startDate, endDate, area, level, index, level2_type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return getTotalAmount3ZL(startDate, endDate, area, level, index, level2_type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public long getTotalAmount3ZL(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SaveModel saveModel = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(level2_type)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            saveModel = elasticsearchUtil.findOneDateQuotaLevel1(startDate, endDate, area, level, index, SaveModel.timeLevel_ZL, level2_type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            saveModel = elasticsearchUtil.findOneDateQuotaLevel0(startDate, endDate, area, level, index, SaveModel.timeLevel_ZL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return saveModel.getResult2().longValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public long getTotalAmount3DDL(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SaveModel saveModel = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(level2_type)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            saveModel = elasticsearchUtil.findOneDateQuotaLevel1(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL, level2_type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            saveModel = elasticsearchUtil.findOneDateQuotaLevel0(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return saveModel.getResult2().longValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Map<String, Object> saveModelToMap(SaveModel saveModel){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String, Object> map = new HashMap<>(16); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(), "yyyy-MM-dd")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("amount", saveModel.getResult2()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Map<String, Object> slaveKay1ToMapLong(SaveModel saveModel){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String, Object> map = new HashMap<>(16); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("code", saveModel.getSlaveKey1()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("name", saveModel.getSlaveKey1Name()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("num", saveModel.getResult2().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Map<String, Object> slaveKay1ToMapLong2(SaveModel saveModel){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String, Object> map = new HashMap<>(16); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("code", saveModel.getSlaveKey1()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("name", saveModel.getSlaveKey1Name()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("num", saveModel.getResult2().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("price", saveModel.getResult1()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Map<String, Object> slaveKay2ToMapLong(SaveModel saveModel){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String, Object> map = new HashMap<>(16); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("code", saveModel.getSlaveKey2()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("name", saveModel.getSlaveKey2Name()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("num", saveModel.getResult2().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 计算开始时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param type 1周,2月 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String calStart(String endDate,String type){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(StringUtils.isEmpty(endDate)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return endDate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Calendar cal = Calendar.getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        cal.setTime(DateUtil.strToDate(endDate)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if("1".equals(type)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                cal.add(Calendar.DAY_OF_WEEK,-1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            cal.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            cal.set(Calendar.DAY_OF_MONTH,1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return DateUtil.dateToStrShort(cal.getTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getSaveModelCode(int level,SaveModel saveModel){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(level == 4){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return saveModel.getDept(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else if(level == 3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return saveModel.getHospital(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else if(level == 2){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return saveModel.getTown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 按sortName排序 降序 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param resultList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void sortDoubleList(List<Map<String,Object>> resultList, String sortName){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        resultList.sort((x,y)->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if ( (Long) x.get(sortName) > (Long) y.get(sortName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else if ((Long) x.get(sortName) < (Long) y.get(sortName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     *  降序 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param resultList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sortName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void sortLongList(List<Map<String,Object>> resultList,String sortName){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        resultList.sort((x,y)->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if ( (Long) x.get(sortName) > (Long) y.get(sortName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else if ((Long) x.get(sortName) < (Long) y.get(sortName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /**************************************************封装的方法 start ********************************************/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 查询总量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param startDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param area 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param level 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param index 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param timelevel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param slaveKey1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @throws Exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public long getTotalAmount(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(SaveModel.timeLevel_DDL.equals(timelevel)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return getTotalAmount3DDL(startDate,endDate,area,level,index,slaveKey1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return getTotalAmount3ZL(startDate,endDate,area,level,index,slaveKey1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 查一级指标 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param startDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param area 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param level 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param index 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param timeLevel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param interval 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param slaveKey1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @throws Exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public List findDateQuotaLevel0BySlaveKey1(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String slaveKey1) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(StringUtils.isEmpty(slaveKey1)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return elasticsearchUtil.findDateQuotaLevel0(startDate, endDate, area, level, index, timeLevel, interval, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return findDateQuotaLevel0BySlaveKey1(startDate,endDate,area,level,index,timeLevel,interval,null,slaveKey1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public long getTotalAmountLevel2BySlaveKey1(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String slaveKey2 ) throws Exception{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SaveModel saveModel = findOneDateQuotaLevel2BySlaveKey1(startDate, endDate, area, level, index, timeLevel, slaveKey1, slaveKey2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return saveModel.getResult1().longValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public SaveModel findOneDateQuotaLevel2BySlaveKey1(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String slaveKey2) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(StringUtils.isEmpty(slaveKey2)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            slaveKey2 = commonParams; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List list = findDateQuotaLevel2BySlaveKey1(startDate, endDate, area, level, index, timeLevel, slaveKey1, slaveKey2,null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return (SaveModel) list.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 查找一级或二级维度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param startDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param area 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param level 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param index 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param timeLevel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param slaveKey1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param slaveKey2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param interval 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param lowLevel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public List findDateQuotaLevel2BySlaveKey1(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String slaveKey2, String interval, String lowLevel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        startDate = changeDateTime(startDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        endDate = changeDateTime(endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer sql = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer groupBy = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String low_level = level + ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(lowLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            low_level = lowLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlGroupBySlaveKey(sql,groupBy,low_level,slaveKey2,"slaveKey2","slaveKey2Name"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlArea(sql,area,level,index,timeLevel,startDate,endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlSlaveKey(slaveKey1,"slaveKey1",sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlSlaveKey(slaveKey2,"slaveKey2",sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //根据时间维度分组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        groupByInterval(interval,groupBy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(groupBy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return elasticsearchUtil.excute(sql.toString(), SaveModel.class, "", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param dateTime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String changeDateTime(String dateTime){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(dateTime)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (dateTime.length() > 10) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return elasticsearchUtil.changeTime(dateTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return elasticsearchUtil.changeDate(dateTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return dateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void groupByInterval(String interval,StringBuffer groupBy){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        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') "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void sqlArea(StringBuffer sql,String area,int level,boolean isAnd){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(area)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (SaveModel.deptLevel.equals(level + "")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sql.append(" team='" + 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 + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(isAnd){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sql.append(" and "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void sqlArea(StringBuffer sql,String area,int level,String index,String timeLevel,String startDate,String endDate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlArea(sql,area,level,true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(" quotaCode in(" + index + ")  "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(" and timeLevel='" + timeLevel + "'  "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(" and areaLevel='5'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(startDate)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append(" and quotaDate>='" + startDate + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(endDate)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append(" and quotaDate<='" + endDate + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void sqlSlaveKey(String slaveKey,String slaveKeyName,StringBuffer sql){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotBlank(slaveKey)&&!commonParams.equals(slaveKey)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String[] str = slaveKey.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            StringBuffer buffer = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (int i=0;i<str.length;i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                buffer.append("'"+str[i]+"',"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            buffer.deleteCharAt(buffer.length()-1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append(" and "+slaveKeyName+" in (" + buffer + ")"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void groupBySlaveKey(StringBuffer groupBy,String slaveKeyValue,String slaveKey,String slaveKeyName){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(slaveKeyValue)||commonParams.equals(slaveKeyValue)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBy.append(","+slaveKey+","+slaveKeyName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void sqlGroupBySlaveKey(StringBuffer sql,StringBuffer groupBy,String low_level,String slaveKeyValue,String slaveKey,String slaveKeyName){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String tmp = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(StringUtils.isNotBlank(slaveKeyValue)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            tmp = slaveKey +","+slaveKeyName+","; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (SaveModel.deptLevel.equals(low_level)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append("select team,teamName,"+tmp+"sum(result1) result1,sum(result2) result2 from " + esIndex + " where "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBy.append("  group by team,teamName"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBySlaveKey(groupBy,slaveKeyValue,slaveKey,slaveKeyName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.OrgLevel.equals(low_level)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append("select hospital,hospitalName,"+tmp+"sum(result1) result1,sum(result2) result2 from " + esIndex + " where "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBy.append("  group by hospital,hospitalName"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBySlaveKey(groupBy,slaveKeyValue,slaveKey,slaveKeyName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.townLevel.equals(low_level)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append("select town,townName,"+tmp+"sum(result1) result1,sum(result2) result2 from " + esIndex + " where "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBy.append("  group by town,townName"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBySlaveKey(groupBy,slaveKeyValue,slaveKey,slaveKeyName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.cityLevel.equals(low_level)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append("select city,cityName,"+tmp+"sum(result1) result1,sum(result2) result2 from " + esIndex + " where "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBy.append("  group by city,cityName"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBySlaveKey(groupBy,slaveKeyValue,slaveKey,slaveKeyName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public List findDateQuotaLevel3BySlaveKey13(String startDate, String endDate, String area, int level, String index, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           String timeLevel, String slaveKey1, String slaveKey2,String slaveKey3, String interval, String lowLevel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        startDate = changeDateTime(startDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        endDate = changeDateTime(endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer sql = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer groupBy = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String low_level = level + ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(lowLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            low_level = lowLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlGroupBySlaveKey(sql,groupBy,low_level,slaveKey1,"slaveKey1","slaveKey1Name"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlArea(sql,area,level,index,timeLevel,startDate,endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlSlaveKey(slaveKey1,"slaveKey1",sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlSlaveKey(slaveKey2,"slaveKey2",sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlSlaveKey(slaveKey3,"slaveKey3",sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //根据时间维度分组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        groupByInterval(interval,groupBy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(groupBy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return elasticsearchUtil.excute(sql.toString(), SaveModel.class, "", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String returnSlaveKey(String slaveKey){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(StringUtils.isEmpty(slaveKey)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return commonParams; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return slaveKey; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 0级指标查询列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取所有指标的增量、到达量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 备注:原来接口的一级指标对应现在的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @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 findDateQuotaLevel0BySlaveKey1(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel, String slaveKey1) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        startDate = changeDateTime(startDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        endDate = changeDateTime(endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer sql = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer groupBy = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String low_level = level + ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(lowLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            low_level = lowLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlGroupBySlaveKey(sql,groupBy,low_level,slaveKey1,"slaveKey1","slaveKey1Name"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlArea(sql,area,level,index,timeLevel,startDate,endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlSlaveKey(slaveKey1,"slaveKey1",sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //根据时间维度分组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        groupByInterval(interval,groupBy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(groupBy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return elasticsearchUtil.excute(sql.toString(), SaveModel.class, "", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public List<SaveModel> findDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String interval, String lowLevel) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        startDate = changeDateTime(startDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        endDate = changeDateTime(endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer sql = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer groupBy = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String low_level = level + ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(lowLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            low_level = lowLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlGroupBySlaveKey(sql,groupBy,low_level,slaveKey1,"slaveKey1","slaveKey1Name"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlArea(sql,area,level,index,timeLevel,startDate,endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlSlaveKey(slaveKey1,"slaveKey1",sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //根据时间维度分组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        groupByInterval(interval,groupBy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(groupBy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return elasticsearchUtil.excute(sql.toString(), SaveModel.class, "", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public List<Map<String, Object>> getDataList(int level,String area,String startDate,String endDate,String quota){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        startDate = getStartDate(startDate, endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer initalStr = new StringBuffer(" where quotaDate >= '" + startDate + "T00:00:00+0800'" + " and quotaDate <= '" + endDate + "T23:59:59+0800'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sqlArea(initalStr,area,level,false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String ddlOrZl = getDDLOrZL(startDate, endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String quotaCodeAndWhere = quota.substring(quota.indexOf("quotaCode=")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String filter = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String quotaCode = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(quotaCodeAndWhere.contains("-")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            quotaCode = quotaCodeAndWhere.split("-")[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            filter = " and " + quotaCodeAndWhere.split("-")[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            quotaCode = quotaCodeAndWhere; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        filter += " and " + quotaCode +" and timeLevel = '"+ddlOrZl+"'  and areaLevel='5'"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sql=""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(level == 3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql = "select sum(result1) result,hospital,hospitalName from  " + esIndex + initalStr.toString() + filter + " group by hospital,hospitalName"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else if(level == 2){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql = "select sum(result1) result,town,townName from  " + esIndex + initalStr.toString() + filter + " group by town,townName"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql = "select sum(result1) result,team,teamName from  " + esIndex + initalStr.toString() + filter + " group by team,teamName"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String, Object>> dataList = elasticsearchUtil.excuteDataModel(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return dataList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        teamList = dataListIntegration(totalMap,teamList,dataList,quotaName,range); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public  List<Map<String, Object>> dataListIntegration( Map<String, Object> totalMap,List<Map<String, Object>>  teamList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ,List<Map<String, Object>>  dataList,String quotaName,int level){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        DecimalFormat df = new DecimalFormat("###"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Double total=0.00; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String, Object>>  resultList=new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String teamCloumn = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for(Map<String, Object> teamMap : teamList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String teamId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(level == 3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                teamId = teamMap.get("code").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                teamCloumn = "hospital"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else if(level == 2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                teamId = teamMap.get("town").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                teamCloumn = "town"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                teamId = teamMap.get("id").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                teamCloumn = "team"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            boolean exit = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(dataList != null && dataList.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                for(Map<String, Object> dataMap : dataList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(dataMap.get(teamCloumn)!= null && dataMap.get(teamCloumn).toString().equals(teamId)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        if(dataMap.get("result") != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            String result = df.format(Double.valueOf(dataMap.get("result").toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            total=total+Double.valueOf(dataMap.get("result").toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            teamMap.put(quotaName,result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            exit = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        }else if(dataMap.get("count") != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            String result = df.format(Double.valueOf(dataMap.get("count").toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            total=total+Double.valueOf(dataMap.get("count").toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            teamMap.put(quotaName,result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            exit = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if( !exit){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                teamMap.put(quotaName,0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            resultList.add(teamMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        totalMap.put(quotaName,df.format(total)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return resultList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /**************************************************封装的方法 end ********************************************/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |