From e56a432241e483c262d7e70fb8d15e534569eb58 Mon Sep 17 00:00:00 2001 From: gjh <1421wake> Date: Sun, 8 Jun 2025 21:23:12 +0800 Subject: [PATCH] =?UTF-8?q?=E7=82=B9=E4=BD=8D=E4=BF=A1=E6=81=AF=E5=AF=BC?= =?UTF-8?q?=E5=85=A5(=E5=85=B3=E8=81=94=E8=BF=90=E7=BB=B4=E5=8D=95?= =?UTF-8?q?=E4=BD=8D=E5=92=8C=E6=B4=BE=E5=87=BA=E6=89=80=20=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E6=B1=A0=E4=BC=98=E5=8C=96)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/controller/ExcelController.java | 6 ++ .../platform/domain/vo/PointInfoVo.java | 34 ++++++----- .../platform/listener/PointInfoListener.java | 2 +- .../service/impl/PointInfoServiceImpl.java | 59 +++++++++++++++++++ 4 files changed, 84 insertions(+), 17 deletions(-) diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java index dc6c690..b3671e0 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java @@ -75,6 +75,12 @@ public class ExcelController { .doWrite(list); } + /** + * 工单信息导出 + * @param bo + * @param response + * @throws IOException + */ @PostMapping("/ExportWorkOrderInfo") public void ExportWorkOrderInfo(WorkOrderInfoBo bo, HttpServletResponse response) throws IOException { List list = workOrderInfoService.queryList(bo); diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java index cc5e2d5..ce20c2e 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java @@ -39,7 +39,8 @@ public class PointInfoVo extends TenantEntity implements Serializable { /** * 编码 */ - @ExcelProperty(value = "编码") + //@ExcelProperty(value = "编码") + @ExcelIgnore private String code; /** @@ -74,17 +75,7 @@ public class PointInfoVo extends TenantEntity implements Serializable { private String linkUnit; - /** - * 建设项目 - */ - @ExcelProperty(value = "建设项目") - private String buildProject; - /** - * 建设时间 - */ - @ExcelProperty(value = "建设时间") - private String buildTime; /** @@ -117,11 +108,6 @@ public class PointInfoVo extends TenantEntity implements Serializable { @ExcelProperty(value = "项目id") private String projectId; - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; /** * 端口 @@ -134,6 +120,22 @@ public class PointInfoVo extends TenantEntity implements Serializable { */ @ExcelProperty(value = "设备IP") private String ip; + /** + * 建设项目 + */ + @ExcelProperty(value = "建设项目") + private String buildProject; + + /** + * 建设时间 + */ + @ExcelProperty(value = "建设时间") + private String buildTime; + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; /** * 当前状态 diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/PointInfoListener.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/PointInfoListener.java index 6c008ff..705dfcd 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/PointInfoListener.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/PointInfoListener.java @@ -27,7 +27,7 @@ public class PointInfoListener implements ReadListener { /** * 自己定义一个缓冲量 */ - private static final int BATCH_COUNT = 20; + private static final int BATCH_COUNT = 600; diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java index 0a15495..8bf1d4a 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.platform.service.impl; +import jakarta.annotation.Resource; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -8,8 +9,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.platform.domain.ProjectCategoryPoint; +import org.dromara.platform.domain.bo.ProjectCategoryPointBo; import org.dromara.platform.domain.vo.DailyInspectionReportVo; import org.dromara.platform.domain.vo.PointSelectVo; +import org.dromara.platform.domain.vo.ProjectCategoryPointVo; +import org.dromara.platform.service.IProjectCategoryPointService; +import org.dromara.platform.service.IProjectInfoService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.dromara.platform.domain.bo.PointInfoBo; @@ -19,6 +25,7 @@ import org.dromara.platform.mapper.PointInfoMapper; import org.dromara.platform.service.IPointInfoService; import java.util.*; +import java.util.concurrent.*; import java.util.stream.Collectors; /** @@ -32,6 +39,12 @@ import java.util.stream.Collectors; public class PointInfoServiceImpl implements IPointInfoService { private final PointInfoMapper baseMapper; + @Resource + private IProjectCategoryPointService projectCategoryPointService; + + @Resource + private IProjectInfoService projectInfoService; + /** * 查询点位信息 @@ -164,8 +177,54 @@ public class PointInfoServiceImpl implements IPointInfoService { return pointSelectVos; } + + // 自定义线程池 + private static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors() * 2; + private static final ExecutorService taskExecutor = new ThreadPoolExecutor( + CORE_POOL_SIZE, // 核心线程数 + CORE_POOL_SIZE * 2, // 最大线程数 + 60L, TimeUnit.SECONDS, // 空闲线程存活时间 + new LinkedBlockingQueue<>(200), // 队列容量 + new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略 + ); @Override public void addData(List list) { + // 1. 查询 projectMap + List categoryPointVos = projectCategoryPointService.queryList(new ProjectCategoryPointBo()); + Map projectMap = categoryPointVos.stream() + .collect(Collectors.toMap( + ProjectCategoryPointVo::getProjectName, + ProjectCategoryPointVo::getProjectId, + (a, b) -> a + )); + + // 2. 并发处理每个 PointInfo 对象 + List> futureList = list.stream().map(pointInfo -> + CompletableFuture.runAsync(() -> { + try { + String organizationName = pointInfo.getOrganizationName(); + String projectName = pointInfo.getProjectName(); + + // 设置 projectId + String projectId = projectMap.get(organizationName); + if (projectId != null) { + pointInfo.setProjectId(projectId); + } + + // 调用远程服务获取单位信息(耗时操作) + String unit = projectInfoService.getContractPartyBNameByProjectName(projectName); + if (unit != null) { + pointInfo.setMaintenanceUnit(unit); + } + } catch (Exception e) { + System.err.println("处理错误:Error processing PointInfo: " + e.getMessage()); + } + }, taskExecutor) + ).collect(Collectors.toList()); + + // 3. 等待所有任务完成 + CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])).join(); + // 4. 插入数据到数据库 baseMapper.insert(list); } }