From 7abef6b49bb789527bec7ad7b40489c791008caf Mon Sep 17 00:00:00 2001 From: jiangjiazhi Date: Thu, 13 Oct 2016 13:45:05 +0800 Subject: [PATCH] commit --- .../platform/operate/web/facade/PatientFacade.java | 272 ++++++++++++--------- 1 file changed, 158 insertions(+), 114 deletions(-) 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 bb8d5d3..002288a 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 @@ -29,13 +29,14 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.util.*; +import java.util.concurrent.*; /** * Created by Administrator on 2016/4/22 0022. */ @Component public class PatientFacade { - private Logger logger = LoggerFactory.getLogger(PatientFacade.class); + private static final Logger logger = LoggerFactory.getLogger(PatientFacade.class); @Autowired private PatientsService patientsService; @Autowired @@ -62,6 +63,8 @@ public class PatientFacade { @Autowired private MatDeliverService matDeliverService; + private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 1, TimeUnit.MINUTES, new LinkedBlockingQueue()); + /** * 修改产妇的社区 * @@ -501,140 +504,181 @@ public class PatientFacade { return data; } - /** - * 转换成高危产妇的返回对象 - * - * @param patientses - * @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); - 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()); - } - } + private static class WorkHR implements Callable> { + private List patientses; + private BasicConfigService basicConfigService; + private AntenatalExaminationService antExService; + private UsersService usersService; + private String hospital; - 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"); + public WorkHR(List patientses, UsersService usersService, String hospital) { + this.patientses = patientses; + this.usersService = usersService; + this.hospital = hospital; + } - 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()); + 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.setCheckDoctor(examinationModels.get(0).getCheckDoctor()); + riskPatientsResult.setlName(patients.getBookbuildingDoctor()); } } - 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())); + + 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(list.get(0).getProdDoctor()); + riskPatientsResult.setCheckDoctor(examinationModels.get(0).getCheckDoctor()); } } - } - } - 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(','); + 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()); + } } } } - if(sb.toString().endsWith(",")){ - riskPatientsResult.setrFactor(sb.substring(0,sb.length()-1)); - }else{ - riskPatientsResult.setrFactor(sb.toString()); + 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("预警", ""); + 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); } - map.put("color", "risk_" + RiskDefaultTypeEnum.getColor(name)); - level.add(map); } + } catch (Exception e) { } - }catch (Exception e){ + riskPatientsResult.setrLevel(level); } - riskPatientsResult.setrLevel(level); + + riskPatientsResult.sethScore(patients.getRiskScore()); + dataList.add(riskPatientsResult); + stopWatch.stop(); + logger.info(stopWatch.toString()); } + return dataList; + } + } - riskPatientsResult.sethScore(patients.getRiskScore()); - stopWatch.stop(); - logger.info(stopWatch.toString()); - data.add(riskPatientsResult); + /** + * 转换成高危产妇的返回对象 + * + * @param patientses + * @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; + 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))); + } + for (Future f : listFuture) { + try { + data.addAll((List) f.get(30, TimeUnit.SECONDS)); + } catch (Exception e) { + ExceptionUtils.catchException(e, "get result Future error."); + } } return data; } -- 1.8.3.1