ElasticsearchUtil.java 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046
  1. package com.yihu.wlyy.util;
  2. import com.alibaba.druid.sql.ast.SQLExpr;
  3. import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
  4. import com.alibaba.druid.sql.parser.SQLExprParser;
  5. import com.yihu.wlyy.config.es.ElasticFactory;
  6. import com.yihu.wlyy.web.quota.vo.SaveModel;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.elasticsearch.action.search.SearchResponse;
  9. import org.nlpcn.es4sql.domain.Select;
  10. import org.nlpcn.es4sql.jdbc.ObjectResult;
  11. import org.nlpcn.es4sql.jdbc.ObjectResultsExtractor;
  12. import org.nlpcn.es4sql.parse.ElasticSqlExprParser;
  13. import org.nlpcn.es4sql.parse.SqlParser;
  14. import org.nlpcn.es4sql.query.AggregationQueryAction;
  15. import org.nlpcn.es4sql.query.DefaultQueryAction;
  16. import org.nlpcn.es4sql.query.SqlElasticSearchRequestBuilder;
  17. import org.slf4j.Logger;
  18. import org.slf4j.LoggerFactory;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.data.redis.core.StringRedisTemplate;
  22. import org.springframework.stereotype.Component;
  23. import java.text.ParseException;
  24. import java.text.SimpleDateFormat;
  25. import java.util.ArrayList;
  26. import java.util.Date;
  27. import java.util.List;
  28. /**
  29. * Created by chenweida on 2017/7/17.
  30. * SELECT town,townName,sum(result1) result1 FROM wlyy_quota_test
  31. * where quotaCode='1'
  32. * group by town,townName , date_histogram(field='quotaDate','interval'='week')
  33. */
  34. @Component
  35. public class ElasticsearchUtil {
  36. private Logger logger = LoggerFactory.getLogger(ElasticsearchUtil.class);
  37. @Autowired
  38. private ElasticFactory elasticFactory;
  39. @Autowired
  40. private StringRedisTemplate redisTemplate;
  41. @Value("${es.type.Statistics}")
  42. private String esType;
  43. @Value("${es.index.Statistics}")
  44. private String esIndex;
  45. public List excute(String sql, Class clazz, String esType, String esIndex) {
  46. List saveModels = new ArrayList<>();
  47. try {
  48. //解决 group by之后默认是200的问题
  49. if (sql.toLowerCase().contains("group by")) {
  50. sql = sql + " limit 0,2000";
  51. }
  52. SQLExprParser parser = new ElasticSqlExprParser(sql);
  53. SQLExpr expr = parser.expr();
  54. SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
  55. Select select = null;
  56. select = new SqlParser().parseSelect(queryExpr);
  57. //通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
  58. AggregationQueryAction action = null;
  59. DefaultQueryAction queryAction = null;
  60. SqlElasticSearchRequestBuilder requestBuilder = null;
  61. if (select.isAgg) {
  62. //包含计算的的排序分组的
  63. action = new AggregationQueryAction(elasticFactory.getTransportClient(), select);
  64. requestBuilder = action.explain();
  65. } else {
  66. //封装成自己的Select对象
  67. queryAction = new DefaultQueryAction(elasticFactory.getTransportClient(), select);
  68. requestBuilder = queryAction.explain();
  69. }
  70. SearchResponse response = (SearchResponse) requestBuilder.get();
  71. Object queryResult = null;
  72. if (sql.toUpperCase().indexOf("GROUP") != -1 || sql.toUpperCase().indexOf("SUM") != -1) {
  73. queryResult = response.getAggregations();
  74. } else {
  75. queryResult = response.getHits();
  76. }
  77. ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(queryResult, true);
  78. List<String> heads = temp.getHeaders();
  79. temp.getLines().forEach(one -> {
  80. Object saveModel = null;
  81. try {
  82. saveModel = clazz.newInstance();
  83. } catch (Exception e) {
  84. logger.error(e.getMessage());
  85. }
  86. for (int i = 0; i < one.size(); i++) {
  87. try {
  88. String key = null;
  89. Object value = one.get(i);
  90. if (heads.get(i).startsWith("_")) {
  91. continue;
  92. }
  93. key = "set" + UpFirstStr(heads.get(i));
  94. if (heads.get(i).contains("quotaDate") || heads.get(i).contains("createTime") || heads.get(i).contains("date_histogram")) {
  95. if (heads.get(i).contains("date_histogram")) {
  96. key = "setQuotaDate";
  97. }
  98. value = DateUtil.strToDate(String.valueOf(value).replace("T00:00:00+0800", " 00:00:00"), "yyyy-MM-dd HH:mm:ss");
  99. }
  100. if (value instanceof String) {
  101. clazz.getMethod(key, String.class).invoke(saveModel, value);
  102. } else if (value instanceof Integer) {
  103. clazz.getMethod(key, Integer.class).invoke(saveModel, value);
  104. } else if (value instanceof Double) {
  105. clazz.getMethod(key, Double.class).invoke(saveModel, value);
  106. } else if (value instanceof java.util.Date) {
  107. clazz.getMethod(key, java.util.Date.class).invoke(saveModel, value);
  108. }
  109. } catch (Exception e) {
  110. logger.warn(e.getMessage());
  111. }
  112. }
  113. saveModels.add(saveModel);
  114. });
  115. } catch (Exception e) {
  116. logger.error(e.getMessage());
  117. }
  118. return saveModels;
  119. }
  120. public Long excuteForLong(String sql, String esType, String esIndex) {
  121. try {
  122. SQLExprParser parser = new ElasticSqlExprParser(sql);
  123. SQLExpr expr = parser.expr();
  124. SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
  125. Select select = null;
  126. select = new SqlParser().parseSelect(queryExpr);
  127. //通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
  128. AggregationQueryAction action = null;
  129. DefaultQueryAction queryAction = null;
  130. SqlElasticSearchRequestBuilder requestBuilder = null;
  131. if (select.isAgg) {
  132. //包含计算的的排序分组的
  133. action = new AggregationQueryAction(elasticFactory.getTransportClient(), select);
  134. requestBuilder = action.explain();
  135. } else {
  136. //封装成自己的Select对象
  137. queryAction = new DefaultQueryAction(elasticFactory.getTransportClient(), select);
  138. requestBuilder = queryAction.explain();
  139. }
  140. SearchResponse response = (SearchResponse) requestBuilder.get();
  141. ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(response.getAggregations(), true);
  142. Long Longvalue = ((Double) temp.getLines().get(0).get(1)).longValue();
  143. return Longvalue;
  144. } catch (Exception e) {
  145. logger.error(e.getMessage());
  146. }
  147. return 0L;
  148. }
  149. /**
  150. * 首字母大写
  151. *
  152. * @param str
  153. * @return
  154. */
  155. private String UpFirstStr(String str) {
  156. return str.replaceFirst(str.substring(0, 1), str.substring(0, 1).toUpperCase());
  157. }
  158. public Object excuteOneObject(String sql, Class clazz, String esType, String esIndex) {
  159. try {
  160. SQLExprParser parser = new ElasticSqlExprParser(sql);
  161. SQLExpr expr = parser.expr();
  162. SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
  163. Select select = null;
  164. select = new SqlParser().parseSelect(queryExpr);
  165. //通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
  166. AggregationQueryAction action = null;
  167. DefaultQueryAction queryAction = null;
  168. SqlElasticSearchRequestBuilder requestBuilder = null;
  169. if (select.isAgg) {
  170. //包含计算的的排序分组的
  171. action = new AggregationQueryAction(elasticFactory.getTransportClient(), select);
  172. requestBuilder = action.explain();
  173. } else {
  174. //封装成自己的Select对象
  175. queryAction = new DefaultQueryAction(elasticFactory.getTransportClient(), select);
  176. requestBuilder = queryAction.explain();
  177. }
  178. SearchResponse response = (SearchResponse) requestBuilder.get();
  179. ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(response.getHits(), true);
  180. List<String> heads = temp.getHeaders();
  181. Object saveModel = clazz.newInstance();
  182. try {
  183. for (int i = 0; i < temp.getLines().get(0).size(); i++) {
  184. String key = null;
  185. Object value = temp.getLines().get(0).get(i);
  186. if (heads.get(i).contains("createTime")) {
  187. key = "setCreateTime";
  188. value = DateUtil.strToDate(String.valueOf(value).replace("+0800", "").replace("T", " "), "yyyy-MM-dd HH:mm:ss");
  189. } else {
  190. key = "set" + UpFirstStr(heads.get(i));
  191. }
  192. if (value instanceof String) {
  193. clazz.getMethod(key, String.class).invoke(saveModel, value);
  194. } else if (value instanceof Integer) {
  195. clazz.getMethod(key, Integer.class).invoke(saveModel, value);
  196. } else if (value instanceof Double) {
  197. clazz.getMethod(key, Double.class).invoke(saveModel, value);
  198. } else if (value instanceof java.util.Date) {
  199. clazz.getMethod(key, java.util.Date.class).invoke(saveModel, value);
  200. }
  201. }
  202. } catch (Exception e) {
  203. logger.warn(e.getMessage());
  204. }
  205. return saveModel;
  206. } catch (Exception e) {
  207. logger.error(e.getMessage());
  208. }
  209. return null;
  210. }
  211. /**
  212. * 0级指标查询列表
  213. * 获取所有指标的增量、到达量
  214. * 备注:原来接口的一级指标对应现在的
  215. *
  216. * @param startDate 开始时间
  217. * @param endDate 结束时间
  218. * @param area 区域code
  219. * @param level 等级
  220. * @param index 指标
  221. * @param timeLevel 1增量 2到达量
  222. * @param interval 1日 2周 3月
  223. * @param lowLevel 下一级区域等级
  224. * @return
  225. * @throws Exception
  226. */
  227. public List findDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel) throws Exception {
  228. //时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
  229. if (StringUtils.isNotEmpty(startDate)) {
  230. if (startDate.length() > 10) {
  231. startDate = changeTime(startDate);
  232. } else {
  233. startDate = changeDate(startDate);
  234. }
  235. }
  236. if (StringUtils.isNotEmpty(endDate)) {
  237. if (endDate.length() > 10) {
  238. endDate = changeTime(endDate);
  239. } else {
  240. endDate = changeDate(endDate);
  241. }
  242. }
  243. StringBuffer sql = new StringBuffer();
  244. StringBuffer groupBy = new StringBuffer();
  245. String low_level = level + "";
  246. if (StringUtils.isNotEmpty(lowLevel)) {
  247. low_level = lowLevel;
  248. }
  249. if (SaveModel.teamLevel.equals(low_level)) {
  250. sql.append("select team,teamName,sum(result1) result1, sum(result2) result2 from " + esIndex + " where ");
  251. groupBy.append(" group by team,teamName");
  252. } else if (SaveModel.OrgLevel.equals(low_level)) {
  253. sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
  254. groupBy.append(" group by hospital,hospitalName");
  255. } else if (SaveModel.townLevel.equals(low_level)) {
  256. sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
  257. groupBy.append(" group by town,townName");
  258. } else if (SaveModel.cityLevel.equals(low_level)) {
  259. sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
  260. groupBy.append(" group by city,cityName");
  261. }
  262. if (StringUtils.isNotEmpty(area)) {
  263. if (SaveModel.teamLevel.equals(level + "")) {
  264. sql.append(" team='" + area + "'");
  265. } else if (SaveModel.OrgLevel.equals(level + "")) {
  266. sql.append(" hospital='" + area + "'");
  267. } else if (SaveModel.townLevel.equals(level + "")) {
  268. sql.append(" town='" + area + "'");
  269. } else if (SaveModel.cityLevel.equals(level + "")) {
  270. sql.append(" city='" + area + "'");
  271. }
  272. sql.append(" and ");
  273. }
  274. sql.append(" quotaCode='" + index + "' ");
  275. sql.append(" and timeLevel='" + timeLevel + "' ");
  276. sql.append(" and areaLevel='5'");
  277. if (StringUtils.isNotEmpty(startDate)) {
  278. sql.append(" and quotaDate>='" + startDate + "'");
  279. }
  280. if (StringUtils.isNotEmpty(endDate)) {
  281. sql.append(" and quotaDate<='" + endDate + "'");
  282. }
  283. //根据时间维度分组
  284. if (StringUtils.isNotEmpty(interval)) {
  285. if (SaveModel.interval_month.equals(interval)) {
  286. groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00') ");
  287. } else if (SaveModel.interval_week.equals(interval)) {
  288. groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00') ");
  289. } else if (SaveModel.interval_day.equals(interval)) {
  290. groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00') ");
  291. }
  292. }
  293. sql.append(groupBy);
  294. return excute(sql.toString(), SaveModel.class, "", "");
  295. }
  296. /**
  297. * 一级指标查询列表
  298. * 获取一级指标的增量、到达量
  299. * 备注:原接口的二级指标对应现在的一级指标
  300. *
  301. * @param startDate 开始时间
  302. * @param endDate 结束时间
  303. * @param area 区域code
  304. * @param level 等级
  305. * @param index 指标
  306. * @param timeLevel 1增量 2到达量
  307. * @param slaveKeyValue 一级维度
  308. * @param interval 1日 2周 3月
  309. * @param lowLevel 下个等级
  310. * @return
  311. * @throws Exception
  312. */
  313. public List findDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timeLevel, int keyNum, String slaveKeyValue, String interval, String lowLevel) throws Exception {
  314. String slaveKey = "";
  315. String slaveKeyName = "";
  316. if (keyNum == 1) {
  317. slaveKey = "slaveKey1";
  318. slaveKeyName = "slaveKey1Name";
  319. } else if (keyNum == 2) {
  320. slaveKey = "slaveKey2";
  321. slaveKeyName = "slaveKey2Name";
  322. }
  323. //时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
  324. if (StringUtils.isNotEmpty(startDate)) {
  325. if (startDate.length() > 10) {
  326. startDate = changeTime(startDate);
  327. } else {
  328. startDate = changeDate(startDate);
  329. }
  330. }
  331. if (StringUtils.isNotEmpty(endDate)) {
  332. if (endDate.length() > 10) {
  333. endDate = changeTime(endDate);
  334. } else {
  335. endDate = changeDate(endDate);
  336. }
  337. }
  338. StringBuffer sql = new StringBuffer();
  339. StringBuffer groupBy = new StringBuffer();
  340. String low_level = level + "";
  341. if (StringUtils.isNotEmpty(lowLevel)) {
  342. low_level = lowLevel;
  343. }
  344. if (SaveModel.teamLevel.equals(low_level)) {
  345. sql.append("select team,teamName," + slaveKey + "," + slaveKeyName + ",sum(result1) result1, sum(result2) result2 from " + esIndex + " where ");
  346. groupBy.append(" group by team,teamName," + slaveKey + "," + slaveKeyName);
  347. } else if (SaveModel.OrgLevel.equals(low_level)) {
  348. sql.append("select hospital,hospitalName," + slaveKey + "," + slaveKeyName + ",sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
  349. groupBy.append(" group by hospital,hospitalName," + slaveKey + "," + slaveKeyName);
  350. } else if (SaveModel.townLevel.equals(low_level)) {
  351. sql.append("select town,townName," + slaveKey + ",slaveKey1Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
  352. groupBy.append(" group by town,townName," + slaveKey + "," + slaveKeyName);
  353. } else if (SaveModel.cityLevel.equals(low_level)) {
  354. sql.append("select city,cityName," + slaveKey + "," + slaveKeyName + ",sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
  355. groupBy.append(" group by city,cityName," + slaveKey + "," + slaveKeyName);
  356. }
  357. if (StringUtils.isNotEmpty(area)) {
  358. if (SaveModel.teamLevel.equals(level + "")) {
  359. sql.append(" team='" + area + "'");
  360. } else if (SaveModel.OrgLevel.equals(level + "")) {
  361. sql.append(" hospital='" + area + "'");
  362. } else if (SaveModel.townLevel.equals(level + "")) {
  363. sql.append(" town='" + area + "'");
  364. } else if (SaveModel.cityLevel.equals(level + "")) {
  365. sql.append(" city='" + area + "'");
  366. }
  367. sql.append(" and ");
  368. }
  369. sql.append(" quotaCode='" + index + "' ");
  370. sql.append(" and timeLevel='" + timeLevel + "' ");
  371. sql.append(" and areaLevel='5'");
  372. if (StringUtils.isNotEmpty(startDate)) {
  373. sql.append(" and quotaDate>='" + startDate + "'");
  374. }
  375. if (StringUtils.isNotEmpty(endDate)) {
  376. sql.append(" and quotaDate<='" + endDate + "'");
  377. }
  378. if (StringUtils.isNotEmpty(slaveKeyValue)) {
  379. sql.append(" and " + slaveKey + "='" + slaveKeyValue + "' ");
  380. }
  381. //根据时间维度分组
  382. if (StringUtils.isNotEmpty(interval)) {
  383. if (SaveModel.interval_month.equals(interval)) {
  384. groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00') ");
  385. } else if (SaveModel.interval_week.equals(interval)) {
  386. groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00') ");
  387. } else if (SaveModel.interval_day.equals(interval)) {
  388. groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00') ");
  389. }
  390. }
  391. sql.append(groupBy);
  392. return excute(sql.toString(), SaveModel.class, "", "");
  393. }
  394. /**
  395. * 二级指标查询列表
  396. * 获取二级指标的增量、到达量
  397. * 备注:原接口的三级指标对应现在的二级指标
  398. *
  399. * @param startDate 开始时间
  400. * @param endDate 结束时间
  401. * @param area 区域code
  402. * @param level 等级
  403. * @param index 指标
  404. * @param timeLevel 1增量 2到达量
  405. * @param slaveKey1 一级维度code
  406. * @param slaveKey2 二级维度code
  407. * @param interval 1日 2周 3月
  408. * @param lowLevel 下一等级
  409. * @return
  410. */
  411. public List findDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String slaveKey2, String interval, String lowLevel) {
  412. //时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
  413. if (StringUtils.isNotEmpty(startDate)) {
  414. if (startDate.length() > 10) {
  415. startDate = changeTime(startDate);
  416. } else {
  417. startDate = changeDate(startDate);
  418. }
  419. }
  420. if (StringUtils.isNotEmpty(endDate)) {
  421. if (endDate.length() > 10) {
  422. endDate = changeTime(endDate);
  423. } else {
  424. endDate = changeDate(endDate);
  425. }
  426. }
  427. StringBuffer sql = new StringBuffer();
  428. StringBuffer groupBy = new StringBuffer();
  429. String low_level = level + "";
  430. if (StringUtils.isNotEmpty(lowLevel)) {
  431. low_level = lowLevel;
  432. }
  433. if (SaveModel.teamLevel.equals(low_level)) {
  434. sql.append("select team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,result1,result2 from " + esIndex + " where ");
  435. groupBy.append(" group by team,teamName");
  436. if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
  437. groupBy.append(",slaveKey1,slaveKey1Name");
  438. }
  439. if (!org.springframework.util.StringUtils.isEmpty(slaveKey2)) {
  440. groupBy.append(",slaveKey2,slaveKey2Name");
  441. }
  442. } else if (SaveModel.OrgLevel.equals(low_level)) {
  443. sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
  444. groupBy.append(" group by hospital,hospitalName");
  445. if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
  446. groupBy.append(",slaveKey1,slaveKey1Name");
  447. }
  448. if (!org.springframework.util.StringUtils.isEmpty(slaveKey2)) {
  449. groupBy.append(",slaveKey2,slaveKey2Name");
  450. }
  451. } else if (SaveModel.townLevel.equals(low_level)) {
  452. sql.append("select town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
  453. groupBy.append(" group by town,townName");
  454. if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
  455. groupBy.append(",slaveKey1,slaveKey1Name");
  456. }
  457. if (!org.springframework.util.StringUtils.isEmpty(slaveKey2)) {
  458. groupBy.append(",slaveKey2,slaveKey2Name");
  459. }
  460. } else if (SaveModel.cityLevel.equals(low_level)) {
  461. sql.append("select city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
  462. groupBy.append(" group by city,cityName");
  463. if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
  464. groupBy.append(",slaveKey1,slaveKey1Name");
  465. }
  466. if (!org.springframework.util.StringUtils.isEmpty(slaveKey2)) {
  467. groupBy.append(",slaveKey2,slaveKey2Name");
  468. }
  469. }
  470. if (StringUtils.isNotEmpty(area)) {
  471. if (SaveModel.teamLevel.equals(level + "")) {
  472. sql.append(" team='" + area + "'");
  473. } else if (SaveModel.OrgLevel.equals(level + "")) {
  474. sql.append(" hospital='" + area + "'");
  475. } else if (SaveModel.townLevel.equals(level + "")) {
  476. sql.append(" town='" + area + "'");
  477. } else if (SaveModel.cityLevel.equals(level + "")) {
  478. sql.append(" city='" + area + "'");
  479. }
  480. sql.append(" and ");
  481. }
  482. sql.append(" quotaCode='" + index + "' ");
  483. sql.append(" and timeLevel='" + timeLevel + "' ");
  484. sql.append(" and areaLevel='5'");
  485. if (StringUtils.isNotEmpty(startDate)) {
  486. sql.append(" and quotaDate>='" + startDate + "'");
  487. }
  488. if (StringUtils.isNotEmpty(endDate)) {
  489. sql.append(" and quotaDate<='" + endDate + "'");
  490. }
  491. if (StringUtils.isNotBlank(slaveKey1)) {
  492. sql.append(" and slaveKey1='" + slaveKey1 + "'");
  493. }
  494. if (StringUtils.isNotBlank(slaveKey2)) {
  495. sql.append(" and slaveKey2='" + slaveKey2 + "'");
  496. }
  497. //根据时间维度分组
  498. if (StringUtils.isNotEmpty(interval)) {
  499. if (SaveModel.interval_month.equals(interval)) {
  500. groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00') ");
  501. } else if (SaveModel.interval_week.equals(interval)) {
  502. groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00') ");
  503. } else if (SaveModel.interval_day.equals(interval)) {
  504. groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00') ");
  505. }
  506. }
  507. sql.append(groupBy);
  508. return excute(sql.toString(), SaveModel.class, "", "");
  509. }
  510. /**
  511. * 时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
  512. *
  513. * @param quotaDate
  514. */
  515. private String changeDate(String quotaDate) {
  516. try {
  517. quotaDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd").parse(quotaDate));
  518. } catch (ParseException e) {
  519. e.printStackTrace();
  520. }
  521. return quotaDate;
  522. }
  523. public String changeTime(String time) {
  524. try {
  525. if (time.length() == 10) {
  526. time = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd").parse(time));
  527. } else if (time.length() == 19) {
  528. time = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time));
  529. }
  530. } catch (ParseException e) {
  531. e.printStackTrace();
  532. }
  533. return time;
  534. }
  535. //获取最新更新的时间
  536. public String getQuotaTime() {
  537. String date = redisTemplate.opsForValue().get("quota:date");
  538. // date = date.replace(" ","T")+"+0800";
  539. try {
  540. date = new SimpleDateFormat("yyyy-MM-dd").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date));
  541. } catch (ParseException e) {
  542. e.printStackTrace();
  543. }
  544. return date;
  545. }
  546. /**
  547. * 0级维度
  548. * 查询某一天某一个0级维度的指标
  549. *
  550. * @param quotaDate 时间 yyyy-mm-dd
  551. * @param area code 厦门市 350200
  552. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  553. * @param index 指标code
  554. * @param timelevel // 1日 2年
  555. * @return
  556. */
  557. public SaveModel findOneDateQuotaLevel0(String quotaDate, String area, int level, String index, String timelevel) throws Exception {
  558. List list = findDateQuotaLevel0(quotaDate, quotaDate, area, level, index, timelevel, null, null);
  559. return (SaveModel) list.get(0);
  560. }
  561. /**
  562. * 0级维度
  563. * 查询某个时间区间某一个0级维度的指标
  564. *
  565. * @param startDate 开始时间 yyyy-mm-dd
  566. * @param endDate 结束时间 yyyy-mm-dd
  567. * @param area code 厦门市 350200
  568. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  569. * @param index 指标code
  570. * @param timelevel // 1日 2年
  571. * @return
  572. */
  573. public SaveModel findOneDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timelevel) throws Exception {
  574. List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, null, null);
  575. return (SaveModel) list.get(0);
  576. }
  577. /**
  578. * 1级维度
  579. * 查询某一天某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者
  580. *
  581. * @param quotaDate 时间 yyyy-mm-dd
  582. * @param area code 厦门市 350200
  583. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  584. * @param index 指标code
  585. * @param timelevel // 1日 2年
  586. * @param slaveKey1 一级维度的key 不传返回全部
  587. * @return
  588. */
  589. public SaveModel findOneDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
  590. List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel, 1, slaveKey1, null, null);
  591. return (SaveModel) list.get(0);
  592. }
  593. /**
  594. * 1级维度
  595. * 查询某个时间区间某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者
  596. *
  597. * @param startDate 开始时间 yyyy-mm-dd
  598. * @param endDate 结束时间 yyyy-mm-dd
  599. * @param area code 厦门市 350200
  600. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  601. * @param index 指标code
  602. * @param timelevel // 1日 2年
  603. * @param slaveKey1 一级维度的key 不传返回全部
  604. * @return
  605. */
  606. public SaveModel findOneDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
  607. List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, 1, slaveKey1, null, null);
  608. return (SaveModel) list.get(0);
  609. }
  610. /**
  611. * 1级维度
  612. * 查询某一天某一个所有1级维度下的指标 例如某个机构下的所有维度的患者列表
  613. *
  614. * @param quotaDate 时间 yyyy-mm-dd
  615. * @param area code 厦门市 350200
  616. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  617. * @param index 指标code
  618. * @param timelevel // 1日 2年
  619. * @return
  620. */
  621. public List<SaveModel> findOneDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel) throws Exception {
  622. List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel, 1, null, null, null);
  623. return list;
  624. }
  625. /**
  626. * 1级维度
  627. * 查询某一天某一个所有1级维度下的指标 例如某个机构下的所有维度的患者列表
  628. *
  629. * @param area code 厦门市 350200
  630. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  631. * @param index 指标code
  632. * @param timelevel // 1日 2年
  633. * @return
  634. */
  635. public List<SaveModel> findOneDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel) throws Exception {
  636. List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, 1, null, null, null);
  637. return list;
  638. }
  639. /**
  640. * 2级维度
  641. * 查询某一天某一个2级维度的某个1级维度和2级维度下的指标 例如查询65岁以上的高血压患者
  642. *
  643. * @param quotaDate 时间 yyyy-mm-dd
  644. * @param area code 厦门市 350200
  645. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  646. * @param index 指标code
  647. * @param timelevel // 1日 2年
  648. * @param slaveKey1 一级维度的key
  649. * @param slaveKey2 二级维度的key
  650. * @return
  651. */
  652. public SaveModel findOneDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1, String slaveKey2) throws Exception {
  653. List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, null);
  654. return (SaveModel) list.get(0);
  655. }
  656. /**
  657. * 根据2级维度的2级指标去聚合 没有一级维度
  658. * 查询某一天某一个2级维度的某个1级维度和2级维度下的指标 例如查询65岁以上的高血压患者
  659. *
  660. * @param quotaDate 时间 yyyy-mm-dd
  661. * @param area code 厦门市 350200
  662. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  663. * @param index 指标code
  664. * @param timelevel // 1日 2年
  665. * @param slaveKey2 二级维度的key
  666. * @return
  667. */
  668. public SaveModel findOneDateQuotaLevel2NoSlaveKey1(String quotaDate, String area, int level, String index, String timelevel, String slaveKey2) throws Exception {
  669. List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, null, slaveKey2, null, null);
  670. return (SaveModel) list.get(0);
  671. }
  672. /**
  673. * 根据2级维度的1级指标去聚合 没有2级维度
  674. * 查询某一天某一个2级维度的某个1级维度和2级维度下的指标 例如查询65岁以上的高血压患者
  675. *
  676. * @param quotaDate 时间 yyyy-mm-dd
  677. * @param area code 厦门市 350200
  678. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  679. * @param index 指标code
  680. * @param timelevel // 1日 2年
  681. * @param slaveKey1 二级维度的key
  682. * @return
  683. */
  684. public SaveModel findOneDateQuotaLevel2NoSlave2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
  685. List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, null, null, null);
  686. return (SaveModel) list.get(0);
  687. }
  688. /**
  689. * 2级维度
  690. * 查询某个时间区间某一个2级维度的某个1级维度和2级维度下的指标 例如查询65岁以上的高血压患者
  691. *
  692. * @param startDate 开始时间 yyyy-mm-dd
  693. * @param endDate 结束时间 yyyy-mm-dd
  694. * @param area code 厦门市 350200
  695. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  696. * @param index 指标code
  697. * @param timelevel // 1日 2年
  698. * @param slaveKey1 一级维度的key
  699. * @param slaveKey2 二级维度的key
  700. * @return
  701. */
  702. public SaveModel findOneDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1, String slaveKey2) throws Exception {
  703. List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, null);
  704. return (SaveModel) list.get(0);
  705. }
  706. /**
  707. * 2级维度
  708. * 查询某一天某个1级维度下所有2级维度的指标 例如查询65岁以上的高血压患者
  709. *
  710. * @param quotaDate 时间 yyyy-mm-dd
  711. * @param area code 厦门市 350200
  712. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  713. * @param index 指标code
  714. * @param timelevel // 1日 2年
  715. * @param slaveKey1 一级维度的key
  716. * @return
  717. */
  718. public List<SaveModel> findOneDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
  719. List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, null, null, null);
  720. return list;
  721. }
  722. /**
  723. * 折线图
  724. * 0级维度
  725. * 查询某个0级维度的指标折线图
  726. *
  727. * @param startDate 开始时间 yyyy-mm-dd 包含头
  728. * @param endDate 结束时间 yyyy-mm-dd 包含头
  729. * @param area code 厦门市 350200 code 和level是对应的
  730. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  731. * @param index 指标code
  732. * @param timelevel 1增量 2到达量(按照年度)
  733. * @param interval 1日 2周 3月 (按照日周月聚合)
  734. * @return
  735. * @throws Exception
  736. */
  737. public List<SaveModel> findLineChartDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timelevel, String interval) throws Exception {
  738. List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, interval, null);
  739. return list;
  740. }
  741. /**
  742. * 折线图
  743. * 1级维度
  744. * 查询某个1级维度的某个1级维度下的折线图 例如查询65岁以上患者
  745. *
  746. * @param startDate 开始时间 yyyy-mm-dd 包含头
  747. * @param endDate 结束时间 yyyy-mm-dd 包含头
  748. * @param area code 厦门市 350200 code 和level是对应的
  749. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  750. * @param index 指标code
  751. * @param timelevel 1增量 2到达量(按照年度)
  752. * @param interval 1日 2周 3月 (按照日周月聚合)
  753. * @param slaveKey1 一级维度的key
  754. * @return
  755. */
  756. public List<SaveModel> findLineChartDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey1) throws Exception {
  757. List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, 1, slaveKey1, interval, null);
  758. return list;
  759. }
  760. /**
  761. * 折线图
  762. * 2级维度
  763. * 查询某个2级维度的某个1级维度和2级维度下的折线图 例如查询65岁以上的高血压患者
  764. *
  765. * @param startDate 开始时间 yyyy-mm-dd 包含头
  766. * @param endDate 结束时间 yyyy-mm-dd 包含头
  767. * @param area code 厦门市 350200 code 和level是对应的
  768. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  769. * @param index 指标code
  770. * @param timelevel 1增量 2到达量(按照年度)
  771. * @param interval 1日 2周 3月 (按照日周月聚合)
  772. * @param slaveKey1 一级维度的key
  773. * @param slaveKey2 二级维度的key
  774. * @return
  775. */
  776. public List<SaveModel> findLineChartDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey1, String slaveKey2) throws Exception {
  777. List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, slaveKey1, slaveKey2, interval, null);
  778. return list;
  779. }
  780. /**
  781. * 折线图
  782. * 2级维度只根绝第二个指标聚合
  783. * 查询某个2级维度的某个1级维度和2级维度下的折线图 例如查询65岁以上的高血压患者
  784. *
  785. * @param startDate 开始时间 yyyy-mm-dd 包含头
  786. * @param endDate 结束时间 yyyy-mm-dd 包含头
  787. * @param area code 厦门市 350200 code 和level是对应的
  788. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  789. * @param index 指标code
  790. * @param timelevel 1增量 2到达量(按照年度)
  791. * @param interval 1日 2周 3月 (按照日周月聚合)
  792. * @param slaveKey2 二级维度的key
  793. * @return
  794. */
  795. public List<SaveModel> findLineChartDateQuotaLevel2NoSlaveKey1(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey2) throws Exception {
  796. List list = findLineChartDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, interval, null,slaveKey2 );
  797. return list;
  798. }
  799. /**
  800. * 折线图
  801. * 2级维度只根绝第一个指标聚合
  802. * 查询某个2级维度的某个1级维度和2级维度下的折线图 例如查询65岁以上的高血压患者
  803. *
  804. * @param startDate 开始时间 yyyy-mm-dd 包含头
  805. * @param endDate 结束时间 yyyy-mm-dd 包含头
  806. * @param area code 厦门市 350200 code 和level是对应的
  807. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  808. * @param index 指标code
  809. * @param timelevel 1增量 2到达量(按照年度)
  810. * @param interval 1日 2周 3月 (按照日周月聚合)
  811. * @param slaveKey1 一级维度的key
  812. * @return
  813. */
  814. public List<SaveModel> findLineChartDateQuotaLevel2NoSlaveKey2(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey1) throws Exception {
  815. List list = findLineChartDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, interval, slaveKey1,null );
  816. return list;
  817. }
  818. /**
  819. * 折线图
  820. * 2级维度只根绝第一个指标聚合
  821. * 查询某个2级维度的某个1级维度和2级维度下的折线图 例如查询65岁以上的高血压患者
  822. *
  823. * @param startDate 开始时间 yyyy-mm-dd 包含头
  824. * @param endDate 结束时间 yyyy-mm-dd 包含头
  825. * @param area code 厦门市 350200 code 和level是对应的
  826. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  827. * @param index 指标code
  828. * @param timelevel 1增量 2到达量(按照年度)
  829. * @param interval 1日 2周 3月 (按照日周月聚合)
  830. * @return
  831. */
  832. public List<SaveModel> findLineChartDateQuotaLevel2NoSlaveKey1NoSlaveKey2(String startDate, String endDate, String area, int level, String index, String timelevel, String interval) throws Exception {
  833. List list = findLineChartDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, interval, null,null );
  834. return list;
  835. }
  836. /**
  837. * 列表
  838. * 0级维度
  839. * 查询某一天某个0级维度的指标列表
  840. *
  841. * @param quotaDate 时间 yyyy-mm-dd 包含头
  842. * @param area code 厦门市 350200 code 和level是对应的
  843. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  844. * @param index 指标code
  845. * @param timelevel 1增量 2到达量(按照年度)
  846. * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队
  847. * @return
  848. * @throws Exception
  849. */
  850. public List<SaveModel> findListDateQuotaLevel0(String quotaDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception {
  851. List list = findDateQuotaLevel0(quotaDate, quotaDate, area, level, index, timelevel, null, lowLevel);
  852. return list;
  853. }
  854. /**
  855. * 列表
  856. * 0级维度
  857. * 查询某个区间某个0级维度的指标列表
  858. *
  859. * @param startDate 开始时间 yyyy-mm-dd 包含头
  860. * @param endDate 结束时间 yyyy-mm-dd 包含头
  861. * @param area code 厦门市 350200 code 和level是对应的
  862. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  863. * @param index 指标code
  864. * @param timelevel 1增量 2到达量(按照年度)
  865. * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队.
  866. * @return
  867. * @throws Exception
  868. */
  869. public List<SaveModel> findListDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception {
  870. List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, null, lowLevel);
  871. return list;
  872. }
  873. /**
  874. * 列表
  875. * 1级维度
  876. * 查询某个1级维度的某个1级维度下的列表 例如查询65岁以上患者
  877. *
  878. * @param quotaDate 时间 yyyy-mm-dd 包含头
  879. * @param area code 厦门市 350200 code 和level是对应的
  880. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  881. * @param index 指标code
  882. * @param timelevel 1增量 2到达量(按照年度)
  883. * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队
  884. * @param slaveKey1 一级维度的key
  885. * @return
  886. */
  887. public List<SaveModel> findListDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1) throws Exception {
  888. List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel, 1, slaveKey1, null, lowLevel);
  889. return list;
  890. }
  891. /**
  892. * 列表
  893. * 1级维度
  894. * 查询某个区间某个1级维度的某个1级维度下的列表 例如查询65岁以上患者
  895. *
  896. * @param startDate 开始时间 yyyy-mm-dd 包含头
  897. * @param endDate 结束时间 yyyy-mm-dd 包含头
  898. * @param area code 厦门市 350200 code 和level是对应的
  899. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  900. * @param index 指标code
  901. * @param timelevel 1增量 2到达量(按照年度)
  902. * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队
  903. * @param slaveKey1 一级维度的key
  904. * @return
  905. */
  906. public List<SaveModel> findListDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1) throws Exception {
  907. List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, 1, slaveKey1, null, lowLevel);
  908. return list;
  909. }
  910. /**
  911. * 列表
  912. * 2级维度
  913. * 查询某个2级维度的某个1级维度和2级维度下的列表 例如查询65岁以上的高血压患者
  914. *
  915. * @param quotaDate 时间 yyyy-mm-dd 包含头
  916. * @param area code 厦门市 350200 code 和level是对应的
  917. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  918. * @param index 指标code
  919. * @param timelevel 1增量 2到达量(按照年度)
  920. * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队
  921. * @param slaveKey1 一级维度的key
  922. * @param slaveKey2 二级维度的key
  923. * @return
  924. */
  925. public List<SaveModel> findListDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1, String slaveKey2) throws Exception {
  926. List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, lowLevel);
  927. return list;
  928. }
  929. public List<SaveModel> findListDateQuotaLevel2NoSlaveKey1(String quotaDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey2) throws Exception {
  930. List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, null, slaveKey2, null, lowLevel);
  931. return list;
  932. }
  933. /**
  934. * 列表
  935. * 2级维度
  936. * 查询某个区间某个2级维度的某个1级维度和2级维度下的列表 例如查询65岁以上的高血压患者
  937. *
  938. * @param startDate 开始时间 yyyy-mm-dd 包含头
  939. * @param endDate 结束时间 yyyy-mm-dd 包含头
  940. * @param area code 厦门市 350200 code 和level是对应的
  941. * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
  942. * @param index 指标code
  943. * @param timelevel 1增量 2到达量(按照年度)
  944. * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队
  945. * @param slaveKey1 一级维度的key
  946. * @param slaveKey2 二级维度的key
  947. * @return
  948. */
  949. public List<SaveModel> findListDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1, String slaveKey2) throws Exception {
  950. List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, lowLevel);
  951. return list;
  952. }
  953. /**
  954. * 将参数转换成需要的SaveModel里的标识
  955. *
  956. * @param level 等级 4 市 3区 2社区 1团队
  957. * 转换后的level 等级 2 市 3区 4社区 5团队
  958. * @return
  959. * @author zhangdan
  960. * @time 2017-10-18
  961. */
  962. public int changeLevel(int level) {
  963. int resultLevel = 0;
  964. if (level == 1) {
  965. //团队转成SaveModel里的标识
  966. resultLevel = Integer.valueOf(SaveModel.teamLevel);
  967. } else if (level == 2) {
  968. //社区转成SaveModel里的标识
  969. resultLevel = Integer.valueOf(SaveModel.OrgLevel);
  970. } else if (level == 3) {
  971. //区转成SaveModel里的标识
  972. resultLevel = Integer.valueOf(SaveModel.townLevel);
  973. } else if (level == 4) {
  974. //市转成SaveModel里的标识
  975. resultLevel = Integer.valueOf(SaveModel.cityLevel);
  976. }
  977. if (resultLevel == 0) {
  978. resultLevel = level;
  979. }
  980. return resultLevel;
  981. }
  982. }