Commit 03a1edd7331d74381d491c82ea57ea463b23956b
1 parent
24b25b1052
Exists in
master
and in
6 other branches
产检次数报表
Showing 8 changed files with 149 additions and 14 deletions
- platform-common/pom.xml
- platform-common/src/main/java/com/lyms/platform/common/base/BaseController.java
- platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java
- platform-operate-api/pom.xml
- platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/ReportController.java
- platform-operate-api/src/main/java/com/lyms/platform/operate/web/dao/impl/BaseDaoImpl.java
- platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IReportService.java
- platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java
platform-common/pom.xml
View file @
03a1edd
... | ... | @@ -34,6 +34,11 @@ |
34 | 34 | <version>2.6.12</version> |
35 | 35 | </dependency> |
36 | 36 | <!-- end Execl --> |
37 | + <dependency> | |
38 | + <groupId>org.apache.commons</groupId> | |
39 | + <artifactId>commons-lang3</artifactId> | |
40 | + <version>3.4</version> | |
41 | + </dependency> | |
37 | 42 | </dependencies> |
38 | 43 | <build> |
39 | 44 | <plugins> |
platform-common/src/main/java/com/lyms/platform/common/base/BaseController.java
View file @
03a1edd
1 | 1 | package com.lyms.platform.common.base; |
2 | 2 | |
3 | 3 | |
4 | +import com.lyms.platform.common.utils.DateUtil; | |
5 | +import org.springframework.web.bind.WebDataBinder; | |
6 | +import org.springframework.web.bind.annotation.InitBinder; | |
7 | + | |
4 | 8 | import javax.servlet.http.HttpServletRequest; |
5 | 9 | import javax.servlet.http.HttpServletResponse; |
10 | +import java.beans.PropertyEditorSupport; | |
6 | 11 | import java.io.IOException; |
7 | 12 | import java.io.PrintWriter; |
13 | +import java.sql.Timestamp; | |
14 | +import java.util.Date; | |
8 | 15 | import java.util.HashMap; |
9 | 16 | import java.util.Map; |
10 | 17 | |
... | ... | @@ -81,6 +88,28 @@ |
81 | 88 | ip = request.getRemoteAddr(); |
82 | 89 | } |
83 | 90 | return ip; |
91 | + } | |
92 | + | |
93 | + @InitBinder | |
94 | + public void initBinder(WebDataBinder binder) { | |
95 | + // Date 类型转换 | |
96 | + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { | |
97 | + | |
98 | + @Override | |
99 | + public void setAsText(String text) { | |
100 | + setValue(DateUtil.parseDate(text)); | |
101 | + } | |
102 | + }); | |
103 | + | |
104 | + // Timestamp 类型转换 | |
105 | + binder.registerCustomEditor(Timestamp.class, new PropertyEditorSupport() { | |
106 | + | |
107 | + @Override | |
108 | + public void setAsText(String text) { | |
109 | + Date date = DateUtil.parseDate(text); | |
110 | + setValue(date == null ? null : new Timestamp(date.getTime())); | |
111 | + } | |
112 | + }); | |
84 | 113 | } |
85 | 114 | } |
platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java
View file @
03a1edd
... | ... | @@ -19,6 +19,8 @@ |
19 | 19 | public static SimpleDateFormat m_d = new SimpleDateFormat("MM/dd"); |
20 | 20 | public static SimpleDateFormat y_m_d_h_m_s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
21 | 21 | public static SimpleDateFormat y_m_d_h_m1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); |
22 | + public static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", | |
23 | + "yyyy/MM/dd HH:mm" }; | |
22 | 24 | |
23 | 25 | public static SimpleDateFormat y_m_d_h_m = new SimpleDateFormat("yyyyMMddHHmm"); |
24 | 26 | public static SimpleDateFormat yyyyMMddHHmmssSSS = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
... | ... | @@ -819,5 +821,20 @@ |
819 | 821 | return new Date[]{parseYMD(snDateString.substring(0, 10)), parseYMDEnd(snDateString.substring(13, 23))}; |
820 | 822 | } |
821 | 823 | |
824 | + /** | |
825 | + * 日期型字符串转化为日期 格式 | |
826 | + * { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", | |
827 | + * "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" } | |
828 | + */ | |
829 | + public static Date parseDate(Object str) { | |
830 | + if (str == null) { | |
831 | + return null; | |
832 | + } | |
833 | + try { | |
834 | + return org.apache.commons.lang3.time.DateUtils.parseDate(str.toString(), parsePatterns); | |
835 | + } catch (ParseException e) { | |
836 | + return null; | |
837 | + } | |
838 | + } | |
822 | 839 | } |
platform-operate-api/pom.xml
View file @
03a1edd
... | ... | @@ -71,6 +71,17 @@ |
71 | 71 | <artifactId>activemq-pool</artifactId> |
72 | 72 | <version>${org.activemq.version}</version> |
73 | 73 | </dependency> |
74 | + <dependency> | |
75 | + <groupId>org.apache.commons</groupId> | |
76 | + <artifactId>commons-lang3</artifactId> | |
77 | + <version>3.4</version> | |
78 | + </dependency> | |
79 | + <dependency> | |
80 | + <groupId>org.eclipse.jetty</groupId> | |
81 | + <artifactId>jetty-servlets</artifactId> | |
82 | + <version>9.3.8.v20160314</version> | |
83 | + </dependency> | |
84 | + | |
74 | 85 | </dependencies> |
75 | 86 | <build> |
76 | 87 | <resources> |
platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/ReportController.java
View file @
03a1edd
... | ... | @@ -34,9 +34,21 @@ |
34 | 34 | */ |
35 | 35 | @RequestMapping(method = RequestMethod.GET,value = "/getCheckStatistics") |
36 | 36 | @ResponseBody |
37 | - public BaseObjectResponse getCheckStatistics(Date startDate, Date endDate, | |
37 | + public BaseObjectResponse getCheckStatistics(String startDate, String endDate, | |
38 | 38 | Integer startWeek, Integer endWeek, Integer childBirth) { |
39 | 39 | return reportService.areaCountFacade(startDate, endDate, startWeek, endWeek, childBirth); |
40 | 40 | } |
41 | + | |
42 | + @RequestMapping(method = RequestMethod.GET,value = "/date") | |
43 | + @ResponseBody | |
44 | + public BaseObjectResponse testDate(Date startDate) { | |
45 | + if(startDate != null) { | |
46 | + System.out.println("startDate = [" + startDate.toLocaleString() + "]"); | |
47 | + } | |
48 | + BaseObjectResponse obj = new BaseObjectResponse(); | |
49 | + obj.setData(startDate); | |
50 | + return obj; | |
51 | + } | |
52 | + | |
41 | 53 | } |
platform-operate-api/src/main/java/com/lyms/platform/operate/web/dao/impl/BaseDaoImpl.java
View file @
03a1edd
platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IReportService.java
View file @
03a1edd
... | ... | @@ -2,8 +2,6 @@ |
2 | 2 | |
3 | 3 | import com.lyms.platform.common.result.BaseObjectResponse; |
4 | 4 | |
5 | -import java.util.Date; | |
6 | - | |
7 | 5 | /** |
8 | 6 | * 报表service |
9 | 7 | * @Author: litao |
... | ... | @@ -21,6 +19,6 @@ |
21 | 19 | * @param childBirth |
22 | 20 | * @return |
23 | 21 | */ |
24 | - BaseObjectResponse areaCountFacade(Date startDate, Date endDate, Integer startWeek, Integer endWeek, Integer childBirth); | |
22 | + BaseObjectResponse areaCountFacade(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth); | |
25 | 23 | } |
platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java
View file @
03a1edd
... | ... | @@ -3,14 +3,13 @@ |
3 | 3 | import com.lyms.platform.common.result.BaseObjectResponse; |
4 | 4 | import com.lyms.platform.operate.web.dao.IReportDao; |
5 | 5 | import com.lyms.platform.operate.web.service.IReportService; |
6 | +import com.lyms.platform.operate.web.utils.MathUtil; | |
7 | +import org.apache.commons.lang.StringUtils; | |
6 | 8 | import org.springframework.beans.factory.annotation.Autowired; |
7 | 9 | import org.springframework.stereotype.Service; |
8 | 10 | import scala.collection.mutable.StringBuilder; |
9 | 11 | |
10 | -import java.util.ArrayList; | |
11 | -import java.util.Date; | |
12 | -import java.util.List; | |
13 | -import java.util.Map; | |
12 | +import java.util.*; | |
14 | 13 | |
15 | 14 | /** |
16 | 15 | * @Author: litao |
17 | 16 | |
18 | 17 | |
19 | 18 | |
... | ... | @@ -24,15 +23,77 @@ |
24 | 23 | private IReportDao reportDao; |
25 | 24 | |
26 | 25 | @Override |
27 | - public BaseObjectResponse areaCountFacade(Date startDate, Date endDate, Integer startWeek, Integer endWeek, Integer childBirth) { | |
26 | + public BaseObjectResponse areaCountFacade(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth) { | |
28 | 27 | BaseObjectResponse rest = new BaseObjectResponse(); |
28 | + Map<String, Object> restMap = new HashMap<>(); | |
29 | 29 | List<Object> params = new ArrayList<>(); |
30 | 30 | List<Map<String, Object>> mapList = reportDao.findList(getAreaCountFacadeSql(startDate, endDate, startWeek, endWeek, childBirth, params), params); |
31 | - rest.setData(mapList); | |
31 | + | |
32 | + List<Map<String, Object>> calcData = calcData(mapList);/** 计算报表数据 */ | |
33 | + | |
34 | + restMap.put("reportData", calcData); /** 报表数据*/ | |
35 | + restMap.put("xAxis", Arrays.asList("1次", "2次", "3次", "4次", "5次", "6次", "7次", "8次", "9次", "10次", "11次", "12次", "≥13次")); /** x轴数据 */ | |
36 | + restMap.put("yAxis", createYData(calcData)); | |
37 | + | |
38 | + if(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) { | |
39 | + restMap.put("recordDate", startDate.replace("-", "/") + " - " + endDate.replace("-", "/")); | |
40 | + } | |
41 | + | |
42 | + rest.setData(restMap); | |
32 | 43 | return rest; |
33 | 44 | } |
34 | 45 | |
35 | - private String getAreaCountFacadeSql(Date startDate, Date endDate, Integer startWeek, Integer endWeek, Integer childBirth, List<Object> params) { | |
46 | + private List<Object> createYData(List<Map<String, Object>> calcData) { | |
47 | + List<Object> yData = new ArrayList<>(); | |
48 | + for (Map<String, Object> map : calcData) { | |
49 | + yData.add(map.get("people")); | |
50 | + } | |
51 | + return yData; | |
52 | + } | |
53 | + | |
54 | + private List<Map<String, Object>> calcData(List<Map<String, Object>> mapList) { | |
55 | + List<Map<String, Object>> restMap = new ArrayList<>(); | |
56 | + int countPeople = 0; /** 体检所有人数 */ | |
57 | + int otherPeople = 0; /** 存储 >= 13次的 所有人数 */ | |
58 | + double residualRatio = 1; /** 所剩比率 */ | |
59 | + for (Map<String, Object> map : mapList) { | |
60 | + countPeople += Integer.parseInt(map.get("EXAMINE_CNT").toString()); | |
61 | + } | |
62 | + | |
63 | + for (Map<String, Object> map : mapList) { | |
64 | + String number = map.get("EXAMINE_HISTORY_NUM").toString(); /** 次数 */ | |
65 | + String people = map.get("EXAMINE_CNT").toString(); /** 人数 */ | |
66 | + if(StringUtils.isNotBlank(number) && StringUtils.isNotBlank(people)) { | |
67 | + Integer count = Integer.valueOf(number); | |
68 | + if(count >= 13) { | |
69 | + otherPeople += Integer.valueOf(people); | |
70 | + } else { | |
71 | + String proportion = MathUtil.division(Integer.valueOf(people), countPeople); | |
72 | + residualRatio -= Double.valueOf(proportion); | |
73 | + Map<String, Object> m = new HashMap<>(); | |
74 | + m.put("number", number); | |
75 | + m.put("people", people); | |
76 | + m.put("proportion", MathUtil.doubleFormat(Double.valueOf(proportion) * 100) + "%"); | |
77 | + restMap.add(m); | |
78 | + } | |
79 | + } | |
80 | + } | |
81 | + | |
82 | + /** 处理13次以上的 */ | |
83 | + Map<String, Object> m = new HashMap<>(); | |
84 | + m.put("number", 13); | |
85 | + m.put("people", otherPeople); | |
86 | + m.put("proportion", MathUtil.doubleFormat(Double.valueOf(residualRatio) * 100) + "%"); | |
87 | + restMap.add(m); | |
88 | + | |
89 | + /** 处理总数 */ | |
90 | + m.put("people", countPeople); | |
91 | + m.put("proportion", "100%"); | |
92 | + restMap.add(m); | |
93 | + return restMap; | |
94 | + } | |
95 | + | |
96 | + private String getAreaCountFacadeSql(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth, List<Object> params) { | |
36 | 97 | StringBuilder sql = new StringBuilder(); |
37 | 98 | sql.append("SELECT B.EXAMINE_HISTORY_NUM, ") |
38 | 99 | .append("COUNT(B.EXAMINE_ID) AS EXAMINE_CNT ") |
... | ... | @@ -49,7 +110,7 @@ |
49 | 110 | } |
50 | 111 | |
51 | 112 | if(startDate != null && endDate != null) { |
52 | - sql.append("AND A.CREATE_DATE BETWEEN ? AND ? "); | |
113 | + sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); | |
53 | 114 | params.add(startDate); |
54 | 115 | params.add(endDate); |
55 | 116 | } |
56 | 117 | |
... | ... | @@ -60,9 +121,11 @@ |
60 | 121 | params.add(endWeek); |
61 | 122 | } |
62 | 123 | |
63 | - sql.append("GROUP BY B.EXAMINE_HISTORY_NUM"); | |
124 | + sql.append("GROUP BY B.EXAMINE_HISTORY_NUM ") | |
125 | + .append("ORDER BY EXAMINE_HISTORY_NUM"); | |
64 | 126 | |
65 | 127 | return sql.toString(); |
66 | 128 | } |
129 | + | |
67 | 130 | } |