ElasticsearchUtil.java 59 KB

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