diff --git a/platform-common/src/main/java/com/lyms/platform/common/result/PageResult.java b/platform-common/src/main/java/com/lyms/platform/common/result/PageResult.java new file mode 100644 index 0000000..399ce99 --- /dev/null +++ b/platform-common/src/main/java/com/lyms/platform/common/result/PageResult.java @@ -0,0 +1,72 @@ +package com.lyms.platform.common.result; + +/** + * @Author: litao + * @Date: 2017/4/24 0024 10:32 + * @Version: V1.0 + */ +public class PageResult extends BaseModel { + private Integer count; // 总条数 + private Integer page; // 当前页 + private Integer limit; // 每页显示的条数 + private Integer lastPage; // 总页数 + private int size = 0; + private Object rows; + + public PageResult(Integer count, Integer page, Integer limit, + Object rows) { + this.count = count; + this.page = page; + this.limit = limit; + this.rows = rows; + this.lastPage = ((count - 1)/this.limit) + 1; + } + + public Integer getCount() { + return count; + } + + public void setCount(Integer count) { + this.count = count; + } + + public Integer getPage() { + return page; + } + + public void setPage(Integer page) { + this.page = page; + } + + public Integer getLimit() { + return limit; + } + + public void setLimit(Integer limit) { + this.limit = limit; + } + + public Integer getLastPage() { + return lastPage; + } + + public void setLastPage(Integer lastPage) { + this.lastPage = lastPage; + } + + public int getSize() { + return limit; + } + + public void setSize(int size) { + this.size = size; + } + + public Object getRows() { + return rows; + } + + public void setRows(Object rows) { + this.rows = rows; + } +} 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 094ad76..95dc6d6 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 @@ -63,12 +63,15 @@ public class ReportController extends BaseController { * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 * @param number 检查次数 * @param name 医生名称 + * @param currentPage 当前页 + * @param pageSize 每页显示的数量 * @return */ @RequestMapping(method = RequestMethod.GET,value = "/checkInfo") @ResponseBody - public BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name) { - return reportService.checkInfo(childBirth, startDate, endDate, startWeek, endWeek, number, name); + public BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, + String name, Integer currentPage, Integer pageSize) { + return reportService.checkInfo(childBirth, startDate, endDate, startWeek, endWeek, number, name, currentPage, pageSize); } /** @@ -85,6 +88,21 @@ public class ReportController extends BaseController { } /** + * 产检医生统计详情 + * @param startDate 建档开始时间 + * @param endDate 建档结束时间 + * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 + * @param number 产检次数 + * @param name 医生名称 + * @return + */ + @RequestMapping(method = RequestMethod.GET,value = "/doctorInfo") + @ResponseBody + public BaseObjectResponse doctorInfo(String startDate, String endDate, Integer childBirth, Integer number, String name,Integer currentPage, Integer pageSize) { + return reportService.doctorInfo(startDate, endDate, childBirth, number, name,currentPage, pageSize); + } + + /** * 产检医生统计导出 * @param startDate 建档开始时间 * @param endDate 建档结束时间 diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/dao/IBaseDao.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/dao/IBaseDao.java index a609247..a1a0f06 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/dao/IBaseDao.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/dao/IBaseDao.java @@ -18,4 +18,20 @@ public interface IBaseDao { */ List> findList(String sql, List params); + /** + * 查询分页数据 + * @param sql + * @param currentPage + * @param pageSize + * @param params + */ + List> findList(String sql, Integer currentPage, Integer pageSize, List params); + + /** + * 查询总的count + * @param sql + * @param param + * @return + */ + Integer findCount(String sql, List param); } 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..aabd7d4 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 @@ -2,7 +2,9 @@ package com.lyms.platform.operate.web.dao.impl; import com.lyms.platform.operate.web.dao.IBaseDao; import com.lyms.platform.operate.web.utils.SystemDataSource; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; import org.apache.commons.dbutils.handlers.MapListHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,4 +44,41 @@ public class BaseDaoImpl implements IBaseDao { } return null; } + + @Override + public List> findList(String sql, Integer currentPage, Integer pageSize, List params) { + StringBuilder rowSql = new StringBuilder(); + rowSql.append("SELECT * FROM ") + .append("( ") + .append("SELECT A.*, ROWNUM RN ") + .append("FROM ( ") + .append(sql) + .append(" ) A ") + .append("WHERE ROWNUM <= ? ") + .append(" ) ") + .append("WHERE RN >= ? "); + params.add(0, currentPage * pageSize); + params.add((currentPage - 1) * pageSize + 1); + return findList(rowSql.toString(), params); + + } + + @Override + public Integer findCount(String sql, List param) { + StringBuilder countSql = new StringBuilder(); + try { + countSql.append("select count(1) from ( ") + .append(sql) + .append(" )"); + List list = qr.query(countSql.toString(), new ColumnListHandler<>(), CollectionUtils.isNotEmpty(param) ? null : param.toArray()); + if(CollectionUtils.isNotEmpty(list)) { + return Integer.parseInt(list.get(0).toString()); + } + } catch (SQLException e) { + e.printStackTrace(); + logger.error("count 查询失败:countSql: {}, params: {}", countSql, param); + } + return 0; + } + } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IBaseService.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IBaseService.java new file mode 100644 index 0000000..7986f3b --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IBaseService.java @@ -0,0 +1,22 @@ +package com.lyms.platform.operate.web.service; + +import com.lyms.platform.common.result.PageResult; + +import java.util.List; + +/** + * @Author: litao + * @Date: 2017/4/24 0024 11:15 + * @Version: V1.0 + */ +public interface IBaseService { + + /** + * + * 根据sql+条件 查询分页对象 + * @param sql + * @param params + * @return + */ + public PageResult findPage(String sql, Integer currentPage, Integer pageSize, List params); +} 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 5869f13..dcd2773 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 @@ -10,7 +10,7 @@ import javax.servlet.http.HttpServletResponse; * @Date: 2017/4/19 0019 17:53 * @Version: V1.0 */ -public interface IReportService { +public interface IReportService extends IBaseService { /** * 产检次数分布统计 @@ -41,9 +41,10 @@ public interface IReportService { * @param endWeek * @param number * @param name - * @return + * @param currenPage + *@param pageSize @return */ - BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name); + BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, Integer currenPage, Integer pageSize); /** * 导出Excel @@ -57,4 +58,6 @@ public interface IReportService { 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); } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BaseServiceImpl.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BaseServiceImpl.java new file mode 100644 index 0000000..0fd0e48 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BaseServiceImpl.java @@ -0,0 +1,33 @@ +package com.lyms.platform.operate.web.service.impl; + +import com.lyms.platform.common.result.PageResult; +import com.lyms.platform.operate.web.dao.IBaseDao; +import com.lyms.platform.operate.web.service.IBaseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @Author: litao + * @Date: 2017/4/24 0024 11:15 + * @Version: V1.0 + */ +@Service +public class BaseServiceImpl implements IBaseService { + @Autowired + @Qualifier("baseDaoImpl") + private IBaseDao baseDao; + + @Override + public PageResult findPage(String sql, Integer currentPage, Integer pageSize, List params) { + pageSize = pageSize == null ? 10 : pageSize; + currentPage = currentPage == null ? 1 : currentPage; + + Integer count = baseDao.findCount(sql, params); + List> rows = baseDao.findList(sql, currentPage, pageSize, params); + return new PageResult(count, currentPage, pageSize, rows); + } +} 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 d061ad2..c7fb612 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 @@ -2,6 +2,7 @@ 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.service.IReportService; import com.lyms.platform.operate.web.utils.MathUtil; @@ -19,7 +20,7 @@ import java.util.*; * @Version: V1.0 */ @Service -public class ReportServiceImpl implements IReportService { +public class ReportServiceImpl extends BaseServiceImpl implements IReportService { @Autowired private IReportDao reportDao; @@ -135,8 +136,12 @@ public class ReportServiceImpl implements IReportService { } @Override - public BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name) { - return null; + public BaseObjectResponse checkInfo(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, Integer currentPage, Integer pageSize) { + BaseObjectResponse rest = new BaseObjectResponse(); + List params = new ArrayList<>(); + PageResult page = findPage(getCheckInfoSql(childBirth, startDate, endDate, startWeek, endWeek, number, name, params), currentPage, pageSize, params); + rest.setData(page); + return rest; } @Override @@ -200,19 +205,89 @@ public class ReportServiceImpl implements IReportService { List> grid = data.getGrid(); for (Map map : grid) { Map result = new LinkedHashMap<>(); - result.put("id", result.get("id")); - result.put("doctorName", result.get("doctorName")); - result.put("inspectTime", result.get("inspectTime")); - result.put("inspectPeople", result.get("inspectPeople")); - result.put("twice", result.get("twice")); - result.put("twiceProportion", result.get("twiceProportion")); - result.put("fiveTimes", result.get("fiveTimes")); - result.put("fiveTimeProportion", result.get("fiveTimeProportion")); + 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) { + BaseObjectResponse rest = new BaseObjectResponse(); + List params = new ArrayList<>(); + PageResult page = findPage(getDoctorInfoSql(startDate, endDate, childBirth, number, name, params), currentPage, pageSize, params); + rest.setData(page); + return rest; + } + + private String getDoctorInfoSql(String startDate, String endDate, Integer childBirth, Integer number, String name, 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 "); + + // sql.append(" AND C.YCY_STSTEM_ID=?"); 医院ID条件 + + 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(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) { +// 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(STSTEM_ID); 医院id +// 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<>(); @@ -403,4 +478,56 @@ public class ReportServiceImpl implements IReportService { return sql.toString(); } + private String getCheckInfoSql(Integer childBirth, String startDate, String endDate, Integer startWeek, Integer endWeek, Integer number, String name, 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(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(); + } }