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 50c78bd..f690b11 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 @@ -11,6 +11,9 @@ import com.lyms.platform.operate.web.request.*; import com.lyms.platform.operate.web.result.*; import com.lyms.platform.operate.web.utils.CommonsHelper; import com.lyms.platform.operate.web.utils.MessageCenterService; +import com.lyms.platform.operate.web.worker.QuanChanPatientWorker; +import com.lyms.platform.operate.web.worker.QuanPatientWorker; +import com.lyms.platform.operate.web.worker.WorkHR; import com.lyms.platform.permission.model.Users; import com.lyms.platform.permission.service.UsersService; import com.lyms.platform.pojo.*; @@ -63,7 +66,7 @@ public class PatientFacade { @Autowired private MatDeliverService matDeliverService; - private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 1, TimeUnit.MINUTES, new LinkedBlockingQueue()); + private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(15, 20, 1, TimeUnit.MINUTES, new LinkedBlockingQueue(5000)); /** * 修改产妇的社区 @@ -337,322 +340,48 @@ public class PatientFacade { */ private List convertToQuanCPatient(List patientses, Integer userId, String hospital) { List data = new ArrayList<>(); - AntExQuery antExQuery = new AntExQuery(); -// String hospital = autoMatchFacade.getHospitalId(userId); - for (Patients patients : patientses) { - QuanChanResult chanResult = new QuanChanResult(); - chanResult.convertToResult(patients); - antExQuery.setParentId(patients.getId()); - antExQuery.setYn(YnEnums.YES.getId()); - if (StringUtils.isNotEmpty(patients.getBookbuildingDoctor())) { - if (NumberUtils.isNumber(patients.getBookbuildingDoctor())) { - Users users = usersService.getUsers(NumberUtils.toInt(patients.getBookbuildingDoctor())); - if (null != users) { - chanResult.setlName(users.getName()); - } else { - chanResult.setlName(patients.getBookbuildingDoctor()); - } - } else { - chanResult.setlName(patients.getBookbuildingDoctor()); - } - } - MatDeliverQuery matDeliverQuery = new MatDeliverQuery(); - matDeliverQuery.setPid(patients.getPid()); - matDeliverQuery.setCreatedStart(patients.getLastMenses()); - matDeliverQuery.setYn(YnEnums.YES.getId()); - List maternalDeliverModels = matDeliverService.query(matDeliverQuery); - if (CollectionUtils.isNotEmpty(maternalDeliverModels)) { - chanResult.setDueWeek(maternalDeliverModels.get(0).getDueDate()); + 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(); } - /*if (StringUtils.isNotEmpty(patients.getLastCheckEmployeeId())) { - if (NumberUtils.isNumber(patients.getLastCheckEmployeeId())) { - Users users = usersService.getUsers(NumberUtils.toInt(patients.getLastCheckEmployeeId())); - if (null != users) { - chanResult.setCheckDoctor(users.getName()); - } else { - chanResult.setCheckDoctor(patients.getLastCheckEmployeeId()); - } - } else { - chanResult.setCheckDoctor(patients.getLastCheckEmployeeId()); - } - }*/ - //复查次数 - PostReviewQuery postReviewQuery = new PostReviewQuery(); - postReviewQuery.setPid(patients.getPid()); - postReviewQuery.setYn(YnEnums.YES.getId()); - List withList = postReviewService.findWithList(postReviewQuery.convertToQuery().addOrder(Sort.Direction.DESC, "created")); - - String nextCheckTime = ""; - if (CollectionUtils.isNotEmpty(withList)) { - chanResult.setcTimes(withList.size()); - if (null != withList.get(0).getNextCheckTime()) { - nextCheckTime = DateUtil.getyyyy_MM_dd(withList.get(0).getNextCheckTime()); - } - postReviewQuery.setHospitalId(hospital); - - withList = postReviewService.findWithList(postReviewQuery.convertToQuery().addOrder(Sort.Direction.DESC, "created")); - if (CollectionUtils.isNotEmpty(withList)) { - chanResult.setcHTimes(withList.size()); - if (StringUtils.isNotEmpty(withList.get(0).getProdDoctor())) { - Users users = usersService.getUsers(NumberUtils.toInt(withList.get(0).getProdDoctor())); - if (null != users) { - chanResult.setCheckDoctor(users.getName()); - } - } - } + listFuture.add(threadPoolExecutor.submit(new QuanChanPatientWorker(patientses.subList(i, end), hospital, usersService, postReviewService, matDeliverService))); + } + for (Future f : listFuture) { + try { + data.addAll((List) f.get(30, TimeUnit.SECONDS)); + } catch (Exception e) { + ExceptionUtils.catchException(e, "convertToQuanCPatient get result Future error."); } - - chanResult.setServiceType(ServiceTypeEnums.getTitleById(patients.getServiceType())); - chanResult.setServiceStatus(ServiceStatusEnums.getNameById(patients.getServiceStatus())); - chanResult.setNextCheckTime(nextCheckTime); - data.add(chanResult); } return data; } private List convertToQuanPatient(List patientses, Integer userId, String hospital) { - AntExChuQuery antExChuQuery = new AntExChuQuery(); - AntExQuery antExQuery = new AntExQuery(); List data = new ArrayList<>(); -// String hospital = autoMatchFacade.getHospitalId(userId); - for (Patients patients : patientses) { - QuanPatientsResult quanPatientsResult = new QuanPatientsResult(); - quanPatientsResult.convertToResult(patients); - antExQuery.setPid(patients.getPid()); - antExQuery.setYn(YnEnums.YES.getId()); - if (StringUtils.isNotEmpty(patients.getBookbuildingDoctor())) { - if (NumberUtils.isNumber(patients.getBookbuildingDoctor())) { - Users users = usersService.getUsers(NumberUtils.toInt(patients.getBookbuildingDoctor())); - if (null != users) { - quanPatientsResult.setlName(users.getName()); - } else { - quanPatientsResult.setlName(patients.getBookbuildingDoctor()); - } - - } else { - quanPatientsResult.setlName(patients.getBookbuildingDoctor()); - } - } - - antExQuery.setHospitalId(null); - //复诊次数 - int i = antExService.queryAntenatalExaminationCount(antExQuery.convertToQuery()); - antExChuQuery.setPid(patients.getPid()); - antExChuQuery.setYn(YnEnums.YES.getId()); - antExChuQuery.setHospitalId(null); - //初诊次数 - int b = antExService.queryAntExChuCount(antExChuQuery.convertToQuery()); - quanPatientsResult.setcTimes(i + b); - - - antExChuQuery.setHospitalId(hospital); - - antExQuery.setHospitalId(hospital); - //本院初诊 - int chi = antExService.queryAntExChuCount(antExChuQuery.convertToQuery()); - - //本院复诊 - int chb = antExService.queryAntenatalExaminationCount(antExQuery.convertToQuery()); - quanPatientsResult.setcHTimes(chi + chb); - - String nextCheckTime = ""; - List examinationModels = antExService.queryAntenatalExamination(antExQuery.convertToQuery().addOrder(Sort.Direction.DESC, "created")); - if (CollectionUtils.isNotEmpty(examinationModels)) { - nextCheckTime = DateUtil.getyyyy_MM_dd(examinationModels.get(0).getNextCheckTime()); - - if (StringUtils.isNotEmpty(examinationModels.get(0).getCheckDoctor())) { - if (NumberUtils.isNumber(examinationModels.get(0).getCheckDoctor())) { - Users users = usersService.getUsers(NumberUtils.toInt(examinationModels.get(0).getCheckDoctor())); - if (null != users) { - quanPatientsResult.setCheckDoctor(users.getName()); - } else { - quanPatientsResult.setCheckDoctor(examinationModels.get(0).getCheckDoctor()); - } - } else { - quanPatientsResult.setCheckDoctor(examinationModels.get(0).getCheckDoctor()); - } - } - - } else { - List list = antExService.queryAntExChu(antExChuQuery); - if (CollectionUtils.isNotEmpty(list)) { - nextCheckTime = DateUtil.getyyyy_MM_dd(list.get(0).getNextCheckTime()); - if (StringUtils.isNotEmpty(list.get(0).getProdDoctor())) { - if (NumberUtils.isNumber(list.get(0).getProdDoctor())) { - Users users = usersService.getUsers(NumberUtils.toInt(list.get(0).getProdDoctor())); - if (null != users) { - quanPatientsResult.setCheckDoctor(users.getName()); - } else { - quanPatientsResult.setCheckDoctor(list.get(0).getProdDoctor()); - } - } else { - quanPatientsResult.setCheckDoctor(list.get(0).getProdDoctor()); - } - } - } + 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(); } - - quanPatientsResult.setServiceType(ServiceTypeEnums.getTitleById(patients.getServiceType())); - quanPatientsResult.setServiceStatus(ServiceStatusEnums.getNameById(patients.getServiceStatus())); - HighScoreResult highScoreResult = antenatalExaminationFacade.findLastRisk(patients.getPid(), true); - quanPatientsResult.setcTime(nextCheckTime); - quanPatientsResult.setrLevel(highScoreResult.filter(highScoreResult.getLevel())); - data.add(quanPatientsResult); + listFuture.add(threadPoolExecutor.submit(new QuanPatientWorker(patientses.subList(i, end), usersService, hospital, antExService, basicConfigService))); } - return data; - } - - private static class WorkHR implements Callable> { - private List patientses; - - private BasicConfigService basicConfigService; - private AntenatalExaminationService antExService; - private UsersService usersService; - private String hospital; - - public WorkHR(List patientses, UsersService usersService, String hospital, - BasicConfigService basicConfigService, - AntenatalExaminationService antExService) { - this.patientses = patientses; - this.usersService = usersService; - this.hospital = hospital; - this.basicConfigService=basicConfigService; - this.antExService=antExService; - } - - public List call() { - List dataList = new ArrayList<>(); - for (Patients patients : patientses) { - StopWatch stopWatch = new StopWatch("convert -" + patients.getId()); - RiskPatientsResult riskPatientsResult = new RiskPatientsResult(); - riskPatientsResult.convertToResult(patients); - if (StringUtils.isNotEmpty(patients.getBookbuildingDoctor())) { - if (NumberUtils.isNumber(patients.getBookbuildingDoctor())) { - Users users = usersService.getUsers(NumberUtils.toInt(patients.getBookbuildingDoctor())); - if (null != users) { - riskPatientsResult.setlName(users.getName()); - } else { - riskPatientsResult.setlName(patients.getBookbuildingDoctor()); - } - } else { - riskPatientsResult.setlName(patients.getBookbuildingDoctor()); - } - } - - AntExChuQuery antExChuQuery = new AntExChuQuery(); - AntExQuery antExQuery = new AntExQuery(); - - antExQuery.setPid(patients.getPid()); - antExQuery.setYn(YnEnums.YES.getId()); - antExQuery.setHospitalId(null); - stopWatch.start("cap antex count"); - //复诊次数 - int i = antExService.queryAntenatalExaminationCount(antExQuery.convertToQuery()); - antExChuQuery.setPid(patients.getPid()); - antExChuQuery.setYn(YnEnums.YES.getId()); - //初诊次数 - antExChuQuery.setHospitalId(null); - int b = antExService.queryAntExChuCount(antExChuQuery.convertToQuery()); - antExQuery.setHospitalId(hospital); - //本院的复诊记录 - int chi = antExService.queryAntenatalExaminationCount(antExQuery.convertToQuery()); - antExChuQuery.setHospitalId(hospital); - //本院的初诊记录 - int chb = antExService.queryAntExChuCount(antExChuQuery.convertToQuery()); - riskPatientsResult.setcTimes(i + b); - riskPatientsResult.setcHTimes(chi + chb); - String nextCheckTime = ""; - stopWatch.stop(); - stopWatch.start("query antex count"); - - List examinationModels = antExService.queryAntenatalExamination(antExQuery.convertToQuery().addOrder(Sort.Direction.DESC, "created")); - if (CollectionUtils.isNotEmpty(examinationModels)) { - if (NumberUtils.isNumber(examinationModels.get(0).getCheckDoctor())) { - Users users = usersService.getUsers(NumberUtils.toInt(examinationModels.get(0).getCheckDoctor())); - if (null != users) { - riskPatientsResult.setCheckDoctor(users.getName()); - } else { - riskPatientsResult.setCheckDoctor(examinationModels.get(0).getCheckDoctor()); - } - } - nextCheckTime = DateUtil.getyyyy_MM_dd(examinationModels.get(0).getNextCheckTime()); - } else { - List list = antExService.queryAntExChu(antExChuQuery); - if (CollectionUtils.isNotEmpty(list)) { - nextCheckTime = DateUtil.getyyyy_MM_dd(list.get(0).getNextCheckTime()); - if (NumberUtils.isNumber(list.get(0).getProdDoctor())) { - Users users = usersService.getUsers(NumberUtils.toInt(list.get(0).getProdDoctor())); - if (null != users) { - riskPatientsResult.setCheckDoctor(users.getName()); - } else { - riskPatientsResult.setCheckDoctor(list.get(0).getProdDoctor()); - } - } - } - } - stopWatch.stop(); - - riskPatientsResult.setServiceType(ServiceTypeEnums.getTitleById(patients.getServiceType())); - riskPatientsResult.setServiceStatus(ServiceStatusEnums.getNameById(patients.getServiceStatus())); - riskPatientsResult.setcTime(nextCheckTime); - stopWatch.start("query findLastRisk"); - /* HighScoreResult highScoreResult = antenatalExaminationFacade.findLastRisk(patients.getPid(), true); - riskPatientsResult.setrFactor(highScoreResult.gethighRiskStr()); - riskPatientsResult.setrLevel(highScoreResult.filter(highScoreResult.getLevel())); - riskPatientsResult.sethScore(highScoreResult.getScore());*/ - HighScoreResult highScoreResult = new HighScoreResult(); - - - //高危因素 - 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) { - sb.append(basicConfig.getName()).append(','); - } - } - } - if (sb.toString().endsWith(",")) { - riskPatientsResult.setrFactor(sb.substring(0, sb.length() - 1)); - } else { - riskPatientsResult.setrFactor(sb.toString()); - } - } - 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(); - String name = basicConfig.getName(); - if (name.indexOf("预警") > -1) { - name = name.replace("预警", ""); - } - map.put("color", "risk_" + RiskDefaultTypeEnum.getColor(name)); - level.add(map); - } - } - } catch (Exception e) { - ExceptionUtils.catchException(e,"patients.getRiskLevelId error."); - } - riskPatientsResult.setrLevel(level); - } - - riskPatientsResult.sethScore(patients.getRiskScore()); - dataList.add(riskPatientsResult); - stopWatch.stop(); - logger.info(stopWatch.toString()); + 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 dataList; } + return data; } /** @@ -662,27 +391,22 @@ public class PatientFacade { * @return */ private List convertToHighRisk(List patientses, Integer userId, String hospital) { - AntExChuQuery antExChuQuery = new AntExChuQuery(); - AntExQuery antExQuery = new AntExQuery(); List data = new ArrayList<>(); - //String hospital = autoMatchFacade.getHospitalId(userId); - - int batchSize = 5; - int start = 0, end = 0; + 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(); } - System.out.println("start:" + i + ",end:" + end); - listFuture.add(threadPoolExecutor.submit(new WorkHR(patientses.subList(i, end), usersService, hospital,basicConfigService,antExService))); + listFuture.add(threadPoolExecutor.submit(new WorkHR(patientses.subList(i, end), usersService, hospital, basicConfigService, antExService))); } for (Future f : listFuture) { try { data.addAll((List) f.get(30, TimeUnit.SECONDS)); } catch (Exception e) { - ExceptionUtils.catchException(e, "get result Future error."); + ExceptionUtils.catchException(e, "convertToHighRisk get result Future error."); } } return data; diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/QuanChanPatientWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/QuanChanPatientWorker.java new file mode 100644 index 0000000..5777c71 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/QuanChanPatientWorker.java @@ -0,0 +1,131 @@ +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.MatDeliverService; +import com.lyms.platform.biz.service.PostReviewService; +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.operate.web.facade.PatientFacade; +import com.lyms.platform.operate.web.facade.SmsConfigFacade; +import com.lyms.platform.operate.web.result.QuanChanResult; +import com.lyms.platform.permission.model.Users; +import com.lyms.platform.permission.service.UsersService; +import com.lyms.platform.pojo.MaternalDeliverModel; +import com.lyms.platform.pojo.Patients; +import com.lyms.platform.pojo.PostReviewModel; +import com.lyms.platform.query.AntExQuery; +import com.lyms.platform.query.MatDeliverQuery; +import com.lyms.platform.query.PostReviewQuery; +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.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Sort; +import org.springframework.util.StopWatch; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; + +/** + * 全部产妇列表 + *

+ * Created by Administrator on 2016/10/13 0013. + */ +public class QuanChanPatientWorker implements Callable> { + + private static final Logger logger = LoggerFactory.getLogger(PatientFacade.class); + private List patientses; + + private UsersService usersService; + private PostReviewService postReviewService; + + private MatDeliverService matDeliverService; + private String hospital; + + public QuanChanPatientWorker(List patientses, + String hospital, + UsersService usersService, + PostReviewService postReviewService, + MatDeliverService matDeliverService) { + this.patientses = patientses; + this.matDeliverService = matDeliverService; + this.postReviewService = postReviewService; + this.hospital = hospital; + this.usersService = usersService; + } + + + @Override + public List call() throws Exception { + List data = new ArrayList<>(); + AntExQuery antExQuery = new AntExQuery(); + for (Patients patients : patientses) { + StopWatch stopWatch = new StopWatch("QuanChanPatientWorker -" + patients.getId()); + QuanChanResult chanResult = new QuanChanResult(); + chanResult.convertToResult(patients); + antExQuery.setParentId(patients.getId()); + antExQuery.setYn(YnEnums.YES.getId()); + if (StringUtils.isNotEmpty(patients.getBookbuildingDoctor())) { + if (NumberUtils.isNumber(patients.getBookbuildingDoctor())) { + Users users = usersService.getUsers(NumberUtils.toInt(patients.getBookbuildingDoctor())); + if (null != users) { + chanResult.setlName(users.getName()); + } else { + chanResult.setlName(patients.getBookbuildingDoctor()); + } + } else { + chanResult.setlName(patients.getBookbuildingDoctor()); + } + } + MatDeliverQuery matDeliverQuery = new MatDeliverQuery(); + matDeliverQuery.setPid(patients.getPid()); + matDeliverQuery.setCreatedStart(patients.getLastMenses()); + matDeliverQuery.setYn(YnEnums.YES.getId()); + stopWatch.start("query matdeliver"); + List maternalDeliverModels = matDeliverService.query(matDeliverQuery); + if (CollectionUtils.isNotEmpty(maternalDeliverModels)) { + chanResult.setDueWeek(maternalDeliverModels.get(0).getDueDate()); + } + stopWatch.stop(); + //复查次数 + PostReviewQuery postReviewQuery = new PostReviewQuery(); + postReviewQuery.setPid(patients.getPid()); + postReviewQuery.setYn(YnEnums.YES.getId()); + stopWatch.start("query postreview list"); + List withList = postReviewService.findWithList(postReviewQuery.convertToQuery().addOrder(Sort.Direction.DESC, "created")); + + String nextCheckTime = ""; + if (CollectionUtils.isNotEmpty(withList)) { + chanResult.setcTimes(withList.size()); + if (null != withList.get(0).getNextCheckTime()) { + nextCheckTime = DateUtil.getyyyy_MM_dd(withList.get(0).getNextCheckTime()); + } + postReviewQuery.setHospitalId(hospital); + + withList = postReviewService.findWithList(postReviewQuery.convertToQuery().addOrder(Sort.Direction.DESC, "created")); + if (CollectionUtils.isNotEmpty(withList)) { + chanResult.setcHTimes(withList.size()); + if (StringUtils.isNotEmpty(withList.get(0).getProdDoctor())) { + Users users = usersService.getUsers(NumberUtils.toInt(withList.get(0).getProdDoctor())); + if (null != users) { + chanResult.setCheckDoctor(users.getName()); + } + } + } + } + stopWatch.stop(); + chanResult.setServiceType(ServiceTypeEnums.getTitleById(patients.getServiceType())); + chanResult.setServiceStatus(ServiceStatusEnums.getNameById(patients.getServiceStatus())); + chanResult.setNextCheckTime(nextCheckTime); + data.add(chanResult); + logger.debug(stopWatch.toString()); + } + return data; + } +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/QuanPatientWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/QuanPatientWorker.java new file mode 100644 index 0000000..11df71b --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/QuanPatientWorker.java @@ -0,0 +1,179 @@ +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.common.enums.RiskDefaultTypeEnum; +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.result.HighScoreResult; +import com.lyms.platform.operate.web.result.QuanPatientsResult; +import com.lyms.platform.permission.model.Users; +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.data.domain.Sort; +import org.springframework.util.StopWatch; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; + +/** + * 全部孕妇列表 + */ +public class QuanPatientWorker 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; + + public QuanPatientWorker(List patientses, + UsersService usersService, + String hospital, + AntenatalExaminationService antExService, + BasicConfigService basicConfigService) { + this.patientses = patientses; + this.usersService = usersService; + this.antExService = antExService; + this.hospital = hospital; + this.basicConfigService = basicConfigService; + } + + @Override + public List call() throws Exception { + List data = new ArrayList<>(); + AntExChuQuery antExChuQuery = new AntExChuQuery(); + AntExQuery antExQuery = new AntExQuery(); + for (Patients patients : patientses) { + StopWatch stopWatch = new StopWatch("QuanPatientWorker -" + patients.getId()); + QuanPatientsResult quanPatientsResult = new QuanPatientsResult(); + quanPatientsResult.convertToResult(patients); + antExQuery.setPid(patients.getPid()); + antExQuery.setYn(YnEnums.YES.getId()); + if (StringUtils.isNotEmpty(patients.getBookbuildingDoctor())) { + if (NumberUtils.isNumber(patients.getBookbuildingDoctor())) { + Users users = usersService.getUsers(NumberUtils.toInt(patients.getBookbuildingDoctor())); + if (null != users) { + quanPatientsResult.setlName(users.getName()); + } else { + quanPatientsResult.setlName(patients.getBookbuildingDoctor()); + } + } else { + quanPatientsResult.setlName(patients.getBookbuildingDoctor()); + } + } + + antExQuery.setHospitalId(null); + stopWatch.start("query ant count"); + //复诊次数 + int i = antExService.queryAntenatalExaminationCount(antExQuery.convertToQuery()); + antExChuQuery.setPid(patients.getPid()); + antExChuQuery.setYn(YnEnums.YES.getId()); + antExChuQuery.setHospitalId(null); + //初诊次数 + int b = antExService.queryAntExChuCount(antExChuQuery.convertToQuery()); + quanPatientsResult.setcTimes(i + b); + + + antExChuQuery.setHospitalId(hospital); + + antExQuery.setHospitalId(hospital); + //本院初诊 + int chi = antExService.queryAntExChuCount(antExChuQuery.convertToQuery()); + + //本院复诊 + int chb = antExService.queryAntenatalExaminationCount(antExQuery.convertToQuery()); + quanPatientsResult.setcHTimes(chi + chb); + stopWatch.stop(); + String nextCheckTime = ""; + stopWatch.start("query antex list"); + List examinationModels = antExService.queryAntenatalExamination(antExQuery.convertToQuery().addOrder(Sort.Direction.DESC, "created")); + if (CollectionUtils.isNotEmpty(examinationModels)) { + nextCheckTime = DateUtil.getyyyy_MM_dd(examinationModels.get(0).getNextCheckTime()); + + if (StringUtils.isNotEmpty(examinationModels.get(0).getCheckDoctor())) { + if (NumberUtils.isNumber(examinationModels.get(0).getCheckDoctor())) { + Users users = usersService.getUsers(NumberUtils.toInt(examinationModels.get(0).getCheckDoctor())); + if (null != users) { + quanPatientsResult.setCheckDoctor(users.getName()); + } else { + quanPatientsResult.setCheckDoctor(examinationModels.get(0).getCheckDoctor()); + } + } else { + quanPatientsResult.setCheckDoctor(examinationModels.get(0).getCheckDoctor()); + } + } + + } else { + List list = antExService.queryAntExChu(antExChuQuery); + if (CollectionUtils.isNotEmpty(list)) { + nextCheckTime = DateUtil.getyyyy_MM_dd(list.get(0).getNextCheckTime()); + if (StringUtils.isNotEmpty(list.get(0).getProdDoctor())) { + if (NumberUtils.isNumber(list.get(0).getProdDoctor())) { + Users users = usersService.getUsers(NumberUtils.toInt(list.get(0).getProdDoctor())); + if (null != users) { + quanPatientsResult.setCheckDoctor(users.getName()); + } else { + quanPatientsResult.setCheckDoctor(list.get(0).getProdDoctor()); + } + } else { + quanPatientsResult.setCheckDoctor(list.get(0).getProdDoctor()); + } + } + } + } + stopWatch.stop(); + quanPatientsResult.setServiceType(ServiceTypeEnums.getTitleById(patients.getServiceType())); + quanPatientsResult.setServiceStatus(ServiceStatusEnums.getNameById(patients.getServiceStatus())); + //修改获取建档里面的高危等级不用在重新去算 +// HighScoreResult highScoreResult = antenatalExaminationFacade.findLastRisk(patients.getPid(), true); +// quanPatientsResult.setrLevel(highScoreResult.filter(highScoreResult.getLevel())); + quanPatientsResult.setcTime(nextCheckTime); + 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(); + String name = basicConfig.getName(); + if (name.indexOf("预警") > -1) { + name = name.replace("预警", ""); + } + map.put("color", "risk_" + RiskDefaultTypeEnum.getColor(name)); + level.add(map); + } + } + } catch (Exception e) { + ExceptionUtils.catchException(e, "patients.getRiskLevelId error."); + } + quanPatientsResult.setrLevel(level); + } + data.add(quanPatientsResult); + logger.debug(stopWatch.toString()); + } + return data; + } +} \ No newline at end of file diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/WorkHR.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/WorkHR.java new file mode 100644 index 0000000..5a718fb --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/WorkHR.java @@ -0,0 +1,189 @@ +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.common.enums.RiskDefaultTypeEnum; +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.result.RiskPatientsResult; +import com.lyms.platform.permission.model.Users; +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.data.domain.Sort; +import org.springframework.util.StopWatch; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; + +/** + * + * 高危孕妇列表线程处理 + * + */ +public class WorkHR implements Callable> { + + private static final Logger logger = LoggerFactory.getLogger(PatientFacade.class); + private List patientses; + + private BasicConfigService basicConfigService; + private AntenatalExaminationService antExService; + private UsersService usersService; + private String hospital; + + public WorkHR(List patientses, UsersService usersService, String hospital, + BasicConfigService basicConfigService, + AntenatalExaminationService antExService) { + this.patientses = patientses; + this.usersService = usersService; + this.hospital = hospital; + this.basicConfigService = basicConfigService; + this.antExService = antExService; + } + + public List call() { + List dataList = new ArrayList<>(); + for (Patients patients : patientses) { + StopWatch stopWatch = new StopWatch("WorkHR -" + patients.getId()); + RiskPatientsResult riskPatientsResult = new RiskPatientsResult(); + riskPatientsResult.convertToResult(patients); + if (StringUtils.isNotEmpty(patients.getBookbuildingDoctor())) { + if (NumberUtils.isNumber(patients.getBookbuildingDoctor())) { + Users users = usersService.getUsers(NumberUtils.toInt(patients.getBookbuildingDoctor())); + if (null != users) { + riskPatientsResult.setlName(users.getName()); + } else { + riskPatientsResult.setlName(patients.getBookbuildingDoctor()); + } + } else { + riskPatientsResult.setlName(patients.getBookbuildingDoctor()); + } + } + + AntExChuQuery antExChuQuery = new AntExChuQuery(); + AntExQuery antExQuery = new AntExQuery(); + + antExQuery.setPid(patients.getPid()); + antExQuery.setYn(YnEnums.YES.getId()); + antExQuery.setHospitalId(null); + stopWatch.start("cap antex count"); + //复诊次数 + int i = antExService.queryAntenatalExaminationCount(antExQuery.convertToQuery()); + antExChuQuery.setPid(patients.getPid()); + antExChuQuery.setYn(YnEnums.YES.getId()); + //初诊次数 + antExChuQuery.setHospitalId(null); + int b = antExService.queryAntExChuCount(antExChuQuery.convertToQuery()); + antExQuery.setHospitalId(hospital); + //本院的复诊记录 + int chi = antExService.queryAntenatalExaminationCount(antExQuery.convertToQuery()); + antExChuQuery.setHospitalId(hospital); + //本院的初诊记录 + int chb = antExService.queryAntExChuCount(antExChuQuery.convertToQuery()); + riskPatientsResult.setcTimes(i + b); + riskPatientsResult.setcHTimes(chi + chb); + String nextCheckTime = ""; + stopWatch.stop(); + stopWatch.start("query antex count"); + + List examinationModels = antExService.queryAntenatalExamination(antExQuery.convertToQuery().addOrder(Sort.Direction.DESC, "created")); + if (CollectionUtils.isNotEmpty(examinationModels)) { + if (NumberUtils.isNumber(examinationModels.get(0).getCheckDoctor())) { + Users users = usersService.getUsers(NumberUtils.toInt(examinationModels.get(0).getCheckDoctor())); + if (null != users) { + riskPatientsResult.setCheckDoctor(users.getName()); + } else { + riskPatientsResult.setCheckDoctor(examinationModels.get(0).getCheckDoctor()); + } + } + nextCheckTime = DateUtil.getyyyy_MM_dd(examinationModels.get(0).getNextCheckTime()); + } else { + List list = antExService.queryAntExChu(antExChuQuery); + if (CollectionUtils.isNotEmpty(list)) { + nextCheckTime = DateUtil.getyyyy_MM_dd(list.get(0).getNextCheckTime()); + if (NumberUtils.isNumber(list.get(0).getProdDoctor())) { + Users users = usersService.getUsers(NumberUtils.toInt(list.get(0).getProdDoctor())); + if (null != users) { + riskPatientsResult.setCheckDoctor(users.getName()); + } else { + riskPatientsResult.setCheckDoctor(list.get(0).getProdDoctor()); + } + } + } + } + stopWatch.stop(); + + riskPatientsResult.setServiceType(ServiceTypeEnums.getTitleById(patients.getServiceType())); + riskPatientsResult.setServiceStatus(ServiceStatusEnums.getNameById(patients.getServiceStatus())); + riskPatientsResult.setcTime(nextCheckTime); + stopWatch.start("query findLastRisk"); + /*HighScoreResult highScoreResult = antenatalExaminationFacade.findLastRisk(patients.getPid(), true); + riskPatientsResult.setrFactor(highScoreResult.gethighRiskStr()); + riskPatientsResult.setrLevel(highScoreResult.filter(highScoreResult.getLevel())); + riskPatientsResult.sethScore(highScoreResult.getScore());*/ + //高危因素 + 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) { + sb.append(basicConfig.getName()).append(','); + } + } + } + if (sb.toString().endsWith(",")) { + riskPatientsResult.setrFactor(sb.substring(0, sb.length() - 1)); + } else { + riskPatientsResult.setrFactor(sb.toString()); + } + } + 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(); + String name = basicConfig.getName(); + if (name.indexOf("预警") > -1) { + name = name.replace("预警", ""); + } + map.put("color", "risk_" + RiskDefaultTypeEnum.getColor(name)); + level.add(map); + } + } + } catch (Exception e) { + ExceptionUtils.catchException(e, "patients.getRiskLevelId error."); + } + riskPatientsResult.setrLevel(level); + } + + riskPatientsResult.sethScore(patients.getRiskScore()); + dataList.add(riskPatientsResult); + stopWatch.stop(); + logger.debug(stopWatch.toString()); + } + return dataList; + } +} \ No newline at end of file