From 751d918be8757175d0435e89570bb5d02f512e18 Mon Sep 17 00:00:00 2001 From: dongqin <123456> Date: Mon, 20 May 2019 11:28:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A2=9E=E5=80=BC=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E7=BB=9F=E8=AE=A1=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operate/web/facade/AreaCountFacade.java | 24 ++++++++++++++-------- .../web/worker/ServiceListBySerStatusWorker.java | 15 ++++++++------ .../operate/web/worker/ServiceListWorker.java | 15 +++++++------- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AreaCountFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AreaCountFacade.java index 82c9403..d2c182d 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AreaCountFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AreaCountFacade.java @@ -1037,7 +1037,7 @@ public class AreaCountFacade { * @param param * @return */ - public BaseResponse getServiceList(ServiceListQuery param) throws InterruptedException { + public BaseResponse getServiceList(ServiceListQuery param) throws Exception { BaseResponse baseResponse = new BaseResponse(); String string = param.toString(); BaseResponse baseResponseVal = cacheGetServiceList.get(string); @@ -1047,7 +1047,7 @@ public class AreaCountFacade { setDefaultTime(param); HashMap objectHashMap = new HashMap<>(16); - CopyOnWriteArrayList copyOnWriteArrayList = new CopyOnWriteArrayList(); + String hospitalId = param.getHospitalId(); String provinceId = param.getProvinceId(); @@ -1066,18 +1066,25 @@ public class AreaCountFacade { int size = hospitalIds.size(); int batchSize = 2; int end = 0; + List> mapList = new ArrayList(size); + List futureArrayList = new ArrayList<>(); for (int i = 0; i < size; i += batchSize){ end = (end + batchSize); if (end > hospitalIds.size()) { end = hospitalIds.size(); } - threadPool.submit(new ServiceListWorker(hospitalIds.subList(i, end), copyOnWriteArrayList, param, patientServiceService, basicConfigService)); + Future>> listFuture = threadPool.submit(new ServiceListWorker(hospitalIds.subList(i, end), param, patientServiceService, basicConfigService)); + futureArrayList.add(listFuture); } threadPool.shutdown(); while (true){ if (threadPool.isTerminated()){ + for (Future future : futureArrayList){ + mapList.addAll((List)future.get()); + } break; } + Thread.sleep(1000); } ArrayList statusNameList = new ArrayList<>(); statusNameList.add("开通"); @@ -1085,18 +1092,17 @@ public class AreaCountFacade { statusNameList.add("过期"); statusNameList.add("暂停"); - CopyOnWriteArrayList statusValList = new CopyOnWriteArrayList(); - param.setHospitalIds(hospitalIds); - ExecutorService service = new ThreadPoolExecutor(4, 4, 9000, TimeUnit.MILLISECONDS, + param.setHospitalIds(hospitalIds); + ExecutorService service = new ThreadPoolExecutor(1, 1, 90000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(1), new RejectedExecutionHandler() { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { - // 异常抛出 throw new RuntimeException(); } }); + CopyOnWriteArrayList statusValList = new CopyOnWriteArrayList(); for (int i =1; i < 5; i ++){ CountDownLatch cdl = new CountDownLatch(1); String serStatus = i + "" ; @@ -1107,11 +1113,11 @@ public class AreaCountFacade { objectHashMap.put("statusNameList",statusNameList); objectHashMap.put("statusValList", statusValList); - objectHashMap.put("serviceList", copyOnWriteArrayList); + objectHashMap.put("serviceList", mapList); baseResponse.setObject(objectHashMap); - cacheGetServiceList.put(string, baseResponse); + return baseResponse; } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListBySerStatusWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListBySerStatusWorker.java index 0a95ca7..1480b5d 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListBySerStatusWorker.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListBySerStatusWorker.java @@ -27,12 +27,15 @@ public class ServiceListBySerStatusWorker implements Runnable{ } @Override public void run() { - int number = 0; - if (!param.getHospitalIds().isEmpty()){ - param.setSerStatus(serStatus); - number = patientServiceService.countStatusInfo(param); + try { + int number = 0; + if (!param.getHospitalIds().isEmpty()){ + param.setSerStatus(serStatus); + number = patientServiceService.countStatusInfo(param); + } + statusValList.add(number); + }finally { + cdl.countDown(); } - statusValList.add(number); - cdl.countDown(); } } \ No newline at end of file diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListWorker.java index 7cac195..0d77303 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListWorker.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListWorker.java @@ -5,9 +5,11 @@ import com.lyms.platform.permission.model.ServiceListQuery; import com.lyms.platform.permission.service.PatientServiceService; import com.lyms.platform.pojo.BasicConfig; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.BlockingQueue; import java.util.concurrent.Callable; import java.util.concurrent.CopyOnWriteArrayList; @@ -18,24 +20,23 @@ import java.util.concurrent.CopyOnWriteArrayList; * @Date 9:59 2019/5/18 **/ -public class ServiceListWorker implements Callable { +public class ServiceListWorker implements Callable< List>> { private List hospitals; - private CopyOnWriteArrayList copyOnWriteArrayList; private ServiceListQuery param; private PatientServiceService patientServiceService; private BasicConfigService basicConfigService; - public ServiceListWorker(List hospitals, CopyOnWriteArrayList copyOnWriteArrayList, ServiceListQuery param, + public ServiceListWorker(List hospitals, ServiceListQuery param, PatientServiceService patientServiceService, BasicConfigService basicConfigService) { this.hospitals = hospitals; - this.copyOnWriteArrayList = copyOnWriteArrayList; this.param = param; this.patientServiceService = patientServiceService; this.basicConfigService = basicConfigService; } @Override - public String call() throws Exception { + public List> call() throws Exception { + List> mapList = new ArrayList<>(); for (String hospital : hospitals){ param.setHospitalId(hospital); @@ -59,10 +60,10 @@ public class ServiceListWorker implements Callable { + Integer.parseInt(map.get("suspend").toString())); hashMap.putAll(map); - copyOnWriteArrayList.add(hashMap); + mapList.add(hashMap); } } - return "SUCCESS"; + return mapList; } } -- 1.8.3.1