|  | @ -0,0 +1,606 @@
 | 
	
		
			
				|  |  | package com.yihu.jw.statistics.util;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.alibaba.druid.sql.ast.SQLExpr;
 | 
	
		
			
				|  |  | import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
 | 
	
		
			
				|  |  | import com.alibaba.druid.sql.parser.SQLExprParser;
 | 
	
		
			
				|  |  | import com.yihu.jw.statistics.etl.save.es.ElasticFactory;
 | 
	
		
			
				|  |  | import com.yihu.jw.statistics.vo.DataModel;
 | 
	
		
			
				|  |  | import com.yihu.jw.statistics.vo.SaveModel;
 | 
	
		
			
				|  |  | import org.elasticsearch.action.search.SearchResponse;
 | 
	
		
			
				|  |  | import org.elasticsearch.client.Client;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.domain.Select;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.jdbc.ObjectResult;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.jdbc.ObjectResultsExtractor;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.parse.ElasticSqlExprParser;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.parse.SqlParser;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.query.AggregationQueryAction;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.query.DefaultQueryAction;
 | 
	
		
			
				|  |  | import org.nlpcn.es4sql.query.SqlElasticSearchRequestBuilder;
 | 
	
		
			
				|  |  | import org.slf4j.Logger;
 | 
	
		
			
				|  |  | import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Value;
 | 
	
		
			
				|  |  | import org.springframework.stereotype.Component;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import java.lang.reflect.Field;
 | 
	
		
			
				|  |  | import java.sql.Timestamp;
 | 
	
		
			
				|  |  | import java.text.SimpleDateFormat;
 | 
	
		
			
				|  |  | import java.util.*;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * Created by chenweida on 2017/7/17.
 | 
	
		
			
				|  |  |  * SELECT town,townName,sum(result1) result1 FROM wlyy_quota_test
 | 
	
		
			
				|  |  |  * where quotaCode='1'
 | 
	
		
			
				|  |  |  * group by town,townName , date_histogram(field='quotaDate','interval'='week')
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | @Component
 | 
	
		
			
				|  |  | public class ElasticsearchUtil {
 | 
	
		
			
				|  |  |     private Logger logger= LoggerFactory.getLogger(ElasticsearchUtil.class);
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private ElasticFactory elasticFactory;
 | 
	
		
			
				|  |  |     @Value("${es.type}")
 | 
	
		
			
				|  |  |     private String esType;
 | 
	
		
			
				|  |  |     @Value("${es.index}")
 | 
	
		
			
				|  |  |     private String esIndex;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 折线图
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param quotaCode 指标quotacode
 | 
	
		
			
				|  |  |      * @param code      机构code,或者区code或者团队code或者城市code
 | 
	
		
			
				|  |  |      * @param startDate 开始日期 yyyy-MM-dd
 | 
	
		
			
				|  |  |      * @param endDate   结束日期 yyyy-MM-dd
 | 
	
		
			
				|  |  |      * @param timeLevel 1增量 2到达量
 | 
	
		
			
				|  |  |      * @param areaLevel 1 省 2 市 3 区县 4 机构 5科室 6医生
 | 
	
		
			
				|  |  |      * @param interval  1日 2周 3月
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<SaveModel> findQuotaLines(String quotaCode,
 | 
	
		
			
				|  |  |                                           String code,
 | 
	
		
			
				|  |  |                                           String startDate,
 | 
	
		
			
				|  |  |                                           String endDate,
 | 
	
		
			
				|  |  |                                           String timeLevel,
 | 
	
		
			
				|  |  |                                           String areaLevel,
 | 
	
		
			
				|  |  |                                           String interval) {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
 | 
	
		
			
				|  |  |         startDate = changeDate(startDate);
 | 
	
		
			
				|  |  |         //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
 | 
	
		
			
				|  |  |         endDate = changeDate(endDate);
 | 
	
		
			
				|  |  |         StringBuffer sql = new StringBuffer();
 | 
	
		
			
				|  |  |         StringBuffer groupBy = new StringBuffer();
 | 
	
		
			
				|  |  |         if (SaveModel.doctorLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select doctor,doctorName,result1,result2 from "+esType+" where doctor='" + code + "'");
 | 
	
		
			
				|  |  |         }else if (SaveModel.deptLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select dept,deptName,sum(result1),sum(result2) from "+esType+" where dept='" + code + "'");
 | 
	
		
			
				|  |  |         } else if (SaveModel.OrgLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from "+esType+" where hospital='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append(" group by hospital,hospitalName");
 | 
	
		
			
				|  |  |         } else if (SaveModel.townLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from "+esType+" where town='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append(" group by town,townName");
 | 
	
		
			
				|  |  |         } else if (SaveModel.cityLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from "+esType+" where city='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append(" group by city,cityName");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         sql.append(" and quotaCode='" + quotaCode + "'  ");
 | 
	
		
			
				|  |  |         sql.append(" and timeLevel='" + timeLevel + "'  ");
 | 
	
		
			
				|  |  |         sql.append(" and areaLevel='5'");
 | 
	
		
			
				|  |  |         sql.append(" and quotaDate >='" + startDate + "'  ");
 | 
	
		
			
				|  |  |         sql.append(" and quotaDate <='" + endDate + "'  ");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //根据时间维度分组
 | 
	
		
			
				|  |  |         if (SaveModel.interval_month.equals(interval)) {
 | 
	
		
			
				|  |  |             groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
 | 
	
		
			
				|  |  |         } else if (SaveModel.interval_week.equals(interval)) {
 | 
	
		
			
				|  |  |             groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
 | 
	
		
			
				|  |  |         } else if (SaveModel.interval_day.equals(interval)) {
 | 
	
		
			
				|  |  |             groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         sql.append(groupBy);
 | 
	
		
			
				|  |  |         return excute(sql.toString());
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询某个指标某一天的量
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param quotaCode 指标quotacode
 | 
	
		
			
				|  |  |      * @param quotaDate 时间 yyyy-MM-dd
 | 
	
		
			
				|  |  |      * @param timeLevel 1增量 2到达量
 | 
	
		
			
				|  |  |      * @param areaLevel 1 省 2 市 3 区县 4 机构 5科室 6医生
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<SaveModel> findOneDateQuota(String quotaCode,
 | 
	
		
			
				|  |  |                                             String code,
 | 
	
		
			
				|  |  |                                             String quotaDate,
 | 
	
		
			
				|  |  |                                             String timeLevel,
 | 
	
		
			
				|  |  |                                             String areaLevel) {
 | 
	
		
			
				|  |  |         //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
 | 
	
		
			
				|  |  |         quotaDate = changeDate(quotaDate);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         StringBuffer sql = new StringBuffer();
 | 
	
		
			
				|  |  |         StringBuffer groupBy = new StringBuffer();
 | 
	
		
			
				|  |  |         if (SaveModel.doctorLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select doctor,doctprName,result1,result2 from "+esType+" where doctor='" + code + "'");
 | 
	
		
			
				|  |  |         }else if (SaveModel.deptLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select dept,deptName,sum(result1),sum(result2) from "+esType+" where dept='" + code + "'");
 | 
	
		
			
				|  |  |         } else if (SaveModel.OrgLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from "+esType+" where hospital='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append(" group by hospital,hospitalName");
 | 
	
		
			
				|  |  |         } else if (SaveModel.townLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from "+esType+" where town='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append(" group by town,townName");
 | 
	
		
			
				|  |  |         } else if (SaveModel.cityLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from "+esType+" where city='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append(" group by city,cityName");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         sql.append(" and quotaCode='" + quotaCode + "'  ");
 | 
	
		
			
				|  |  |         sql.append(" and timeLevel='" + timeLevel + "'  ");
 | 
	
		
			
				|  |  |         sql.append(" and areaLevel='5'");
 | 
	
		
			
				|  |  |         sql.append(" and quotaDate='" + quotaDate + "'");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         sql.append(groupBy);
 | 
	
		
			
				|  |  |         return excute(sql.toString());
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询某个2级维度指标某一天的数据
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param quotaCode 指标quotacode
 | 
	
		
			
				|  |  |      * @param quotaDate 时间 yyyy-MM-dd
 | 
	
		
			
				|  |  |      * @param code      机构code或者科室code或者town code或者city code 或者医生code
 | 
	
		
			
				|  |  |      * @param timeLevel 1增量 2到达量
 | 
	
		
			
				|  |  |      * @param areaLevel 1 省 2 市 3 区县 4 机构 5科室6医生
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<SaveModel> findOneDateQuotaLevel2(String quotaCode,
 | 
	
		
			
				|  |  |                                                   String code,
 | 
	
		
			
				|  |  |                                                   String quotaDate,
 | 
	
		
			
				|  |  |                                                   String timeLevel,
 | 
	
		
			
				|  |  |                                                   String areaLevel) {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
 | 
	
		
			
				|  |  |         quotaDate = changeDate(quotaDate);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         StringBuffer sql = new StringBuffer();
 | 
	
		
			
				|  |  |         StringBuffer groupBy = new StringBuffer();
 | 
	
		
			
				|  |  |         if (SaveModel.doctorLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select doctor,doctorName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,result1,result2 from "+esType+" where doctor='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append("  group by slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
 | 
	
		
			
				|  |  |         }else if (SaveModel.deptLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select dept,deptName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1),sum(result2) from "+esType+" where dept='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append("  group by slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
 | 
	
		
			
				|  |  |         } else if (SaveModel.OrgLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select hospital,hospitalName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from "+esType+" where hospital='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append("  group by slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
 | 
	
		
			
				|  |  |         } else if (SaveModel.townLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from "+esType+" where town='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append("  group by slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
 | 
	
		
			
				|  |  |         } else if (SaveModel.cityLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from "+esType+" where city='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append("  group by slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         sql.append(" and quotaCode='" + quotaCode + "'  ");
 | 
	
		
			
				|  |  |         sql.append(" and timeLevel='" + timeLevel + "'  ");
 | 
	
		
			
				|  |  |         sql.append(" and areaLevel='5'");
 | 
	
		
			
				|  |  |         sql.append(" and quotaDate='" + quotaDate + "'");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         sql.append(groupBy);
 | 
	
		
			
				|  |  |         return excute(sql.toString());
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询某个一级维度指标某一天的数据
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param quotaCode 指标quotacode
 | 
	
		
			
				|  |  |      * @param quotaDate 时间 yyyy-MM-dd
 | 
	
		
			
				|  |  |      * @param code      机构code或者科室code或者town code或者city code 或者医生code
 | 
	
		
			
				|  |  |      * @param timeLevel 1增量 2到达量
 | 
	
		
			
				|  |  |      * @param areaLevel 1 省 2 市 3 区县 4 机构 5科室 6医生
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<SaveModel> findOneDateQuotaLevel1(String quotaCode,
 | 
	
		
			
				|  |  |                                                   String code,
 | 
	
		
			
				|  |  |                                                   String quotaDate,
 | 
	
		
			
				|  |  |                                                   String timeLevel,
 | 
	
		
			
				|  |  |                                                   String areaLevel) {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
 | 
	
		
			
				|  |  |         quotaDate = changeDate(quotaDate);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         StringBuffer sql = new StringBuffer();
 | 
	
		
			
				|  |  |         StringBuffer groupBy = new StringBuffer();
 | 
	
		
			
				|  |  |         if (SaveModel.doctorLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select doctor,doctorName,slaveKey1,slaveKey1Name,result1,result2 from "+esType+" where doctor='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append("  group by doctor,doctorName,slaveKey1,slaveKey1Name");
 | 
	
		
			
				|  |  |         }else if (SaveModel.deptLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select dept,deptName,slaveKey1,slaveKey1Name,sum(result1),sum(result2) from "+esType+" where dept='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append("  group by dept,deptName,slaveKey1,slaveKey1Name");
 | 
	
		
			
				|  |  |         } else if (SaveModel.OrgLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select hospital,hospitalName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from "+esType+" where hospital='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append("  group by hospital,hospitalName,slaveKey1,slaveKey1Name");
 | 
	
		
			
				|  |  |         } else if (SaveModel.townLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select town,townName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from "+esType+" where town='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append("  group by town,townName,slaveKey1,slaveKey1Name");
 | 
	
		
			
				|  |  |         } else if (SaveModel.cityLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select city,cityName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from "+esType+" where city='" + code + "'");
 | 
	
		
			
				|  |  |             groupBy.append("  group by city,cityName,slaveKey1,slaveKey1Name");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         sql.append(" and quotaCode='" + quotaCode + "'  ");
 | 
	
		
			
				|  |  |         sql.append(" and timeLevel='" + timeLevel + "'  ");
 | 
	
		
			
				|  |  |         sql.append(" and areaLevel='5'");
 | 
	
		
			
				|  |  |         sql.append(" and quotaDate='" + quotaDate + "'");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         sql.append(groupBy);
 | 
	
		
			
				|  |  |         return excute(sql.toString());
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询某一天父level下的子level 例如 查询市下面的团队,或者区下面的团队
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param quotaCode      指标code
 | 
	
		
			
				|  |  |      * @param code           机构code或者科室code或者town code或者city code或者医生code
 | 
	
		
			
				|  |  |      * @param quotaDate      指标code
 | 
	
		
			
				|  |  |      * @param timeLevel      1增量 2到达量
 | 
	
		
			
				|  |  |      * @param areaLevel      父arealevel
 | 
	
		
			
				|  |  |      * @param childAreaLevel 子arealevel
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<SaveModel> findOneDateQuotaByChllevel(String quotaCode,
 | 
	
		
			
				|  |  |                                                       String code,
 | 
	
		
			
				|  |  |                                                       String quotaDate,
 | 
	
		
			
				|  |  |                                                       String timeLevel,
 | 
	
		
			
				|  |  |                                                       String areaLevel,
 | 
	
		
			
				|  |  |                                                       String childAreaLevel) {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
 | 
	
		
			
				|  |  |         quotaDate = changeDate(quotaDate);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         StringBuffer sql = new StringBuffer();
 | 
	
		
			
				|  |  |         StringBuffer groupBy = new StringBuffer();
 | 
	
		
			
				|  |  |         //根据 childAreaLevel   group by
 | 
	
		
			
				|  |  |         if (SaveModel.doctorLevel.equals(childAreaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select doctor,doctorName,result1,result2 from "+esType+" where  ");
 | 
	
		
			
				|  |  |         }else if (SaveModel.deptLevel.equals(childAreaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select dept,deptName,sum(result1),sum(result2) from "+esType+" where  ");
 | 
	
		
			
				|  |  |         } else if (SaveModel.OrgLevel.equals(childAreaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from "+esType+" where  ");
 | 
	
		
			
				|  |  |             groupBy.append(" group by hospital,hospitalName");
 | 
	
		
			
				|  |  |         } else if (SaveModel.townLevel.equals(childAreaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from "+esType+" where ");
 | 
	
		
			
				|  |  |             groupBy.append(" group by town,townName");
 | 
	
		
			
				|  |  |         } else if (SaveModel.cityLevel.equals(childAreaLevel)) {
 | 
	
		
			
				|  |  |             sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from "+esType+" where  ");
 | 
	
		
			
				|  |  |             groupBy.append(" group by city,cityName");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         sql.append("  quotaCode='" + quotaCode + "'  ");
 | 
	
		
			
				|  |  |         sql.append(" and timeLevel='" + timeLevel + "'  ");
 | 
	
		
			
				|  |  |         sql.append(" and areaLevel='5'");
 | 
	
		
			
				|  |  |         sql.append(" and quotaDate='" + quotaDate + "'");
 | 
	
		
			
				|  |  |         //查询code
 | 
	
		
			
				|  |  |         if (SaveModel.doctorLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append(" and dcotor='" + code + "'");
 | 
	
		
			
				|  |  |         }else if (SaveModel.deptLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append(" and dept='" + code + "'");
 | 
	
		
			
				|  |  |         } else if (SaveModel.OrgLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append(" and hospital='" + code + "'");
 | 
	
		
			
				|  |  |         } else if (SaveModel.townLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append(" and town='" + code + "'");
 | 
	
		
			
				|  |  |         } else if (SaveModel.cityLevel.equals(areaLevel)) {
 | 
	
		
			
				|  |  |             sql.append(" and city='" + code + "'");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         sql.append(groupBy);
 | 
	
		
			
				|  |  |         return excute(sql.toString());
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param quotaDate
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     private String changeDate(String quotaDate) {
 | 
	
		
			
				|  |  |         return quotaDate + "T00:00:00+0800";
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 执行sql查询es
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param sql
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<SaveModel> excute(String sql) {
 | 
	
		
			
				|  |  |         List<SaveModel> saveModels = new ArrayList<>();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             SQLExprParser parser = new ElasticSqlExprParser(sql);
 | 
	
		
			
				|  |  |             SQLExpr expr = parser.expr();
 | 
	
		
			
				|  |  |             SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
 | 
	
		
			
				|  |  | //            if (parser.getLexer().token() != Token.EOF) {
 | 
	
		
			
				|  |  | //                throw new ParserException("illegal sql expr : " + sql);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  |             Select select = null;
 | 
	
		
			
				|  |  |             select = new SqlParser().parseSelect(queryExpr);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
 | 
	
		
			
				|  |  |             AggregationQueryAction action = null;
 | 
	
		
			
				|  |  |             DefaultQueryAction queryAction = null;
 | 
	
		
			
				|  |  |             SqlElasticSearchRequestBuilder requestBuilder = null;
 | 
	
		
			
				|  |  |             if (select.isAgg) {
 | 
	
		
			
				|  |  |                 //包含计算的的排序分组的
 | 
	
		
			
				|  |  |                 action = new AggregationQueryAction(elasticFactory.getTransportClient(), select);
 | 
	
		
			
				|  |  |                 requestBuilder = action.explain();
 | 
	
		
			
				|  |  |             } else {
 | 
	
		
			
				|  |  |                 //封装成自己的Select对象
 | 
	
		
			
				|  |  |                 Client client = elasticFactory.getTransportClient();
 | 
	
		
			
				|  |  |                 queryAction = new DefaultQueryAction(client, select);
 | 
	
		
			
				|  |  |                 requestBuilder = queryAction.explain();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             SearchResponse response = (SearchResponse) requestBuilder.get();
 | 
	
		
			
				|  |  |             Object queryResult = null;
 | 
	
		
			
				|  |  |             if(sql.toUpperCase().indexOf("GROUP")!=-1||sql.toUpperCase().indexOf("SUM")!=-1){
 | 
	
		
			
				|  |  |                 queryResult = response.getAggregations();
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 queryResult = response.getHits();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(queryResult, true);
 | 
	
		
			
				|  |  |             List<String> heads = temp.getHeaders();
 | 
	
		
			
				|  |  |             temp.getLines().stream().forEach(one -> {
 | 
	
		
			
				|  |  |                 try {
 | 
	
		
			
				|  |  |                     SaveModel saveModel = new SaveModel();
 | 
	
		
			
				|  |  |                     for (int i = 0; i < one.size(); i++) {
 | 
	
		
			
				|  |  |                         String key = null;
 | 
	
		
			
				|  |  |                         Object value = one.get(i);
 | 
	
		
			
				|  |  |                         if(heads.get(i).startsWith("_")){
 | 
	
		
			
				|  |  |                             continue;
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         if (heads.get(i).contains("date_histogram")) {
 | 
	
		
			
				|  |  |                             key = "setQuotaDate";
 | 
	
		
			
				|  |  |                             value=DateUtil.strToDate(String.valueOf(value),"yyyy-MM-dd HH:mm:ss");
 | 
	
		
			
				|  |  |                         } else {
 | 
	
		
			
				|  |  |                             key = "set" + UpFirstStr(heads.get(i));
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                         if (value instanceof String) {
 | 
	
		
			
				|  |  |                             SaveModel.class.getMethod(key, String.class).invoke(saveModel, value);
 | 
	
		
			
				|  |  |                         } else if (value instanceof Integer) {
 | 
	
		
			
				|  |  |                             SaveModel.class.getMethod(key, Integer.class).invoke(saveModel, value);
 | 
	
		
			
				|  |  |                         } else if (value instanceof Double) {
 | 
	
		
			
				|  |  |                             SaveModel.class.getMethod(key, Integer.class).invoke(saveModel, ((Double) value).intValue());
 | 
	
		
			
				|  |  |                         } else if (value instanceof java.util.Date) {
 | 
	
		
			
				|  |  |                             SaveModel.class.getMethod(key, java.util.Date.class).invoke(saveModel, value);
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     saveModels.add(saveModel);
 | 
	
		
			
				|  |  |                 } catch (Exception e) {
 | 
	
		
			
				|  |  |                     e.printStackTrace();
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             });
 | 
	
		
			
				|  |  |         } catch (Exception e) {
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return saveModels;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public<T> List<T> excute(String sql, Class<T> clazz) {
 | 
	
		
			
				|  |  |         List saveModels = new ArrayList<>();
 | 
	
		
			
				|  |  |         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX");
 | 
	
		
			
				|  |  |         SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             //解决 group by之后默认是200的问题
 | 
	
		
			
				|  |  |             if (sql.toLowerCase().contains("group by")) {
 | 
	
		
			
				|  |  |                 sql = sql + " limit 0,2000";
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             SQLExprParser parser = new ElasticSqlExprParser(sql);
 | 
	
		
			
				|  |  |             SQLExpr expr = parser.expr();
 | 
	
		
			
				|  |  |             SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             Select select = null;
 | 
	
		
			
				|  |  |             select = new SqlParser().parseSelect(queryExpr);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
 | 
	
		
			
				|  |  |             AggregationQueryAction action = null;
 | 
	
		
			
				|  |  |             DefaultQueryAction queryAction = null;
 | 
	
		
			
				|  |  |             SqlElasticSearchRequestBuilder requestBuilder = null;
 | 
	
		
			
				|  |  |             if (select.isAgg) {
 | 
	
		
			
				|  |  |                 //包含计算的的排序分组的
 | 
	
		
			
				|  |  |                 action = new AggregationQueryAction(elasticFactory.getTransportClient(), select);
 | 
	
		
			
				|  |  |                 requestBuilder = action.explain();
 | 
	
		
			
				|  |  |             } else {
 | 
	
		
			
				|  |  |                 //封装成自己的Select对象
 | 
	
		
			
				|  |  |                 queryAction = new DefaultQueryAction(elasticFactory.getTransportClient(), select);
 | 
	
		
			
				|  |  |                 requestBuilder = queryAction.explain();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             SearchResponse response = (SearchResponse) requestBuilder.get();
 | 
	
		
			
				|  |  |             Object queryResult = null;
 | 
	
		
			
				|  |  |             if (sql.toUpperCase().indexOf("GROUP") != -1 || sql.toUpperCase().indexOf("SUM") != -1 || select.isAgg) {
 | 
	
		
			
				|  |  |                 queryResult = response.getAggregations();
 | 
	
		
			
				|  |  |             } else {
 | 
	
		
			
				|  |  |                 queryResult = response.getHits();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(queryResult, true);
 | 
	
		
			
				|  |  |             List<String> heads = temp.getHeaders();
 | 
	
		
			
				|  |  |             temp.getLines().forEach(one -> {
 | 
	
		
			
				|  |  |                 Object saveModel = null;
 | 
	
		
			
				|  |  |                 try {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     saveModel = clazz.newInstance();
 | 
	
		
			
				|  |  |                 } catch (Exception e) {
 | 
	
		
			
				|  |  |                     logger.error(e.getMessage());
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 for (int i = 0; i < one.size(); i++) {
 | 
	
		
			
				|  |  |                     try {
 | 
	
		
			
				|  |  |                         String key = null;
 | 
	
		
			
				|  |  |                         Object value = one.get(i);
 | 
	
		
			
				|  |  |                         if (heads.get(i).startsWith("_")) {
 | 
	
		
			
				|  |  |                             continue;
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         key = "set" + UpFirstStr(heads.get(i));
 | 
	
		
			
				|  |  |                         if (heads.get(i).contains("quotaDate") || heads.get(i).contains("createTime") || heads.get(i).contains("date_histogram")) {
 | 
	
		
			
				|  |  |                             if (heads.get(i).contains("date_histogram")) {
 | 
	
		
			
				|  |  |                                 key = "setQuotaDate";
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                             try {
 | 
	
		
			
				|  |  |                                 //yyyy-MM-dd'T'HH:mm:ssXX
 | 
	
		
			
				|  |  |                                 value = dateFormat.parse(String.valueOf(one.get(i)));
 | 
	
		
			
				|  |  |                             } catch (Exception e) {
 | 
	
		
			
				|  |  |                                 //yyyy-MM-dd HH:mm:ss
 | 
	
		
			
				|  |  |                                 try {
 | 
	
		
			
				|  |  |                                     value = dateFormat1.parse(String.valueOf(one.get(i)));
 | 
	
		
			
				|  |  |                                 }catch (Exception e1){
 | 
	
		
			
				|  |  |                                     Timestamp ts = new Timestamp(Long.parseLong(String.valueOf(one.get(i))));
 | 
	
		
			
				|  |  |                                     try {
 | 
	
		
			
				|  |  |                                         Date date = new Date();
 | 
	
		
			
				|  |  |                                         date = ts;
 | 
	
		
			
				|  |  |                                         value =date;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                                     } catch (Exception e2) {
 | 
	
		
			
				|  |  |                                         value = String.valueOf(one.get(i));
 | 
	
		
			
				|  |  |                                     }
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  | //                            value = DateUtil.strToDate(String.valueOf(value).replace("T00:00:00+0800", " 00:00:00"), "yyyy-MM-dd HH:mm:ss");
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                         if (value instanceof String) {
 | 
	
		
			
				|  |  |                             clazz.getMethod(key, String.class).invoke(saveModel, value);
 | 
	
		
			
				|  |  |                         } else if (value instanceof Integer) {
 | 
	
		
			
				|  |  |                             Field field = clazz.getDeclaredField(heads.get(i));
 | 
	
		
			
				|  |  |                             if(field.getGenericType().getTypeName().equals("java.lang.Long")) {
 | 
	
		
			
				|  |  |                                 clazz.getMethod(key, Long.class).invoke(saveModel, Long.valueOf(value + ""));
 | 
	
		
			
				|  |  |                             } else {
 | 
	
		
			
				|  |  |                                 clazz.getMethod(key, Integer.class).invoke(saveModel, value);
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         } else if (value instanceof Double) {
 | 
	
		
			
				|  |  |                             clazz.getMethod(key, Double.class).invoke(saveModel, value);
 | 
	
		
			
				|  |  |                         } else if (value instanceof java.util.Date) {
 | 
	
		
			
				|  |  |                             clazz.getMethod(key, java.util.Date.class).invoke(saveModel, value);
 | 
	
		
			
				|  |  |                         } else if (value instanceof java.util.List) {
 | 
	
		
			
				|  |  |                             Field field = clazz.getDeclaredField(heads.get(i));
 | 
	
		
			
				|  |  |                             if(field.getGenericType().getTypeName().equals("java.util.Set<java.lang.String>")){
 | 
	
		
			
				|  |  |                                 Set<String> set = new HashSet<>();
 | 
	
		
			
				|  |  |                                 for(Object s : (ArrayList) value){
 | 
	
		
			
				|  |  |                                     set.add(s + "");
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                                 clazz.getMethod(key, java.util.Set.class).invoke(saveModel, set);
 | 
	
		
			
				|  |  |                             }else {
 | 
	
		
			
				|  |  |                                 clazz.getMethod(key, java.util.List.class).invoke(saveModel, value);
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     } catch (Exception e) {
 | 
	
		
			
				|  |  |                         logger.warn(e.getMessage());
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 saveModels.add(saveModel);
 | 
	
		
			
				|  |  |             });
 | 
	
		
			
				|  |  |         } catch (Exception e) {
 | 
	
		
			
				|  |  |             logger.error(e.getMessage());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return saveModels;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 执行sql查询es
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param sql
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<DataModel> excuteDataModel(String sql) {
 | 
	
		
			
				|  |  |         List<DataModel> saveModels = new ArrayList<>();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             SQLExprParser parser = new ElasticSqlExprParser(sql);
 | 
	
		
			
				|  |  |             SQLExpr expr = parser.expr();
 | 
	
		
			
				|  |  |             SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
 | 
	
		
			
				|  |  | //            if (parser.getLexer().token() != Token.EOF) {
 | 
	
		
			
				|  |  | //                throw new ParserException("illegal sql expr : " + sql);
 | 
	
		
			
				|  |  | //            }
 | 
	
		
			
				|  |  |             Select select = null;
 | 
	
		
			
				|  |  |             select = new SqlParser().parseSelect(queryExpr);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
 | 
	
		
			
				|  |  |             AggregationQueryAction action = null;
 | 
	
		
			
				|  |  |             DefaultQueryAction queryAction = null;
 | 
	
		
			
				|  |  |             SqlElasticSearchRequestBuilder requestBuilder = null;
 | 
	
		
			
				|  |  |             if (select.isAgg) {
 | 
	
		
			
				|  |  |                 //包含计算的的排序分组的
 | 
	
		
			
				|  |  |                 action = new AggregationQueryAction(elasticFactory.getTransportClient(), select);
 | 
	
		
			
				|  |  |                 requestBuilder = action.explain();
 | 
	
		
			
				|  |  |             } else {
 | 
	
		
			
				|  |  |                 //封装成自己的Select对象
 | 
	
		
			
				|  |  |                 Client client = elasticFactory.getTransportClient();
 | 
	
		
			
				|  |  |                 queryAction = new DefaultQueryAction(client, select);
 | 
	
		
			
				|  |  |                 requestBuilder = queryAction.explain();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             SearchResponse response = (SearchResponse) requestBuilder.get();
 | 
	
		
			
				|  |  |             Object queryResult = null;
 | 
	
		
			
				|  |  |             if(sql.toUpperCase().indexOf("GROUP")!=-1||sql.toUpperCase().indexOf("SUM")!=-1){
 | 
	
		
			
				|  |  |                 queryResult = response.getAggregations();
 | 
	
		
			
				|  |  |             }else{
 | 
	
		
			
				|  |  |                 queryResult = response.getHits();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(queryResult, true);
 | 
	
		
			
				|  |  |             List<String> heads = temp.getHeaders();
 | 
	
		
			
				|  |  |             for(List<Object> one:temp.getLines()){
 | 
	
		
			
				|  |  | //            temp.getLines().stream().forEach(one -> {
 | 
	
		
			
				|  |  |                 try {
 | 
	
		
			
				|  |  |                     DataModel dataModel = new DataModel();
 | 
	
		
			
				|  |  |                     for (int i = 0; i < one.size(); i++) {
 | 
	
		
			
				|  |  |                         String key = null;
 | 
	
		
			
				|  |  |                         Object value = one.get(i);
 | 
	
		
			
				|  |  |                         if(heads.get(i).startsWith("_")){
 | 
	
		
			
				|  |  |                             continue;
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         if (heads.get(i).contains("date_histogram")) {
 | 
	
		
			
				|  |  |                             key = "setQuotaDate";
 | 
	
		
			
				|  |  |                             value=DateUtil.strToDate(String.valueOf(value),"yyyy-MM-dd HH:mm:ss");
 | 
	
		
			
				|  |  |                         } else {
 | 
	
		
			
				|  |  |                             key = "set" + UpFirstStr(heads.get(i));
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         try {
 | 
	
		
			
				|  |  |                             if (value instanceof String) {
 | 
	
		
			
				|  |  |                                  DataModel.class.getMethod(key, String.class).invoke(dataModel, value);
 | 
	
		
			
				|  |  |                             } else if (value instanceof Integer) {
 | 
	
		
			
				|  |  |                                 DataModel.class.getMethod(key, Integer.class).invoke(dataModel, value);
 | 
	
		
			
				|  |  |                             } else if (value instanceof Double) {
 | 
	
		
			
				|  |  |                                 DataModel.class.getMethod(key, Double.class).invoke(dataModel, value);
 | 
	
		
			
				|  |  |                             } else if (value instanceof java.util.Date) {
 | 
	
		
			
				|  |  |                                 DataModel.class.getMethod(key, java.util.Date.class).invoke(dataModel, value);
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         }catch (Exception e){
 | 
	
		
			
				|  |  |                             logger.error(e.getMessage());
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     saveModels.add(dataModel);
 | 
	
		
			
				|  |  |                 } catch (Exception e) {
 | 
	
		
			
				|  |  |                     e.printStackTrace();
 | 
	
		
			
				|  |  |                 }}
 | 
	
		
			
				|  |  | //            });
 | 
	
		
			
				|  |  |         } catch (Exception e) {
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return saveModels;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 首字母大写
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param str
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     private String UpFirstStr(String str) {
 | 
	
		
			
				|  |  |         return str.replaceFirst(str.substring(0, 1), str.substring(0, 1).toUpperCase());
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | }
 |