Browse Source

点位信息导入(关联运维单位和派出所 线程池优化)

ops-management-platform-backend-dev
gjh 3 weeks ago
parent
commit
e56a432241
  1. 6
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java
  2. 34
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java
  3. 2
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/PointInfoListener.java
  4. 59
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java

6
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<WorkOrderInfoVo> list = workOrderInfoService.queryList(bo);

34
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;
/**
* 当前状态

2
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/PointInfoListener.java

@ -27,7 +27,7 @@ public class PointInfoListener implements ReadListener<PointInfoVo> {
/**
* 自己定义一个缓冲量
*/
private static final int BATCH_COUNT = 20;
private static final int BATCH_COUNT = 600;

59
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<PointInfo> list) {
// 1. 查询 projectMap
List<ProjectCategoryPointVo> categoryPointVos = projectCategoryPointService.queryList(new ProjectCategoryPointBo());
Map<String, String> projectMap = categoryPointVos.stream()
.collect(Collectors.toMap(
ProjectCategoryPointVo::getProjectName,
ProjectCategoryPointVo::getProjectId,
(a, b) -> a
));
// 2. 并发处理每个 PointInfo 对象
List<CompletableFuture<Void>> 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);
}
}

Loading…
Cancel
Save