From 3cb43f20a7e6e27bff5d9c79a04f875185d5c93e Mon Sep 17 00:00:00 2001 From: litao Date: Mon, 24 Apr 2017 22:43:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=99=BB=E5=BD=95=E9=99=90?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operate/web/controller/ReportController.java | 346 +++--- .../operate/web/service/IReportService.java | 136 +-- .../web/service/impl/ReportServiceImpl.java | 1202 ++++++++++---------- 3 files changed, 854 insertions(+), 830 deletions(-) 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 2c24f84..faacd65 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 @@ -1,165 +1,181 @@ -package com.lyms.platform.operate.web.controller; - -import com.lyms.platform.common.base.BaseController; -import com.lyms.platform.common.result.BaseObjectResponse; -import com.lyms.platform.operate.web.service.IReportService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * @Author: litao - * @Date: 2017/4/19 0019 17:57 - * @Version: V1.0 - */ -@Controller -@RequestMapping("/report") -public class ReportController extends BaseController { - - @Autowired - private IReportService reportService; - - /** - * 产检次数分布统计 - * @param startDate 建档开始时间 - * @param endDate 建档结束时间 - * @param startWeek 孕周开始时间 - * @param endWeek 孕周结束时间 - * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 - * @return - */ - @RequestMapping(method = RequestMethod.GET,value = "/getCheckStatistics") - @ResponseBody - public BaseObjectResponse getCheckStatistics(String startDate, String endDate, - Integer startWeek, Integer endWeek, Integer childBirth) { - 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 建档开始时间 - * @param endDate 建档结束时间 - * @param startWeek 孕周开始时间 - * @param endWeek 孕周结束时间 - * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 - * @param number 检查次数 - * @param name 医生名称 - * @param currentPage 当前页 - * @param pageSize 每页显示的数量 - * @return - */ - @RequestMapping(method = RequestMethod.GET,value = "/checkInfo") -// @TokenRequired - @ResponseBody - public BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, - String name, Integer currentPage, Integer pageSize, HttpServletRequest request) { -// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); -// reportService.checkInfo(childBirth, startDate, endDate, startWeek, endWeek, number, name, loginState.getId(), currentPage, pageSize); - return reportService.checkInfo(childBirth, startDate, endDate, startWeek, endWeek, number, name, 753, currentPage, pageSize); - } - - /** - * 孕产妇明细导出 - * @param startDate 建档开始时间 - * @param endDate 建档结束时间 - * @param startWeek 孕周开始时间 - * @param endWeek 孕周结束时间 - * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 - * @param number 检查次数 - * @param name 医生名称 - * @return - */ - @RequestMapping(method = RequestMethod.GET,value = "/checkInfo/export") -// @TokenRequired - public void exportCheckInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, - String name, HttpServletRequest request, HttpServletResponse resp) { -// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); -// reportService.exportCheckInfo(childBirth, startDate, endDate, startWeek, endWeek, number, name, loginState.getId(), resp); - reportService.exportCheckInfo(childBirth, startDate, endDate, startWeek, endWeek, number, name, 753, resp); - } - - - /** - * 产检医生统计 - * @param startDate 建档开始时间 - * @param endDate 建档结束时间 - * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 - * @return - */ - @RequestMapping(method = RequestMethod.GET,value = "/doctor") - @ResponseBody - public BaseObjectResponse doctorMedical(String startDate, String endDate, Integer childBirth) { - return reportService.doctorMedical(startDate, endDate, childBirth); - } - - /** - * 产检医生统计详情 - * @param startDate 建档开始时间 - * @param endDate 建档结束时间 - * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 - * @param number 产检次数 点的是产检人次的话就传1, 2次(含)以上就传2, 5次(含)以上就传5 - * @param name 医生名称 - * @param currentPage 当前页 - * @param pageSize 每页显示的数量 - * @return - */ - @RequestMapping(method = RequestMethod.GET,value = "/doctorInfo") - @ResponseBody -// @TokenRequired - public BaseObjectResponse doctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name, - Integer currentPage, Integer pageSize, HttpServletRequest request) { -// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); -// return reportService.doctorInfo(startDate, endDate, childBirth, number, name,currentPage, pageSize, loginState.getId()); - return reportService.doctorInfo(startDate, endDate, childBirth, number, name,currentPage, pageSize, 753); - } - - /** - * 产检医生统计详情导出 - * @param startDate 建档开始时间 - * @param endDate 建档结束时间 - * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 - * @param number 产检次数 点的是产检人次的话就传1, 2次(含)以上就传2, 5次(含)以上就传5 - * @param name 医生名称 - * @return - */ - @RequestMapping(method = RequestMethod.GET,value = "/doctorInfo/export") -// @TokenRequired - public void exportDoctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name, - HttpServletRequest request, HttpServletResponse resp) { -// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); -// reportService.exportDoctorInfo(startDate, endDate, childBirth, number, name, loginState.getId(), resp); - reportService.exportDoctorInfo(startDate, endDate, childBirth, number, name, 753, resp); - } - - /** - * 产检医生统计导出 - * @param startDate 建档开始时间 - * @param endDate 建档结束时间 - * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 - * @return - */ - @RequestMapping(method = RequestMethod.GET,value = "/doctor/export") - public void exportDoctor(String startDate, String endDate, Integer childBirth, HttpServletResponse resp) { - reportService.exportDoctor(startDate, endDate, childBirth, resp); - } - -} +package com.lyms.platform.operate.web.controller; + +import com.lyms.platform.common.annotation.TokenRequired; +import com.lyms.platform.common.base.BaseController; +import com.lyms.platform.common.base.LoginContext; +import com.lyms.platform.common.result.BaseObjectResponse; +import com.lyms.platform.operate.web.service.IReportService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @Author: litao + * @Date: 2017/4/19 0019 17:57 + * @Version: V1.0 + */ +@Controller +@RequestMapping("/report") +public class ReportController extends BaseController { + + @Autowired + private IReportService reportService; + + /** + * 产检次数分布统计 + * @param startDate 建档开始时间 + * @param endDate 建档结束时间 + * @param startWeek 孕周开始时间 + * @param endWeek 孕周结束时间 + * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 + * @return + */ + @RequestMapping(method = RequestMethod.GET,value = "/getCheckStatistics") + @ResponseBody + @TokenRequired + public BaseObjectResponse getCheckStatistics(String startDate, String endDate, + Integer startWeek, Integer endWeek, Integer childBirth, HttpServletRequest request) { + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + return reportService.areaCountFacade(startDate, endDate, startWeek, endWeek, childBirth, loginState.getId()); +// return reportService.areaCountFacade(startDate, endDate, startWeek, endWeek, childBirth, 753); + } + + + /** + * 产检次数分布统计 excel 导出 + * @param startDate + * @param endDate + * @param startWeek + * @param endWeek + * @param childBirth + */ + @RequestMapping(value = "/check/export", method = RequestMethod.GET) +// @TokenRequired + public void exportCheck(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth, + HttpServletRequest request, HttpServletResponse resp) { +// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); +// reportService.exportCheck(startDate, endDate, startWeek, endWeek, childBirth, loginState.getId(), resp); + reportService.exportCheck(startDate, endDate, startWeek, endWeek, childBirth, 753, resp); + } + + /** + * 孕产妇明细查看 + * @param startDate 建档开始时间 + * @param endDate 建档结束时间 + * @param startWeek 孕周开始时间 + * @param endWeek 孕周结束时间 + * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 + * @param number 检查次数 + * @param name 医生名称 + * @param currentPage 当前页 + * @param pageSize 每页显示的数量 + * @return + */ + @RequestMapping(method = RequestMethod.GET,value = "/checkInfo") +// @TokenRequired + @ResponseBody + public BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, + String name, Integer currentPage, Integer pageSize, HttpServletRequest request) { +// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); +// reportService.checkInfo(childBirth, startDate, endDate, startWeek, endWeek, number, name, loginState.getId(), currentPage, pageSize); + return reportService.checkInfo(childBirth, startDate, endDate, startWeek, endWeek, number, name, 753, currentPage, pageSize); + } + + /** + * 孕产妇明细导出 + * @param startDate 建档开始时间 + * @param endDate 建档结束时间 + * @param startWeek 孕周开始时间 + * @param endWeek 孕周结束时间 + * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 + * @param number 检查次数 + * @param name 医生名称 + * @return + */ + @RequestMapping(method = RequestMethod.GET,value = "/checkInfo/export") +// @TokenRequired + public void exportCheckInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, + String name, HttpServletRequest request, HttpServletResponse resp) { +// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); +// reportService.exportCheckInfo(childBirth, startDate, endDate, startWeek, endWeek, number, name, loginState.getId(), resp); + reportService.exportCheckInfo(childBirth, startDate, endDate, startWeek, endWeek, number, name, 753, resp); + } + + + /** + * 产检医生统计 + * @param startDate 建档开始时间 + * @param endDate 建档结束时间 + * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 + * @return + */ + @RequestMapping(method = RequestMethod.GET,value = "/doctor") + @ResponseBody + @TokenRequired + public BaseObjectResponse doctorMedical(String startDate, String endDate, Integer childBirth, HttpServletRequest request) { + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); +// return reportService.doctorMedical(startDate, endDate, childBirth, loginState.getId()); + return reportService.doctorMedical(startDate, endDate, childBirth, 753); + } + + /** + * 产检医生统计详情 + * @param startDate 建档开始时间 + * @param endDate 建档结束时间 + * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 + * @param number 产检次数 点的是产检人次的话就传1, 2次(含)以上就传2, 5次(含)以上就传5 + * @param name 医生名称 + * @param currentPage 当前页 + * @param pageSize 每页显示的数量 + * @return + */ + @RequestMapping(method = RequestMethod.GET,value = "/doctorInfo") + @ResponseBody +// @TokenRequired + public BaseObjectResponse doctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name, + Integer currentPage, Integer pageSize, HttpServletRequest request) { +// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); +// return reportService.doctorInfo(startDate, endDate, childBirth, number, name,currentPage, pageSize, loginState.getId()); + return reportService.doctorInfo(startDate, endDate, childBirth, number, name,currentPage, pageSize, 753); + } + + /** + * 产检医生统计详情导出 + * @param startDate 建档开始时间 + * @param endDate 建档结束时间 + * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 + * @param number 产检次数 点的是产检人次的话就传1, 2次(含)以上就传2, 5次(含)以上就传5 + * @param name 医生名称 + * @return + */ + @RequestMapping(method = RequestMethod.GET,value = "/doctorInfo/export") +// @TokenRequired + public void exportDoctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name, + HttpServletRequest request, HttpServletResponse resp) { +// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); +// reportService.exportDoctorInfo(startDate, endDate, childBirth, number, name, loginState.getId(), resp); + reportService.exportDoctorInfo(startDate, endDate, childBirth, number, name, 753, resp); + } + + /** + * 产检医生统计导出 + * @param startDate 建档开始时间 + * @param endDate 建档结束时间 + * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 + * @return + */ + @RequestMapping(method = RequestMethod.GET,value = "/doctor/export") + @TokenRequired + public void exportDoctor(String startDate, String endDate, Integer childBirth, + HttpServletRequest request, HttpServletResponse resp) { +// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); +// reportService.exportDoctor(startDate, endDate, childBirth, loginState.getId(), resp); + reportService.exportDoctor(startDate, endDate, childBirth, 753, resp); + } + +} 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 2292306..7da66a6 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 @@ -1,68 +1,68 @@ -package com.lyms.platform.operate.web.service; - -import com.lyms.platform.common.result.BaseObjectResponse; - -import javax.servlet.http.HttpServletResponse; - -/** - * 报表service - * @Author: litao - * @Date: 2017/4/19 0019 17:53 - * @Version: V1.0 - */ -public interface IReportService extends IBaseService { - - /** - * 产检次数分布统计 - * @param startDate - * @param endDate - * @param startWeek - * @param endWeek - * @param childBirth - * @return - */ - BaseObjectResponse areaCountFacade(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth); - - /** - * 产检医生统计 - * @param startDate - * @param endDate - * @param childBirth - * @return - */ - BaseObjectResponse doctorMedical(String startDate, String endDate, Integer childBirth); - - /** - * 孕产妇明细查看 - * @param childBirth - * @param startDate - * @param endDate - * @param startWeek - * @param endWeek - * @param number - * @param name - * @param userId - * @param currenPage - * @param pageSize @return - */ - BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, Integer userId, Integer currenPage, Integer pageSize); - - /** - * 导出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); - - void exportDoctor(String startDate, String endDate, Integer childBirth, HttpServletResponse resp); - - BaseObjectResponse doctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name, Integer currentPage, Integer pageSize, Integer userId); - - void exportDoctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name, Integer userId, HttpServletResponse resp); - - void exportCheckInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, Integer userId, HttpServletResponse resp); -} +package com.lyms.platform.operate.web.service; + +import com.lyms.platform.common.result.BaseObjectResponse; + +import javax.servlet.http.HttpServletResponse; + +/** + * 报表service + * @Author: litao + * @Date: 2017/4/19 0019 17:53 + * @Version: V1.0 + */ +public interface IReportService extends IBaseService { + + /** + * 产检次数分布统计 + * @param startDate + * @param endDate + * @param startWeek + * @param endWeek + * @param childBirth + * @return + */ + BaseObjectResponse areaCountFacade(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth, Integer userId); + + /** + * 产检医生统计 + * @param startDate + * @param endDate + * @param childBirth + * @return + */ + BaseObjectResponse doctorMedical(String startDate, String endDate, Integer childBirth, Integer userId); + + /** + * 孕产妇明细查看 + * @param childBirth + * @param startDate + * @param endDate + * @param startWeek + * @param endWeek + * @param number + * @param name + * @param userId + * @param currenPage + * @param pageSize @return + */ + BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, Integer userId, Integer currenPage, Integer pageSize); + + /** + * 导出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, Integer userId, HttpServletResponse resp); + + void exportDoctor(String startDate, String endDate, Integer childBirth, Integer userId, HttpServletResponse resp); + + BaseObjectResponse doctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name, Integer currentPage, Integer pageSize, Integer userId); + + void exportDoctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name, Integer userId, HttpServletResponse resp); + + void exportCheckInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, Integer userId, 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 d93740c..4f9c8b4 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,597 +1,605 @@ -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.common.result.PageResult; -import com.lyms.platform.operate.web.dao.IReportDao; -import com.lyms.platform.operate.web.facade.AutoMatchFacade; -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.*; - -/** - * @Author: litao - * @Date: 2017/4/19 0019 17:54 - * @Version: V1.0 - */ -@Service -public class ReportServiceImpl extends BaseServiceImpl implements IReportService { - - @Autowired - private IReportDao reportDao; - - @Autowired - AutoMatchFacade autoMatchFacade; - - @Override - 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); - - List peopleList = createPeoples(mapList); - restMap.put("grid", createGrid( createPeoples(mapList), createProportion(peopleList))); - restMap.put("xAxis", Arrays.asList("1次", "2次", "3次", "4次", "5次", "6次", "7次", "8次", "9次", "10次", "11次", "12次", "≥13次")); /** x轴数据 */ - restMap.put("yAxis", createYData(peopleList)); - - rest.setData(restMap); - return rest; - } - - @Override - public BaseObjectResponse doctorMedical(String startDate, String endDate, Integer childBirth) { - BaseObjectResponse rest = new BaseObjectResponse(); - 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); - - 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<>(); - for (Map map : restList) { - Map data = 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", ""); - } - - if(!"总计".equals(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); - - if(!"总计".equals(doctorName + "")) { - Map doctorMap = new HashMap<>(); - doctorList.add(inspectPeople); - doctorList.add(twice); - doctorList.add(fiveTimes); - doctorMap.put("name", doctorName); - doctorMap.put("type", "bar"); - doctorMap.put("data", doctorList); - doctorInfo.add(doctorMap); - } - } - - /** 把总计放到第一位 */ - 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("twice")) { /** 两次以上比例 */ - map.put("twiceProportion", MathUtil.getProportion(map.get("twice"), map.get("inspectPeople"))); - } - - if(map.containsKey("fiveTimes")) { /** 五次以上比例 */ - map.put("fiveTimeProportion", MathUtil.getProportion(map.get("fiveTimes"), map.get("inspectPeople"))); - } - } - - return grid; - } - - @Override - public BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, Integer userId, Integer currentPage, Integer pageSize) { - BaseObjectResponse rest = new BaseObjectResponse(); - List params = new ArrayList<>(); - String hospitalId = autoMatchFacade.getHospitalId(userId); - PageResult page = findPage(getCheckInfoSql(childBirth, startDate, endDate, startWeek, endWeek, number, name, hospitalId, params), currentPage, pageSize, params); - rest.setData(page); - return rest; - } - - @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); - } - - @Override - public void exportDoctor(String startDate, String endDate, Integer childBirth, HttpServletResponse resp) { - ReportModel data = (ReportModel) doctorMedical(startDate, endDate, childBirth).getData(); - Map cnames = new LinkedHashMap<>(); - cnames.put("id", "#"); - cnames.put("doctorName", "产检医生"); - cnames.put("inspectTime", "产检人次"); - cnames.put("inspectPeople", "产检人数"); - cnames.put("twice", "两次(含)以上人数"); - cnames.put("twiceProportion", "两次(含)以上比例"); - cnames.put("fiveTimes", "五次(含)以上人数"); - cnames.put("fiveTimeProportion", "五次(含)以上比例"); - - List> results = new ArrayList<>(); - List> grid = data.getGrid(); - for (Map map : grid) { - Map result = new LinkedHashMap<>(); - result.put("id", map.get("id")); - result.put("doctorName", map.get("doctorName")); - result.put("inspectTime", map.get("inspectTime")); - result.put("inspectPeople", map.get("inspectPeople")); - result.put("twice", map.get("twice")); - result.put("twiceProportion", map.get("twiceProportion")); - result.put("fiveTimes", map.get("fiveTimes")); - result.put("fiveTimeProportion", map.get("fiveTimeProportion")); - results.add(result); - } - ResponseUtil.responseExcel(cnames,results, resp); - } - - @Override - public BaseObjectResponse doctorInfo(String startDate, String endDate, Integer childBirth, Integer number,String name, Integer currentPage, Integer pageSize, Integer userId) { - BaseObjectResponse rest = new BaseObjectResponse(); - List params = new ArrayList<>(); - String hospitalId = autoMatchFacade.getHospitalId(userId); - PageResult page = findPage(getDoctorInfoSql(startDate, endDate, childBirth, number, name, hospitalId, params), currentPage, pageSize, params); - rest.setData(page); - return rest; - } - - @Override - public void exportDoctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name, Integer userId, HttpServletResponse resp) { - List params = new ArrayList<>(); - String hospitalId = autoMatchFacade.getHospitalId(userId); - Map cnames = new LinkedHashMap<>(); - cnames.put("id", "#"); - cnames.put("NAME", "姓名"); - cnames.put("YUNZHOU", "当前孕周"); - cnames.put("BENYUAN_NUM", "本院产检次数"); - cnames.put("TOTAL_NUM", "总产检次数"); - cnames.put("HIGH_RISK_GRADE", "高危等级"); - cnames.put("HIGH_RISK_FACTOR", "风险因数"); - cnames.put("EDD_DATE", "预产期/分娩日期"); - cnames.put("LAST_EXAMINE_DATE", "最后产检日期"); - cnames.put("DOCTOR_NAME", "最后产检医生"); - - List> results = new ArrayList<>(); - List> list = reportDao.findList(getDoctorInfoSql(startDate, endDate, childBirth, number, name, hospitalId, params), params); - for (Map map : list) { - results.add(map); - } - - ResponseUtil.responseExcel(cnames,results, resp); - } - - @Override - public void exportCheckInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, Integer userId, HttpServletResponse resp) { - List params = new ArrayList<>(); - String hospitalId = autoMatchFacade.getHospitalId(userId); - Map cnames = new LinkedHashMap<>(); - cnames.put("id", "#"); - cnames.put("NAME", "姓名"); - cnames.put("YUNZHOU", "当前孕周"); - cnames.put("BENYUAN_NUM", "本院产检次数"); - cnames.put("TOTAL_NUM", "总产检次数"); - cnames.put("HIGH_RISK_GRADE", "高危等级"); - cnames.put("HIGH_RISK_FACTOR", "风险因数"); - cnames.put("EDD_DATE", "预产期/分娩日期"); - cnames.put("LAST_EXAMINE_DATE", "最后产检日期"); - cnames.put("DOCTOR_NAME", "最后产检医生"); - - List> results = new ArrayList<>(); - List> list = reportDao.findList(getCheckInfoSql(childBirth, startDate, endDate, startWeek, endWeek, number, name, hospitalId, params), params); - for (Map map : list) { - results.add(map); - } - - ResponseUtil.responseExcel(cnames,results, resp); - } - - private String getDoctorInfoSql(String startDate, String endDate, Integer childBirth, Integer number, String name, String hospitalId, List params) { - StringBuilder sql = new StringBuilder(); - sql.append("SELECT A.NAME, ") - .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN '已分娩' ELSE (CASE WHEN A.NOW_WEEKS_DAY<>0 THEN '孕'||A.NOW_WEEKS||'周+'||A.NOW_WEEKS_DAY||'天' ELSE '孕'||A.NOW_WEEKS||'周' END) END) AS YUNZHOU, ") - .append("SUM((CASE WHEN A.HOSPITAL_NO=B.HOSPITAL_NO THEN 1 ELSE 0 END)) AS BENYUAN_NUM, ") - .append("F.EXAMINE_HISTORY_NUM AS TOTAL_NUM, ") - .append("B.HIGH_RISK_GRADE, ") - .append("B.HIGH_RISK_FACTOR, ") - .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN E.CHILDBIRTH_DATE ELSE A.EDD_DATE END) AS EDD_DATE, ") - .append("D.INSERT_DATE AS LAST_EXAMINE_DATE, ") - .append("D.DOCTOR_NAME ") - .append("FROM ODS_F_GRAVIDA_RECORD A ") - .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC B ON A.RECORD_ID=B.RECORD_ID ") - .append("INNER JOIN ODS_D_HOSPITAL C ON A.HOSPITAL_NO=C.HOSPITAL_NO ") - .append("LEFT JOIN ODS_F_EXAMINE_HISTORY D ON A.RECORD_ID=D.RECORD_ID AND D.EXAMINE_HISTORY_NUM=1 ") - .append("LEFT JOIN ODS_F_CHILDBIRTH E ON A.RECORD_ID=E.RECORD_ID ") - .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC F ON D.EXAMINE_ID=F.EXAMINE_ID ") - .append("WHERE 1 = 1 "); - - if(childBirth != null) { - sql.append("AND A.IS_CHILDBIRTH = ? "); - params.add(childBirth); - } - - if(StringUtils.isNotBlank(hospitalId)) { - sql.append("AND C.YCY_STSTEM_ID = ? "); - params.add(hospitalId); - } - - if(startDate != null && endDate != null) { - sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); - params.add(startDate); - params.add(endDate); - } - - if(number != null) { - sql.append("AND B.EXAMINE_HISTORY_NUM = ? "); - params.add(number); - } - - if(StringUtils.isNotBlank(name)) { - sql.append("AND B.DOCTOR_NAME = ?"); - params.add(name); - } - - if(number != null && StringUtils.isNotBlank(hospitalId)) { - sql.append("AND A.RECORD_ID IN (SELECT RECORD_ID FROM ODS_F_EXAMINE_HISTORY_ASC A1,ODS_D_HOSPITAL A2 WHERE A1.HOSPITAL_NO=A2.HOSPITAL_NO AND A2.YCY_STSTEM_ID=? AND EXAMINE_HISTORY_NUM=?) "); - params.add(hospitalId); - params.add(number); - } - - sql.append("GROUP BY A.RECORD_ID, ") - .append("A.NAME, ") - .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN '已分娩' ELSE (CASE WHEN A.NOW_WEEKS_DAY<>0 THEN '孕'||A.NOW_WEEKS||'周+'||A.NOW_WEEKS_DAY||'天' ELSE '孕'||A.NOW_WEEKS||'周' END) END), ") - .append("F.EXAMINE_HISTORY_NUM, ") - .append("B.HIGH_RISK_GRADE, ") - .append("B.HIGH_RISK_FACTOR, ") - .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN E.CHILDBIRTH_DATE ELSE A.EDD_DATE END), ") - .append("D.INSERT_DATE, ") - .append("D.DOCTOR_NAME"); - - return sql.toString(); - } - - - private List> createGrid(List peopleList, List proportionList) { - List> restList = new ArrayList<>(); - Map peoples = new LinkedHashMap<>(); - peoples.put("desc", peopleList.get(0)); /** 产检人数 */ - peoples.put("count", peopleList.get(1));/** 总计 */ - peoples.put("once", peopleList.get(2)); - peoples.put("twice", peopleList.get(3)); - peoples.put("threeTimes", peopleList.get(4)); - peoples.put("fourTimes", peopleList.get(5)); - peoples.put("fiveTimes", peopleList.get(6)); - peoples.put("sixTimes", peopleList.get(7)); - peoples.put("sevenTimes", peopleList.get(8)); - peoples.put("eightTimes", peopleList.get(9)); - peoples.put("nineTimes", peopleList.get(10)); - 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 LinkedHashMap<>(); - proportion.put("desc", proportionList.get(0)); /** 占比 */ - proportion.put("count", proportionList.get(1));/** 总计 */ - proportion.put("once", proportionList.get(2)); - proportion.put("twice", proportionList.get(3)); - proportion.put("threeTimes", proportionList.get(4)); - proportion.put("fourTimes", proportionList.get(5)); - proportion.put("fiveTimes", proportionList.get(6)); - proportion.put("sixTimes", proportionList.get(7)); - proportion.put("sevenTimes", proportionList.get(8)); - proportion.put("eightTimes", proportionList.get(9)); - proportion.put("nineTimes", proportionList.get(10)); - 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; - } - - private List createProportion(List peopleList) { - List proportions = new ArrayList<>(); - proportions.add("占比"); - int countPeople = Integer.parseInt(peopleList.get(1).toString()); - proportions.add("100%"); - for (int i = 2; i < peopleList.size(); i++) { - proportions.add(MathUtil.getProportion(peopleList.get(i), countPeople)); - } - return proportions; - } - - private List createPeoples(List> mapList) { - List peoples = new ArrayList<>(); - peoples.add("产检人数"); - int countPeople = 0; /** 体检所有人数 */ - int otherPeople = 0; /** 大于或等于13的所有人数 */ - - /** 通过下标循环取map里面数据 有就设置value 没有就设置0 */ - for(int i = 1; i <= 30; i++) { - String count = null; - for (Map map : mapList) { - if(map.get("EXAMINE_HISTORY_NUM").toString().equals("" + i)) { - count = map.get("EXAMINE_CNT").toString(); - countPeople += Integer.valueOf(count); - } - } - if(i < 13) { - if(StringUtils.isNotBlank(count)) { - peoples.add(count); - } else { - peoples.add("0"); - } - } else { - if(StringUtils.isNotBlank(count)) { - otherPeople += Integer.valueOf(count); - } - } - } - peoples.add(otherPeople + ""); - peoples.add(1, countPeople + ""); - return peoples; - } - - private List createYData(List list) { - List newList = new ArrayList<>(); - newList.addAll(list); - newList.remove(0); - newList.remove(0); - return newList; - } - - 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 ") - .append("FROM ODS_F_GRAVIDA_RECORD A, ") - .append("ODS_F_EXAMINE_HISTORY_ASC B, ") - .append("ODS_D_HOSPITAL C ") - .append("WHERE A.RECORD_ID=B.RECORD_ID ") - .append("AND A.HOSPITAL_NO=C.HOSPITAL_NO ") - .append("AND A.HOSPITAL_NO=B.HOSPITAL_NO "); - - if(childBirth != null) { - sql.append("AND A.IS_CHILDBIRTH = ? "); - params.add(childBirth); - } - - if(startDate != null && endDate != null) { - sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); - params.add(startDate); - params.add(endDate); - } - - if(startWeek != null && endWeek != null) { - sql.append("AND A.NOW_WEEKS BETWEEN ? AND ? "); - params.add(startWeek); - params.add(endWeek); - } - - sql.append("GROUP BY B.EXAMINE_HISTORY_NUM ") - .append("ORDER BY EXAMINE_HISTORY_NUM"); - - return sql.toString(); - } - - private String getDoctorMedicalSql(String startDate, String endDate, Integer childBirth, List params) { - StringBuilder sql = new StringBuilder(); - sql.append("SELECT B.DOCTOR_NAME, ") - .append("COUNT(B.EXAMINE_ID) AS CJ_RC, ") - .append("COUNT(DISTINCT A.RECORD_ID) AS CJ_RS, ") - .append("COUNT(DISTINCT D.RECORD_ID) AS LIANGCI_RS, ") - .append("COUNT(DISTINCT E.RECORD_ID) AS WUCI_RS ") - .append("FROM ODS_F_GRAVIDA_RECORD A ") - .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC B ON A.RECORD_ID=B.RECORD_ID AND A.HOSPITAL_NO=B.HOSPITAL_NO ") - .append("INNER JOIN ODS_D_HOSPITAL C ON A.HOSPITAL_NO=C.HOSPITAL_NO ") - .append("LEFT JOIN ODS_F_EXAMINE_HISTORY_ASC D ON B.EXAMINE_ID=D.EXAMINE_ID AND D.EXAMINE_HISTORY_NUM>1 ") - .append("LEFT JOIN ODS_F_EXAMINE_HISTORY_ASC E ON B.EXAMINE_ID=E.EXAMINE_ID AND E.EXAMINE_HISTORY_NUM>4 ") - .append("WHERE C.YCY_STSTEM_ID='216' "); - - if(childBirth != null) { - sql.append("AND A.IS_CHILDBIRTH = ? "); - params.add(childBirth); - } - - if(startDate != null && endDate != null) { - sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); - params.add(startDate); - params.add(endDate); - } - - /* if(startWeek != null && endWeek != null) { - sql.append("AND A.NOW_WEEKS BETWEEN ? AND ? "); - params.add(startWeek); - params.add(endWeek); - }*/ - - - sql.append("GROUP BY B.DOCTOR_NAME,B.DOCTOR_NO ") - .append("UNION ALL ") - .append("SELECT '总计', ") - .append("COUNT(B.EXAMINE_ID) AS CJ_RC, ") - .append("COUNT(DISTINCT A.RECORD_ID) AS CJ_RS, ") - .append("COUNT(DISTINCT D.RECORD_ID) AS LIANGCI_RS, ") - .append("COUNT(DISTINCT E.RECORD_ID) AS WUCI_RS ") - .append("FROM ODS_F_GRAVIDA_RECORD A ") - .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC B ON A.RECORD_ID=B.RECORD_ID AND A.HOSPITAL_NO=B.HOSPITAL_NO ") - .append("INNER JOIN ODS_D_HOSPITAL C ON A.HOSPITAL_NO=C.HOSPITAL_NO ") - .append("LEFT JOIN ODS_F_EXAMINE_HISTORY_ASC D ON B.EXAMINE_ID=D.EXAMINE_ID AND D.EXAMINE_HISTORY_NUM>1 ") - .append("LEFT JOIN ODS_F_EXAMINE_HISTORY_ASC E ON B.EXAMINE_ID=E.EXAMINE_ID AND E.EXAMINE_HISTORY_NUM>4 "); - - if(childBirth != null) { - sql.append("AND A.IS_CHILDBIRTH = ? "); - params.add(childBirth); - } - - if(startDate != null && endDate != null) { - sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); - params.add(startDate); - params.add(endDate); - } - - /*if(startWeek != null && endWeek != null) { - sql.append("AND A.NOW_WEEKS BETWEEN ? AND ? "); - params.add(startWeek); - params.add(endWeek); - }*/ - return sql.toString(); - } - - private String getCheckInfoSql(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, String hospitalId, List params) { - StringBuilder sql = new StringBuilder(); - sql.append("SELECT A.NAME, ") - .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN '已分娩' ELSE (CASE WHEN A.NOW_WEEKS_DAY<>0 THEN '孕'||A.NOW_WEEKS||'周+'||A.NOW_WEEKS_DAY||'天' ELSE '孕'||A.NOW_WEEKS||'周' END) END) AS YUNZHOU, ") - .append("SUM((CASE WHEN A.HOSPITAL_NO=B.HOSPITAL_NO THEN 1 ELSE 0 END)) AS BENYUAN_NUM, ") - .append("F.EXAMINE_HISTORY_NUM AS TOTAL_NUM, ") - .append("B.HIGH_RISK_GRADE, ") - .append("B.HIGH_RISK_FACTOR, ") - .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN E.CHILDBIRTH_DATE ELSE A.EDD_DATE END) AS EDD_DATE, ") - .append("D.INSERT_DATE AS LAST_EXAMINE_DATE, ") - .append("D.DOCTOR_NAME ") - .append("FROM ODS_F_GRAVIDA_RECORD A ") - .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC B ON A.RECORD_ID=B.RECORD_ID ") - .append("INNER JOIN ODS_D_HOSPITAL C ON A.HOSPITAL_NO=C.HOSPITAL_NO ") - .append("LEFT JOIN ODS_F_EXAMINE_HISTORY D ON A.RECORD_ID=D.RECORD_ID AND D.EXAMINE_HISTORY_NUM=1 ") - .append("LEFT JOIN ODS_F_CHILDBIRTH E ON A.RECORD_ID=E.RECORD_ID ") - .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC F ON D.EXAMINE_ID=F.EXAMINE_ID ") - .append("WHERE 1=1 "); - - if(childBirth != null) { - sql.append("AND A.IS_CHILDBIRTH = ? "); - params.add(childBirth); - } - - if(StringUtils.isNotBlank(hospitalId)) { - sql.append("AND C.YCY_STSTEM_ID = ? "); - params.add(hospitalId); - } - - if(startDate != null && endDate != null) { - sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); - params.add(startDate); - params.add(endDate); - } - - if(startWeek != null && endWeek != null) { - sql.append("AND A.NOW_WEEKS BETWEEN ? AND ? "); - params.add(startWeek); - params.add(endWeek); - } - - if(number != null) { - sql.append("AND B.EXAMINE_HISTORY_NUM=? "); - params.add(number); - } - - sql.append("GROUP BY A.RECORD_ID, ") - .append("A.NAME, ") - .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN '已分娩' ELSE (CASE WHEN A.NOW_WEEKS_DAY<>0 THEN '孕'||A.NOW_WEEKS||'周+'||A.NOW_WEEKS_DAY||'天' ELSE '孕'||A.NOW_WEEKS||'周' END) END), ") - .append("F.EXAMINE_HISTORY_NUM, ") - .append("B.HIGH_RISK_GRADE, ") - .append("B.HIGH_RISK_FACTOR, ") - .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN E.CHILDBIRTH_DATE ELSE A.EDD_DATE END), ") - .append("D.INSERT_DATE, ") - .append("D.DOCTOR_NAME "); - return sql.toString(); - } -} +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.common.result.PageResult; +import com.lyms.platform.operate.web.dao.IReportDao; +import com.lyms.platform.operate.web.facade.AutoMatchFacade; +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.*; + +/** + * @Author: litao + * @Date: 2017/4/19 0019 17:54 + * @Version: V1.0 + */ +@Service +public class ReportServiceImpl extends BaseServiceImpl implements IReportService { + + @Autowired + private IReportDao reportDao; + + @Autowired + AutoMatchFacade autoMatchFacade; + + @Override + public BaseObjectResponse areaCountFacade(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth, Integer userId) { + BaseObjectResponse rest = new BaseObjectResponse(); + Map restMap = new HashMap<>(); + List params = new ArrayList<>(); + String hospitalId = autoMatchFacade.getHospitalId(userId); + List> mapList = reportDao.findList(getAreaCountFacadeSql(startDate, endDate, startWeek, endWeek, childBirth, hospitalId, params), params); + + List peopleList = createPeoples(mapList); + restMap.put("grid", createGrid( createPeoples(mapList), createProportion(peopleList))); + restMap.put("xAxis", Arrays.asList("1次", "2次", "3次", "4次", "5次", "6次", "7次", "8次", "9次", "10次", "11次", "12次", "≥13次")); /** x轴数据 */ + restMap.put("yAxis", createYData(peopleList)); + + rest.setData(restMap); + return rest; + } + + @Override + public BaseObjectResponse doctorMedical(String startDate, String endDate, Integer childBirth, Integer userId) { + BaseObjectResponse rest = new BaseObjectResponse(); + 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); + + 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<>(); + for (Map map : restList) { + Map data = 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", ""); + } + + if(!"总计".equals(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); + + if(!"总计".equals(doctorName + "")) { + Map doctorMap = new HashMap<>(); + doctorList.add(inspectPeople); + doctorList.add(twice); + doctorList.add(fiveTimes); + doctorMap.put("name", doctorName); + doctorMap.put("type", "bar"); + doctorMap.put("data", doctorList); + doctorInfo.add(doctorMap); + } + } + + /** 把总计放到第一位 */ + 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("twice")) { /** 两次以上比例 */ + map.put("twiceProportion", MathUtil.getProportion(map.get("twice"), map.get("inspectPeople"))); + } + + if(map.containsKey("fiveTimes")) { /** 五次以上比例 */ + map.put("fiveTimeProportion", MathUtil.getProportion(map.get("fiveTimes"), map.get("inspectPeople"))); + } + } + + return grid; + } + + @Override + public BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, Integer userId, Integer currentPage, Integer pageSize) { + BaseObjectResponse rest = new BaseObjectResponse(); + List params = new ArrayList<>(); + String hospitalId = autoMatchFacade.getHospitalId(userId); + PageResult page = findPage(getCheckInfoSql(childBirth, startDate, endDate, startWeek, endWeek, number, name, hospitalId, params), currentPage, pageSize, params); + rest.setData(page); + return rest; + } + + @Override + public void exportCheck(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth, Integer userId, HttpServletResponse resp) { + BaseObjectResponse rest = areaCountFacade(startDate, endDate, startWeek, endWeek, childBirth, userId); + 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次"); + + @SuppressWarnings("unchecked") + 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); + } + + @Override + public void exportDoctor(String startDate, String endDate, Integer childBirth, Integer userId, HttpServletResponse resp) { + ReportModel data = (ReportModel) doctorMedical(startDate, endDate, childBirth, userId).getData(); + Map cnames = new LinkedHashMap<>(); + cnames.put("id", "#"); + cnames.put("doctorName", "产检医生"); + cnames.put("inspectTime", "产检人次"); + cnames.put("inspectPeople", "产检人数"); + cnames.put("twice", "两次(含)以上人数"); + cnames.put("twiceProportion", "两次(含)以上比例"); + cnames.put("fiveTimes", "五次(含)以上人数"); + cnames.put("fiveTimeProportion", "五次(含)以上比例"); + + List> results = new ArrayList<>(); + List> grid = data.getGrid(); + for (Map map : grid) { + Map result = new LinkedHashMap<>(); + result.put("id", map.get("id")); + result.put("doctorName", map.get("doctorName")); + result.put("inspectTime", map.get("inspectTime")); + result.put("inspectPeople", map.get("inspectPeople")); + result.put("twice", map.get("twice")); + result.put("twiceProportion", map.get("twiceProportion")); + result.put("fiveTimes", map.get("fiveTimes")); + result.put("fiveTimeProportion", map.get("fiveTimeProportion")); + results.add(result); + } + ResponseUtil.responseExcel(cnames,results, resp); + } + + @Override + public BaseObjectResponse doctorInfo(String startDate, String endDate, Integer childBirth, Integer number,String name, Integer currentPage, Integer pageSize, Integer userId) { + BaseObjectResponse rest = new BaseObjectResponse(); + List params = new ArrayList<>(); + String hospitalId = autoMatchFacade.getHospitalId(userId); + PageResult page = findPage(getDoctorInfoSql(startDate, endDate, childBirth, number, name, hospitalId, params), currentPage, pageSize, params); + rest.setData(page); + return rest; + } + + @Override + public void exportDoctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name, Integer userId, HttpServletResponse resp) { + List params = new ArrayList<>(); + String hospitalId = autoMatchFacade.getHospitalId(userId); + Map cnames = new LinkedHashMap<>(); + cnames.put("id", "#"); + cnames.put("NAME", "姓名"); + cnames.put("YUNZHOU", "当前孕周"); + cnames.put("BENYUAN_NUM", "本院产检次数"); + cnames.put("TOTAL_NUM", "总产检次数"); + cnames.put("HIGH_RISK_GRADE", "高危等级"); + cnames.put("HIGH_RISK_FACTOR", "风险因数"); + cnames.put("EDD_DATE", "预产期/分娩日期"); + cnames.put("LAST_EXAMINE_DATE", "最后产检日期"); + cnames.put("DOCTOR_NAME", "最后产检医生"); + + List> results = new ArrayList<>(); + List> list = reportDao.findList(getDoctorInfoSql(startDate, endDate, childBirth, number, name, hospitalId, params), params); + for (Map map : list) { + results.add(map); + } + + ResponseUtil.responseExcel(cnames,results, resp); + } + + @Override + public void exportCheckInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, Integer userId, HttpServletResponse resp) { + List params = new ArrayList<>(); + String hospitalId = autoMatchFacade.getHospitalId(userId); + Map cnames = new LinkedHashMap<>(); + cnames.put("id", "#"); + cnames.put("NAME", "姓名"); + cnames.put("YUNZHOU", "当前孕周"); + cnames.put("BENYUAN_NUM", "本院产检次数"); + cnames.put("TOTAL_NUM", "总产检次数"); + cnames.put("HIGH_RISK_GRADE", "高危等级"); + cnames.put("HIGH_RISK_FACTOR", "风险因数"); + cnames.put("EDD_DATE", "预产期/分娩日期"); + cnames.put("LAST_EXAMINE_DATE", "最后产检日期"); + cnames.put("DOCTOR_NAME", "最后产检医生"); + + List> results = new ArrayList<>(); + List> list = reportDao.findList(getCheckInfoSql(childBirth, startDate, endDate, startWeek, endWeek, number, name, hospitalId, params), params); + for (Map map : list) { + results.add(map); + } + + ResponseUtil.responseExcel(cnames,results, resp); + } + + private String getDoctorInfoSql(String startDate, String endDate, Integer childBirth, Integer number, String name, String hospitalId, List params) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT A.NAME, ") + .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN '已分娩' ELSE (CASE WHEN A.NOW_WEEKS_DAY<>0 THEN '孕'||A.NOW_WEEKS||'周+'||A.NOW_WEEKS_DAY||'天' ELSE '孕'||A.NOW_WEEKS||'周' END) END) AS YUNZHOU, ") + .append("SUM((CASE WHEN A.HOSPITAL_NO=B.HOSPITAL_NO THEN 1 ELSE 0 END)) AS BENYUAN_NUM, ") + .append("F.EXAMINE_HISTORY_NUM AS TOTAL_NUM, ") + .append("B.HIGH_RISK_GRADE, ") + .append("B.HIGH_RISK_FACTOR, ") + .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN E.CHILDBIRTH_DATE ELSE A.EDD_DATE END) AS EDD_DATE, ") + .append("D.INSERT_DATE AS LAST_EXAMINE_DATE, ") + .append("D.DOCTOR_NAME ") + .append("FROM ODS_F_GRAVIDA_RECORD A ") + .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC B ON A.RECORD_ID=B.RECORD_ID ") + .append("INNER JOIN ODS_D_HOSPITAL C ON A.HOSPITAL_NO=C.HOSPITAL_NO ") + .append("LEFT JOIN ODS_F_EXAMINE_HISTORY D ON A.RECORD_ID=D.RECORD_ID AND D.EXAMINE_HISTORY_NUM=1 ") + .append("LEFT JOIN ODS_F_CHILDBIRTH E ON A.RECORD_ID=E.RECORD_ID ") + .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC F ON D.EXAMINE_ID=F.EXAMINE_ID ") + .append("WHERE 1 = 1 "); + + if(childBirth != null) { + sql.append("AND A.IS_CHILDBIRTH = ? "); + params.add(childBirth); + } + + if(StringUtils.isNotBlank(hospitalId)) { + sql.append("AND C.YCY_STSTEM_ID = ? "); + params.add(hospitalId); + } + + if(startDate != null && endDate != null) { + sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); + params.add(startDate); + params.add(endDate); + } + + if(number != null) { + sql.append("AND B.EXAMINE_HISTORY_NUM = ? "); + params.add(number); + } + + if(StringUtils.isNotBlank(name)) { + sql.append("AND B.DOCTOR_NAME = ?"); + params.add(name); + } + + if(number != null && StringUtils.isNotBlank(hospitalId)) { + sql.append("AND A.RECORD_ID IN (SELECT RECORD_ID FROM ODS_F_EXAMINE_HISTORY_ASC A1,ODS_D_HOSPITAL A2 WHERE A1.HOSPITAL_NO=A2.HOSPITAL_NO AND A2.YCY_STSTEM_ID=? AND EXAMINE_HISTORY_NUM=?) "); + params.add(hospitalId); + params.add(number); + } + + sql.append("GROUP BY A.RECORD_ID, ") + .append("A.NAME, ") + .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN '已分娩' ELSE (CASE WHEN A.NOW_WEEKS_DAY<>0 THEN '孕'||A.NOW_WEEKS||'周+'||A.NOW_WEEKS_DAY||'天' ELSE '孕'||A.NOW_WEEKS||'周' END) END), ") + .append("F.EXAMINE_HISTORY_NUM, ") + .append("B.HIGH_RISK_GRADE, ") + .append("B.HIGH_RISK_FACTOR, ") + .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN E.CHILDBIRTH_DATE ELSE A.EDD_DATE END), ") + .append("D.INSERT_DATE, ") + .append("D.DOCTOR_NAME"); + + return sql.toString(); + } + + + private List> createGrid(List peopleList, List proportionList) { + List> restList = new ArrayList<>(); + Map peoples = new LinkedHashMap<>(); + peoples.put("desc", peopleList.get(0)); /** 产检人数 */ + peoples.put("count", peopleList.get(1));/** 总计 */ + peoples.put("once", peopleList.get(2)); + peoples.put("twice", peopleList.get(3)); + peoples.put("threeTimes", peopleList.get(4)); + peoples.put("fourTimes", peopleList.get(5)); + peoples.put("fiveTimes", peopleList.get(6)); + peoples.put("sixTimes", peopleList.get(7)); + peoples.put("sevenTimes", peopleList.get(8)); + peoples.put("eightTimes", peopleList.get(9)); + peoples.put("nineTimes", peopleList.get(10)); + 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 LinkedHashMap<>(); + proportion.put("desc", proportionList.get(0)); /** 占比 */ + proportion.put("count", proportionList.get(1));/** 总计 */ + proportion.put("once", proportionList.get(2)); + proportion.put("twice", proportionList.get(3)); + proportion.put("threeTimes", proportionList.get(4)); + proportion.put("fourTimes", proportionList.get(5)); + proportion.put("fiveTimes", proportionList.get(6)); + proportion.put("sixTimes", proportionList.get(7)); + proportion.put("sevenTimes", proportionList.get(8)); + proportion.put("eightTimes", proportionList.get(9)); + proportion.put("nineTimes", proportionList.get(10)); + 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; + } + + private List createProportion(List peopleList) { + List proportions = new ArrayList<>(); + proportions.add("占比"); + int countPeople = Integer.parseInt(peopleList.get(1).toString()); + proportions.add("100%"); + for (int i = 2; i < peopleList.size(); i++) { + proportions.add(MathUtil.getProportion(peopleList.get(i), countPeople)); + } + return proportions; + } + + private List createPeoples(List> mapList) { + List peoples = new ArrayList<>(); + peoples.add("产检人数"); + int countPeople = 0; /** 体检所有人数 */ + int otherPeople = 0; /** 大于或等于13的所有人数 */ + + /** 通过下标循环取map里面数据 有就设置value 没有就设置0 */ + for(int i = 1; i <= 30; i++) { + String count = null; + for (Map map : mapList) { + if(map.get("EXAMINE_HISTORY_NUM").toString().equals("" + i)) { + count = map.get("EXAMINE_CNT").toString(); + countPeople += Integer.valueOf(count); + } + } + if(i < 13) { + if(StringUtils.isNotBlank(count)) { + peoples.add(count); + } else { + peoples.add("0"); + } + } else { + if(StringUtils.isNotBlank(count)) { + otherPeople += Integer.valueOf(count); + } + } + } + peoples.add(otherPeople + ""); + peoples.add(1, countPeople + ""); + return peoples; + } + + private List createYData(List list) { + List newList = new ArrayList<>(); + newList.addAll(list); + newList.remove(0); + newList.remove(0); + return newList; + } + + private String getAreaCountFacadeSql(String startDate, String endDate, Integer startWeek, Integer endWeek, Integer childBirth, String hospitalId, List params) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT B.EXAMINE_HISTORY_NUM, ") + .append("COUNT(B.EXAMINE_ID) AS EXAMINE_CNT ") + .append("FROM ODS_F_GRAVIDA_RECORD A, ") + .append("ODS_F_EXAMINE_HISTORY_ASC B, ") + .append("ODS_D_HOSPITAL C ") + .append("WHERE A.RECORD_ID=B.RECORD_ID ") + .append("AND A.HOSPITAL_NO=C.HOSPITAL_NO ") + .append("AND A.HOSPITAL_NO=B.HOSPITAL_NO "); + + if(childBirth != null) { + sql.append("AND A.IS_CHILDBIRTH = ? "); + params.add(childBirth); + } + + + if(StringUtils.isNotBlank(hospitalId)) { + sql.append("AND C.YCY_STSTEM_ID= ? "); + params.add(hospitalId); + } + + if(startDate != null && endDate != null) { + sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); + params.add(startDate); + params.add(endDate); + } + + if(startWeek != null && endWeek != null) { + sql.append("AND A.NOW_WEEKS BETWEEN ? AND ? "); + params.add(startWeek); + params.add(endWeek); + } + + sql.append("GROUP BY B.EXAMINE_HISTORY_NUM ") + .append("ORDER BY EXAMINE_HISTORY_NUM"); + + return sql.toString(); + } + + private String getDoctorMedicalSql(String startDate, String endDate, Integer childBirth, List params) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT B.DOCTOR_NAME, ") + .append("COUNT(B.EXAMINE_ID) AS CJ_RC, ") + .append("COUNT(DISTINCT A.RECORD_ID) AS CJ_RS, ") + .append("COUNT(DISTINCT D.RECORD_ID) AS LIANGCI_RS, ") + .append("COUNT(DISTINCT E.RECORD_ID) AS WUCI_RS ") + .append("FROM ODS_F_GRAVIDA_RECORD A ") + .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC B ON A.RECORD_ID=B.RECORD_ID AND A.HOSPITAL_NO=B.HOSPITAL_NO ") + .append("INNER JOIN ODS_D_HOSPITAL C ON A.HOSPITAL_NO=C.HOSPITAL_NO ") + .append("LEFT JOIN ODS_F_EXAMINE_HISTORY_ASC D ON B.EXAMINE_ID=D.EXAMINE_ID AND D.EXAMINE_HISTORY_NUM>1 ") + .append("LEFT JOIN ODS_F_EXAMINE_HISTORY_ASC E ON B.EXAMINE_ID=E.EXAMINE_ID AND E.EXAMINE_HISTORY_NUM>4 ") + .append("WHERE C.YCY_STSTEM_ID='216' "); + + if(childBirth != null) { + sql.append("AND A.IS_CHILDBIRTH = ? "); + params.add(childBirth); + } + + if(startDate != null && endDate != null) { + sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); + params.add(startDate); + params.add(endDate); + } + + /* if(startWeek != null && endWeek != null) { + sql.append("AND A.NOW_WEEKS BETWEEN ? AND ? "); + params.add(startWeek); + params.add(endWeek); + }*/ + + + sql.append("GROUP BY B.DOCTOR_NAME,B.DOCTOR_NO ") + .append("UNION ALL ") + .append("SELECT '总计', ") + .append("COUNT(B.EXAMINE_ID) AS CJ_RC, ") + .append("COUNT(DISTINCT A.RECORD_ID) AS CJ_RS, ") + .append("COUNT(DISTINCT D.RECORD_ID) AS LIANGCI_RS, ") + .append("COUNT(DISTINCT E.RECORD_ID) AS WUCI_RS ") + .append("FROM ODS_F_GRAVIDA_RECORD A ") + .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC B ON A.RECORD_ID=B.RECORD_ID AND A.HOSPITAL_NO=B.HOSPITAL_NO ") + .append("INNER JOIN ODS_D_HOSPITAL C ON A.HOSPITAL_NO=C.HOSPITAL_NO ") + .append("LEFT JOIN ODS_F_EXAMINE_HISTORY_ASC D ON B.EXAMINE_ID=D.EXAMINE_ID AND D.EXAMINE_HISTORY_NUM>1 ") + .append("LEFT JOIN ODS_F_EXAMINE_HISTORY_ASC E ON B.EXAMINE_ID=E.EXAMINE_ID AND E.EXAMINE_HISTORY_NUM>4 "); + + if(childBirth != null) { + sql.append("AND A.IS_CHILDBIRTH = ? "); + params.add(childBirth); + } + + if(startDate != null && endDate != null) { + sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); + params.add(startDate); + params.add(endDate); + } + + /*if(startWeek != null && endWeek != null) { + sql.append("AND A.NOW_WEEKS BETWEEN ? AND ? "); + params.add(startWeek); + params.add(endWeek); + }*/ + return sql.toString(); + } + + private String getCheckInfoSql(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, String hospitalId, List params) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT A.NAME, ") + .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN '已分娩' ELSE (CASE WHEN A.NOW_WEEKS_DAY<>0 THEN '孕'||A.NOW_WEEKS||'周+'||A.NOW_WEEKS_DAY||'天' ELSE '孕'||A.NOW_WEEKS||'周' END) END) AS YUNZHOU, ") + .append("SUM((CASE WHEN A.HOSPITAL_NO=B.HOSPITAL_NO THEN 1 ELSE 0 END)) AS BENYUAN_NUM, ") + .append("F.EXAMINE_HISTORY_NUM AS TOTAL_NUM, ") + .append("B.HIGH_RISK_GRADE, ") + .append("B.HIGH_RISK_FACTOR, ") + .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN E.CHILDBIRTH_DATE ELSE A.EDD_DATE END) AS EDD_DATE, ") + .append("D.INSERT_DATE AS LAST_EXAMINE_DATE, ") + .append("D.DOCTOR_NAME ") + .append("FROM ODS_F_GRAVIDA_RECORD A ") + .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC B ON A.RECORD_ID=B.RECORD_ID ") + .append("INNER JOIN ODS_D_HOSPITAL C ON A.HOSPITAL_NO=C.HOSPITAL_NO ") + .append("LEFT JOIN ODS_F_EXAMINE_HISTORY D ON A.RECORD_ID=D.RECORD_ID AND D.EXAMINE_HISTORY_NUM=1 ") + .append("LEFT JOIN ODS_F_CHILDBIRTH E ON A.RECORD_ID=E.RECORD_ID ") + .append("INNER JOIN ODS_F_EXAMINE_HISTORY_ASC F ON D.EXAMINE_ID=F.EXAMINE_ID ") + .append("WHERE 1=1 "); + + if(childBirth != null) { + sql.append("AND A.IS_CHILDBIRTH = ? "); + params.add(childBirth); + } + + if(StringUtils.isNotBlank(hospitalId)) { + sql.append("AND C.YCY_STSTEM_ID = ? "); + params.add(hospitalId); + } + + if(startDate != null && endDate != null) { + sql.append("AND A.CREATE_DATE BETWEEN to_date(?,'yyyy-mm-dd') AND to_date(?,'yyyy-mm-dd') "); + params.add(startDate); + params.add(endDate); + } + + if(startWeek != null && endWeek != null) { + sql.append("AND A.NOW_WEEKS BETWEEN ? AND ? "); + params.add(startWeek); + params.add(endWeek); + } + + if(number != null) { + sql.append("AND B.EXAMINE_HISTORY_NUM=? "); + params.add(number); + } + + sql.append("GROUP BY A.RECORD_ID, ") + .append("A.NAME, ") + .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN '已分娩' ELSE (CASE WHEN A.NOW_WEEKS_DAY<>0 THEN '孕'||A.NOW_WEEKS||'周+'||A.NOW_WEEKS_DAY||'天' ELSE '孕'||A.NOW_WEEKS||'周' END) END), ") + .append("F.EXAMINE_HISTORY_NUM, ") + .append("B.HIGH_RISK_GRADE, ") + .append("B.HIGH_RISK_FACTOR, ") + .append("(CASE WHEN A.IS_CHILDBIRTH=3 THEN E.CHILDBIRTH_DATE ELSE A.EDD_DATE END), ") + .append("D.INSERT_DATE, ") + .append("D.DOCTOR_NAME "); + return sql.toString(); + } +} -- 1.8.3.1