diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/HiskCountTask.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/HiskCountTask.java index f653836..955d02b 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/HiskCountTask.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/HiskCountTask.java @@ -4,8 +4,10 @@ import com.lyms.platform.biz.service.BasicConfigService; import com.lyms.platform.biz.service.PatientsService; import com.lyms.platform.common.enums.RiskDefaultTypeEnum; import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.utils.ExceptionUtils; import com.lyms.platform.common.utils.SystemConfig; import com.lyms.platform.operate.web.result.RiskReportResult; +import com.lyms.platform.operate.web.worker.WorkHR; import com.lyms.platform.pojo.BasicConfig; import com.lyms.platform.query.BasicConfigQuery; import com.lyms.platform.query.PatientsQuery; @@ -16,13 +18,15 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.Callable; +import java.util.concurrent.*; /** * Created by Administrator on 2016/11/30. */ public class HiskCountTask implements Callable { + private static ExecutorService pool = Executors.newFixedThreadPool(4); + private PatientsService patientsService; private BasicConfigService basicConfigService; private BasicConfig levelConfig; @@ -52,38 +56,74 @@ public class HiskCountTask implements Callable { List riskConfig = basicConfigService.queryBasicConfig(basicConfigQuery); if (CollectionUtils.isNotEmpty(riskConfig)) { - for (BasicConfig config : riskConfig) { - patientsQuery.setrFactor(config.getId()); - //单个高危因素孕产妇条数 - int riskPatientCount = patientsService.queryPatientCount(patientsQuery); - if (riskPatientCount > 0) + + int batchSize = 3; + int end = 0; + List futures = new ArrayList<>(); + for (int i = 0; i < riskConfig.size(); i += batchSize) { + end = (end + batchSize); + if (end > riskConfig.size()) { + end = riskConfig.size(); + } + + final List configs = riskConfig.subList(i, end); + Callable c = new Callable() { - RiskReportResult risk = new RiskReportResult(); - risk.setHighRiskId(config.getId()); - risk.setHighRisk(config.getName()); - risk.setRiskCount(String.valueOf(riskPatientCount)); - - DecimalFormat df = new DecimalFormat("0.00"); - String percent = df.format((double)riskPatientCount/allPatientCount*100)+"%"; - risk.setPercent(percent); - - if (null != levelConfig) { - List level = new ArrayList(); - Map map = new HashMap(); - String name = levelConfig.getName(); - if (name.indexOf("预警") > -1) { - name = name.replace("预警", ""); + @Override + public List call() throws Exception { + List datas = new ArrayList<>(); + + for (BasicConfig config : configs) { + patientsQuery.setrFactor(config.getId()); + //单个高危因素孕产妇条数 + int riskPatientCount = patientsService.queryPatientCount(patientsQuery); + if (riskPatientCount > 0) + { + RiskReportResult risk = new RiskReportResult(); + risk.setHighRiskId(config.getId()); + risk.setHighRisk(config.getName()); + risk.setRiskCount(String.valueOf(riskPatientCount)); + + DecimalFormat df = new DecimalFormat("0.00"); + String percent = df.format((double)riskPatientCount/allPatientCount*100)+"%"; + risk.setPercent(percent); + + if (null != levelConfig) { + List level = new ArrayList(); + Map map = new HashMap(); + String name = levelConfig.getName(); + if (name.indexOf("预警") > -1) { + name = name.replace("预警", ""); + } + map.put("name", name); + map.put("color", "risk_" + RiskDefaultTypeEnum.getColor(name)); + level.add(map); + risk.setHighLevel(level); + } + + datas.add(risk); + } } - map.put("name", name); - map.put("color", "risk_" + RiskDefaultTypeEnum.getColor(name)); - level.add(map); - risk.setHighLevel(level); + + return datas; } + }; - results.add(risk); + Future f = pool.submit(c); + futures.add(f); + } + for (Future f : futures) { + try { + results.addAll((List) f.get(30, TimeUnit.SECONDS)); + } catch (Exception e) { + ExceptionUtils.catchException(e, "patient hisk count."); } } } return results; } + + } + +