diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PuerperaManageController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PuerperaManageController.java index 749f351..4d555f7 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PuerperaManageController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PuerperaManageController.java @@ -160,20 +160,28 @@ public class PuerperaManageController extends BaseController { } /** - * 巨大儿管理 - * + * 孕期体重异常管理 * @param patientsQueryRequest 全部孕妇管理查询 (因为请求参数一样同用一个对象) * @return 返回结果 */ - @RequestMapping(value = "/queryAllMacrosomia", method = RequestMethod.GET) + @RequestMapping(value = "/queryAbnormalWeight", method = RequestMethod.GET) @ResponseBody @TokenRequired - public BaseResponse queryAllMacrosomia(@Valid RiskPatientsQueryRequest patientsQueryRequest, HttpServletRequest request) { + public BaseResponse queryAbnormalWeight(@Valid RiskPatientsQueryRequest patientsQueryRequest, HttpServletRequest request) { LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); - - return patientFacade.queryAllMacrosomia(patientsQueryRequest, loginState.getId(), "true"); + return patientFacade.queryAbnormalWeight(patientsQueryRequest, loginState.getId()); + } + /** + * 孕期体重异常管理 导出 + * @Author: 武涛涛 + * @Date: 2021/1/4 14:27 + */ + @RequestMapping(value = "/exportQueryAbnormalWeight", method = RequestMethod.GET) + @TokenRequired + public void exportQueryAbnormalWeight(@Valid RiskPatientsQueryRequest riskPatientsQueryRequest, HttpServletRequest request, HttpServletResponse response) { + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + patientFacade.exportQueryAbnormalWeight(riskPatientsQueryRequest, loginState.getId(), response); } - /** * 双胎全部孕妇管理 * diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/PatientFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/PatientFacade.java index 5877c0d..c2de5c2 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/PatientFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/PatientFacade.java @@ -102,6 +102,8 @@ public class PatientFacade { @Autowired private MongoTemplate mongoTemplate; + @Autowired + private CommonService commonService; @Autowired private DischargeAbstractMotherService dischargeAbstractMotherService; @@ -744,24 +746,12 @@ public class PatientFacade { } /** - * 巨大儿管理 - * + * 孕期体重异常管理 * @param riskPatientsQueryRequest * @return */ - public BaseResponse queryAllMacrosomia(RiskPatientsQueryRequest riskPatientsQueryRequest, Integer userId, String needPage) { - /* - 孕期体重异常管理 - 1 数据来全部孕妇管理(本就是人次) - 当前孕周: startDueWeek endDueWeek - 高危等级: rLevel 单个 - 高危因素 rFacotr 多个 - - 2 获取孕期的 lyms_patient_weight 体重数据 - 3 过滤bmi 值 BMI≥25 - 4 获取单条数据,其中单条数据中 dayWeights==测量日期/体重 - */ -// PatientsQuery patientsQuery = complayRequest(riskPatientsQueryRequest, false, 1, userId, needPage,false); + public BaseResponse queryAbnormalWeight(RiskPatientsQueryRequest riskPatientsQueryRequest, Integer userId) { + String hospital = autoMatchFacade.getHospitalId(userId); PatientsQuery patientsQuery = new PatientsQuery(); patientsQuery.setYn(YnEnums.YES.getId()); @@ -772,18 +762,106 @@ public class PatientFacade { patientsQuery.setrFactorList(com.lyms.platform.common.utils.StringUtils.covertToList(riskPatientsQueryRequest.getrFacotr(), String.class)); patientsQuery.setHospitalId(hospital); List patientses = patientsService.queryPatientBySort(patientsQuery, riskPatientsQueryRequest.getSort(), riskPatientsQueryRequest.getOrder()); + List data = new ArrayList<>(); + List ids = new ArrayList<>(); if (CollectionUtils.isNotEmpty(patientses)) { + for (Patients patients : patientses) { + if(com.lyms.platform.common.utils.StringUtils.isNotEmpty(patients.getId())){ + List patientWeightList = mongoTemplate.find(Query.query(Criteria.where("patientId").is(patients.getId()).and("yn").ne("0")), PatientWeight.class); + if(CollectionUtils.isNotEmpty(patientWeightList)){ + PatientWeight patientWeight = patientWeightList.get(0); + if(patientWeight!=null && com.lyms.platform.common.utils.StringUtils.isNotEmpty(patientWeight.getBmi())){ + double bmid = Double.parseDouble(patientWeight.getBmi()); + if("1".equals(riskPatientsQueryRequest.getBmi())&& (bmid >= 25 && bmid < 28)){ + ids.add(patients.getId()); + }else if("2".equals(riskPatientsQueryRequest.getBmi())&& (bmid >= 28)){ + ids.add(patients.getId()); + }else if(StringUtils.isEmpty(riskPatientsQueryRequest.getBmi()) && bmid > 25){ + ids.add(patients.getId()); + } + } + } - for(Patients p :patientses){ - p.getId(); + } + } + //获取bmi大于 25 &筛选bmi条件 + PatientsQuery pq = new PatientsQuery(); + pq.setIds(ids); + pq.setPage(riskPatientsQueryRequest.getPage()); + pq.setLimit(riskPatientsQueryRequest.getLimit()); + List ps = patientsService.queryPatientBySort(pq, riskPatientsQueryRequest.getSort(), riskPatientsQueryRequest.getOrder()); + if(CollectionUtils.isNotEmpty(ps)){ + data = convertToQuanWeight(ps); } + } + return new BaseListResponse().setErrormsg("成功").setErrorcode(ErrorCodeConstants.SUCCESS).setData(data).setPageInfo(patientsQuery.getPageInfo()); + } + + public void exportQueryAbnormalWeight(RiskPatientsQueryRequest riskPatientsQueryRequest, Integer id, HttpServletResponse response) { + try { + BaseListResponse listResponse = (BaseListResponse) queryAbnormalWeight(riskPatientsQueryRequest, id); + + List list = listResponse.getData(); + List> datas = new ArrayList<>(); + + if (CollectionUtils.isNotEmpty(list)) { + for (Map map : list) { + Map m = new HashMap <>(); + m.put("username", map.get("username")); + m.put("age", map.get("age")); + m.put("phone", map.get("phone")); + m.put("currentWeek", map.get("currentWeek")); + m.put("riskFactor", map.get("riskFactor")); + m.put("bmi", map.get("bmi")); + m.put("beforeHeight", map.get("beforeHeight")); + m.put("beforeWeight", map.get("beforeWeight")); + Map dayWeights = (Map)map.get("dayWeights"); + List stringList = new ArrayList <>(); + for(Map.Entry entry : dayWeights.entrySet()){ + if(StringUtils.isNotEmpty(entry.getKey()) && StringUtils.isNotEmpty(entry.getValue())){ + String mapKey = entry.getKey(); + String mapValue = entry.getValue(); + stringList.add(mapKey + " / " + mapValue); + } + } + for (int i = 0; i <= 20 ; i++) { + if(i >= stringList.size()){ + m.put("dayWeight"+i,""); + }else { + m.put("dayWeight"+i, stringList.get(i)); + } + } + datas.add(m); + } + } + OutputStream out = response.getOutputStream(); + Map cnames = new LinkedHashMap<>(); + cnamesMap(cnames); + response.setContentType("application/octet-stream"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", "attachment;fileName=" + "孕期体重异常管理.xls"); + ExcelUtil.toExcel(out, datas, cnames); + } catch (Exception e) { + e.printStackTrace(); + ExceptionUtils.catchException(e, "孕期体重异常管理导出异常"); } - List data = new ArrayList(); - data = convertToQuanPatient(patientses, userId, hospital); + } - return new BaseListResponse().setErrormsg("成功").setErrorcode(ErrorCodeConstants.SUCCESS).setData(data).setPageInfo(patientsQuery.getPageInfo()); + + private void cnamesMap(Map cnames) { + cnames.put("username", "姓名"); + cnames.put("age", "年龄"); + cnames.put("phone", "手机号"); + cnames.put("currentWeek", "当前孕周"); + cnames.put("riskFactor", "高危因素"); + cnames.put("bmi", "BMI指数"); + cnames.put("beforeHeight", "身高"); + cnames.put("beforeWeight", "孕前体重"); + for (int i = 0; i <= 20 ; i++) { + cnames.put("dayWeight"+i,"测量日期/体重"+i); + } } /** @@ -1258,6 +1336,27 @@ public class PatientFacade { } return data; } + private List convertToQuanWeight(List patientses) { + List data = new ArrayList<>(); + int batchSize = 4; + int end = 0; + List listFuture = new ArrayList<>(); + for (int i = 0; i < patientses.size(); i += batchSize) { + end = (end + batchSize); + if (end > patientses.size()) { + end = patientses.size(); + } + listFuture.add(commonThreadPool.submit(new QuanWeightWorker(patientses.subList(i, end),mongoTemplate,commonService,basicConfigService))); + } + for (Future f : listFuture) { + try { + data.addAll(( List) f.get(30, TimeUnit.SECONDS)); + } catch (Exception e) { + ExceptionUtils.catchException(e, "convertToQuanWeight get result Future error."); + } + } + return data; + } private List convertToTwinsPatient(RiskPatientsQueryRequest riskPatientsQueryRequest, List patientses, Integer userId, String hospital) { List data = new ArrayList<>(); diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/RiskPatientsQueryRequest.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/RiskPatientsQueryRequest.java index 0a2fcaa..b8e7b1d 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/RiskPatientsQueryRequest.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/RiskPatientsQueryRequest.java @@ -15,8 +15,8 @@ import java.util.Date; */ @Form public class RiskPatientsQueryRequest extends BasePageQueryRequest { - //巨大儿使用 bim - private String bim; + //巨大儿使用 BMI:⭕ 1 〇25≤BMI<28 、 2 〇BMI≥28 + private String bmi; //判断定制机构 lp滦平 private String hstart; @@ -374,12 +374,12 @@ public class RiskPatientsQueryRequest extends BasePageQueryRequest { this.liveType = liveType; } - public String getBim() { - return bim; + public String getBmi() { + return bmi; } - public void setBim(String bim) { - this.bim = bim; + public void setBmi(String bmi) { + this.bmi = bmi; } //分娩年龄 diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/QuanWeightWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/QuanWeightWorker.java new file mode 100644 index 0000000..ef8b3ba --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/QuanWeightWorker.java @@ -0,0 +1,123 @@ +package com.lyms.platform.operate.web.worker; + +import com.lyms.platform.biz.service.BasicConfigService; +import com.lyms.platform.biz.service.CommonService; +import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.operate.web.facade.PatientFacade; +import com.lyms.platform.pojo.PatientWeight; +import com.lyms.platform.pojo.Patients; +import com.lyms.platform.query.AntExChuQuery; +import com.lyms.platform.query.AntExQuery; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; + +import java.util.*; +import java.util.concurrent.Callable; + +/** + * @Author: 武涛涛 + * @Date: 2021/1/4 9:28 + */ +public class QuanWeightWorker implements Callable> { + + private static final Logger logger = LoggerFactory.getLogger(PatientFacade.class); + + private List patientses; + private MongoTemplate mongoTemplate; + private CommonService commonService; + private BasicConfigService basicConfigService; + public QuanWeightWorker(List patientses, + MongoTemplate mongoTemplate, + CommonService commonService, + BasicConfigService basicConfigService + ) { + this.patientses = patientses; + this.mongoTemplate = mongoTemplate; + this.commonService = commonService; + this.basicConfigService = basicConfigService; + } + + @Override + public List call() throws Exception { + List data = new ArrayList<>(); + AntExQuery antExQuery = new AntExQuery(); + antExQuery.setYn(YnEnums.YES.getId()); + AntExChuQuery antExChuQuery1 = new AntExChuQuery(); + + antExChuQuery1.setYn(YnEnums.YES.getId()); + for (Patients patients : patientses) { + if(com.lyms.platform.common.utils.StringUtils.isNotEmpty(patients.getId())){ + List patientWeightList = mongoTemplate.find(Query.query(Criteria.where("patientId").is(patients.getId()).and("yn").ne("0")), PatientWeight.class); + if(CollectionUtils.isNotEmpty(patientWeightList)){ + PatientWeight patientWeight = patientWeightList.get(0); + if(patientWeight!=null && com.lyms.platform.common.utils.StringUtils.isNotEmpty(patientWeight.getBmi())){ + double bmid = Double.parseDouble(patientWeight.getBmi()); + Map map = new HashMap(); + map.put("username", patients.getUsername()); + map.put("age", patients.getAge()); + map.put("phone", patients.getPhone()); + map.put("currentWeek", patients.getType() == 3 ? "已分娩" : DateUtil.getWeekDesc(patients.getLastMenses(), new Date())); + String risk =getRiskFactor(patients.getRiskFactorId()); + if(org.apache.commons.lang.StringUtils.isEmpty(risk)){ + risk=(org.apache.commons.lang.StringUtils.isEmpty(patients.getoRiskFactor())?"":patients.getoRiskFactor()); + }else{ + risk=risk+(org.apache.commons.lang.StringUtils.isEmpty(patients.getoRiskFactor())?"":","+patients.getoRiskFactor()); + } +// String rFactor = commonService.resloveFactor(JsonUtil.toList(patients.getRiskLevelId(), String.class)); + map.put("riskFactor",risk); + map.put("bmi", patientWeight.getBmi()); + map.put("beforeHeight", patientWeight.getBeforeHeight()); + map.put("beforeWeight", patientWeight.getBeforeWeight()); + map.put("dayWeights",patientWeight.getDayWeights()); + + + map.put("patientId", patients.getId()); + map.put("pid", patients.getPid()); + map.put("cardNo", patients.getCardNo()); + data.add(map); + } + + } + } + } + return data; + } + public static List filter(List level){ + List list = new ArrayList(); + List addEdList = new ArrayList(); + if(CollectionUtils.isNotEmpty(level)){ + for(java.util.Map map :level){ + if(!addEdList.contains(map.get("name"))){ + list.add(map); + addEdList.add(map.get("name")); + } + } + } + + return list; + } + + + private String getRiskFactor(List list) { + String riskFactor = ""; + if (list != null && list.size() > 0) { + for (String s : list) { + try { + riskFactor += basicConfigService.getOneBasicConfigById(s).getName(); + riskFactor += ","; + } catch (Exception e) { + riskFactor += ""; + } + } + } + if (riskFactor.length() > 0) { + return riskFactor.substring(0, riskFactor.length() - 1); + } + return riskFactor; + } +} \ No newline at end of file