From dc705b417f508e0b6d3e04d75d4b51859e50cf6a Mon Sep 17 00:00:00 2001 From: dongqin <123456> Date: Sat, 18 May 2019 11:53:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=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 --- .../dao/master/PatientServiceMapper.java | 2 + .../permission/service/PatientServiceService.java | 2 + .../service/impl/PatientServiceServiceImpl.java | 5 + .../resources/mainOrm/master/PatientService.xml | 45 +++++-- .../web/controller/AreaCountController.java | 19 ++- .../operate/web/facade/AreaCountFacade.java | 129 ++++++++------------- .../web/worker/ServiceListBySerStatusWorker.java | 38 ++++++ .../operate/web/worker/ServiceListWorker.java | 67 +++++++++++ 8 files changed, 220 insertions(+), 87 deletions(-) create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListBySerStatusWorker.java create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListWorker.java diff --git a/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/PatientServiceMapper.java b/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/PatientServiceMapper.java index bc3231f..bd03490 100644 --- a/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/PatientServiceMapper.java +++ b/platform-biz-service/src/main/java/com/lyms/platform/permission/dao/master/PatientServiceMapper.java @@ -64,4 +64,6 @@ public interface PatientServiceMapper { * @return */ List> getServeDetailList(@Param("param") ServiceListQuery param); + + List getHospitalIds(@Param("param") ServiceListQuery param); } \ No newline at end of file diff --git a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/PatientServiceService.java b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/PatientServiceService.java index 4ce7b07..f741449 100644 --- a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/PatientServiceService.java +++ b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/PatientServiceService.java @@ -28,4 +28,6 @@ public interface PatientServiceService { int countStatusInfo(ServiceListQuery param); List> getServeDetailList(ServiceListQuery param); + + List getHospitalIds(ServiceListQuery param); } \ No newline at end of file diff --git a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/PatientServiceServiceImpl.java b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/PatientServiceServiceImpl.java index 3c11623..56b746a 100644 --- a/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/PatientServiceServiceImpl.java +++ b/platform-biz-service/src/main/java/com/lyms/platform/permission/service/impl/PatientServiceServiceImpl.java @@ -75,4 +75,9 @@ public class PatientServiceServiceImpl implements PatientServiceService { } return patientServiceMapper.getServeDetailList(param); } + + @Override + public List getHospitalIds(ServiceListQuery param) { + return patientServiceMapper.getHospitalIds(param); + } } \ No newline at end of file diff --git a/platform-biz-service/src/main/resources/mainOrm/master/PatientService.xml b/platform-biz-service/src/main/resources/mainOrm/master/PatientService.xml index 6102f7c..07f15ec 100644 --- a/platform-biz-service/src/main/resources/mainOrm/master/PatientService.xml +++ b/platform-biz-service/src/main/resources/mainOrm/master/PatientService.xml @@ -394,7 +394,6 @@ + \ No newline at end of file diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/AreaCountController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/AreaCountController.java index 9682bb1..eb180a3 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/AreaCountController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/AreaCountController.java @@ -3,6 +3,7 @@ package com.lyms.platform.operate.web.controller; import com.lyms.platform.common.annotation.TokenRequired; import com.lyms.platform.common.base.BaseController; import com.lyms.platform.common.base.LoginContext; +import com.lyms.platform.common.constants.ErrorCodeConstants; import com.lyms.platform.common.result.BaseResponse; import com.lyms.platform.operate.web.facade.AreaCountFacade; import com.lyms.platform.permission.model.ServiceListQuery; @@ -196,7 +197,14 @@ public class AreaCountController extends BaseController { public BaseResponse getServiceList(@RequestBody @Valid ServiceListQuery query, HttpServletRequest request){ LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); query.setUserId(loginState.getId()); - return areaCountFacade.getServiceList(query); + try { + return areaCountFacade.getServiceList(query); + }catch (Exception e){ + BaseResponse baseResponse = new BaseResponse(); + baseResponse.setErrorcode(ErrorCodeConstants.SYSTEM_ERROR); + baseResponse.setErrormsg("增值服务统计失败"); + return baseResponse; + } } /** @@ -210,7 +218,14 @@ public class AreaCountController extends BaseController { public BaseResponse getServiceDetailList(@RequestBody @Valid ServiceListQuery param, HttpServletRequest request){ LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); param.setUserId(loginState.getId()); - return areaCountFacade.getServiceDetailList(param); + try { + return areaCountFacade.getServiceDetailList(param); + }catch (Exception e){ + BaseResponse baseResponse = new BaseResponse(); + baseResponse.setErrorcode(ErrorCodeConstants.SYSTEM_ERROR); + baseResponse.setErrormsg("增值服务详情统计失败"); + return baseResponse; + } } /** 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 b5bbbf6..c626e6d 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 @@ -16,6 +16,8 @@ import com.lyms.platform.operate.web.utils.FunvCommonUtil; import com.lyms.platform.operate.web.utils.MongoUtil; import com.lyms.platform.operate.web.utils.ResponseUtil; import com.lyms.platform.operate.web.worker.CheckPointCountWorker; +import com.lyms.platform.operate.web.worker.ServiceListBySerStatusWorker; +import com.lyms.platform.operate.web.worker.ServiceListWorker; import com.lyms.platform.permission.model.Organization; import com.lyms.platform.permission.model.OrganizationQuery; import com.lyms.platform.permission.model.ServiceListQuery; @@ -44,9 +46,7 @@ import javax.servlet.http.HttpServletResponse; import java.time.*; import java.time.temporal.TemporalAdjusters; import java.util.*; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; +import java.util.concurrent.*; /** @@ -1035,16 +1035,12 @@ public class AreaCountFacade { * @param param * @return */ - public BaseResponse getServiceList(ServiceListQuery param) { + public BaseResponse getServiceList(ServiceListQuery param) throws InterruptedException { BaseResponse baseResponse = new BaseResponse(); - if (param.getStartTime() == null){ - Date startDate = getStartDate(); - param.setStartTime(startDate); - } - long startTime = System.currentTimeMillis(); + setDefaultTime(param); HashMap objectHashMap = new HashMap<>(16); - LinkedList linkedList = new LinkedList<>(); + CopyOnWriteArrayList copyOnWriteArrayList = new CopyOnWriteArrayList(); String hospitalId = param.getHospitalId(); String provinceId = param.getProvinceId(); @@ -1052,72 +1048,58 @@ public class AreaCountFacade { String areaId = param.getAreaId(); List hospitalIds = new ArrayList<>(); if (StringUtils.isEmpty(hospitalId)){ - /* hospitalIds = getCurrentUserHospPermissions(param.getUserId(), - StringUtils.isEmpty(provinceId) ? null : provinceId, StringUtils.isEmpty(cityId) ? null : cityId, StringUtils.isEmpty(areaId) ? null : areaId);*/ - hospitalIds = getCurrentUserHospPermissions2(param.getUserId(), - StringUtils.isEmpty(provinceId) ? null : provinceId, StringUtils.isEmpty(cityId) ? null : cityId, StringUtils.isEmpty(areaId) ? null : areaId); + hospitalIds = getCurrentUserHospPermissions(param.getUserId(), StringUtils.isEmpty(provinceId) ? null : provinceId, StringUtils.isEmpty(cityId) ? null : cityId, + StringUtils.isEmpty(areaId) ? null : areaId); } else { hospitalIds.add(hospitalId); } - long timeMillis = System.currentTimeMillis(); - System.err.println(startTime - timeMillis); - for (String hospital: hospitalIds){ - System.err.print(hospital + ", "); - param.setHospitalId(hospital); - Map map = patientServiceService.getServiceList(param); - System.err.println(System.currentTimeMillis() - timeMillis); - if (map == null){ - continue; + ExecutorService threadPool = Executors.newFixedThreadPool(5); + param.setHospitalIds(hospitalIds); + List ids = patientServiceService.getHospitalIds(param); + int size = hospitalIds.size(); + int batchSize = 2; + int end = 0; + 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)); + } + threadPool.shutdown(); + while (true){ + if (threadPool.isTerminated()){ + break; } - HashMap hashMap = new HashMap<>(16); - String id = map.get("provinceId").toString(); - BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(id); - hashMap.put("provinceName", basicConfig.getName()); - - id = map.get("cityId").toString(); - basicConfig = basicConfigService.getOneBasicConfigById(id); - hashMap.put("cityName", basicConfig.getName()); - - id = map.get("areaId").toString(); - basicConfig = basicConfigService.getOneBasicConfigById(id); - hashMap.put("areaName", basicConfig.getName()); - hashMap.put("total", Integer.parseInt(map.get("open").toString()) - + Integer.parseInt(map.get("unsubscribe").toString()) - + Integer.parseInt(map.get("expire").toString()) - + Integer.parseInt(map.get("suspend").toString())); - - hashMap.putAll(map); - - - linkedList.add(hashMap); } - long ttt = System.currentTimeMillis(); - System.err.println(timeMillis - ttt); ArrayList statusNameList = new ArrayList<>(); statusNameList.add("开通"); statusNameList.add("退订"); statusNameList.add("过期"); statusNameList.add("暂停"); + CopyOnWriteArrayList statusValList = new CopyOnWriteArrayList(); param.setHospitalIds(hospitalIds); - ArrayList statusValList = new ArrayList<>(); - param.setSerStatus("1"); - int number = patientServiceService.countStatusInfo(param); - statusValList.add(number); - param.setSerStatus("2"); - number = patientServiceService.countStatusInfo(param); - statusValList.add(number); - param.setSerStatus("3"); - number = patientServiceService.countStatusInfo(param); - statusValList.add(number); - param.setSerStatus("4"); - number = patientServiceService.countStatusInfo(param); - statusValList.add(number); + CountDownLatch cdl=new CountDownLatch(4); + ExecutorService service= new ThreadPoolExecutor(5, 10, 3000, TimeUnit.MILLISECONDS, + new ArrayBlockingQueue(10), + new RejectedExecutionHandler() { + @Override + public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { + // 异常抛出 + throw new RuntimeException(); + } + }); + for (int i =1; i < 5; i ++){ + String serStatus = i + "" ; + service.execute(new ServiceListBySerStatusWorker(cdl, param, statusValList, serStatus, patientServiceService )); + } + cdl.await(); + service.shutdown(); objectHashMap.put("statusNameList",statusNameList); objectHashMap.put("statusValList", statusValList); - objectHashMap.put("serviceList", linkedList); - + objectHashMap.put("serviceList", copyOnWriteArrayList); baseResponse.setObject(objectHashMap); return baseResponse; @@ -1208,14 +1190,14 @@ public class AreaCountFacade { /*for (Map map : serviceDetailListMap){ HashMap result = new HashMap<>(16); *//** - * "patientName": "王静洁", - * "serTypeName": "精准指导", - * "doctorName": "", - * "opnYumSize": "", - * "serviceWeek": "", - * "createDate": 1480953600000, - * "serStatus": "开通中" - *//* + * "patientName": "王静洁", + * "serTypeName": "精准指导", + * "doctorName": "", + * "opnYumSize": "", + * "serviceWeek": "", + * "createDate": 1480953600000, + * "serStatus": "开通中" + *//* result.put("createDate",map.get("createDate")); }*/ Map names = new LinkedHashMap<>(); @@ -1319,16 +1301,7 @@ public class AreaCountFacade { return day2-day1; } } - } - - - - - - - - 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 new file mode 100644 index 0000000..0a95ca7 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListBySerStatusWorker.java @@ -0,0 +1,38 @@ +package com.lyms.platform.operate.web.worker; + +import com.lyms.platform.permission.model.ServiceListQuery; +import com.lyms.platform.permission.service.PatientServiceService; + +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.CountDownLatch; + + +/** + * @Author dongqin + * @Description 增值服务-柱状图 value list统计 + * @Date 10:58 2019/5/18 + */ +public class ServiceListBySerStatusWorker implements Runnable{ + private CountDownLatch cdl; + private ServiceListQuery param; + private CopyOnWriteArrayList statusValList; + private String serStatus; + private PatientServiceService patientServiceService; + public ServiceListBySerStatusWorker(CountDownLatch cdl, ServiceListQuery param, CopyOnWriteArrayList statusValList, String serStatus,PatientServiceService patientServiceService){ + this.cdl = cdl; + this.param = param; + this.statusValList = statusValList; + this.serStatus = serStatus; + this.patientServiceService = patientServiceService; + } + @Override + public void run() { + int number = 0; + if (!param.getHospitalIds().isEmpty()){ + param.setSerStatus(serStatus); + number = patientServiceService.countStatusInfo(param); + } + 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 new file mode 100644 index 0000000..30bec77 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/ServiceListWorker.java @@ -0,0 +1,67 @@ +package com.lyms.platform.operate.web.worker; + +import com.lyms.platform.biz.service.BasicConfigService; +import com.lyms.platform.permission.model.ServiceListQuery; +import com.lyms.platform.permission.service.PatientServiceService; +import com.lyms.platform.pojo.BasicConfig; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * + * @Author dongqin + * @Description 增值服务统计 + * @Date 9:59 2019/5/18 + **/ + +public class ServiceListWorker implements Callable { + private List hospitals; + private CopyOnWriteArrayList copyOnWriteArrayList; + private ServiceListQuery param; + private PatientServiceService patientServiceService; + private BasicConfigService basicConfigService; + + public ServiceListWorker(List hospitals, CopyOnWriteArrayList copyOnWriteArrayList, 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 { + for (String hospital : hospitals){ + param.setHospitalId(hospital); + Map map = patientServiceService.getServiceList(param); + if (map != null){ + HashMap hashMap = new HashMap<>(16); + String id = map.get("provinceId").toString(); + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(id); + hashMap.put("provinceName", basicConfig.getName()); + + id = map.get("cityId").toString(); + basicConfig = basicConfigService.getOneBasicConfigById(id); + hashMap.put("cityName", basicConfig.getName()); + + id = map.get("areaId").toString(); + basicConfig = basicConfigService.getOneBasicConfigById(id); + hashMap.put("areaName", basicConfig.getName()); + hashMap.put("total", Integer.parseInt(map.get("open").toString()) + + Integer.parseInt(map.get("unsubscribe").toString()) + + Integer.parseInt(map.get("expire").toString()) + + Integer.parseInt(map.get("suspend").toString())); + + hashMap.putAll(map); + copyOnWriteArrayList.add(hashMap); + } + } + return "SUCCESS"; + } + +} -- 1.8.3.1