diff --git a/platform-operate-api/src/main/java/com/lyms/hospitalapi/pojo/ReportModel.java b/platform-operate-api/src/main/java/com/lyms/hospitalapi/pojo/ReportModel.java new file mode 100644 index 0000000..e918c8a --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/hospitalapi/pojo/ReportModel.java @@ -0,0 +1,66 @@ +package com.lyms.hospitalapi.pojo; + +import java.util.List; +import java.util.Map; + +/** + * 报表数据 + * @Author: litao + * @Date: 2017/4/21 0021 9:42 + * @Version: V1.0 + */ +public class ReportModel { + /** x轴数据 */ + private List xAxis; + + /** y轴数据 */ + private List yAxis; + + /** 数据列表 */ + private List> grid; + + /** 其他数据 */ + private List data; + + private List>> doctorInfo; + + public List getxAxis() { + return xAxis; + } + + public void setxAxis(List xAxis) { + this.xAxis = xAxis; + } + + public List getyAxis() { + return yAxis; + } + + public void setyAxis(List yAxis) { + this.yAxis = yAxis; + } + + public List> getGrid() { + return grid; + } + + public void setGrid(List> grid) { + this.grid = grid; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public List>> getDoctorInfo() { + return doctorInfo; + } + + public void setDoctorInfo(List>> doctorInfo) { + this.doctorInfo = doctorInfo; + } +} 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 7b52510..c8bdeb7 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 @@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; -import java.util.Date; +import javax.servlet.http.HttpServletResponse; /** * @Author: litao @@ -39,6 +39,21 @@ public class ReportController extends BaseController { return reportService.areaCountFacade(startDate, endDate, startWeek, endWeek, childBirth); } + + /** + * 产检次数分布统计 excel 导出 + * @param startDate + * @param endDate + * @param startWeek + * @param endWeek + * @param childBirth + */ + @RequestMapping(value = "/check/export", method = RequestMethod.GET) + public void exportCheck(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth, HttpServletResponse resp) { + reportService.exportCheck(startDate, endDate, startWeek, endWeek, childBirth, resp); + + } + /** * 孕产妇明细查看 * @param startDate 建档开始时间 @@ -66,8 +81,8 @@ public class ReportController extends BaseController { @RequestMapping(method = RequestMethod.GET,value = "/doctor") @ResponseBody public BaseObjectResponse doctorMedical(String startDate, String endDate, Integer childBirth) { - return reportService.doctorMedical - (startDate, endDate, childBirth); + return reportService.doctorMedical(startDate, endDate, childBirth); } + } 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 b0c63c9..8ae1288 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,6 +2,8 @@ package com.lyms.platform.operate.web.service; import com.lyms.platform.common.result.BaseObjectResponse; +import javax.servlet.http.HttpServletResponse; + /** * 报表service * @Author: litao @@ -42,4 +44,15 @@ public interface IReportService { * @return */ BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name); + + /** + * 导出Excel + * @param startDate + * @param endDate + * @param startWeek + * @param endWeek + * @param childBirth + * @param resp + */ + void exportCheck(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth, HttpServletResponse resp); } 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 57c27e9..7e2594b 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 @@ -1,13 +1,16 @@ package com.lyms.platform.operate.web.service.impl; +import com.lyms.hospitalapi.pojo.ReportModel; 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 com.lyms.platform.operate.web.utils.ResponseUtil; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletResponse; import java.util.*; /** @@ -40,10 +43,100 @@ public class ReportServiceImpl implements IReportService { @Override public BaseObjectResponse doctorMedical(String startDate, String endDate, Integer childBirth) { BaseObjectResponse rest = new BaseObjectResponse(); - Map restMap = new HashMap<>(); + ReportModel reportModel = new ReportModel(); List params = new ArrayList<>(); + List doctorNames = new ArrayList<>(); + List>> doctorInfo = new ArrayList<>(); + List> restList = reportDao.findList(getDoctorMedicalSql(startDate, endDate, childBirth, params), params); - return null; + + List> grid = createDoctorGrid(restList, doctorNames, doctorInfo); + + reportModel.setGrid(grid); /** 表格数据 */ + reportModel.setData(doctorNames); /** 医生数据 */ + reportModel.setDoctorInfo(doctorInfo); /** 医生数据详情 */ + reportModel.setxAxis(Arrays.asList("产检人数", "两次(含)以上人数", "五次(含)以上人数")); + rest.setData(reportModel); + return rest; + } + + private List> createDoctorGrid(List> restList, List doctorNames, List>> doctorInfo) { + List> grid = new ArrayList<>(); +// List inspectPeoples = new ArrayList<>(); /** 产检人数集合 */ +// List twicePeoples = new ArrayList<>(); /** 产检人数集合 */ +// List fiveTimesPeoples = new ArrayList<>(); /** 产检人数集合 */ + for (Map map : restList) { + Map data = new HashMap<>(); + Map> doctor = new HashMap<>(); + List doctorList = new ArrayList<>(); + Object doctorName = map.get("DOCTOR_NAME"); + if(doctorName != null && StringUtils.isNotBlank(doctorName.toString())) { + data.put("doctorName", doctorName); /** 医生名称 */ + } else { + data.put("doctorName", ""); + } + doctorNames.add(doctorName); + + Object inspectTime = map.get("CJ_RC"); + if(inspectTime != null && StringUtils.isNotBlank(inspectTime.toString())) { + data.put("inspectTime", inspectTime); /** 产检人次 */ + } + + Object inspectPeople = map.get("CJ_RS"); + if(inspectPeople != null && StringUtils.isNotBlank(inspectPeople.toString())) { + data.put("inspectPeople", inspectPeople); /** 产检人数 */ + } + + Object twice = map.get("LIANGCI_RS"); + if(twice != null && StringUtils.isNotBlank(twice.toString())) { + data.put("twice", twice); /** 两次以上人数 */ + } + + Object fiveTimes = map.get("WUCI_RS"); + if(fiveTimes != null && StringUtils.isNotBlank(fiveTimes.toString())) { + data.put("fiveTimes", fiveTimes); /** 五次以上人数 */ + } + grid.add(data); + + doctorList.add(inspectPeople); + doctorList.add(twice); + doctorList.add(fiveTimes); + doctor.put(doctorName + "", doctorList); + doctorInfo.add(doctor); + } + + /** 把总计放到第一位 */ + for (Map map : grid) { + if(map.containsKey("doctorName") && map.get("doctorName").toString().equals("总计")) { + grid.remove(map); + grid.add(0, map); + } + } + + /** 处理比例、产检人数统计 */ + int i = 0; + for (Map map : grid) { + map.put("id", i++); + + if(map.containsKey("inspectPeople")) { +// inspectPeoples.add(map.get("inspectPeople")); + } + + if(map.containsKey("twice")) { /** 两次以上比例 */ + map.put("twiceProportion", MathUtil.getProportion(map.get("twice"), map.get("inspectPeople"))); +// twicePeoples.add(map.get("twice")); + } + + if(map.containsKey("fiveTimes")) { /** 五次以上比例 */ + map.put("fiveTimeProportion", MathUtil.getProportion(map.get("fiveTimes"), map.get("inspectPeople"))); +// fiveTimesPeoples.add(map.get("fiveTimes")); + } + } + +// peoples.put("fiveTimesPeoples", fiveTimesPeoples); +// peoples.put("twicePeoples", twicePeoples); +// peoples.put("inspectPeoples", inspectPeoples ); + return grid; } @Override @@ -51,10 +144,54 @@ public class ReportServiceImpl implements IReportService { return null; } + @Override + public void exportCheck(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth, HttpServletResponse resp) { + BaseObjectResponse rest = areaCountFacade(startDate, endDate, startWeek, endWeek, childBirth); + Map cnames = new LinkedHashMap<>(); + cnames.put("desc", "产检人数"); + cnames.put("count", "总计"); + cnames.put("once", "1次"); + cnames.put("twice", "2次"); + cnames.put("threeTimes", "3次"); + cnames.put("fourTimes", "4次"); + cnames.put("fiveTimes", "5次"); + cnames.put("sixTimes", "6次"); + cnames.put("sevenTimes", "7次"); + cnames.put("eightTimes", "8次"); + cnames.put("nineTimes", "9次"); + cnames.put("tenTimes", "10次"); + cnames.put("elevenTimes", "11次"); + cnames.put("twelveTimes", "12次"); + cnames.put("otherTimes", "≥13次"); + + List> grid = (List>) ((Map) rest.getData()).get("grid"); + List> results = new ArrayList<>(); + for (Map map : grid) { + Map result = new LinkedHashMap<>(); + result.put("desc", map.get("desc")); + result.put("count", map.get("count")); + result.put("once", map.get("once")); + result.put("twice", map.get("twice")); + result.put("threeTimes", map.get("threeTimes")); + result.put("fourTimes", map.get("fourTimes")); + result.put("fiveTimes", map.get("fiveTimes")); + result.put("sixTimes", map.get("sixTimes")); + result.put("sevenTimes", map.get("sevenTimes")); + result.put("eightTimes", map.get("eightTimes")); + result.put("nineTimes", map.get("nineTimes")); + result.put("tenTimes", map.get("tenTimes")); + result.put("elevenTimes", map.get("elevenTimes")); + result.put("twelveTimes", map.get("twelveTimes")); + result.put("otherTimes", map.get("otherTimes")); + results.add(result); + } + ResponseUtil.responseExcel(cnames,results, resp); + } + private List> createGrid(List peopleList, List proportionList) { List> restList = new ArrayList<>(); - Map peoples = new HashMap<>(); + Map peoples = new LinkedHashMap<>(); peoples.put("desc", peopleList.get(0)); /** 产检人数 */ peoples.put("count", peopleList.get(1));/** 总计 */ peoples.put("once", peopleList.get(2)); @@ -69,9 +206,10 @@ public class ReportServiceImpl implements IReportService { peoples.put("tenTimes", peopleList.get(11)); peoples.put("elevenTimes", peopleList.get(12)); peoples.put("twelveTimes", peopleList.get(13)); + peoples.put("otherTimes", peopleList.get(14)); restList.add(peoples); - Map proportion = new HashMap<>(); + Map proportion = new LinkedHashMap<>(); proportion.put("desc", proportionList.get(0)); /** 占比 */ proportion.put("count", proportionList.get(1));/** 总计 */ proportion.put("once", proportionList.get(2)); @@ -86,6 +224,7 @@ public class ReportServiceImpl implements IReportService { proportion.put("tenTimes", proportionList.get(11)); proportion.put("elevenTimes", proportionList.get(12)); proportion.put("twelveTimes", proportionList.get(13)); + proportion.put("otherTimes", proportionList.get(13)); restList.add(proportion); return restList; } @@ -95,8 +234,8 @@ public class ReportServiceImpl implements IReportService { proportions.add("占比"); int countPeople = Integer.parseInt(peopleList.get(1).toString()); proportions.add("100%"); - for (int i = 1; i < peopleList.size(); i++) { - proportions.add(MathUtil.doubleFormat(Double.parseDouble(MathUtil.division(Integer.valueOf(peopleList.get(i).toString()) * 100, countPeople))) + "%"); + for (int i = 2; i < peopleList.size(); i++) { + proportions.add(MathUtil.getProportion(peopleList.get(i), countPeople)); } return proportions; } @@ -105,6 +244,7 @@ public class ReportServiceImpl implements IReportService { List peoples = new ArrayList<>(); peoples.add("产检人数"); int countPeople = 0; /** 体检所有人数 */ + int otherPeople = 0; /** 大于或等于13的所有人数 */ /** 通过下标循环取map里面数据 有就设置value 没有就设置0 */ for(int i = 1; i <= 30; i++) { @@ -115,7 +255,7 @@ public class ReportServiceImpl implements IReportService { countPeople += Integer.valueOf(count); } } - if(i <= 13) { + if(i < 13) { if(StringUtils.isNotBlank(count)) { peoples.add(count); } else { @@ -123,10 +263,11 @@ public class ReportServiceImpl implements IReportService { } } else { if(StringUtils.isNotBlank(count)) { - peoples.set(12, Integer.valueOf(peoples.get(12).toString()) + Integer.valueOf(count) + ""); + otherPeople += Integer.valueOf(count); } } } + peoples.add(otherPeople + ""); peoples.add(1, countPeople + ""); return peoples; } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MathUtil.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MathUtil.java index 014680b..1163a5c 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MathUtil.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MathUtil.java @@ -1,5 +1,7 @@ package com.lyms.platform.operate.web.utils; +import org.apache.commons.lang.StringUtils; + import java.text.DecimalFormat; /** @@ -35,4 +37,24 @@ public class MathUtil { return df.format(d); } + /** + * 计算所占比例 + * @param obj + * @param count + * @return + */ + public static String getProportion(Object obj, Integer count) { + if(obj != null && StringUtils.isNumeric(obj.toString()) && count != null && count != 0) { + Double division = Double.parseDouble(division(Integer.parseInt(obj.toString()), count)) * 100; + return doubleFormat(division) + "%"; + } + return "0.00%"; + } + + public static String getProportion(Object obj, Object count) { + if(StringUtils.isNotBlank("count") && StringUtils.isNumeric(count.toString())) + return getProportion(obj, Integer.parseInt(count.toString())); + return "0.00%"; + } + }