diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java index fa09105..eae8d54 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/ReportServiceImpl.java @@ -12,6 +12,7 @@ import com.lyms.platform.common.result.RespBuilder; import com.lyms.platform.common.result.ResponseCode; import com.lyms.platform.common.utils.DateUtil; import com.lyms.platform.common.utils.EnumUtil; +import com.lyms.platform.common.utils.ExceptionUtils; import com.lyms.platform.common.utils.PingYinUtil; import com.lyms.platform.operate.web.dao.IReportDao; import com.lyms.platform.operate.web.facade.AccessPermissionFacade; @@ -19,6 +20,8 @@ import com.lyms.platform.operate.web.facade.AutoMatchFacade; import com.lyms.platform.operate.web.service.IReportService; import com.lyms.platform.operate.web.service.PatientWeightService; import com.lyms.platform.operate.web.utils.*; +import com.lyms.platform.operate.web.utils.CollectionUtils; +import com.lyms.platform.operate.web.worker.AntExRecordWorker; import com.lyms.platform.permission.dao.master.CouponMapper; import com.lyms.platform.permission.model.Organization; import com.lyms.platform.permission.model.Users; @@ -26,9 +29,10 @@ import com.lyms.platform.permission.service.OrganizationService; import com.lyms.platform.permission.service.UsersService; import com.lyms.platform.pojo.*; import com.lymsh.platform.reportdata.model.echarts.Series; -import org.apache.commons.collections.MapUtils; +import org.apache.commons.collections.*; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.aggregation.Aggregation; @@ -36,6 +40,7 @@ import org.springframework.data.mongodb.core.aggregation.AggregationResults; import org.springframework.data.mongodb.core.aggregation.GroupOperation; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import org.springframework.util.Assert; @@ -44,9 +49,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.*; /** * @Author: litao @@ -86,6 +89,10 @@ public class ReportServiceImpl extends BaseServiceImpl implements IReportService @Autowired private CommonService commonService; + @Autowired + @Qualifier("commonThreadPool") + private ThreadPoolTaskExecutor commonThreadPool; + private static final Map colorMap = new HashMap<>(); /** @@ -2449,31 +2456,88 @@ public class ReportServiceImpl extends BaseServiceImpl implements IReportService List> couponReport = new ArrayList<>(); List hospitalId = (List) param.get("hospitalId"); - List xAxis = new ArrayList<>(); - Map hNameMap = new HashMap<>(); + final List xAxis = new ArrayList<>(); + List> hospitalNames = couponMapper.findHospitalNames(hospitalId); + final Map hNameMap = CollectionUtils.coverListToMap(hospitalNames, "id", "name"); + if(CollectionUtils.isNotEmpty(hospitalId)) { - List> hospitalNames = couponMapper.findHospitalNames(hospitalId); if(CollectionUtils.isNotEmpty(hospitalNames)) { - hNameMap = CollectionUtils.coverListToMap(hospitalNames, "id", "name"); - for (String hid : hospitalId) { - param.put("hid", hid); - Map usedInfo = couponMapper.findHospitalUsedInfo2(param); - Map sendInfo = couponMapper.findHospitalSendInfo2(param); - Map allusedInfo = couponMapper.findHospitalAllused(param); - - Map tempMap = packCouponMap(sendInfo, usedInfo, hNameMap, hid, xAxis, param); - - if(MapUtils.isNotEmpty(tempMap)) { - tempMap.put("allUserdCount",(allusedInfo == null || allusedInfo.get("allUserdCount") == null) ? 0 : allusedInfo.get("allUserdCount")); - - /** 方法/使用人数id */ - List sendUserIds = couponMapper.findSendUserIds2(param); - List usedUserIds = couponMapper.findUsedUserIds2(param); - tempMap.put("sendUserIds", sendUserIds); - tempMap.put("usedUserIds", usedUserIds); - couponReport.add(tempMap); + if (org.apache.commons.collections.CollectionUtils.isNotEmpty(hospitalId)) { + int batchSize = 5; + int end = 0; + List listFuture = new ArrayList<>(); + for (int i = 0; i < hospitalId.size(); i += batchSize) { + end = (end + batchSize); + if (end > hospitalId.size()) { + end = hospitalId.size(); + } + final List hospitalIds = hospitalId.subList(i, end); + Map qp = new HashMap<>(); + for (String key : param.keySet()) + { + qp.put(key, param.get(key)); + } + final Map queryParam = qp; + + listFuture.add(commonThreadPool.submit(new Callable() { + @Override + public List> call() throws Exception { + + List> couponReports = new ArrayList<>(); + + for (String hid : hospitalIds) { + queryParam.put("hid", hid); + Map usedInfo = couponMapper.findHospitalUsedInfo2(queryParam); + Map sendInfo = couponMapper.findHospitalSendInfo2(queryParam); + Map allusedInfo = couponMapper.findHospitalAllused(queryParam); + + Map tempMap = packCouponMap(sendInfo, usedInfo, hNameMap, hid, xAxis, queryParam); + + if(MapUtils.isNotEmpty(tempMap)) { + tempMap.put("allUserdCount",(allusedInfo == null || allusedInfo.get("allUserdCount") == null) ? 0 : allusedInfo.get("allUserdCount")); + + /** 方法/使用人数id */ + List sendUserIds = couponMapper.findSendUserIds2(queryParam); + List usedUserIds = couponMapper.findUsedUserIds2(queryParam); + tempMap.put("sendUserIds", sendUserIds); + tempMap.put("usedUserIds", usedUserIds); + couponReports.add(tempMap); + } + } + return couponReports; + } + })); + } + for (Future f : listFuture) { + try { + couponReport.addAll((List) f.get(30, TimeUnit.SECONDS)); + } catch (Exception e) { + ExceptionUtils.catchException(e, "antexrecord findList get result future error."); + } } } + +// for (String hid : hospitalId) { +// param.put("hid", hid); +// Map usedInfo = couponMapper.findHospitalUsedInfo2(param); +// Map sendInfo = couponMapper.findHospitalSendInfo2(param); +// Map allusedInfo = couponMapper.findHospitalAllused(param); +// +// Map tempMap = packCouponMap(sendInfo, usedInfo, hNameMap, hid, xAxis, param); +// +// if(MapUtils.isNotEmpty(tempMap)) { +// tempMap.put("allUserdCount",(allusedInfo == null || allusedInfo.get("allUserdCount") == null) ? 0 : allusedInfo.get("allUserdCount")); +// +// /** 方法/使用人数id */ +// List sendUserIds = couponMapper.findSendUserIds2(param); +// List usedUserIds = couponMapper.findUsedUserIds2(param); +// tempMap.put("sendUserIds", sendUserIds); +// tempMap.put("usedUserIds", usedUserIds); +// couponReport.add(tempMap); +// } +// } + + } if(CollectionUtils.isNotEmpty(couponReport)) {