diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/RiskReportFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/RiskReportFacade.java index ab2a6c1..1013b70 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/RiskReportFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/RiskReportFacade.java @@ -16,6 +16,7 @@ import com.lyms.platform.common.utils.SystemConfig; import com.lyms.platform.operate.web.request.BabyCheckRequest; import com.lyms.platform.operate.web.request.RiskPatientsQueryRequest; import com.lyms.platform.operate.web.result.*; +import com.lyms.platform.operate.web.utils.HiskCountTask; import com.lyms.platform.permission.model.Organization; import com.lyms.platform.permission.model.Users; import com.lyms.platform.permission.service.OrganizationService; @@ -29,6 +30,7 @@ import org.springframework.stereotype.Component; import java.text.DecimalFormat; import java.util.*; +import java.util.concurrent.*; @Component public class RiskReportFacade { @@ -98,43 +100,45 @@ public class RiskReportFacade { //总的孕妇条数 int allPatientCount = patientsService.queryPatientCount(patientsQuery); - List results = new ArrayList<>(); + List results = new ArrayList<>(); BasicConfigQuery basicConfigQuery = new BasicConfigQuery(); basicConfigQuery.setYn(YnEnums.YES.getId()); basicConfigQuery.setParentId(SystemConfig.HIGH_RISK_ID); basicConfigQuery.setEnable(1); + List futures = new ArrayList<>(); List riskLevelConfig = basicConfigService.queryBasicConfig(basicConfigQuery); if (CollectionUtils.isNotEmpty(riskLevelConfig)) { + ExecutorService pool = Executors.newFixedThreadPool(riskLevelConfig.size()); for(BasicConfig levelConfig : riskLevelConfig) { - basicConfigQuery.setParentId(levelConfig.getId()); - 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) - { - 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); - risk.setHighLevel(levelConfig.getName()); - results.add(risk); - } - } + Callable c = new HiskCountTask( basicConfigService, + patientsService, levelConfig, + patientsQuery, + allPatientCount); + Future f = pool.submit(c); + futures.add(f); + } + // 关闭线程池 + pool.shutdown(); + } + + if (CollectionUtils.isNotEmpty(futures)) + { + for (Future f : futures) + { + try { + results.add(f.get()); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); } } } + return new BaseObjectResponse() .setErrormsg("成功").setErrorcode(ErrorCodeConstants.SUCCESS).setData(results); } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/RiskReportResult.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/RiskReportResult.java index c5b9ac2..6ae9f5e 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/RiskReportResult.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/RiskReportResult.java @@ -1,6 +1,8 @@ package com.lyms.platform.operate.web.result; +import java.util.List; + /** * 高危报表结果 * Created by lqy on 2016/11/28 @@ -11,7 +13,7 @@ public class RiskReportResult { private String highRiskId; //风险等级 - private String highLevel; + private List highLevel; //高危因素 private String highRisk; @@ -30,11 +32,11 @@ public class RiskReportResult { this.highRiskId = highRiskId; } - public String getHighLevel() { + public List getHighLevel() { return highLevel; } - public void setHighLevel(String highLevel) { + public void setHighLevel(List highLevel) { this.highLevel = highLevel; } 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 new file mode 100644 index 0000000..74f32de --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/HiskCountTask.java @@ -0,0 +1,90 @@ +package com.lyms.platform.operate.web.utils; + +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.SystemConfig; +import com.lyms.platform.operate.web.result.RiskReportResult; +import com.lyms.platform.pojo.BasicConfig; +import com.lyms.platform.query.BasicConfigQuery; +import com.lyms.platform.query.PatientsQuery; +import org.apache.commons.collections.CollectionUtils; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; + +/** + * Created by Administrator on 2016/11/30. + */ +public class HiskCountTask implements Callable { + + private PatientsService patientsService; + private BasicConfigService basicConfigService; + private BasicConfig basicConfig; + private PatientsQuery patientsQuery; + private int allPatientCount; + + public HiskCountTask(BasicConfigService basicConfigService, + PatientsService patientsService,BasicConfig basicConfig, + PatientsQuery patientsQuery, + int allPatientCount) + { + this.basicConfigService = basicConfigService; + this.patientsService = patientsService; + this.basicConfig = basicConfig; + this.patientsQuery = patientsQuery; + this.allPatientCount = allPatientCount; + } + @Override + public List call() throws Exception { + + BasicConfigQuery basicConfigQuery = new BasicConfigQuery(); + basicConfigQuery.setYn(YnEnums.YES.getId()); + basicConfigQuery.setParentId(SystemConfig.HIGH_RISK_ID); + basicConfigQuery.setEnable(1); + + List results = new ArrayList<>(); + basicConfigQuery.setParentId(basicConfig.getId()); + 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) + { + 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 != basicConfig) { + List level = new ArrayList(); + Map map = new HashMap(); + 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); + risk.setHighLevel(level); + } + + results.add(risk); + } + } + } + return results; + } +}