From b9d7a9f4bc66055d3798cc36a07e6d97c0ff3233 Mon Sep 17 00:00:00 2001 From: liquanyu Date: Thu, 23 Nov 2017 16:15:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/RiskReportController.java | 51 +- .../operate/web/facade/AreaCountFacade.java | 2 +- .../operate/web/facade/RiskReportFacade.java | 595 ++++++++++++++++++++- .../web/request/RiskPatientsCountRequest.java | 143 +++++ .../web/utils/AreaHighRiskCountExportTask.java | 236 ++++++++ 5 files changed, 995 insertions(+), 32 deletions(-) create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/RiskPatientsCountRequest.java create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/AreaHighRiskCountExportTask.java diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/RiskReportController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/RiskReportController.java index 24899d0..0b97415 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/RiskReportController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/RiskReportController.java @@ -5,6 +5,7 @@ import com.lyms.platform.common.base.BaseController; import com.lyms.platform.common.base.LoginContext; import com.lyms.platform.common.result.BaseResponse; import com.lyms.platform.operate.web.facade.RiskReportFacade; +import com.lyms.platform.operate.web.request.RiskPatientsCountRequest; import com.lyms.platform.operate.web.request.RiskPatientsQueryRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; @@ -26,7 +28,7 @@ public class RiskReportController extends BaseController { private RiskReportFacade riskReportFacade; /** - * 高危统计报表 + * 院内高危统计报表 * @return */ @RequestMapping(method = RequestMethod.GET, value = "/queryRiskReportCount") @@ -39,21 +41,40 @@ public class RiskReportController extends BaseController { } -// /** -// * 高危孕妇统计报表 -// * @return -// */ -// @RequestMapping(method = RequestMethod.GET, value = "/queryRiskPatientReport") -// @ResponseBody -// public BaseResponse queryRiskPatientReport(@RequestParam(value = "dueDate", required = false) String dueDate, -// @RequestParam(value = "rLevel", required = false) String rLevel, -// @RequestParam(value = "checkDoctor", required = false) String checkDoctor, -// @RequestParam(value = "buildDate", required = false) String buildDate, -// @RequestParam(value = "riskId", required = false) String riskId) { -// -// return riskReportFacade.queryRiskPatientReport(dueDate, rLevel, checkDoctor, buildDate, riskId); + /** + * 区域高危孕妇统计报表 + * @return + */ + @RequestMapping(method = RequestMethod.GET, value = "/queryAreaRiskPatientReport") + @ResponseBody + @TokenRequired + public BaseResponse queryAreaRiskPatientReport(@Valid RiskPatientsCountRequest riskPatientsCountRequest, + HttpServletRequest request) { + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + return riskReportFacade.queryAreaRiskPatientReport(riskPatientsCountRequest, loginState.getId()); + + } + + + /** + * 区域高危导出 + * @param riskPatientsCountRequest + * @param request + * @return + */ + @RequestMapping(method = RequestMethod.GET, value = "/exportAreaHighRisk") +// @TokenRequired + public void exportAreaHighRisk(@Valid RiskPatientsCountRequest riskPatientsCountRequest, + HttpServletRequest request, + HttpServletResponse response) { +// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); +// riskReportFacade.exportAreaHighRisk(riskPatientsCountRequest, +// loginState.getId(), response); // -// } + + riskReportFacade.exportAreaHighRisk(riskPatientsCountRequest, + 1000000185, response); + } } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AreaCountFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AreaCountFacade.java index a872874..48cfc25 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AreaCountFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AreaCountFacade.java @@ -91,7 +91,7 @@ public class AreaCountFacade { * @param areaId * @return */ - private List getCurrentUserHospPermissions(Integer userId, String provinceId, String cityId, String areaId) { + public List getCurrentUserHospPermissions(Integer userId, String provinceId, String cityId, String areaId) { List hospitalList = new ArrayList<>(); // String hospital = autoMatchFacade.getHospitalId(userId); // if (null != hospital) { diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/RiskReportFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/RiskReportFacade.java index ca20931..42819e0 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/RiskReportFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/RiskReportFacade.java @@ -1,22 +1,21 @@ package com.lyms.platform.operate.web.facade; import com.lyms.platform.biz.service.*; -import com.lyms.platform.common.base.LoginContext; import com.lyms.platform.common.constants.ErrorCodeConstants; -import com.lyms.platform.common.enums.FyTypeEnums; -import com.lyms.platform.common.enums.SexEnum; -import com.lyms.platform.common.enums.WyTypeEnums; -import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.enums.*; import com.lyms.platform.common.result.BaseListResponse; import com.lyms.platform.common.result.BaseObjectResponse; import com.lyms.platform.common.result.BaseResponse; import com.lyms.platform.common.utils.*; -import com.lyms.platform.operate.web.request.BabyCheckRequest; +import com.lyms.platform.common.utils.StringUtils; +import com.lyms.platform.operate.web.request.RiskPatientsCountRequest; import com.lyms.platform.operate.web.request.RiskPatientsQueryRequest; import com.lyms.platform.operate.web.result.*; +import com.lyms.platform.operate.web.utils.AreaHighRiskCountExportTask; import com.lyms.platform.operate.web.utils.HiskCountTask; +import com.lyms.platform.operate.web.utils.MongoUtil; import com.lyms.platform.permission.model.Organization; -import com.lyms.platform.permission.model.Users; +import com.lyms.platform.permission.model.OrganizationQuery; import com.lyms.platform.permission.service.OrganizationService; import com.lyms.platform.permission.service.UsersService; import com.lyms.platform.pojo.*; @@ -24,10 +23,12 @@ import com.lyms.platform.query.*; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.data.domain.Sort; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; import java.text.DecimalFormat; import java.util.*; import java.util.concurrent.*; @@ -43,6 +44,8 @@ public class RiskReportFacade { @Autowired private PatientsService patientsService; + @Autowired + private UsersService usersService; @Autowired private BasicConfigService basicConfigService; @@ -51,6 +54,15 @@ public class RiskReportFacade { @Autowired private AutoMatchFacade autoMatchFacade; + @Autowired + private OrganizationService organizationService; + + @Autowired + private AreaCountFacade areaCountFacade; + + @Autowired + private MongoUtil mongoUtil; + /** * 查询高危统计,该统计的高危是已经有孕妇有此高危 * @return @@ -83,7 +95,7 @@ public class RiskReportFacade { } // 0未终止妊娠 1终止妊娠 - // patientsQuery.setDueStatus(0); + // patientsQuery.setDueStatus(0); //预产期 if (org.apache.commons.lang.StringUtils.isNotEmpty(riskPatientsQueryRequest.getDueDate())) { @@ -161,9 +173,9 @@ public class RiskReportFacade { continue; } Callable c = new HiskCountTask( basicConfigService, - patientsService, levelConfig, + patientsService, levelConfig, patientsQuery, - allPatientCount); + allPatientCount); Future f = commonThreadPool.submit(c); futures.add(f); } @@ -221,12 +233,563 @@ public class RiskReportFacade { return results; } + public BaseResponse queryAreaRiskPatientReport(RiskPatientsCountRequest countRequest, Integer userId) { + + + //获取用户权限医院和筛选条件的交集 + List currentUserHospPermissions = areaCountFacade.getCurrentUserHospPermissions(userId, countRequest.getProvinceId(), + countRequest.getCityId(), countRequest.getAreaId()); + + currentUserHospPermissions.clear(); + currentUserHospPermissions.add("216"); + + //孕妇基础查询对象 + PatientsQuery patientsQuery = new PatientsQuery(); + patientsQuery.setYn(YnEnums.YES.getId()); + + //孕妇 + patientsQuery.setType(1); + List buildType = new ArrayList(); + buildType.add(0); + buildType.add(2); + //建档类型 + patientsQuery.setBuildTypeList(buildType); + + + //查询高危分类 + List riskLevelConfig = basicConfigService.queryByParentId(SystemConfig.HIGH_RISK_ID); + + Map datas = new HashMap<>(); + + List result = new ArrayList<>(); + + BasicConfigQuery basicQuery = new BasicConfigQuery(); + basicQuery.setYn(YnEnums.YES.getId()); + basicQuery.setTypeId("b7ea005c-dfac-4c2a-bdae-25239b3f44fd"); + + + List> list = null; + + if (StringUtils.isNotEmpty(countRequest.getProvinceId())) + { + basicQuery.setParentId(countRequest.getProvinceId()); + countRequest.setExportType(1); + + list = mongoUtil.getChilds(countRequest.getProvinceId()); + } + + if (StringUtils.isNotEmpty(countRequest.getCityId())) + { + basicQuery.setParentId(countRequest.getCityId()); + countRequest.setExportType(2); + list = mongoUtil.getChilds(countRequest.getCityId()); + } + + if (StringUtils.isNotEmpty(countRequest.getAreaId())) + { + basicQuery.setParentId(countRequest.getAreaId()); + countRequest.setExportType(3); + } + + int addrType = countRequest.getExportType(); + + Map title = new HashMap<>(); + title.put("seq","序号"); + if (addrType == 1) + { + title.put("name","地市名称"); + } + else if(addrType == 2) + { + title.put("name","区县名称"); + } + else + { + title.put("name","医院名称"); + } + + if (addrType < 3) + { + title.put("orgNum","机构数"); + } + + title.put("countItem","统计指标(人)"); + title.put("sumNum", "合计"); + result.add(title); + + + int seq = 0; + + //统计城市和区县表格数据 + if (addrType < 3) + { + List configList = basicConfigService.queryBasicConfig(basicQuery); + OrganizationQuery query = new OrganizationQuery(); + query.setYn(YnEnums.YES.getId()); + if (CollectionUtils.isNotEmpty(configList)) + { + for(BasicConfig c : configList) + { + if (addrType == 1) + { + query.setCityId(c.getId()); + } + else if(addrType == 2) + { + query.setAreaId(c.getId()); + } + //查询机构数 + List orgs = organizationService.queryOrganization(query); + + List hids = getConditionHospitalIds(currentUserHospPermissions,orgs); + + for (BasicConfig level : riskLevelConfig) + { + + Map topMap = new HashMap<>(); + topMap.put("seq", ++seq); + topMap.put("name", c .getName()); + topMap.put("orgNum", orgs == null ? 0 : orgs.size()); + topMap.put("countItem", level.getName()); + + int riskPatientCount = 0; + //权限和筛选条件不未空的时候就查询孕妇高危数量 + if (CollectionUtils.isNotEmpty(hids)) + { + + //权限 + patientsQuery.setHospitalList(hids); + + //高危等级 + patientsQuery.setrLevel(level.getId()); + //单个高危因素孕产妇条数 + riskPatientCount = patientsService.queryPatientCount(patientsQuery); + } + + topMap.put("sumNum", riskPatientCount); + result.add(topMap); + } + } + } + } + //统计医院的表格数据 + else + { + OrganizationQuery query = new OrganizationQuery(); + query.setYn(YnEnums.YES.getId()); + query.setAreaId(countRequest.getAreaId()); + List orgs = organizationService.queryOrganization(query); + if (CollectionUtils.isNotEmpty(orgs)) { + for (Organization org : orgs) { + for (BasicConfig level : riskLevelConfig) { + Map topMap = new HashMap<>(); + topMap.put("seq", ++seq); + topMap.put("name", org.getName()); + topMap.put("countItem", level.getName()); + + int riskPatientCount = 0; + if (currentUserHospPermissions.contains(String.valueOf(org.getId()))) + { + //权限 + patientsQuery.setHospitalId(String.valueOf(org.getId())); + //高危等级 + patientsQuery.setrLevel(level.getId()); + //单个高危因素孕产妇条数 + riskPatientCount = patientsService.queryPatientCount(patientsQuery); + } + + topMap.put("sumNum", riskPatientCount); + result.add(topMap); + } + } + } + } + + //表格合计计算 +// if(CollectionUtils.isNotEmpty(result)) +// { +// List> totalMapList = new ArrayList<>(); +// for (BasicConfig level : riskLevelConfig) +// { +// Map totalMap = new HashMap<>(); +// totalMap.put("seq", ++seq); +// totalMap.put("name", "合计"); +// +// totalMap.put("countItem", level.getName()); +// int orgNumTotal = 0; +// int levelTotal = 0; +// if (addrType < 3) +// { +// +// for (Map map : result) +// { +// if ("序号".equals(map.get("seq"))) +// { +// continue; +// } +// Integer orgNum = Integer.valueOf(String.valueOf(map.get("orgNum"))); +// orgNumTotal+=orgNum; +// +// if (map.get("countItem").equals(level.getName())) +// { +// Integer sumNum =Integer.valueOf(String.valueOf(map.get("sumNum"))); +// levelTotal+=sumNum; +// } +// } +// } +// +// totalMap.put("orgNum", orgNumTotal); +// totalMap.put("sumNum", levelTotal); +// totalMapList.add(totalMap); +// } +// result.addAll(totalMapList); +// } + + + + + + //统计柱状图数据封装-------------------------------- + + //图标数据 + List> series = new ArrayList<>(); + + //x轴标题数据 + List xAxis = new ArrayList<>(); + + //分类标题 + List titleItems = new ArrayList<>(); + + +// //获取分类标题数据 +// if (CollectionUtils.isNotEmpty(riskLevelConfig)) +// { +// for (BasicConfig conf : riskLevelConfig) +// { +// titleItems.add(conf.getName()); +// } +// } +// +// +// if (addrType < 3) +// { +// if (CollectionUtils.isNotEmpty(list)) +// { +// for (Map addr : list) +// { +// xAxis.add(String.valueOf(addr.get("name"))); +// } +// for (BasicConfig config : riskLevelConfig) +// { +// Map map = new HashMap(); +// map.put("name",config.getName()); +// map.put("type","bar"); +// +// +// OrganizationQuery idQuery = new OrganizationQuery(); +// idQuery.setYn(YnEnums.YES.getId()); +// +// List items = new ArrayList<>(); +// for (Map addr : list) +// { +// List hids = new ArrayList<>(); +// String id = String.valueOf(addr.get("id")); +// if (addrType == 1) +// { +// idQuery.setCityId(id); +// } +// else if(addrType == 2) +// { +// idQuery.setAreaId(id); +// } +// +// //查询机构数 +// List orgs = organizationService.queryOrganization(idQuery); +// +// if (CollectionUtils.isNotEmpty(orgs)) +// { +// for (Organization org : orgs) +// { +// hids.add(String.valueOf(org.getId())); +// } +// } // -// public BaseResponse queryRiskPatientReport(Integer userId,) { -// LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); -// patientFacade.queryHighRisk(patientsQueryRequest, Boolean.TRUE, 1, loginState.getId(), "true",Boolean.FALSE); +// PatientsQuery query1 = new PatientsQuery(); +// query1.setHospitalList(hids); +// query1.setYn(YnEnums.YES.getId()); +// query1.setType(1); +// //高危等级 +// query1.setrLevel(config.getId()); +// List buildType = new ArrayList(); +// buildType.add(0); +// buildType.add(2); +// query1.setBuildTypeList(buildType); +// Integer count = patientsService.queryPatientCount(query1); +// items.add(count == null ? "0" : String.valueOf(count)); +// } +// map.put("data",items); // -// return null; -// } +// series.add(map); +// } +// } +// } +// else if (addrType == 3) +// { +// OrganizationQuery organizationQuery = new OrganizationQuery(); +// organizationQuery.setYn(YnEnums.YES.getId()); +// organizationQuery.setAreaId(countRequest.getAreaId()); +// +// //TODO权限 +// // List press = getCurrentOrgs( countRequest, userId); +// List orgs = organizationService.queryOrganization(organizationQuery); +// +// if (CollectionUtils.isNotEmpty(list)) +// { +// for (Organization org : orgs) +// { +// xAxis.add(org.getName()); +// +// Map map = new HashMap(); +// map.put("name",org.getName()); +// map.put("type", "bar"); +// List items = new ArrayList<>(); +// for (BasicConfig config : riskLevelConfig) +// { +// PatientsQuery query1 = new PatientsQuery(); +// query1.setHospitalId(String.valueOf(org.getId())); +// query1.setYn(YnEnums.YES.getId()); +// query1.setType(1); +// //高危等级 +// query1.setrLevel(config.getId()); +// List buildType = new ArrayList(); +// buildType.add(0); +// buildType.add(2); +// query1.setBuildTypeList(buildType); +// Integer count = patientsService.queryPatientCount(query1); +// items.add(count == null ? "0" : String.valueOf(count)); +// map.put("data",items); +// } +// series.add(map); +// } +// } +// } + + datas.put("series",series); + datas.put("xAxis",xAxis); + datas.put("legend",titleItems); + datas.put("tableDatas",result); + return new BaseObjectResponse() + .setErrormsg("成功").setErrorcode(ErrorCodeConstants.SUCCESS).setData(datas); + } + + public void exportAreaHighRisk(RiskPatientsCountRequest countRequest, + Integer userId, HttpServletResponse response) { + try { + //获取用户权限 + List currentUserHospPermissions = areaCountFacade.getCurrentUserHospPermissions(userId, countRequest.getProvinceId(), + countRequest.getCityId(), countRequest.getAreaId()); + List> datas = new ArrayList<>(); + + if(countRequest.getProvinceId() != null && countRequest.getCityId() == null && countRequest.getAreaId() == null) + { + countRequest.setExportType(1); + } + else if (countRequest.getProvinceId() != null && countRequest.getCityId() != null && countRequest.getAreaId() == null) + { + countRequest.setExportType(2); + } + else if (countRequest.getProvinceId() != null && countRequest.getCityId() != null && countRequest.getAreaId() != null) + { + countRequest.setExportType(3); + } +// currentUserHospPermissions.clear(); +// currentUserHospPermissions.add("216"); + + BasicConfigQuery basicConfigQuery = new BasicConfigQuery(); + basicConfigQuery.setYn(YnEnums.YES.getId()); + basicConfigQuery.setParentId(SystemConfig.HIGH_RISK_ID); + List riskLevelConfig = basicConfigService.queryBasicConfig(basicConfigQuery); + + List futures = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(currentUserHospPermissions)) + { + int batchSize = 5; + int end = 0; + for (int i = 0; i < currentUserHospPermissions.size(); i += batchSize) { + end = (end + batchSize); + if (end > currentUserHospPermissions.size()) { + end = currentUserHospPermissions.size(); + } + final List organizations = currentUserHospPermissions.subList(i, end); + Callable callable = new AreaHighRiskCountExportTask(basicConfigService,usersService,patientsService,organizationService, + riskLevelConfig,organizations,countRequest.getExportType()); + Future f = commonThreadPool.submit(callable); + futures.add(f); + } + } + + if (CollectionUtils.isNotEmpty(futures)) + { + for(Future f : futures) + { + try { + List list = (List)f.get(2,TimeUnit.MINUTES); + datas.addAll(list); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } catch (TimeoutException e) { + e.printStackTrace(); + } + } + } + + OutputStream out = response.getOutputStream(); + Map cnames = new LinkedHashMap<>(); + if (countRequest.getExportType() == 1) + { + cnames.put("cityName", "地市名称"); + cnames.put("areaName", "区县名称"); + cnames.put("streetName", "乡镇名称"); + cnames.put("hospitalName", "机构名称"); + cnames.put("highRiskPatTotal", "高危孕妇总数"); + cnames.put("dfx", "低风险"); + cnames.put("ybfx", "一般风险"); + cnames.put("jgfx", "较高风险"); + cnames.put("gfx", "高风险"); + cnames.put("crb", "传染病"); + } + else if (countRequest.getExportType() == 2) + { + cnames.put("areaName", "区县名称"); + cnames.put("streetName", "乡镇名称"); + cnames.put("hospitalName", "机构名称"); + cnames.put("highRiskPatTotal", "高危孕妇总数"); + cnames.put("dfx", "低风险"); + cnames.put("ybfx", "一般风险"); + cnames.put("jgfx", "较高风险"); + cnames.put("gfx", "高风险"); + cnames.put("crb", "传染病"); + } + else if (countRequest.getExportType() == 3) + { + cnames.put("hospitalName", "医院名称"); + cnames.put("vcCardNo","就诊卡号"); + cnames.put("username", "姓名"); + cnames.put("birth","出生日期"); + cnames.put("phone", "手机号"); + cnames.put("cardNo","证件号"); + cnames.put("age","年龄"); + cnames.put("hjAddress", "户籍地"); + cnames.put("jzAddress","居住地"); + cnames.put("buildWeek","建档孕周"); + cnames.put("lastMenses","末次月经"); + cnames.put("dueDate","预产期"); + cnames.put("highType","高危类型"); + cnames.put("rFactor","高危因素"); + cnames.put("riskScore","高危评分"); + cnames.put("lastCheckTime","检查日期"); + cnames.put("checkWeek","检查孕周"); + cnames.put("checkDoctor","检查医生"); + } + + response.setContentType("application/octet-stream"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", "attachment;fileName=data.xls"); + ExcelUtil.toExcel(out, datas, cnames); + + } catch (IOException e) { + e.printStackTrace(); + } + } + + + /** + * 获取当前权限和查询条件的医院 + * @param countRequest + * @param userId + * @return + */ + private List getCurrentOrgs(RiskPatientsCountRequest countRequest,Integer userId) + { + //获取用户权限 + List currentUserHospPermissions = areaCountFacade.getCurrentUserHospPermissions(userId, countRequest.getProvinceId(), + countRequest.getCityId(), countRequest.getAreaId()); + + OrganizationQuery query = new OrganizationQuery(); + query.setYn(YnEnums.YES.getId()); + + if (StringUtils.isNotEmpty(countRequest.getProvinceId())) + { + //省市查询条件 + query.setProvinceId(countRequest.getProvinceId()); + } + + if (StringUtils.isNotEmpty(countRequest.getCityId())) + { + query.setCityId(countRequest.getCityId()); + } + + if (StringUtils.isNotEmpty(countRequest.getAreaId())) + { + query.setAreaId(countRequest.getAreaId()); + } + + List queryHospitals = new ArrayList<>(); + + List orgs = organizationService.queryOrganization(query); + if (CollectionUtils.isNotEmpty(orgs) && CollectionUtils.isNotEmpty(currentUserHospPermissions)) + { + for (Organization org : orgs) + { + if (org.getId() != null && currentUserHospPermissions.contains(String.valueOf(org.getId()))) + { + queryHospitals.add(org); + } + } + } + + return queryHospitals; + } + + + /** + * 用户当前权限的用户id 和查询条件的交集 + * @param countRequest + * @param userId + * @return + */ + private List currentUserHospitalIds(RiskPatientsCountRequest countRequest,Integer userId) + { + List hids = new ArrayList<>(); + List queryHospitals = getCurrentOrgs(countRequest, userId); + if (CollectionUtils.isNotEmpty(hids)) + { + for (Organization org : queryHospitals) + { + hids.add(String.valueOf(org.getId())); + } + } + return hids; + } + + + /** + * 获取权限和条件 + * @param conditionHospitals + * @return + */ + private List getConditionHospitalIds(List currentUserHospPermissions,List conditionHospitals) + { + List hids = new ArrayList<>(); + for (Organization org : conditionHospitals) + { + hids.add(String.valueOf(org.getId())); + } + hids.retainAll(currentUserHospPermissions); + + return hids; + } } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/RiskPatientsCountRequest.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/RiskPatientsCountRequest.java new file mode 100644 index 0000000..d6292a9 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/RiskPatientsCountRequest.java @@ -0,0 +1,143 @@ +package com.lyms.platform.operate.web.request; + +import com.lyms.platform.common.core.annotation.form.Form; +import com.lyms.platform.common.core.annotation.form.FormParam; +import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.common.utils.StringUtils; +import org.apache.commons.lang.math.NumberUtils; + +import java.util.Date; +import java.util.Map; + +/** + * 高危孕妇统计查询 + */ +@Form +public class RiskPatientsCountRequest extends BasePageQueryRequest { + + //省市区地址 + private String provinceId; + private String cityId; + private String areaId; + private String streetId; + + //医院id + private String hospitalId; + + //年龄范围 0:全部 1:20岁一下 2:25-30 3:30-40 4:40岁以上 + private Integer ageRange; + + //时间范围 + private String time; + + //高危等级{} + private Map riskLevel; + + //导出类型 1 省导出 2 地区导出 3医院导出 + private Integer exportType; + + //对比指标 1 占比 2 环比 + private Integer compareType; + + //环比 周 1月 2 季度 3半年 4年 + private Integer hbType; + + //孕周 0 全部孕周 1:孕12周前 2:13-19 3:20-25 4:26-30 5:31-36 6:37-40 7:40-分娩前 + private Integer week; + + public Integer getHbType() { + return hbType; + } + + public void setHbType(Integer hbType) { + this.hbType = hbType; + } + + public Integer getWeek() { + return week; + } + + public void setWeek(Integer week) { + this.week = week; + } + + public Integer getExportType() { + return exportType; + } + + public void setExportType(Integer exportType) { + this.exportType = exportType; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public Integer getCompareType() { + return compareType; + } + + public void setCompareType(Integer compareType) { + this.compareType = compareType; + } + + public String getProvinceId() { + return provinceId; + } + + public void setProvinceId(String provinceId) { + this.provinceId = provinceId; + } + + public String getCityId() { + return cityId; + } + + public void setCityId(String cityId) { + this.cityId = cityId; + } + + public String getAreaId() { + return areaId; + } + + public void setAreaId(String areaId) { + this.areaId = areaId; + } + + public String getStreetId() { + return streetId; + } + + public void setStreetId(String streetId) { + this.streetId = streetId; + } + + public String getHospitalId() { + return hospitalId; + } + + public void setHospitalId(String hospitalId) { + this.hospitalId = hospitalId; + } + + public Integer getAgeRange() { + return ageRange; + } + + public void setAgeRange(Integer ageRange) { + this.ageRange = ageRange; + } + + public Map getRiskLevel() { + return riskLevel; + } + + public void setRiskLevel(Map riskLevel) { + this.riskLevel = riskLevel; + } +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/AreaHighRiskCountExportTask.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/AreaHighRiskCountExportTask.java new file mode 100644 index 0000000..a015855 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/AreaHighRiskCountExportTask.java @@ -0,0 +1,236 @@ +package com.lyms.platform.operate.web.utils; + +import com.lyms.platform.biz.service.BasicConfigService; +import com.lyms.platform.biz.service.PatientsService; +import com.lyms.platform.common.enums.RiskDefaultTypeEnum; +import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.common.utils.ExceptionUtils; +import com.lyms.platform.common.utils.StringUtils; +import com.lyms.platform.operate.web.result.RiskReportResult; +import com.lyms.platform.permission.model.Organization; +import com.lyms.platform.permission.model.OrganizationQuery; +import com.lyms.platform.permission.model.Users; +import com.lyms.platform.permission.service.OrganizationService; +import com.lyms.platform.permission.service.UsersService; +import com.lyms.platform.pojo.BasicConfig; +import com.lyms.platform.pojo.Patients; +import com.lyms.platform.query.BasicConfigQuery; +import com.lyms.platform.query.PatientsQuery; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.time.DateUtils; + +import java.text.DecimalFormat; +import java.util.*; +import java.util.concurrent.*; + +/** + * 导出区域高危统计导出 + * Created by Administrator on 2016/11/30. + */ +public class AreaHighRiskCountExportTask implements Callable { + private PatientsService patientsService; + private UsersService usersService; + private OrganizationService organizationService; + private BasicConfigService basicConfigService; + private Integer exportType; + private List organizations; + + private List riskLevelConfig; + + public AreaHighRiskCountExportTask(BasicConfigService basicConfigService, + UsersService usersService, + PatientsService patientsService, + OrganizationService organizationService, + List riskLevelConfig, + List organizations, + Integer exportType) + { + this.basicConfigService = basicConfigService; + this.organizationService = organizationService; + this.usersService = usersService; + this.patientsService = patientsService; + this.organizations = organizations; + this.riskLevelConfig = riskLevelConfig; + this.exportType = exportType; + } + @Override + public List> call() throws Exception { + List> datas = new ArrayList<>(); + + + OrganizationQuery organizationQuery = new OrganizationQuery(); + organizationQuery.setYn(YnEnums.YES.getId()); + + for (String hid : organizations) + { + Map data = new HashMap<>(); + + Organization organization = organizationService.getOrganization(Integer.valueOf(hid)); + + BasicConfig city = basicConfigService.getOneBasicConfigById(organization.getCityId()); + BasicConfig area = basicConfigService.getOneBasicConfigById(organization.getAreaId()); + BasicConfig street = basicConfigService.getOneBasicConfigById(organization.getStreetId()); + + + int highRiskPatTotal = 0; + + if (CollectionUtils.isNotEmpty(riskLevelConfig)) { + for (BasicConfig config : riskLevelConfig) { + + if (exportType == 1) + { + data.put("cityName", city == null ? "" : city.getName()); + data.put("areaName", area == null ? "" : area.getName()); + data.put("streetName", street == null ? "" : street.getName()); + } + else if (exportType == 2) + { + data.put("areaName", area == null ? "" : area.getName()); + data.put("streetName", street == null ? "" : street.getName()); + } + + data.put("hospitalName", organization.getName()); + + int riskPatientCount = 0; + + PatientsQuery query1 = new PatientsQuery(); + query1.setHospitalId(String.valueOf(organization.getId())); + query1.setYn(YnEnums.YES.getId()); + query1.setType(1); + //高危等级 + query1.setrLevel(config.getId()); + List buildType = new ArrayList(); + buildType.add(0); + buildType.add(2); + query1.setBuildTypeList(buildType); + + if (exportType == 3) + { + List patientses = patientsService.queryPatient(query1); + if (CollectionUtils.isNotEmpty(patientses)) + { + for (Patients pat : patientses) + { + data = new HashMap<>(); + data.put("hospitalName", organization.getName()); + data.put("vcCardNo",pat.getVcCardNo()); + data.put("username", pat.getUsername()); + data.put("birth", DateUtil.getyyyy_MM_dd(pat.getBirth())); + data.put("phone", StringUtils.encryPhone(pat.getPhone())); + data.put("cardNo",pat.getCardNo()); + data.put("age",DateUtil.getAge(pat.getBirth())); + data.put("hjAddress", CommonsHelper.getResidence(pat.getProvinceId(), pat.getCityId(), + pat.getAreaId(), pat.getStreetId(), pat.getAddress(), + basicConfigService)); + data.put("jzAddress",CommonsHelper.getResidence(pat.getProvinceRegisterId(), pat.getCityRegisterId(), + pat.getAreaRegisterId(), pat.getStreetRegisterId(), pat.getAddressRegister(), + basicConfigService)); + + data.put("buildWeek",DateUtil.getWeekDesc(pat.getLastMenses(), pat.getCreated())); + data.put("lastMenses",DateUtil.getyyyy_MM_dd(pat.getLastMenses())); + + Date dueDate = DateUtil.addMonth(pat.getLastMenses(), 9); + dueDate = DateUtil.addDay(dueDate, 7); + data.put("dueDate",DateUtil.getyyyy_MM_dd(dueDate)); + data.put("highType",config.getName()); + + + //高危因素 + List factor = pat.getRiskFactorId(); + + String rFactor = ""; + + if (CollectionUtils.isNotEmpty(factor)) { + StringBuilder sb = new StringBuilder(56); + for (String srt : factor) { + if (org.apache.commons.lang.StringUtils.isNotEmpty(srt)) { + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(srt); + if (null != basicConfig && sb.indexOf(basicConfig.getName()) == -1) { + sb.append(basicConfig.getName()).append(','); + } + } + } + if (sb.toString().endsWith(",")) { + rFactor = sb.substring(0, sb.length() - 1); + } else { + rFactor = sb.toString(); + } + + if (!"-".equals(rFactor) && org.apache.commons.lang.StringUtils.isNotEmpty(pat.getoRiskFactor())) { + rFactor = rFactor+","+pat.getoRiskFactor(); + }else if (org.apache.commons.lang.StringUtils.isNotEmpty(pat.getoRiskFactor())) + { + rFactor = pat.getoRiskFactor(); + } + } + else if (org.apache.commons.lang.StringUtils.isNotEmpty(pat.getoRiskFactor())) + { + rFactor = pat.getoRiskFactor(); + } + + data.put("rFactor",rFactor); + data.put("riskScore",pat.getRiskScore()); + data.put("lastCheckTime",DateUtil.getyyyy_MM_dd(pat.getLastCTime())); + data.put("checkWeek",DateUtil.getWeekDesc(pat.getLastMenses(), pat.getLastCTime())); + String checkDoctor = ""; + try { + Users users = usersService.getUsers(Integer.parseInt(pat.getLastCheckEmployeeId())); + if (users != null && users.getYn() == YnEnums.YES.getId()) { + checkDoctor = users.getName(); + } + } + catch (Exception e) + { + System.out.print(e+pat.getLastCheckEmployeeId()); + } + + data.put("checkDoctor",checkDoctor); + datas.add(data); + } + } + } + else + { + riskPatientCount = patientsService.queryPatientCount(query1); + + highRiskPatTotal += riskPatientCount; + + if (config.getName().contains("绿")) { + data.put("dfx",riskPatientCount); + } + else if (config.getName().contains("黄")) + { + data.put("ybfx", riskPatientCount); + } + else if (config.getName().contains("橙")) + { + data.put("jgfx", riskPatientCount); + } + else if (config.getName().contains("红")) + { + data.put("gfx", riskPatientCount); + } + else if (config.getName().contains("紫")) + { + data.put("crb", riskPatientCount); + } + } + + } + } + + if (exportType < 3) + { + data.put("highRiskPatTotal", highRiskPatTotal); + datas.add(data); + } + + } + return datas; + } + + +} + + -- 1.8.3.1