From ae2adb2e49664569e149e67da40771fba1021a4f Mon Sep 17 00:00:00 2001 From: wtt Date: Fri, 24 Apr 2020 08:42:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=93=E7=A7=91=E9=97=A8=E8=AF=8A=E8=A1=80?= =?UTF-8?q?=E5=8E=8B=E8=A1=80=E7=B3=96=E7=98=A2=E7=97=95=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/PuerperaManageController.java | 45 ++- .../platform/operate/web/facade/PatientFacade.java | 313 +++++++++++++++++ .../web/worker/BloodPressurePatientWorker.java | 368 ++++++++++++++++++++ .../web/worker/BloodSugarPatientWorker.java | 370 ++++++++++++++++++++ .../web/worker/ScarUterusPatientWorker.java | 373 +++++++++++++++++++++ 5 files changed, 1467 insertions(+), 2 deletions(-) create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BloodPressurePatientWorker.java create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BloodSugarPatientWorker.java create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ScarUterusPatientWorker.java 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 b3eade1..633bf9f 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 @@ -157,12 +157,53 @@ public class PuerperaManageController extends BaseController { @TokenRequired public BaseResponse queryTwinsAllPuerpera(@Valid RiskPatientsQueryRequest patientsQueryRequest, HttpServletRequest request) { LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); - - //该方法还没有修改,为 ,双胎全部孕妇管理,使用。删除高危,删除产妇,保留孕妇,加上需求特定字段即可 return patientFacade.queryTwinsAllPuerpera(patientsQueryRequest, null, 1, loginState.getId(), "true", Boolean.FALSE); } /** + * 血压全部孕妇管理 + * + * @param patientsQueryRequest + * @return 返回结果 + */ + @RequestMapping(value = "/bloodPressure", method = RequestMethod.GET) + @ResponseBody + @TokenRequired + public BaseResponse queryBloodPressureAllPuerpera(@Valid RiskPatientsQueryRequest patientsQueryRequest, HttpServletRequest request) { + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + return patientFacade.queryBloodPressureAllPuerpera(patientsQueryRequest, null, 1, loginState.getId(), "true", Boolean.FALSE); + } + + /** + * 血糖全部孕妇管理 + * + * @param patientsQueryRequest + * @return 返回结果 + */ + @RequestMapping(value = "/bloodSugar", method = RequestMethod.GET) + @ResponseBody + @TokenRequired + public BaseResponse queryBloodSugarAllPuerpera(@Valid RiskPatientsQueryRequest patientsQueryRequest, HttpServletRequest request) { + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + return patientFacade.queryBloodSugarAllPuerpera(patientsQueryRequest, null, 1, loginState.getId(), "true", Boolean.FALSE); + } + /** + * 瘢痕子宫全部孕妇管理 + * + * @param patientsQueryRequest + * @return 返回结果 + */ + @RequestMapping(value = "/scarUterus", method = RequestMethod.GET) + @ResponseBody + @TokenRequired + public BaseResponse queryScarUterusAllPuerpera(@Valid RiskPatientsQueryRequest patientsQueryRequest, HttpServletRequest request) { + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + return patientFacade.queryScarUterusAllPuerpera(patientsQueryRequest, null, 1, loginState.getId(), "true", Boolean.FALSE); + } + + + + /** * 稀有血型专病门诊管理list * * @param patientsQueryRequest 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 c1a0b52..7b7f789 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 @@ -769,6 +769,256 @@ public class PatientFacade { } /** + * 查询血压全部孕妇管理 + * @param riskPatientsQueryRequest + * @param isHighRisk + * @param type + * @param userId + * @param needPage + * @param isRegion + * @return + */ + public BaseResponse queryBloodPressureAllPuerpera(RiskPatientsQueryRequest riskPatientsQueryRequest, Boolean isHighRisk, Integer type, Integer userId, String needPage, boolean isRegion) { + //组合请求 + PatientsQuery patientsQuery = complayRequest(riskPatientsQueryRequest, isHighRisk, type, userId, needPage, isRegion); + + String hospital = autoMatchFacade.getHospitalId(userId); + //查询符合条件的孕妇 + StopWatch stopWatch = new StopWatch("queryPatient1 -" + hospital); + stopWatch.start(); + + Query yn = null; + if ("1".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria1 = Criteria.where("name").is("妊娠期高血压疾病(除外红、橙色)"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria1)); + } else if ("2".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria2 = Criteria.where("name").is("妊娠期高血压"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria2)); + } else if ("3".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria3 = Criteria.where("name").is("子痫前期(轻)"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria3)); + }else if ("4".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria4 = Criteria.where("name").is("慢性高血压合并妊娠"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria4)); + }else if ("5".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria5 = Criteria.where("name").is("妊娠期高血压性心脏病"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria5)); + }else if ("6".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria6 = Criteria.where("name").is("急性肾脏疾病伴高血压"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria6)); + }else if ("7".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria7 = Criteria.where("name").is("慢性肾脏疾病伴高血压"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria7)); + } + + else { + Criteria criteria1 = Criteria.where("name").is("妊娠期高血压疾病(除外红、橙色)"); + Criteria criteria2 = Criteria.where("name").is("妊娠期高血压"); + Criteria criteria3 = Criteria.where("name").is("子痫前期(轻)"); + Criteria criteria4 = Criteria.where("name").is("慢性高血压合并妊娠"); + Criteria criteria5 = Criteria.where("name").is("妊娠期高血压性心脏病"); + Criteria criteria6 = Criteria.where("name").is("急性肾脏疾病伴高血压"); + Criteria criteria7 = Criteria.where("name").is("慢性肾脏疾病伴高血压"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria1, criteria2, criteria3,criteria4,criteria5,criteria6,criteria7)); + } + List models = mongoTemplate.find(yn, BasicConfig.class); + List rFactorList = new ArrayList<>(); + if (models != null && models.size() > 0) { + for (int i = 0; i < models.size(); i++) { + rFactorList.add(models.get(i).getId()); + } + } + patientsQuery.setrFactorList(rFactorList); + List patientses = patientsService.queryPatientBySort(patientsQuery, riskPatientsQueryRequest.getSort(), riskPatientsQueryRequest.getOrder()); + stopWatch.stop(); + + logger.info(stopWatch.toString()); + List data = new ArrayList(); + if (CollectionUtils.isNotEmpty(patientses)) { + if (type == 1) { + //处理全部孕妇的情况 + data = convertToBloodPressurePatient(riskPatientsQueryRequest, patientses, userId, hospital); + } + } +// patientsQuery.mysqlBuild(data.size()); + return new BaseListResponse().setErrormsg("成功").setErrorcode(ErrorCodeConstants.SUCCESS).setData(data).setPageInfo(patientsQuery.getPageInfo()); + } + + /** + * 查询血糖全部孕妇管理 + * @param riskPatientsQueryRequest + * @param isHighRisk + * @param type + * @param userId + * @param needPage + * @param isRegion + * @return + */ + public BaseResponse queryBloodSugarAllPuerpera(RiskPatientsQueryRequest riskPatientsQueryRequest, Boolean isHighRisk, Integer type, Integer userId, String needPage, boolean isRegion) { + //组合请求 + PatientsQuery patientsQuery = complayRequest(riskPatientsQueryRequest, isHighRisk, type, userId, needPage, isRegion); + + String hospital = autoMatchFacade.getHospitalId(userId); + //查询符合条件的孕妇 + StopWatch stopWatch = new StopWatch("queryPatient1 -" + hospital); + stopWatch.start(); + + Query yn = null; + if ("1".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria1 = Criteria.where("name").is("妊娠期糖尿病(无需药物治疗)"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria1)); + } else if ("2".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria2 = Criteria.where("name").is("妊娠期糖尿病病史"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria2)); + } else if ("3".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria3 = Criteria.where("name").is("糖尿病合并妊娠(无需药物治疗)"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria3)); + }else if ("4".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria4 = Criteria.where("name").is("糖尿病并发肾病V级、严重心血管病、增生性视网膜病变或玻璃体出血、周围神经病变等"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria4)); + }else if ("5".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria5 = Criteria.where("name").is("糖尿病并发肾病V级"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria5)); + }else if ("6".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria6 = Criteria.where("name").is("糖尿病并发严重心血管病"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria6)); + }else if ("7".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria7 = Criteria.where("name").is("糖尿病并发增生性视网膜病变"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria7)); + }else if ("8".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria8 = Criteria.where("name").is("糖尿病并发玻璃体出血"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria8)); + }else if ("9".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria9 = Criteria.where("name").is("糖尿病并发周围神经病变等"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria9)); + } + + else { + Criteria criteria1 = Criteria.where("name").is("妊娠期糖尿病(无需药物治疗)"); + Criteria criteria2 = Criteria.where("name").is("妊娠期糖尿病病史"); + Criteria criteria3 = Criteria.where("name").is("糖尿病合并妊娠(无需药物治疗)"); + Criteria criteria4 = Criteria.where("name").is("糖尿病并发肾病V级、严重心血管病、增生性视网膜病变或玻璃体出血、周围神经病变等"); + Criteria criteria5 = Criteria.where("name").is("糖尿病并发肾病V级"); + Criteria criteria6 = Criteria.where("name").is("糖尿病并发严重心血管病"); + Criteria criteria7 = Criteria.where("name").is("糖尿病并发增生性视网膜病变"); + Criteria criteria8 = Criteria.where("name").is("糖尿病并发玻璃体出血"); + Criteria criteria9 = Criteria.where("name").is("糖尿病并发周围神经病变等"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria1, criteria2, criteria3,criteria4,criteria5,criteria6,criteria7,criteria8,criteria9)); + } + List models = mongoTemplate.find(yn, BasicConfig.class); + List rFactorList = new ArrayList<>(); + if (models != null && models.size() > 0) { + for (int i = 0; i < models.size(); i++) { + rFactorList.add(models.get(i).getId()); + } + } + patientsQuery.setrFactorList(rFactorList); + List patientses = patientsService.queryPatientBySort(patientsQuery, riskPatientsQueryRequest.getSort(), riskPatientsQueryRequest.getOrder()); + stopWatch.stop(); + + logger.info(stopWatch.toString()); + List data = new ArrayList(); + if (CollectionUtils.isNotEmpty(patientses)) { + if (type == 1) { + //处理全部孕妇的情况 + data = convertToBloodSugarPatient(riskPatientsQueryRequest, patientses, userId, hospital); + } + } +// patientsQuery.mysqlBuild(data.size()); + return new BaseListResponse().setErrormsg("成功").setErrorcode(ErrorCodeConstants.SUCCESS).setData(data).setPageInfo(patientsQuery.getPageInfo()); + } + public BaseResponse queryScarUterusAllPuerpera(RiskPatientsQueryRequest riskPatientsQueryRequest, Boolean isHighRisk, Integer type, Integer userId, String needPage, boolean isRegion) { + //组合请求 + PatientsQuery patientsQuery = complayRequest(riskPatientsQueryRequest, isHighRisk, type, userId, needPage, isRegion); + + String hospital = autoMatchFacade.getHospitalId(userId); + //查询符合条件的孕妇 + StopWatch stopWatch = new StopWatch("queryPatient1 -" + hospital); + stopWatch.start(); + + Query yn = null; + if ("1".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria1 = Criteria.where("name").is("瘢痕子宫"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria1)); + } else if ("2".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria2 = Criteria.where("name").is("剖宫产1次"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria2)); + } else if ("3".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria3 = Criteria.where("name").is("子宫肌瘤挖出术1次"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria3)); + }else if ("4".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria4 = Criteria.where("name").is("宫角妊娠1次"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria4)); + }else if ("5".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria5 = Criteria.where("name").is("瘢痕子宫(距 末次子宫手术间隔<18月)"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria5)); + }else if ("6".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria6 = Criteria.where("name").is("疤痕子宫伴中央性前置胎盘或伴有可疑胎盘植入"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria6)); + }else if ("7".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria7 = Criteria.where("name").is("瘢痕子宫伴中央性前置胎盘"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria7)); + }else if ("8".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria8 = Criteria.where("name").is("瘢痕子宫伴有可疑胎盘植入"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria8)); + }else if ("9".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria9 = Criteria.where("name").is("各类子宫手术史(如剖宫产、宫角妊娠、子宫肌瘤挖除术等)≥2次"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria9)); + }else if ("10".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria10 = Criteria.where("name").is("剖宫产≥2次"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria10)); + }else if ("11".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria11 = Criteria.where("name").is("宫角妊娠≥2次"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria11)); + }else if ("12".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria12 = Criteria.where("name").is("子宫肌瘤挖出术≥2次"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria12)); + }else if ("13".equals(riskPatientsQueryRequest.getTwinsType())) { + Criteria criteria13 = Criteria.where("name").is("各类子宫手术史≥2次"); + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria13)); + } + + else { + Criteria criteria1 = Criteria.where("name").is("瘢痕子宫"); + Criteria criteria2 = Criteria.where("name").is("剖宫产1次"); + Criteria criteria3 = Criteria.where("name").is("子宫肌瘤挖出术1次"); + Criteria criteria4 = Criteria.where("name").is("宫角妊娠1次"); + Criteria criteria5 = Criteria.where("name").is("瘢痕子宫(距末次子宫手术间隔<18月)"); + Criteria criteria6 = Criteria.where("name").is("疤痕子宫伴中央性前置胎盘或伴有可疑胎盘植入"); + Criteria criteria7 = Criteria.where("name").is("瘢痕子宫伴中央性前置胎盘"); + Criteria criteria8 = Criteria.where("name").is("瘢痕子宫伴有可疑胎盘植入"); + Criteria criteria9 = Criteria.where("name").is("各类子宫手术史(如剖宫产、宫角妊娠、子宫肌瘤挖除术等)≥2次"); + Criteria criteria10 = Criteria.where("name").is("宫角妊娠≥2次"); + Criteria criteria11 = Criteria.where("name").is("子宫肌瘤挖出术≥2次"); + Criteria criteria12 = Criteria.where("name").is("各类子宫手术史≥2次"); + Criteria criteria13 = Criteria.where("name").is("剖宫产≥2次"); + + yn = Query.query(Criteria.where("yn").is(1).orOperator(criteria1, criteria2, criteria3,criteria4,criteria5,criteria6,criteria7,criteria8,criteria9,criteria10,criteria11,criteria12,criteria13)); + } + List models = mongoTemplate.find(yn, BasicConfig.class); + List rFactorList = new ArrayList<>(); + if (models != null && models.size() > 0) { + for (int i = 0; i < models.size(); i++) { + rFactorList.add(models.get(i).getId()); + } + } + patientsQuery.setrFactorList(rFactorList); + List patientses = patientsService.queryPatientBySort(patientsQuery, riskPatientsQueryRequest.getSort(), riskPatientsQueryRequest.getOrder()); + stopWatch.stop(); + + logger.info(stopWatch.toString()); + List data = new ArrayList(); + if (CollectionUtils.isNotEmpty(patientses)) { + if (type == 1) { + //处理全部孕妇的情况 + data = convertToScarUterusPatient(riskPatientsQueryRequest, patientses, userId, hospital); + } + } +// patientsQuery.mysqlBuild(data.size()); + return new BaseListResponse().setErrormsg("成功").setErrorcode(ErrorCodeConstants.SUCCESS).setData(data).setPageInfo(patientsQuery.getPageInfo()); + } + + /** * 稀有血型专病门诊管理list * * @param riskPatientsQueryRequest @@ -925,6 +1175,69 @@ public class PatientFacade { } return data; } + private List convertToBloodPressurePatient(RiskPatientsQueryRequest riskPatientsQueryRequest, List patientses, Integer userId, String hospital) { + 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 BloodPressurePatientWorker(riskPatientsQueryRequest, patientses.subList(i, end), usersService, hospital, antExService, basicConfigService, patientsService, organizationService))); + } + for (Future f : listFuture) { + try { + data.addAll((List) f.get(30, TimeUnit.SECONDS)); + } catch (Exception e) { + ExceptionUtils.catchException(e, "convertToQuanPatient get result Future error."); + } + } + return data; + } + private List convertToBloodSugarPatient(RiskPatientsQueryRequest riskPatientsQueryRequest, List patientses, Integer userId, String hospital) { + 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 BloodSugarPatientWorker(riskPatientsQueryRequest, patientses.subList(i, end), usersService, hospital, antExService, basicConfigService, patientsService, organizationService))); + } + for (Future f : listFuture) { + try { + data.addAll((List) f.get(30, TimeUnit.SECONDS)); + } catch (Exception e) { + ExceptionUtils.catchException(e, "convertToQuanPatient get result Future error."); + } + } + return data; + } + private List convertToScarUterusPatient(RiskPatientsQueryRequest riskPatientsQueryRequest, List patientses, Integer userId, String hospital) { + 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 ScarUterusPatientWorker(riskPatientsQueryRequest, patientses.subList(i, end), usersService, hospital, antExService, basicConfigService, patientsService, organizationService))); + } + for (Future f : listFuture) { + try { + data.addAll((List) f.get(30, TimeUnit.SECONDS)); + } catch (Exception e) { + ExceptionUtils.catchException(e, "convertToQuanPatient get result Future error."); + } + } + return data; + } private List convertToRareList(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/worker/BloodPressurePatientWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BloodPressurePatientWorker.java new file mode 100644 index 0000000..d4f035b --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BloodPressurePatientWorker.java @@ -0,0 +1,368 @@ +package com.lyms.platform.operate.web.worker; + +import com.lyms.platform.biz.service.AntenatalExaminationService; +import com.lyms.platform.biz.service.BasicConfigService; +import com.lyms.platform.biz.service.PatientsService; +import com.lyms.platform.common.enums.ServiceStatusEnums; +import com.lyms.platform.common.enums.ServiceTypeEnums; +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.JsonUtil; +import com.lyms.platform.operate.web.facade.PatientFacade; +import com.lyms.platform.operate.web.request.RiskPatientsQueryRequest; +import com.lyms.platform.operate.web.result.HighScoreResult; +import com.lyms.platform.operate.web.result.QuanPatientsResult; +import com.lyms.platform.operate.web.result.TwinsPatientsResult; +import com.lyms.platform.operate.web.utils.CommonsHelper; +import com.lyms.platform.permission.model.Organization; +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.AntExChuModel; +import com.lyms.platform.pojo.AntenatalExaminationModel; +import com.lyms.platform.pojo.BasicConfig; +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.apache.commons.lang.StringUtils; +import org.apache.commons.lang.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StopWatch; + +import java.util.*; +import java.util.concurrent.Callable; + +/** + * 全部孕妇列表 + */ +public class BloodPressurePatientWorker implements Callable> { + + private static final Logger logger = LoggerFactory.getLogger(PatientFacade.class); + + private List patientses; + + private String hospital; + private UsersService usersService; + private AntenatalExaminationService antExService; + private BasicConfigService basicConfigService; + private PatientsService patientsService; + private OrganizationService organizationService; + private RiskPatientsQueryRequest riskPatientsQueryRequest; + + public BloodPressurePatientWorker(RiskPatientsQueryRequest riskPatientsQueryRequest, + List patientses, + UsersService usersService, + String hospital, + AntenatalExaminationService antExService, + BasicConfigService basicConfigService, PatientsService patientsService, OrganizationService organizationService) { + this.riskPatientsQueryRequest = riskPatientsQueryRequest; + this.patientses = patientses; + this.usersService = usersService; + this.antExService = antExService; + this.hospital = hospital; + this.basicConfigService = basicConfigService; + this.patientsService = patientsService; + this.organizationService = organizationService; + } + + @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()); + String twinsType = ""; + if(StringUtils.isNotEmpty(riskPatientsQueryRequest.getTwinsType())){ + twinsType = riskPatientsQueryRequest.getTwinsType(); + } + + for (Patients patients : patientses) { + + StopWatch stopWatch = new StopWatch("TwinsPatientWorker -" + patients.getId()); + TwinsPatientsResult twinsPatientsResult = new TwinsPatientsResult(); + twinsPatientsResult.setYi("-"); + twinsPatientsResult.setEr("-"); + twinsPatientsResult.setSan("-"); + twinsPatientsResult.setSi("-"); + twinsPatientsResult.setWu("-"); + twinsPatientsResult.convertToResult(patients); + antExQuery.setPid(patients.getPid()); + //增加查询本次产程条数 + antExQuery.setStart(patients.getLastMenses()); + if (StringUtils.isNotEmpty(patients.getBookbuildingDoctor())) { + if (NumberUtils.isNumber(patients.getBookbuildingDoctor())) { + Users users = usersService.getUsers(NumberUtils.toInt(patients.getBookbuildingDoctor())); + if (null != users) { + twinsPatientsResult.setlName(users.getName()); + } else { + twinsPatientsResult.setlName(patients.getBookbuildingDoctor()); + } + } else { + twinsPatientsResult.setlName(patients.getBookbuildingDoctor()); + } + } + //筛查结果 + String screenStr = basicConfigService.getScreenResult(patients.getScreenResult()); + twinsPatientsResult.setScreenResult(screenStr); + twinsPatientsResult.setbTime(DateUtil.getyyyy_MM_dd(patients.getBookbuildingDate())); + stopWatch.start("query ant count"); + antExChuQuery1.setPid(patients.getPid()); + //antExChuQuery1.setParentId(patients.getId()); + //增加查询本次产程条数 + antExChuQuery1.setStart(patients.getLastMenses()); + List chu = antExService.queryAntExChu(antExChuQuery1.convertToQuery()); + //复诊次数 + List ant = null; + if (CollectionUtils.isNotEmpty(chu)) { + for (AntExChuModel a : chu) {//唐山滦县导出判断初诊是否是本院 + if (StringUtils.isNotEmpty(a.getHospitalId())) { + if (a.getHospitalId().equals(hospital)) { + twinsPatientsResult.setYi("本院"); + } else { + twinsPatientsResult.setYi("外院"); + } + break; + } + } + ant = antExService.queryAntenatalExamination(antExQuery.convertToQuery()); + } + + //唐山滦县判断复诊是否是本院 + if (CollectionUtils.isNotEmpty(ant)) { + for (int k = 0; k < ant.size(); k++) { + if (k >= 4) { + break; + } + if (0 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setEr("本院"); + } else { + twinsPatientsResult.setEr("外院"); + } + } else if (1 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setSan("本院"); + } else { + twinsPatientsResult.setSan("外院"); + } + } else if (2 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setSi("本院"); + } else { + twinsPatientsResult.setSi("外院"); + } + } else if (3 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setWu("本院"); + } else { + twinsPatientsResult.setWu("外院"); + } + } + } + } + + //系统初诊次数 + int ichu = CollectionUtils.isEmpty(chu) ? 0 : chu.size(); + + //系统复诊次数 + int i = 0; + if (CollectionUtils.isNotEmpty(ant)) { + //复诊次数 + i = ant.size(); + sort(ant); + for (AntenatalExaminationModel a : ant) { + try { + if (StringUtils.isNotEmpty(a.getHospitalId())) { + Organization og = organizationService.getOrganization(Integer.valueOf(a.getHospitalId())); + if (null != og) { + twinsPatientsResult.setCurrentCh(og.getName()); + break; + } + } + } catch (Exception e) { + twinsPatientsResult.setCurrentCh(""); + } + } + } else { + for (AntExChuModel a : chu) { + try { + if (StringUtils.isNotEmpty(a.getHospitalId())) { + Organization og = organizationService.getOrganization(Integer.valueOf(a.getHospitalId())); + if (null != og) { + twinsPatientsResult.setCurrentCh(og.getName()); + break; + } + } + } catch (Exception e) { + twinsPatientsResult.setCurrentCh(""); + } + } + } + + twinsPatientsResult.setcTimes(i + ichu); + + + antExQuery.setHospitalId(hospital); + //本院初诊 + int chi = countAntChu(chu, hospital); + + //本院复诊 + int chb = capLocalHospital(hospital, ant); + twinsPatientsResult.setcHTimes(chi + chb); + stopWatch.stop(); + String nextCheckTime = ""; + stopWatch.start("query antex list"); + + + if (null != patients.getNextCheckTime()) { + nextCheckTime = DateUtil.getyyyy_MM_dd(patients.getNextCheckTime()); + } + + if (StringUtils.isNotEmpty(patients.getLastCheckEmployeeId())) { + if (NumberUtils.isNumber(patients.getLastCheckEmployeeId())) { + Users users = usersService.getUsers(NumberUtils.toInt(patients.getLastCheckEmployeeId())); + if (null != users) { + twinsPatientsResult.setCheckDoctor(users.getName()); + } else { + twinsPatientsResult.setCheckDoctor(patients.getLastCheckEmployeeId()); + } + } else { + twinsPatientsResult.setCheckDoctor(patients.getLastCheckEmployeeId()); + } + } + + + stopWatch.stop(); + stopWatch.start("query basicconfig"); + //注册地址 + twinsPatientsResult.setRegisterAddr(CommonsHelper.getResidence(patients.getProvinceId(), patients.getCityId(), patients.getAreaId(), patients.getStreetId(), patients.getAddress(), basicConfigService)); + twinsPatientsResult.setAddr(CommonsHelper.getResidence(patients.getProvinceRegisterId(), patients.getCityRegisterId(), patients.getAreaRegisterId(), patients.getStreetRegisterId(), patients.getAddressRegister(), basicConfigService)); + try { + twinsPatientsResult.setFirstBH(organizationService.getOrganization(Integer.valueOf(patients.getHospitalId())).getName()); + } catch (Exception e) { + twinsPatientsResult.setFirstBH(""); + } + + twinsPatientsResult.setServiceType(ServiceTypeEnums.getTitleById(patients.getServiceType())); + twinsPatientsResult.setServiceStatus(ServiceStatusEnums.getNameById(patients.getServiceStatus())); + //修改获取建档里面的高危等级不用在重新去算 +// HighScoreResult highScoreResult = antenatalExaminationFacade.findLastRisk(patients.getPid(), true); +// twinsPatientsResult.setrLevel(highScoreResult.filter(highScoreResult.getLevel())); + twinsPatientsResult.setcTime(nextCheckTime); + + + //高危因素 + List factor = patients.getRiskFactorId(); + + if (CollectionUtils.isNotEmpty(factor)) { + StringBuilder sb = new StringBuilder(56); + for (String srt : factor) { + if (StringUtils.isNotEmpty(srt)) { + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(srt); + if (null != basicConfig && sb.indexOf(basicConfig.getName()) == -1) { + if("妊娠期高血压疾病(除外红、橙色)".equals(basicConfig.getName()) + ||"妊娠期高血压".equals(basicConfig.getName()) + ||"子痫前期(轻)".equals(basicConfig.getName()) + ||"慢性高血压合并妊娠".equals(basicConfig.getName()) + ||"妊娠期高血压性心脏病".equals(basicConfig.getName()) + ||"急性肾脏疾病伴高血压".equals(basicConfig.getName()) + ||"慢性肾脏疾病伴高血压".equals(basicConfig.getName()) + ){ + sb.append(basicConfig.getName()).append(','); + } + } + } + } + if (sb.toString().endsWith(",")) { + twinsPatientsResult.setrFactor(sb.substring(0, sb.length() - 1)); + } else { + twinsPatientsResult.setrFactor(sb.toString()); + } + + /* if (!"-".equals(twinsPatientsResult.getrFactor()) && StringUtils.isNotEmpty(patients.getoRiskFactor())) { + twinsPatientsResult.setrFactor(twinsPatientsResult.getrFactor() + "," + patients.getoRiskFactor()); + } else if (StringUtils.isNotEmpty(patients.getoRiskFactor())) { + twinsPatientsResult.setrFactor(patients.getoRiskFactor()); + }*/ + } else if (StringUtils.isNotEmpty(patients.getoRiskFactor())) { + twinsPatientsResult.setrFactor(patients.getoRiskFactor()); + } + List level = new ArrayList(); + if (StringUtils.isNotEmpty(patients.getRiskLevelId())) { + try { + List list = JsonUtil.jkstr2Obj(patients.getRiskLevelId(), List.class); + for (String str : list) { + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(str); + if (null != basicConfig) { + Map map = new HashMap(); + basicConfig.replenRisk(map); + // String name = basicConfig.getName(); + // if (name.indexOf("预警") > -1) { + // name = name.replace("预警", ""); + // } + // map.put("name", name); + // map.put("color", "risk_" + RiskDefaultTypeEnum.getColor(name)); + level.add(map); + } + } + } catch (Exception e) { + ExceptionUtils.catchException(e, "patients.getRiskLevelId error."); + } + twinsPatientsResult.setrLevel(HighScoreResult.filter(level)); + } + data.add(twinsPatientsResult); + stopWatch.stop(); + logger.debug(stopWatch.toString()); + } + return data; + } + + private int capLocalHospital(String hospitalId, List list) { + if (CollectionUtils.isEmpty(list)) { + return 0; + } + int count = 0; + for (AntenatalExaminationModel model : list) { + if (model.getHospitalId().equals(hospitalId)) { + count++; + } + } + return count; + } + + //统计复查里面的本院检查数 + private int countAntChu(List list, String hospital) { + int count = 0; + if (CollectionUtils.isEmpty(list) || StringUtils.isEmpty(hospital)) { + return count; + } + for (AntExChuModel model : list) { + if (hospital.equals(model.getHospitalId())) { + count++; + } + } + return count; + } + + private void sort(List list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + Collections.sort(list, new Comparator() { + @Override + public int compare(AntenatalExaminationModel o1, AntenatalExaminationModel o2) { + if (o1.getCreated().getTime() > o2.getCreated().getTime()) { + return 1; + } else if (o1.getCreated().getTime() < o2.getCreated().getTime()) { + return -1; + } + return 0; + } + }); + } +} \ No newline at end of file diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BloodSugarPatientWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BloodSugarPatientWorker.java new file mode 100644 index 0000000..daa9498 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BloodSugarPatientWorker.java @@ -0,0 +1,370 @@ +package com.lyms.platform.operate.web.worker; + +import com.lyms.platform.biz.service.AntenatalExaminationService; +import com.lyms.platform.biz.service.BasicConfigService; +import com.lyms.platform.biz.service.PatientsService; +import com.lyms.platform.common.enums.ServiceStatusEnums; +import com.lyms.platform.common.enums.ServiceTypeEnums; +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.JsonUtil; +import com.lyms.platform.operate.web.facade.PatientFacade; +import com.lyms.platform.operate.web.request.RiskPatientsQueryRequest; +import com.lyms.platform.operate.web.result.HighScoreResult; +import com.lyms.platform.operate.web.result.QuanPatientsResult; +import com.lyms.platform.operate.web.result.TwinsPatientsResult; +import com.lyms.platform.operate.web.utils.CommonsHelper; +import com.lyms.platform.permission.model.Organization; +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.AntExChuModel; +import com.lyms.platform.pojo.AntenatalExaminationModel; +import com.lyms.platform.pojo.BasicConfig; +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.apache.commons.lang.StringUtils; +import org.apache.commons.lang.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StopWatch; + +import java.util.*; +import java.util.concurrent.Callable; + +/** + * 全部孕妇列表 + */ +public class BloodSugarPatientWorker implements Callable> { + + private static final Logger logger = LoggerFactory.getLogger(PatientFacade.class); + + private List patientses; + + private String hospital; + private UsersService usersService; + private AntenatalExaminationService antExService; + private BasicConfigService basicConfigService; + private PatientsService patientsService; + private OrganizationService organizationService; + private RiskPatientsQueryRequest riskPatientsQueryRequest; + + public BloodSugarPatientWorker(RiskPatientsQueryRequest riskPatientsQueryRequest, + List patientses, + UsersService usersService, + String hospital, + AntenatalExaminationService antExService, + BasicConfigService basicConfigService, PatientsService patientsService, OrganizationService organizationService) { + this.riskPatientsQueryRequest = riskPatientsQueryRequest; + this.patientses = patientses; + this.usersService = usersService; + this.antExService = antExService; + this.hospital = hospital; + this.basicConfigService = basicConfigService; + this.patientsService = patientsService; + this.organizationService = organizationService; + } + + @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()); + String twinsType = ""; + if(StringUtils.isNotEmpty(riskPatientsQueryRequest.getTwinsType())){ + twinsType = riskPatientsQueryRequest.getTwinsType(); + } + + for (Patients patients : patientses) { + + StopWatch stopWatch = new StopWatch("TwinsPatientWorker -" + patients.getId()); + TwinsPatientsResult twinsPatientsResult = new TwinsPatientsResult(); + twinsPatientsResult.setYi("-"); + twinsPatientsResult.setEr("-"); + twinsPatientsResult.setSan("-"); + twinsPatientsResult.setSi("-"); + twinsPatientsResult.setWu("-"); + twinsPatientsResult.convertToResult(patients); + antExQuery.setPid(patients.getPid()); + //增加查询本次产程条数 + antExQuery.setStart(patients.getLastMenses()); + if (StringUtils.isNotEmpty(patients.getBookbuildingDoctor())) { + if (NumberUtils.isNumber(patients.getBookbuildingDoctor())) { + Users users = usersService.getUsers(NumberUtils.toInt(patients.getBookbuildingDoctor())); + if (null != users) { + twinsPatientsResult.setlName(users.getName()); + } else { + twinsPatientsResult.setlName(patients.getBookbuildingDoctor()); + } + } else { + twinsPatientsResult.setlName(patients.getBookbuildingDoctor()); + } + } + //筛查结果 + String screenStr = basicConfigService.getScreenResult(patients.getScreenResult()); + twinsPatientsResult.setScreenResult(screenStr); + twinsPatientsResult.setbTime(DateUtil.getyyyy_MM_dd(patients.getBookbuildingDate())); + stopWatch.start("query ant count"); + antExChuQuery1.setPid(patients.getPid()); + //antExChuQuery1.setParentId(patients.getId()); + //增加查询本次产程条数 + antExChuQuery1.setStart(patients.getLastMenses()); + List chu = antExService.queryAntExChu(antExChuQuery1.convertToQuery()); + //复诊次数 + List ant = null; + if (CollectionUtils.isNotEmpty(chu)) { + for (AntExChuModel a : chu) {//唐山滦县导出判断初诊是否是本院 + if (StringUtils.isNotEmpty(a.getHospitalId())) { + if (a.getHospitalId().equals(hospital)) { + twinsPatientsResult.setYi("本院"); + } else { + twinsPatientsResult.setYi("外院"); + } + break; + } + } + ant = antExService.queryAntenatalExamination(antExQuery.convertToQuery()); + } + + //唐山滦县判断复诊是否是本院 + if (CollectionUtils.isNotEmpty(ant)) { + for (int k = 0; k < ant.size(); k++) { + if (k >= 4) { + break; + } + if (0 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setEr("本院"); + } else { + twinsPatientsResult.setEr("外院"); + } + } else if (1 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setSan("本院"); + } else { + twinsPatientsResult.setSan("外院"); + } + } else if (2 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setSi("本院"); + } else { + twinsPatientsResult.setSi("外院"); + } + } else if (3 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setWu("本院"); + } else { + twinsPatientsResult.setWu("外院"); + } + } + } + } + + //系统初诊次数 + int ichu = CollectionUtils.isEmpty(chu) ? 0 : chu.size(); + + //系统复诊次数 + int i = 0; + if (CollectionUtils.isNotEmpty(ant)) { + //复诊次数 + i = ant.size(); + sort(ant); + for (AntenatalExaminationModel a : ant) { + try { + if (StringUtils.isNotEmpty(a.getHospitalId())) { + Organization og = organizationService.getOrganization(Integer.valueOf(a.getHospitalId())); + if (null != og) { + twinsPatientsResult.setCurrentCh(og.getName()); + break; + } + } + } catch (Exception e) { + twinsPatientsResult.setCurrentCh(""); + } + } + } else { + for (AntExChuModel a : chu) { + try { + if (StringUtils.isNotEmpty(a.getHospitalId())) { + Organization og = organizationService.getOrganization(Integer.valueOf(a.getHospitalId())); + if (null != og) { + twinsPatientsResult.setCurrentCh(og.getName()); + break; + } + } + } catch (Exception e) { + twinsPatientsResult.setCurrentCh(""); + } + } + } + + twinsPatientsResult.setcTimes(i + ichu); + + + antExQuery.setHospitalId(hospital); + //本院初诊 + int chi = countAntChu(chu, hospital); + + //本院复诊 + int chb = capLocalHospital(hospital, ant); + twinsPatientsResult.setcHTimes(chi + chb); + stopWatch.stop(); + String nextCheckTime = ""; + stopWatch.start("query antex list"); + + + if (null != patients.getNextCheckTime()) { + nextCheckTime = DateUtil.getyyyy_MM_dd(patients.getNextCheckTime()); + } + + if (StringUtils.isNotEmpty(patients.getLastCheckEmployeeId())) { + if (NumberUtils.isNumber(patients.getLastCheckEmployeeId())) { + Users users = usersService.getUsers(NumberUtils.toInt(patients.getLastCheckEmployeeId())); + if (null != users) { + twinsPatientsResult.setCheckDoctor(users.getName()); + } else { + twinsPatientsResult.setCheckDoctor(patients.getLastCheckEmployeeId()); + } + } else { + twinsPatientsResult.setCheckDoctor(patients.getLastCheckEmployeeId()); + } + } + + + stopWatch.stop(); + stopWatch.start("query basicconfig"); + //注册地址 + twinsPatientsResult.setRegisterAddr(CommonsHelper.getResidence(patients.getProvinceId(), patients.getCityId(), patients.getAreaId(), patients.getStreetId(), patients.getAddress(), basicConfigService)); + twinsPatientsResult.setAddr(CommonsHelper.getResidence(patients.getProvinceRegisterId(), patients.getCityRegisterId(), patients.getAreaRegisterId(), patients.getStreetRegisterId(), patients.getAddressRegister(), basicConfigService)); + try { + twinsPatientsResult.setFirstBH(organizationService.getOrganization(Integer.valueOf(patients.getHospitalId())).getName()); + } catch (Exception e) { + twinsPatientsResult.setFirstBH(""); + } + + twinsPatientsResult.setServiceType(ServiceTypeEnums.getTitleById(patients.getServiceType())); + twinsPatientsResult.setServiceStatus(ServiceStatusEnums.getNameById(patients.getServiceStatus())); + //修改获取建档里面的高危等级不用在重新去算 +// HighScoreResult highScoreResult = antenatalExaminationFacade.findLastRisk(patients.getPid(), true); +// twinsPatientsResult.setrLevel(highScoreResult.filter(highScoreResult.getLevel())); + twinsPatientsResult.setcTime(nextCheckTime); + + + //高危因素 + List factor = patients.getRiskFactorId(); + + if (CollectionUtils.isNotEmpty(factor)) { + StringBuilder sb = new StringBuilder(56); + for (String srt : factor) { + if (StringUtils.isNotEmpty(srt)) { + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(srt); + if (null != basicConfig && sb.indexOf(basicConfig.getName()) == -1) { + if("妊娠期糖尿病(无需药物治疗)".equals(basicConfig.getName()) + ||"妊娠期糖尿病病史".equals(basicConfig.getName()) + ||"糖尿病合并妊娠(无需药物治疗)".equals(basicConfig.getName()) + ||"糖尿病并发肾病V级、严重心血管病、增生性视网膜病变或玻璃体出血、周围神经病变等".equals(basicConfig.getName()) + ||"糖尿病并发肾病V级".equals(basicConfig.getName()) + ||"糖尿病并发严重心血管病".equals(basicConfig.getName()) + ||"糖尿病并发增生性视网膜病变".equals(basicConfig.getName()) + ||"糖尿病并发玻璃体出血".equals(basicConfig.getName()) + ||"糖尿病并发周围神经病变等".equals(basicConfig.getName()) + ){ + sb.append(basicConfig.getName()).append(','); + } + } + } + } + if (sb.toString().endsWith(",")) { + twinsPatientsResult.setrFactor(sb.substring(0, sb.length() - 1)); + } else { + twinsPatientsResult.setrFactor(sb.toString()); + } + + /* if (!"-".equals(twinsPatientsResult.getrFactor()) && StringUtils.isNotEmpty(patients.getoRiskFactor())) { + twinsPatientsResult.setrFactor(twinsPatientsResult.getrFactor() + "," + patients.getoRiskFactor()); + } else if (StringUtils.isNotEmpty(patients.getoRiskFactor())) { + twinsPatientsResult.setrFactor(patients.getoRiskFactor()); + }*/ + } else if (StringUtils.isNotEmpty(patients.getoRiskFactor())) { + twinsPatientsResult.setrFactor(patients.getoRiskFactor()); + } + List level = new ArrayList(); + if (StringUtils.isNotEmpty(patients.getRiskLevelId())) { + try { + List list = JsonUtil.jkstr2Obj(patients.getRiskLevelId(), List.class); + for (String str : list) { + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(str); + if (null != basicConfig) { + Map map = new HashMap(); + basicConfig.replenRisk(map); + // String name = basicConfig.getName(); + // if (name.indexOf("预警") > -1) { + // name = name.replace("预警", ""); + // } + // map.put("name", name); + // map.put("color", "risk_" + RiskDefaultTypeEnum.getColor(name)); + level.add(map); + } + } + } catch (Exception e) { + ExceptionUtils.catchException(e, "patients.getRiskLevelId error."); + } + twinsPatientsResult.setrLevel(HighScoreResult.filter(level)); + } + data.add(twinsPatientsResult); + stopWatch.stop(); + logger.debug(stopWatch.toString()); + } + return data; + } + + private int capLocalHospital(String hospitalId, List list) { + if (CollectionUtils.isEmpty(list)) { + return 0; + } + int count = 0; + for (AntenatalExaminationModel model : list) { + if (model.getHospitalId().equals(hospitalId)) { + count++; + } + } + return count; + } + + //统计复查里面的本院检查数 + private int countAntChu(List list, String hospital) { + int count = 0; + if (CollectionUtils.isEmpty(list) || StringUtils.isEmpty(hospital)) { + return count; + } + for (AntExChuModel model : list) { + if (hospital.equals(model.getHospitalId())) { + count++; + } + } + return count; + } + + private void sort(List list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + Collections.sort(list, new Comparator() { + @Override + public int compare(AntenatalExaminationModel o1, AntenatalExaminationModel o2) { + if (o1.getCreated().getTime() > o2.getCreated().getTime()) { + return 1; + } else if (o1.getCreated().getTime() < o2.getCreated().getTime()) { + return -1; + } + return 0; + } + }); + } +} \ No newline at end of file diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ScarUterusPatientWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ScarUterusPatientWorker.java new file mode 100644 index 0000000..ea34861 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ScarUterusPatientWorker.java @@ -0,0 +1,373 @@ +package com.lyms.platform.operate.web.worker; + +import com.lyms.platform.biz.service.AntenatalExaminationService; +import com.lyms.platform.biz.service.BasicConfigService; +import com.lyms.platform.biz.service.PatientsService; +import com.lyms.platform.common.enums.ServiceStatusEnums; +import com.lyms.platform.common.enums.ServiceTypeEnums; +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.JsonUtil; +import com.lyms.platform.operate.web.facade.PatientFacade; +import com.lyms.platform.operate.web.request.RiskPatientsQueryRequest; +import com.lyms.platform.operate.web.result.HighScoreResult; +import com.lyms.platform.operate.web.result.QuanPatientsResult; +import com.lyms.platform.operate.web.result.TwinsPatientsResult; +import com.lyms.platform.operate.web.utils.CommonsHelper; +import com.lyms.platform.permission.model.Organization; +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.AntExChuModel; +import com.lyms.platform.pojo.AntenatalExaminationModel; +import com.lyms.platform.pojo.BasicConfig; +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.apache.commons.lang.StringUtils; +import org.apache.commons.lang.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StopWatch; + +import java.util.*; +import java.util.concurrent.Callable; + +/** + * 全部孕妇列表 + */ +public class ScarUterusPatientWorker implements Callable> { + + private static final Logger logger = LoggerFactory.getLogger(PatientFacade.class); + + private List patientses; + + private String hospital; + private UsersService usersService; + private AntenatalExaminationService antExService; + private BasicConfigService basicConfigService; + private PatientsService patientsService; + private OrganizationService organizationService; + private RiskPatientsQueryRequest riskPatientsQueryRequest; + + public ScarUterusPatientWorker(RiskPatientsQueryRequest riskPatientsQueryRequest, + List patientses, + UsersService usersService, + String hospital, + AntenatalExaminationService antExService, + BasicConfigService basicConfigService, PatientsService patientsService, OrganizationService organizationService) { + this.riskPatientsQueryRequest = riskPatientsQueryRequest; + this.patientses = patientses; + this.usersService = usersService; + this.antExService = antExService; + this.hospital = hospital; + this.basicConfigService = basicConfigService; + this.patientsService = patientsService; + this.organizationService = organizationService; + } + + @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()); + String twinsType = ""; + if(StringUtils.isNotEmpty(riskPatientsQueryRequest.getTwinsType())){ + twinsType = riskPatientsQueryRequest.getTwinsType(); + } + + for (Patients patients : patientses) { + + StopWatch stopWatch = new StopWatch("TwinsPatientWorker -" + patients.getId()); + TwinsPatientsResult twinsPatientsResult = new TwinsPatientsResult(); + twinsPatientsResult.setYi("-"); + twinsPatientsResult.setEr("-"); + twinsPatientsResult.setSan("-"); + twinsPatientsResult.setSi("-"); + twinsPatientsResult.setWu("-"); + twinsPatientsResult.convertToResult(patients); + antExQuery.setPid(patients.getPid()); + //增加查询本次产程条数 + antExQuery.setStart(patients.getLastMenses()); + if (StringUtils.isNotEmpty(patients.getBookbuildingDoctor())) { + if (NumberUtils.isNumber(patients.getBookbuildingDoctor())) { + Users users = usersService.getUsers(NumberUtils.toInt(patients.getBookbuildingDoctor())); + if (null != users) { + twinsPatientsResult.setlName(users.getName()); + } else { + twinsPatientsResult.setlName(patients.getBookbuildingDoctor()); + } + } else { + twinsPatientsResult.setlName(patients.getBookbuildingDoctor()); + } + } + //筛查结果 + String screenStr = basicConfigService.getScreenResult(patients.getScreenResult()); + twinsPatientsResult.setScreenResult(screenStr); + twinsPatientsResult.setbTime(DateUtil.getyyyy_MM_dd(patients.getBookbuildingDate())); + stopWatch.start("query ant count"); + antExChuQuery1.setPid(patients.getPid()); + //antExChuQuery1.setParentId(patients.getId()); + //增加查询本次产程条数 + antExChuQuery1.setStart(patients.getLastMenses()); + List chu = antExService.queryAntExChu(antExChuQuery1.convertToQuery()); + //复诊次数 + List ant = null; + if (CollectionUtils.isNotEmpty(chu)) { + for (AntExChuModel a : chu) {//唐山滦县导出判断初诊是否是本院 + if (StringUtils.isNotEmpty(a.getHospitalId())) { + if (a.getHospitalId().equals(hospital)) { + twinsPatientsResult.setYi("本院"); + } else { + twinsPatientsResult.setYi("外院"); + } + break; + } + } + ant = antExService.queryAntenatalExamination(antExQuery.convertToQuery()); + } + + //唐山滦县判断复诊是否是本院 + if (CollectionUtils.isNotEmpty(ant)) { + for (int k = 0; k < ant.size(); k++) { + if (k >= 4) { + break; + } + if (0 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setEr("本院"); + } else { + twinsPatientsResult.setEr("外院"); + } + } else if (1 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setSan("本院"); + } else { + twinsPatientsResult.setSan("外院"); + } + } else if (2 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setSi("本院"); + } else { + twinsPatientsResult.setSi("外院"); + } + } else if (3 == k) { + if (ant.get(k).getHospitalId().equals(hospital)) { + twinsPatientsResult.setWu("本院"); + } else { + twinsPatientsResult.setWu("外院"); + } + } + } + } + + //系统初诊次数 + int ichu = CollectionUtils.isEmpty(chu) ? 0 : chu.size(); + + //系统复诊次数 + int i = 0; + if (CollectionUtils.isNotEmpty(ant)) { + //复诊次数 + i = ant.size(); + sort(ant); + for (AntenatalExaminationModel a : ant) { + try { + if (StringUtils.isNotEmpty(a.getHospitalId())) { + Organization og = organizationService.getOrganization(Integer.valueOf(a.getHospitalId())); + if (null != og) { + twinsPatientsResult.setCurrentCh(og.getName()); + break; + } + } + } catch (Exception e) { + twinsPatientsResult.setCurrentCh(""); + } + } + } else { + for (AntExChuModel a : chu) { + try { + if (StringUtils.isNotEmpty(a.getHospitalId())) { + Organization og = organizationService.getOrganization(Integer.valueOf(a.getHospitalId())); + if (null != og) { + twinsPatientsResult.setCurrentCh(og.getName()); + break; + } + } + } catch (Exception e) { + twinsPatientsResult.setCurrentCh(""); + } + } + } + + twinsPatientsResult.setcTimes(i + ichu); + + + antExQuery.setHospitalId(hospital); + //本院初诊 + int chi = countAntChu(chu, hospital); + + //本院复诊 + int chb = capLocalHospital(hospital, ant); + twinsPatientsResult.setcHTimes(chi + chb); + stopWatch.stop(); + String nextCheckTime = ""; + stopWatch.start("query antex list"); + + + if (null != patients.getNextCheckTime()) { + nextCheckTime = DateUtil.getyyyy_MM_dd(patients.getNextCheckTime()); + } + + if (StringUtils.isNotEmpty(patients.getLastCheckEmployeeId())) { + if (NumberUtils.isNumber(patients.getLastCheckEmployeeId())) { + Users users = usersService.getUsers(NumberUtils.toInt(patients.getLastCheckEmployeeId())); + if (null != users) { + twinsPatientsResult.setCheckDoctor(users.getName()); + } else { + twinsPatientsResult.setCheckDoctor(patients.getLastCheckEmployeeId()); + } + } else { + twinsPatientsResult.setCheckDoctor(patients.getLastCheckEmployeeId()); + } + } + + + stopWatch.stop(); + stopWatch.start("query basicconfig"); + //注册地址 + twinsPatientsResult.setRegisterAddr(CommonsHelper.getResidence(patients.getProvinceId(), patients.getCityId(), patients.getAreaId(), patients.getStreetId(), patients.getAddress(), basicConfigService)); + twinsPatientsResult.setAddr(CommonsHelper.getResidence(patients.getProvinceRegisterId(), patients.getCityRegisterId(), patients.getAreaRegisterId(), patients.getStreetRegisterId(), patients.getAddressRegister(), basicConfigService)); + try { + twinsPatientsResult.setFirstBH(organizationService.getOrganization(Integer.valueOf(patients.getHospitalId())).getName()); + } catch (Exception e) { + twinsPatientsResult.setFirstBH(""); + } + + twinsPatientsResult.setServiceType(ServiceTypeEnums.getTitleById(patients.getServiceType())); + twinsPatientsResult.setServiceStatus(ServiceStatusEnums.getNameById(patients.getServiceStatus())); + //修改获取建档里面的高危等级不用在重新去算 +// HighScoreResult highScoreResult = antenatalExaminationFacade.findLastRisk(patients.getPid(), true); +// twinsPatientsResult.setrLevel(highScoreResult.filter(highScoreResult.getLevel())); + twinsPatientsResult.setcTime(nextCheckTime); + + + //高危因素 + List factor = patients.getRiskFactorId(); + + if (CollectionUtils.isNotEmpty(factor)) { + StringBuilder sb = new StringBuilder(56); + for (String srt : factor) { + if (StringUtils.isNotEmpty(srt)) { + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(srt); + if (null != basicConfig && sb.indexOf(basicConfig.getName()) == -1) { + if("瘢痕子宫".equals(basicConfig.getName()) + ||"剖宫产1次".equals(basicConfig.getName()) + ||"子宫肌瘤挖出术1次".equals(basicConfig.getName()) + ||"宫角妊娠1次".equals(basicConfig.getName()) + ||"瘢痕子宫(距末次子宫手术间隔<18月)".equals(basicConfig.getName()) + ||"疤痕子宫伴中央性前置胎盘或伴有可疑胎盘植入".equals(basicConfig.getName()) + ||"瘢痕子宫伴中央性前置胎盘".equals(basicConfig.getName()) + ||"瘢痕子宫伴有可疑胎盘植入".equals(basicConfig.getName()) + ||"各类子宫手术史(如剖宫产、宫角妊娠、子宫肌瘤挖除术等)≥2次".equals(basicConfig.getName()) + ||"宫角妊娠≥2次".equals(basicConfig.getName()) + ||"子宫肌瘤挖出术≥2次".equals(basicConfig.getName()) + ||"各类子宫手术史≥2次".equals(basicConfig.getName()) + ){ + sb.append(basicConfig.getName()).append(','); + } + } + } + } + if (sb.toString().endsWith(",")) { + twinsPatientsResult.setrFactor(sb.substring(0, sb.length() - 1)); + } else { + twinsPatientsResult.setrFactor(sb.toString()); + } + + /* if (!"-".equals(twinsPatientsResult.getrFactor()) && StringUtils.isNotEmpty(patients.getoRiskFactor())) { + twinsPatientsResult.setrFactor(twinsPatientsResult.getrFactor() + "," + patients.getoRiskFactor()); + } else if (StringUtils.isNotEmpty(patients.getoRiskFactor())) { + twinsPatientsResult.setrFactor(patients.getoRiskFactor()); + }*/ + } else if (StringUtils.isNotEmpty(patients.getoRiskFactor())) { + twinsPatientsResult.setrFactor(patients.getoRiskFactor()); + } + List level = new ArrayList(); + if (StringUtils.isNotEmpty(patients.getRiskLevelId())) { + try { + List list = JsonUtil.jkstr2Obj(patients.getRiskLevelId(), List.class); + for (String str : list) { + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(str); + if (null != basicConfig) { + Map map = new HashMap(); + basicConfig.replenRisk(map); + // String name = basicConfig.getName(); + // if (name.indexOf("预警") > -1) { + // name = name.replace("预警", ""); + // } + // map.put("name", name); + // map.put("color", "risk_" + RiskDefaultTypeEnum.getColor(name)); + level.add(map); + } + } + } catch (Exception e) { + ExceptionUtils.catchException(e, "patients.getRiskLevelId error."); + } + twinsPatientsResult.setrLevel(HighScoreResult.filter(level)); + } + data.add(twinsPatientsResult); + stopWatch.stop(); + logger.debug(stopWatch.toString()); + } + return data; + } + + private int capLocalHospital(String hospitalId, List list) { + if (CollectionUtils.isEmpty(list)) { + return 0; + } + int count = 0; + for (AntenatalExaminationModel model : list) { + if (model.getHospitalId().equals(hospitalId)) { + count++; + } + } + return count; + } + + //统计复查里面的本院检查数 + private int countAntChu(List list, String hospital) { + int count = 0; + if (CollectionUtils.isEmpty(list) || StringUtils.isEmpty(hospital)) { + return count; + } + for (AntExChuModel model : list) { + if (hospital.equals(model.getHospitalId())) { + count++; + } + } + return count; + } + + private void sort(List list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + Collections.sort(list, new Comparator() { + @Override + public int compare(AntenatalExaminationModel o1, AntenatalExaminationModel o2) { + if (o1.getCreated().getTime() > o2.getCreated().getTime()) { + return 1; + } else if (o1.getCreated().getTime() < o2.getCreated().getTime()) { + return -1; + } + return 0; + } + }); + } +} \ No newline at end of file -- 1.8.3.1