From 03a1edd7331d74381d491c82ea57ea463b23956b Mon Sep 17 00:00:00 2001 From: litao Date: Thu, 20 Apr 2017 15:47:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A7=E6=A3=80=E6=AC=A1=E6=95=B0=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platform-common/pom.xml | 5 ++ .../lyms/platform/common/base/BaseController.java | 29 ++++++++ .../com/lyms/platform/common/utils/DateUtil.java | 17 +++++ platform-operate-api/pom.xml | 11 +++ .../operate/web/controller/ReportController.java | 14 +++- .../platform/operate/web/dao/impl/BaseDaoImpl.java | 2 +- .../operate/web/service/IReportService.java | 4 +- .../web/service/impl/ReportServiceImpl.java | 81 +++++++++++++++++++--- 8 files changed, 149 insertions(+), 14 deletions(-) diff --git a/platform-common/pom.xml b/platform-common/pom.xml index 6889e87..f69b730 100644 --- a/platform-common/pom.xml +++ b/platform-common/pom.xml @@ -34,6 +34,11 @@ 2.6.12 + + org.apache.commons + commons-lang3 + 3.4 + diff --git a/platform-common/src/main/java/com/lyms/platform/common/base/BaseController.java b/platform-common/src/main/java/com/lyms/platform/common/base/BaseController.java index 0a8b050..b88fed5 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/base/BaseController.java +++ b/platform-common/src/main/java/com/lyms/platform/common/base/BaseController.java @@ -1,10 +1,17 @@ package com.lyms.platform.common.base; +import com.lyms.platform.common.utils.DateUtil; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.beans.PropertyEditorSupport; import java.io.IOException; import java.io.PrintWriter; +import java.sql.Timestamp; +import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -82,4 +89,26 @@ public class BaseController extends ExceptionHandlerController{ } return ip; } + + @InitBinder + public void initBinder(WebDataBinder binder) { + // Date 类型转换 + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { + + @Override + public void setAsText(String text) { + setValue(DateUtil.parseDate(text)); + } + }); + + // Timestamp 类型转换 + binder.registerCustomEditor(Timestamp.class, new PropertyEditorSupport() { + + @Override + public void setAsText(String text) { + Date date = DateUtil.parseDate(text); + setValue(date == null ? null : new Timestamp(date.getTime())); + } + }); + } } diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java b/platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java index 3d0478d..83e3e48 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java +++ b/platform-common/src/main/java/com/lyms/platform/common/utils/DateUtil.java @@ -19,6 +19,8 @@ public class DateUtil { public static SimpleDateFormat m_d = new SimpleDateFormat("MM/dd"); public static SimpleDateFormat y_m_d_h_m_s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static SimpleDateFormat y_m_d_h_m1 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + 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", + "yyyy/MM/dd HH:mm" }; public static SimpleDateFormat y_m_d_h_m = new SimpleDateFormat("yyyyMMddHHmm"); public static SimpleDateFormat yyyyMMddHHmmssSSS = new SimpleDateFormat("yyyyMMddHHmmssSSS"); @@ -819,4 +821,19 @@ public class DateUtil { return new Date[]{parseYMD(snDateString.substring(0, 10)), parseYMDEnd(snDateString.substring(13, 23))}; } + /** + * 日期型字符串转化为日期 格式 + * { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", + * "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" } + */ + public static Date parseDate(Object str) { + if (str == null) { + return null; + } + try { + return org.apache.commons.lang3.time.DateUtils.parseDate(str.toString(), parsePatterns); + } catch (ParseException e) { + return null; + } + } } diff --git a/platform-operate-api/pom.xml b/platform-operate-api/pom.xml index e3430d8..853d598 100644 --- a/platform-operate-api/pom.xml +++ b/platform-operate-api/pom.xml @@ -71,6 +71,17 @@ activemq-pool ${org.activemq.version} + + org.apache.commons + commons-lang3 + 3.4 + + + org.eclipse.jetty + jetty-servlets + 9.3.8.v20160314 + + diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/ReportController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/ReportController.java index 97f03c6..ed01479 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/ReportController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/ReportController.java @@ -34,8 +34,20 @@ public class ReportController extends BaseController { */ @RequestMapping(method = RequestMethod.GET,value = "/getCheckStatistics") @ResponseBody - public BaseObjectResponse getCheckStatistics(Date startDate, Date endDate, + public BaseObjectResponse getCheckStatistics(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth) { return reportService.areaCountFacade(startDate, endDate, startWeek, endWeek, childBirth); } + + @RequestMapping(method = RequestMethod.GET,value = "/date") + @ResponseBody + public BaseObjectResponse testDate(Date startDate) { + if(startDate != null) { + System.out.println("startDate = [" + startDate.toLocaleString() + "]"); + } + BaseObjectResponse obj = new BaseObjectResponse(); + obj.setData(startDate); + return obj; + } + } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/dao/impl/BaseDaoImpl.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/dao/impl/BaseDaoImpl.java index f84c564..42d2a70 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/dao/impl/BaseDaoImpl.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/dao/impl/BaseDaoImpl.java @@ -39,7 +39,7 @@ public class BaseDaoImpl implements IBaseDao { return qr.query(sql, new MapListHandler(), params.toArray()); } catch (SQLException e) { logger.error("查询出错: sql: {}, params: {}", sql, params); + throw new RuntimeException(); } - return null; } } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IReportService.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IReportService.java index d4c152b..23264c3 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IReportService.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IReportService.java @@ -2,8 +2,6 @@ package com.lyms.platform.operate.web.service; import com.lyms.platform.common.result.BaseObjectResponse; -import java.util.Date; - /** * 报表service * @Author: litao @@ -21,5 +19,5 @@ public interface IReportService { * @param childBirth * @return */ - BaseObjectResponse areaCountFacade(Date startDate, Date endDate, Integer startWeek, Integer endWeek, Integer childBirth); + BaseObjectResponse areaCountFacade(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth); } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java index 9724a07..876d0e5 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java @@ -3,14 +3,13 @@ package com.lyms.platform.operate.web.service.impl; import com.lyms.platform.common.result.BaseObjectResponse; import com.lyms.platform.operate.web.dao.IReportDao; import com.lyms.platform.operate.web.service.IReportService; +import com.lyms.platform.operate.web.utils.MathUtil; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import scala.collection.mutable.StringBuilder; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @Author: litao @@ -24,15 +23,77 @@ public class ReportServiceImpl implements IReportService { private IReportDao reportDao; @Override - public BaseObjectResponse areaCountFacade(Date startDate, Date endDate, Integer startWeek, Integer endWeek, Integer childBirth) { + public BaseObjectResponse areaCountFacade(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth) { BaseObjectResponse rest = new BaseObjectResponse(); + Map restMap = new HashMap<>(); List params = new ArrayList<>(); List> mapList = reportDao.findList(getAreaCountFacadeSql(startDate, endDate, startWeek, endWeek, childBirth, params), params); - rest.setData(mapList); + + List> calcData = calcData(mapList);/** 计算报表数据 */ + + restMap.put("reportData", calcData); /** 报表数据*/ + restMap.put("xAxis", Arrays.asList("1次", "2次", "3次", "4次", "5次", "6次", "7次", "8次", "9次", "10次", "11次", "12次", "≥13次")); /** x轴数据 */ + restMap.put("yAxis", createYData(calcData)); + + if(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) { + restMap.put("recordDate", startDate.replace("-", "/") + " - " + endDate.replace("-", "/")); + } + + rest.setData(restMap); return rest; } - private String getAreaCountFacadeSql(Date startDate, Date endDate, Integer startWeek, Integer endWeek, Integer childBirth, List params) { + private List createYData(List> calcData) { + List yData = new ArrayList<>(); + for (Map map : calcData) { + yData.add(map.get("people")); + } + return yData; + } + + private List> calcData(List> mapList) { + List> restMap = new ArrayList<>(); + int countPeople = 0; /** 体检所有人数 */ + int otherPeople = 0; /** 存储 >= 13次的 所有人数 */ + double residualRatio = 1; /** 所剩比率 */ + for (Map map : mapList) { + countPeople += Integer.parseInt(map.get("EXAMINE_CNT").toString()); + } + + for (Map map : mapList) { + String number = map.get("EXAMINE_HISTORY_NUM").toString(); /** 次数 */ + String people = map.get("EXAMINE_CNT").toString(); /** 人数 */ + if(StringUtils.isNotBlank(number) && StringUtils.isNotBlank(people)) { + Integer count = Integer.valueOf(number); + if(count >= 13) { + otherPeople += Integer.valueOf(people); + } else { + String proportion = MathUtil.division(Integer.valueOf(people), countPeople); + residualRatio -= Double.valueOf(proportion); + Map m = new HashMap<>(); + m.put("number", number); + m.put("people", people); + m.put("proportion", MathUtil.doubleFormat(Double.valueOf(proportion) * 100) + "%"); + restMap.add(m); + } + } + } + + /** 处理13次以上的 */ + Map m = new HashMap<>(); + m.put("number", 13); + m.put("people", otherPeople); + m.put("proportion", MathUtil.doubleFormat(Double.valueOf(residualRatio) * 100) + "%"); + restMap.add(m); + + /** 处理总数 */ + m.put("people", countPeople); + m.put("proportion", "100%"); + restMap.add(m); + return restMap; + } + + private String getAreaCountFacadeSql(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth, List params) { StringBuilder sql = new StringBuilder(); sql.append("SELECT B.EXAMINE_HISTORY_NUM, ") .append("COUNT(B.EXAMINE_ID) AS EXAMINE_CNT ") @@ -49,7 +110,7 @@ public class ReportServiceImpl implements IReportService { } if(startDate != null && endDate != null) { - sql.append("AND A.CREATE_DATE BETWEEN ? AND ? "); + sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); params.add(startDate); params.add(endDate); } @@ -60,8 +121,10 @@ public class ReportServiceImpl implements IReportService { params.add(endWeek); } - sql.append("GROUP BY B.EXAMINE_HISTORY_NUM"); + sql.append("GROUP BY B.EXAMINE_HISTORY_NUM ") + .append("ORDER BY EXAMINE_HISTORY_NUM"); return sql.toString(); } + } -- 1.8.3.1