From 91c71e2e67e514ec01c60c46b979e916ca1b3192 Mon Sep 17 00:00:00 2001 From: liquanyu Date: Fri, 20 Apr 2018 15:38:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=95=E5=A6=87=E5=AD=A6=E6=A0=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lyms/platform/query/PatientCourseQuery.java | 13 ++ .../platform/operate/web/facade/CourseFacade.java | 188 +++++++++++---------- .../operate/web/utils/MessageCenterService.java | 58 ++++++- .../operate/web/worker/CourseCountWorker.java | 140 ++++++++------- 4 files changed, 241 insertions(+), 158 deletions(-) diff --git a/platform-dal/src/main/java/com/lyms/platform/query/PatientCourseQuery.java b/platform-dal/src/main/java/com/lyms/platform/query/PatientCourseQuery.java index e68b7f3..19c393d 100644 --- a/platform-dal/src/main/java/com/lyms/platform/query/PatientCourseQuery.java +++ b/platform-dal/src/main/java/com/lyms/platform/query/PatientCourseQuery.java @@ -53,6 +53,8 @@ public class PatientCourseQuery extends BaseQuery implements IConvertToNativeQue //课程id private String courseId; + private List courseIds; + //操作签到人id private String operUserId; @@ -115,6 +117,9 @@ public class PatientCourseQuery extends BaseQuery implements IConvertToNativeQue condition = condition.and("courseId", courseId, MongoOper.IS); } + if (null != courseIds) { + condition = condition.and("courseId", courseIds, MongoOper.IN); + } if (null != hospitalId) { condition = condition.and("hospitalId", hospitalId, MongoOper.IS); @@ -163,6 +168,14 @@ public class PatientCourseQuery extends BaseQuery implements IConvertToNativeQue return condition.toMongoQuery(); } + public List getCourseIds() { + return courseIds; + } + + public void setCourseIds(List courseIds) { + this.courseIds = courseIds; + } + public Date getCreatedStart() { return createdStart; } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/CourseFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/CourseFacade.java index 82696b0..fafcd06 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/CourseFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/CourseFacade.java @@ -12,15 +12,17 @@ import com.lyms.platform.common.enums.YnEnums; import com.lyms.platform.common.result.BaseListResponse; import com.lyms.platform.common.result.BaseObjectResponse; import com.lyms.platform.common.result.BaseResponse; -import com.lyms.platform.common.utils.DateUtil; -import com.lyms.platform.common.utils.HttpClientUtil; -import com.lyms.platform.common.utils.JsonUtil; -import com.lyms.platform.common.utils.PropertiesUtils; +import com.lyms.platform.common.utils.*; import com.lyms.platform.operate.web.request.CourseRequest; +import com.lyms.platform.operate.web.result.BabyManageListResult; import com.lyms.platform.operate.web.result.CourseResult; import com.lyms.platform.operate.web.result.CourseTypeResult; +import com.lyms.platform.operate.web.utils.BabyListTask; +import com.lyms.platform.operate.web.utils.MessageCenterService; +import com.lyms.platform.operate.web.worker.CourseCountWorker; import com.lyms.platform.permission.model.Users; import com.lyms.platform.permission.service.UsersService; +import com.lyms.platform.pojo.BabyModel; import com.lyms.platform.pojo.CourseModel; import com.lyms.platform.pojo.CourseTypeModel; import com.lyms.platform.pojo.PatientCourseModel; @@ -30,10 +32,14 @@ import com.lyms.platform.query.PatientCourseQuery; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import java.text.DecimalFormat; import java.util.*; +import java.util.concurrent.Callable; +import java.util.concurrent.Future; /** @@ -61,6 +67,10 @@ public class CourseFacade { @Autowired private OperateLogFacade operateLogFacade; + @Autowired + @Qualifier("commonThreadPool") + private ThreadPoolTaskExecutor commonThreadPool; + public BaseResponse addCourese(CourseRequest request, Integer userId) { String hospitalId = autoMatchFacade.getHospitalId(userId); @@ -385,8 +395,8 @@ public class CourseFacade { //总推送数 - int allSends = getCourseCountData(hospitalId, String.valueOf(SmsServiceEnums.YFXXKCTX.getId()), 3, - 1,null, null, null); + int allSends = MessageCenterService.getCourseCountData(hospitalId, String.valueOf(SmsServiceEnums.YFXXKCTX.getId()), 3, + 1, null, null, null); PatientCourseQuery patientCourseQuery = new PatientCourseQuery(); patientCourseQuery.setYn(YnEnums.YES.getId()); @@ -417,69 +427,109 @@ public class CourseFacade { courseTypeQuery.setHospitalId(hospitalId); courseTypeQuery.setYn(YnEnums.YES.getId()); - String start = null; - String end = null; + String startTime = null; + String endTime = null; if (StringUtils.isNotEmpty(time)) { String[] dates = time.split(" - "); - start = dates[0]; - patientCourseQuery.setCreatedStart(DateUtil.parseYMD(start)); + startTime = dates[0]; + query.setPublishTimeStart(DateUtil.parseYMD(startTime)); if (dates.length == 2) { - end = dates[1]; - patientCourseQuery.setCreatedEnd(DateUtil.parseYMDHMS(end + " 23:59:59")); + endTime = dates[1]; + query.setPublishTimeStart(DateUtil.parseYMDHMS(endTime + " 23:59:59")); } - allPatientCourses = patientCourseService.queryPatientCourseCount(patientCourseQuery); } - - - List courseModelList = courseService.queryCourseList(query); if (CollectionUtils.isNotEmpty(courseModelList)) { - List titles = new ArrayList(); - List sends = new ArrayList(); - List orders = new ArrayList(); - List signs = new ArrayList(); + + List courseIds = new ArrayList<>(); for (CourseModel courseModel : courseModelList) { - patientCourseQuery.setCourseId(courseModel.getId()); - titles.add(courseModel.getCourseName()); - - patientCourseQuery.setStatus(1); - int courseOrders = patientCourseService.queryPatientCourseCount(patientCourseQuery); - orders.add(courseOrders); - - patientCourseQuery.setStatus(2); - int courseSigns = patientCourseService.queryPatientCourseCount(patientCourseQuery); - signs.add(courseSigns); + courseIds.add(courseModel.getId()); + } + patientCourseQuery.setCourseIds(courseIds); - int courseSends = getCourseCountData(hospitalId, String.valueOf(SmsServiceEnums.YFXXKCTX.getId()), 3, - 1,courseModel.getId(), start, end); - sends.add(courseSends); + allPatientCourses = patientCourseService.queryPatientCourseCount(patientCourseQuery); - courseTypeQuery.setId(courseModel.getCourseTypeId()); - List typeModels = courseTypeService.queryCourseTypeList(courseTypeQuery); + List> list = new ArrayList<>(); + int batchSize = 2; + int end = 0; + List futures = new ArrayList<>(); + for (int i = 0; i < courseModelList.size(); i += batchSize) { + end = (end + batchSize); + if (end > courseModelList.size()) { + end = courseModelList.size(); + } + List ms = courseModelList.subList(i, end); + Callable c = new CourseCountWorker(ms, hospitalId, + startTime, + endTime, + patientCourseService, + courseTypeService, + allPatientCourses); + Future f = commonThreadPool.submit(c); + futures.add(f); + } - Map tableMap = new HashMap(); + if (CollectionUtils.isNotEmpty(futures)) + { + for (Future f : futures) + { + try { + list.addAll((List>) f.get()); + } catch (Exception e) { + ExceptionUtils.catchException(e, "getCourseCount list error."); + } + } + } - tableMap.put("courseTypeId",CollectionUtils.isNotEmpty(typeModels) ? typeModels.get(0).getId() : ""); - tableMap.put("courseTypeName",CollectionUtils.isNotEmpty(typeModels) ? typeModels.get(0).getCourseTypeName() : ""); - tableMap.put("courseName",courseModel.getCourseName()); + List titles = new ArrayList(); + List sends = new ArrayList(); + List orders = new ArrayList(); + List signs = new ArrayList(); + int orderAll = 0; + int signsAll = 0; - tableMap.put("sends",courseSends); - tableMap.put("orders",courseOrders); - tableMap.put("ordersRate",allCourses == 0 ? "0" : df.format((double) courseOrders / allPatientCourses * 100) + "%"); - tableMap.put("signs",courseSigns); - tableMap.put("signsRate",allCourses == 0 ? "0" : df.format((double) courseSigns / allPatientCourses * 100) + "%"); - tableData.add(tableMap); + for (CourseModel courseModel : courseModelList) + { + Map tableItem = new HashMap(); + for (Map map: list) + { + if (courseModel.getId().equals(map.get("courseId"))) + { + titles.add(map.get("title")); + orders.add(map.get("order")); + signs.add(map.get("courseSigns")); + sends.add(map.get("courseSends")); + + tableItem.put("courseTypeId", map.get("courseTypeId")); + tableItem.put("courseTypeName", map.get("courseTypeName")); + tableItem.put("courseName", map.get("courseName")); + tableItem.put("orders", map.get("orders")); + orderAll+=Integer.parseInt(map.get("orders")); + + tableItem.put("ordersRate", map.get("ordersRate")); + tableItem.put("signs",map.get("signs")); + + signsAll+=Integer.parseInt(map.get("signs")); + tableItem.put("signsRate",map.get("signsRate")); + } + } + tableData.add(tableItem); } - chartData.put("titles",titles); - chartData.put("sends",sends); - chartData.put("orders",orders); - chartData.put("signs",signs); + Map tableItem = new HashMap(); + tableItem.put("courseTypeId","courseTypeId"); + tableItem.put("courseTypeName", "合计"); + tableItem.put("courseName",courseModelList.size()); + tableItem.put("orders", orderAll); + tableItem.put("ordersRate", allPatientCourses == 0 ? "0" : df.format((double) orderAll / allPatientCourses * 100) + "%"); + tableItem.put("signs",signsAll); + tableItem.put("signsRate",allPatientCourses == 0 ? "0" : df.format((double) signsAll / allPatientCourses * 100) + "%"); + tableData.add(tableItem); } resultData.put("totalData",totalData); @@ -491,44 +541,4 @@ public class CourseFacade { objectResponse.setErrormsg("成功"); return objectResponse; } - - - private static int getCourseCountData(String hospitalId, - String subTypeId, - Integer status, - Integer sendType, - String tempId, - String createTimeStart, - String createTimeEnd) - { - Map param = new HashMap<>(); - - param.put("hospitalId",hospitalId); - param.put("subTypeId",subTypeId); - param.put("tempId",tempId == null ? null : String.valueOf(tempId)); - param.put("status",status == null ? null : String.valueOf(status)); - param.put("sendType",sendType == null ? null : String.valueOf(sendType)); - param.put("createTimeStart",createTimeStart); - param.put("createTimeEnd",createTimeEnd); - param.put("page","1"); - param.put("limit","900000000"); - - String result = HttpClientUtil.doGet(CENTER_BASE_URL + "/biz-push-web/pushCount", param, "utf-8", null); - - Map map = JsonUtil.str2Obj(result, Map.class); - if ("0".equals(String.valueOf(map.get("errorcode")))) - { - return Integer.parseInt(String.valueOf(map.get("object"))); - } - return 0; - } -// -// -// public static void main(String[] args) -// { -// -// int allSends = getCourseCountData("216", String.valueOf(SmsServiceEnums.YFXXKCTX.getId()), 1, -// 1,null, null, null); -// System.out.println(allSends); -// } } \ No newline at end of file diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MessageCenterService.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MessageCenterService.java index bc7b23c..483ab35 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MessageCenterService.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MessageCenterService.java @@ -109,7 +109,7 @@ public class MessageCenterService { String json = ""; try{ json = JsonUtil.obj2Str(list); - String result = HttpClientUtil.doPostSSL(CENTER_BASE_URL+"/biz-push-web/push", json); + String result = HttpClientUtil.doPostSSL(CENTER_BASE_URL + "/biz-push-web/push", json); if (StringUtils.isNotEmpty(result)) { Map map = JsonUtil.str2Obj(result, Map.class); @@ -126,6 +126,38 @@ public class MessageCenterService { return false; } + + public static int getCourseCountData(String hospitalId, + String subTypeId, + Integer status, + Integer sendType, + String tempId, + String createTimeStart, + String createTimeEnd) + { + Map param = new HashMap<>(); + + param.put("hospitalId",hospitalId); + param.put("subTypeId",subTypeId); + param.put("tempId",tempId == null ? null : String.valueOf(tempId)); + param.put("status",status == null ? null : String.valueOf(status)); + param.put("sendType",sendType == null ? null : String.valueOf(sendType)); + param.put("createTimeStart",createTimeStart); + param.put("createTimeEnd",createTimeEnd); + param.put("page","1"); + param.put("limit","900000000"); + + String result = HttpClientUtil.doGet(CENTER_BASE_URL + "/biz-push-web/pushCount", param, "utf-8", null); + + Map map = JsonUtil.str2Obj(result, Map.class); + if ("0".equals(String.valueOf(map.get("errorcode")))) + { + return Integer.parseInt(String.valueOf(map.get("object"))); + } + return 0; + } + + // /** // * 演示换调用 // * @param list @@ -242,11 +274,21 @@ public class MessageCenterService { return null; } - public static void main(String[] args){ - queryMsgList(null, null,null, - null,null, - null,null,null,null, - null,null ,2,null,null, - 1,10); - } +// public static void main(String[] args){ +// queryMsgList(null, null,null, +// null,null, +// null,null,null,null, +// null,null ,2,null,null, +// 1,10); +// } + + +// public static void main(String[] args) +// { +// +// int allSends = getCourseCountData("216", String.valueOf(SmsServiceEnums.YFXXKCTX.getId()), 1, +// 1,null, null, null); +// System.out.println(allSends); +// } + } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/CourseCountWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/CourseCountWorker.java index 5c8d73a..fe9d57f 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/CourseCountWorker.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/CourseCountWorker.java @@ -1,13 +1,17 @@ package com.lyms.platform.operate.web.worker; +import com.lyms.platform.biz.service.CourseTypeService; +import com.lyms.platform.biz.service.PatientCourseService; import com.lyms.platform.common.enums.SmsServiceEnums; import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.operate.web.utils.MessageCenterService; import com.lyms.platform.pojo.CourseModel; import com.lyms.platform.pojo.CourseTypeModel; import com.lyms.platform.query.CourseTypeQuery; import com.lyms.platform.query.PatientCourseQuery; import org.apache.commons.collections.CollectionUtils; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -19,70 +23,84 @@ import java.util.concurrent.Callable; */ public class CourseCountWorker implements Callable { - public CourseCountWorker() - { + private List courseModelList; + private String hospitalId; + private String start; + private String end; + private PatientCourseService patientCourseService; + private CourseTypeService courseTypeService; + private int allPatientCourses; + public CourseCountWorker(List courseModelList,String hospitalId, + String start, + String end, + PatientCourseService patientCourseService, + CourseTypeService courseTypeService, + int allPatientCourses) + { + this.hospitalId = hospitalId; + this.courseModelList = courseModelList; + this.patientCourseService = patientCourseService; + this.courseTypeService = courseTypeService; + this.allPatientCourses = allPatientCourses; + this.start = start; + this.end = end; } @Override - public Map call() throws Exception { - Map chartData = new HashMap(); -// if (CollectionUtils.isNotEmpty(courseModelList)) -// { -// -// CourseTypeQuery courseTypeQuery = new CourseTypeQuery(); -// courseTypeQuery.setHospitalId(hospitalId); -// courseTypeQuery.setYn(YnEnums.YES.getId()); -// -// -// PatientCourseQuery patientCourseQuery = new PatientCourseQuery(); -// patientCourseQuery.setYn(YnEnums.YES.getId()); -// patientCourseQuery.setHospitalId(hospitalId); -// -// List titles = new ArrayList(); -// List sends = new ArrayList(); -// List orders = new ArrayList(); -// List signs = new ArrayList(); -// for (CourseModel courseModel : courseModelList) -// { -// patientCourseQuery.setCourseId(courseModel.getId()); -// titles.add(courseModel.getCourseName()); -// -// patientCourseQuery.setStatus(1); -// int courseOrders = patientCourseService.queryPatientCourseCount(patientCourseQuery); -// orders.add(courseOrders); -// -// patientCourseQuery.setStatus(2); -// int courseSigns = patientCourseService.queryPatientCourseCount(patientCourseQuery); -// signs.add(courseSigns); -// -// int courseSends = getCourseCountData(hospitalId, String.valueOf(SmsServiceEnums.YFXXKCTX.getId()), 3, -// 1,courseModel.getId(), start, end); -// sends.add(courseSends); -// -// courseTypeQuery.setId(courseModel.getCourseTypeId()); -// List typeModels = courseTypeService.queryCourseTypeList(courseTypeQuery); -// -// Map tableMap = new HashMap(); -// -// tableMap.put("courseTypeId",CollectionUtils.isNotEmpty(typeModels) ? typeModels.get(0).getId() : ""); -// tableMap.put("courseTypeName",CollectionUtils.isNotEmpty(typeModels) ? typeModels.get(0).getCourseTypeName() : ""); -// tableMap.put("courseName",courseModel.getCourseName()); -// -// tableMap.put("sends",courseSends); -// tableMap.put("orders",courseOrders); -// tableMap.put("ordersRate",allPatientCourses == 0 ? "0" : df.format((double) courseOrders / allPatientCourses * 100) + "%"); -// tableMap.put("signs",courseSigns); -// tableMap.put("signsRate",allPatientCourses == 0 ? "0" : df.format((double) courseSigns / allPatientCourses * 100) + "%"); -// tableData.add(tableMap); -// } -// -// chartData.put("titles",titles); -// chartData.put("sends",sends); -// chartData.put("orders",orders); -// chartData.put("signs",signs); -// } - - return chartData; + public List> call() throws Exception { + + List> data = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(courseModelList)) + { + DecimalFormat df = new DecimalFormat("0.00"); + + CourseTypeQuery courseTypeQuery = new CourseTypeQuery(); + courseTypeQuery.setHospitalId(hospitalId); + courseTypeQuery.setYn(YnEnums.YES.getId()); + + + PatientCourseQuery patientCourseQuery = new PatientCourseQuery(); + patientCourseQuery.setYn(YnEnums.YES.getId()); + patientCourseQuery.setHospitalId(hospitalId); + + for (CourseModel courseModel : courseModelList) + { + Map topmap = new HashMap(); + + topmap.put("courseId",courseModel.getId()); + + patientCourseQuery.setCourseId(courseModel.getId()); + topmap.put("title", courseModel.getCourseName()); + + patientCourseQuery.setStatus(1); + int courseOrders = patientCourseService.queryPatientCourseCount(patientCourseQuery); + topmap.put("order", String.valueOf(courseOrders)); + + patientCourseQuery.setStatus(2); + int courseSigns = patientCourseService.queryPatientCourseCount(patientCourseQuery); + topmap.put("courseSigns", String.valueOf(courseSigns)); + + int courseSends = MessageCenterService.getCourseCountData(hospitalId, String.valueOf(SmsServiceEnums.YFXXKCTX.getId()), 3, + 1, courseModel.getId(), null, null); + topmap.put("courseSends", String.valueOf(courseSends)); + + courseTypeQuery.setId(courseModel.getCourseTypeId()); + List typeModels = courseTypeService.queryCourseTypeList(courseTypeQuery); + + topmap.put("courseTypeId",CollectionUtils.isNotEmpty(typeModels) ? typeModels.get(0).getId() : ""); + topmap.put("courseTypeName",CollectionUtils.isNotEmpty(typeModels) ? typeModels.get(0).getCourseTypeName() : ""); + topmap.put("courseName",courseModel.getCourseName()); + + topmap.put("sends",String.valueOf(courseSends)); + topmap.put("orders",String.valueOf(courseOrders)); + topmap.put("ordersRate",allPatientCourses == 0 ? "0" : df.format((double) courseOrders / allPatientCourses * 100) + "%"); + topmap.put("signs",String.valueOf(courseSigns)); + topmap.put("signsRate", allPatientCourses == 0 ? "0" : df.format((double) courseSigns / allPatientCourses * 100) + "%"); + + data.add(topmap); + } + } + return data; } } -- 1.8.3.1