From a65a73c512326a79e3712851cfe73ce19bca166f Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Sun, 27 Apr 2025 18:05:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=B9=E9=98=B5=E3=80=81?= =?UTF-8?q?=E5=85=89=E4=BC=8F=E6=9D=BF=E3=80=81=E5=85=89=E4=BC=8F=E6=9D=BF?= =?UTF-8?q?=E7=82=B9=E6=96=B9=E6=B3=95=E9=80=BB=E8=BE=91=E5=92=8C=E6=80=A7?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/DromaraApplication.java | 4 +- .../facility/domain/FacPhotovoltaicPanel.java | 13 - .../domain/FacPhotovoltaicPanelColumn.java | 13 - .../domain/FacPhotovoltaicPanelPoint.java | 13 - .../domain/FacPhotovoltaicPanelSupport.java | 13 - .../IFacPhotovoltaicPanelPartsService.java | 26 ++ .../service/impl/FacMatrixServiceImpl.java | 9 + .../FacPhotovoltaicPanelPartsServiceImpl.java | 230 ++++++++++++++++-- .../impl/FacPhotovoltaicPanelServiceImpl.java | 50 +++- .../controller/BusProjectFileController.java | 4 +- .../req/projectfile/ProjectFileUpdateReq.java | 5 - .../service/IBusProjectFileService.java | 2 +- .../impl/BusProjectFileServiceImpl.java | 101 +++++--- .../java/org/dromara/utils/Dxf2JsonUtils.java | 8 - 14 files changed, 350 insertions(+), 141 deletions(-) diff --git a/RuoYi-Vue-Plus/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java b/RuoYi-Vue-Plus/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java index b39e8126..4a92df33 100644 --- a/RuoYi-Vue-Plus/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java +++ b/RuoYi-Vue-Plus/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java @@ -3,6 +3,7 @@ package org.dromara; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup; +import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.scheduling.annotation.EnableAsync; /** @@ -10,8 +11,9 @@ import org.springframework.scheduling.annotation.EnableAsync; * * @author Lion Li */ -@EnableAsync @SpringBootApplication +@EnableAsync +@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true) public class DromaraApplication { public static void main(String[] args) { diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanel.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanel.java index d9b421e1..bfaa8cc0 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanel.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanel.java @@ -1,14 +1,12 @@ package org.dromara.facility.domain; import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.common.mybatis.core.domain.BaseEntity; import java.io.Serial; -import java.util.Date; /** * 设施-光伏板对象 fac_photovoltaic_panel @@ -65,15 +63,4 @@ public class FacPhotovoltaicPanel extends BaseEntity { */ private String remark; - /** - * 删除时间 - */ - private Date deletedAt; - - /** - * 是否删除(0正常 1删除) - */ - @TableLogic - private Long isDelete; - } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelColumn.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelColumn.java index 8d835135..11f2062b 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelColumn.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelColumn.java @@ -1,14 +1,12 @@ package org.dromara.facility.domain; import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.common.mybatis.core.domain.BaseEntity; import java.io.Serial; -import java.util.Date; /** * 设施-光伏板立柱对象 fac_photovoltaic_panel_column @@ -65,15 +63,4 @@ public class FacPhotovoltaicPanelColumn extends BaseEntity { */ private String remark; - /** - * 删除时间 - */ - private Date deletedAt; - - /** - * 是否删除(0正常 1删除) - */ - @TableLogic - private Long isDelete; - } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelPoint.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelPoint.java index 3628187e..b5f59f01 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelPoint.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelPoint.java @@ -1,14 +1,12 @@ package org.dromara.facility.domain; import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.common.mybatis.core.domain.BaseEntity; import java.io.Serial; -import java.util.Date; /** * 设施-光伏板桩点对象 fac_photovoltaic_panel_point @@ -65,15 +63,4 @@ public class FacPhotovoltaicPanelPoint extends BaseEntity { */ private String remark; - /** - * 删除时间 - */ - private Date deletedAt; - - /** - * 是否删除(0正常 1删除) - */ - @TableLogic - private Long isDelete; - } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelSupport.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelSupport.java index 105be76d..65f81417 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelSupport.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/FacPhotovoltaicPanelSupport.java @@ -1,14 +1,12 @@ package org.dromara.facility.domain; import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.common.mybatis.core.domain.BaseEntity; import java.io.Serial; -import java.util.Date; /** * 设施-光伏板支架对象 fac_photovoltaic_panel_support @@ -65,15 +63,4 @@ public class FacPhotovoltaicPanelSupport extends BaseEntity { */ private String remark; - /** - * 删除时间 - */ - private Date deletedAt; - - /** - * 是否删除(0正常 1删除) - */ - @TableLogic - private Long isDelete; - } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelPartsService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelPartsService.java index f53e74cb..4576651a 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelPartsService.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelPartsService.java @@ -1,9 +1,13 @@ package org.dromara.facility.service; +import org.dromara.facility.domain.FacPhotovoltaicPanelColumn; +import org.dromara.facility.domain.FacPhotovoltaicPanelPoint; +import org.dromara.facility.domain.FacPhotovoltaicPanelSupport; import org.dromara.facility.domain.req.photovoltaicpanelparts.PhotovoltaicPanelPartsCreateByGeoJsonReq; import org.dromara.facility.domain.req.photovoltaicpanelparts.PhotovoltaicPanelPartsCreateReq; import java.util.Collection; +import java.util.List; /** * 设施-光伏板(桩点、立柱、支架)Service接口 @@ -21,6 +25,28 @@ public interface IFacPhotovoltaicPanelPartsService { */ Boolean insertPartsByGeoJson(PhotovoltaicPanelPartsCreateByGeoJsonReq geoJson); + /** + * 批量新增设施-光伏板(桩点、立柱、支架)内部方法 + * + * @param pointList 桩点列表 + * @param columnList 立柱列表 + * @param supportList 支架列表 + */ + void batchInsertPartsInner(List pointList, + List columnList, + List supportList); + + /** + * 批量删除设施-光伏板(桩点、立柱、支架)内部方法 + * + * @param pointList 桩点列表 + * @param columnList 立柱列表 + * @param supportList 支架列表 + */ + void batchDeletePartsInner(List pointList, + List columnList, + List supportList); + /** * 批量新增设施-光伏板(桩点、立柱、支架) * diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacMatrixServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacMatrixServiceImpl.java index c48b1c8d..05acd5df 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacMatrixServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacMatrixServiceImpl.java @@ -154,6 +154,9 @@ public class FacMatrixServiceImpl extends ServiceImpl oldMatrixList = this.lambdaQuery() + .eq(FacMatrix::getProjectId, projectId).list(); List matrixList = new ArrayList<>(); List locationFeatures = geoJson.getLocationGeoJson().getFeatures(); List nameFeatures = geoJson.getNameGeoJson().getFeatures(); @@ -183,6 +186,12 @@ public class FacMatrixServiceImpl extends ServiceImpl features = geoJson.getPointGeoJson().getFeatures(); + // 获取数据库中所有点的列表 + List oldPointList = photovoltaicPanelPointService.lambdaQuery() + .eq(FacPhotovoltaicPanelPoint::getProjectId, projectId).list(); + Map oldPointMap = oldPointList.stream() + .collect(Collectors.toMap( + FacPhotovoltaicPanelPoint::getName, + Function.identity(), + (existing, replacement) -> existing // 如果有重复,保留第一个 + )); + List oldColumnList = photovoltaicPanelColumnService.lambdaQuery() + .eq(FacPhotovoltaicPanelColumn::getProjectId, projectId).list(); + Map oldColumnMap = oldColumnList.stream() + .collect(Collectors.toMap( + FacPhotovoltaicPanelColumn::getName, + Function.identity(), + (existing, replacement) -> existing // 如果有重复,保留第一个 + )); + List oldSupportList = photovoltaicPanelSupportService.lambdaQuery() + .eq(FacPhotovoltaicPanelSupport::getProjectId, projectId).list(); + Map oldSupportMap = oldSupportList.stream() + .collect(Collectors.toMap( + FacPhotovoltaicPanelSupport::getName, + Function.identity(), + (existing, replacement) -> existing // 如果有重复,保留第一个 + )); // 获取所有点列表 - List> pointList = new ArrayList<> + List> pointPositionList = new ArrayList<> (features.stream().map(featureByPoint -> featureByPoint.getGeometry().getCoordinates()).toList()); - List photovoltaicPanelPointList = new ArrayList<>(); - List photovoltaicPanelColumnList = new ArrayList<>(); - List photovoltaicPanelSupportList = new ArrayList<>(); + List pointList = new ArrayList<>(); + List columnList = new ArrayList<>(); + List supportList = new ArrayList<>(); + // 获取当前登录用户 + Long userId = LoginHelper.getUserId(); // 遍历所有光伏板,找到所有匹配的点 for (FacPhotovoltaicPanel photovoltaicPanel : photovoltaicPanelList) { String positions = photovoltaicPanel.getPositions(); @@ -85,9 +124,10 @@ public class FacPhotovoltaicPanelPartsServiceImpl implements IFacPhotovoltaicPan positionList.add(JSONUtil.toList(s, Double.class)); } // 获取点在面内的点 - List> pointInPlaneList = GeoJsonUtils.getPointInPlaneList(positionList, pointList); + List> pointInPlaneList = GeoJsonUtils.getPointInPlaneList(positionList, pointPositionList); // 删除点在面内的点 - pointList.removeAll(pointInPlaneList); + pointPositionList.removeAll(pointInPlaneList); + // 判断点在面内的点是否为空 if (CollUtil.isNotEmpty(pointInPlaneList)) { int i = 1; // 遍历点在面内的点,添加实体信息 @@ -101,45 +141,181 @@ public class FacPhotovoltaicPanelPartsServiceImpl implements IFacPhotovoltaicPan photovoltaicPanelPoint.setMatrixId(matrixId); photovoltaicPanelPoint.setName(name); photovoltaicPanelPoint.setPositions(jsonStr); - photovoltaicPanelPointList.add(photovoltaicPanelPoint); + photovoltaicPanelPoint.setCreateBy(userId); + photovoltaicPanelPoint.setUpdateBy(userId); + if (CollUtil.isNotEmpty(oldPointMap) && oldPointMap.containsKey(name)) { + FacPhotovoltaicPanelPoint oldPoint = oldPointMap.get(name); + photovoltaicPanelPoint.setFinishType(oldPoint.getFinishType()); + photovoltaicPanelPoint.setStatus(oldPoint.getStatus()); + } + pointList.add(photovoltaicPanelPoint); FacPhotovoltaicPanelColumn photovoltaicPanelColumn = new FacPhotovoltaicPanelColumn(); photovoltaicPanelColumn.setProjectId(projectId); photovoltaicPanelColumn.setMatrixId(matrixId); photovoltaicPanelColumn.setName(name); photovoltaicPanelColumn.setPositions(jsonStr); - photovoltaicPanelColumnList.add(photovoltaicPanelColumn); + photovoltaicPanelColumn.setCreateBy(userId); + photovoltaicPanelColumn.setUpdateBy(userId); + if (CollUtil.isNotEmpty(oldColumnMap) && oldColumnMap.containsKey(name)) { + FacPhotovoltaicPanelColumn oldColumn = oldColumnMap.get(name); + photovoltaicPanelColumn.setFinishType(oldColumn.getFinishType()); + photovoltaicPanelColumn.setStatus(oldColumn.getStatus()); + } + columnList.add(photovoltaicPanelColumn); FacPhotovoltaicPanelSupport photovoltaicPanelSupport = new FacPhotovoltaicPanelSupport(); photovoltaicPanelSupport.setProjectId(projectId); photovoltaicPanelSupport.setMatrixId(matrixId); photovoltaicPanelSupport.setName(name); photovoltaicPanelSupport.setPositions(jsonStr); - photovoltaicPanelSupportList.add(photovoltaicPanelSupport); + photovoltaicPanelSupport.setCreateBy(userId); + photovoltaicPanelSupport.setUpdateBy(userId); + if (CollUtil.isNotEmpty(oldSupportMap) && oldSupportMap.containsKey(name)) { + FacPhotovoltaicPanelSupport oldSupport = oldSupportMap.get(name); + photovoltaicPanelSupport.setFinishType(oldSupport.getFinishType()); + photovoltaicPanelSupport.setStatus(oldSupport.getStatus()); + } + supportList.add(photovoltaicPanelSupport); i++; } } } - // 批量新增 - if (CollUtil.isNotEmpty(photovoltaicPanelPointList)) { - boolean result = photovoltaicPanelPointService.saveBatch(photovoltaicPanelPointList); - if (!result) { - throw new ServiceException("批量新增光伏板桩点失败,数据库异常", HttpStatus.ERROR); - } + // 自定义线程池(IO 密集型线程池) + ThreadPoolExecutor customExecutor = new ThreadPoolExecutor( + 20, // 核心线程数 + 50, // 最大线程数 + 60L, // 线程空闲存活时间 + TimeUnit.SECONDS, // 存活时间单位 + new LinkedBlockingQueue<>(10000), // 阻塞队列容量 + new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略:由调用线程处理任务 + ); + // 分批处理,避免长事务,假设每次处理 1000 条数据 + int batchSize = 1000; + // 保存所有批次任务 + List> deleteFutures = new ArrayList<>(); + int deleteSize = oldPointList.size(); + for (int i = 0; i < deleteSize; i += batchSize) { + int endIndex = Math.min(i + batchSize, deleteSize); + List batchPointList = oldPointList.subList(i, endIndex); + List batchColumnList = oldColumnList.subList(i, endIndex); + List batchSupportList = oldSupportList.subList(i, endIndex); + // 使用事务处理每批数据 + // 获取代理 + FacPhotovoltaicPanelPartsServiceImpl photovoltaicPanelPartsService = (FacPhotovoltaicPanelPartsServiceImpl) AopContext.currentProxy(); + // 异步处理每批数据,将任务添加到异步任务列表 + CompletableFuture future = CompletableFuture.runAsync(() -> photovoltaicPanelPartsService.batchDeletePartsInner(batchPointList, batchColumnList, batchSupportList), customExecutor); + deleteFutures.add(future); } - if (CollUtil.isNotEmpty(photovoltaicPanelColumnList)) { - boolean result = photovoltaicPanelColumnService.saveBatch(photovoltaicPanelColumnList); - if (!result) { - throw new ServiceException("批量新增光伏板立柱失败,数据库异常", HttpStatus.ERROR); - } - } - if (CollUtil.isNotEmpty(photovoltaicPanelSupportList)) { - boolean result = photovoltaicPanelSupportService.saveBatch(photovoltaicPanelSupportList); - if (!result) { - throw new ServiceException("批量新增光伏板支架失败,数据库异常", HttpStatus.ERROR); - } + // 等待所有批次完成操作 + CompletableFuture.allOf(deleteFutures.toArray(new CompletableFuture[0])).join(); + // 保存所有批次任务 + List> insertFutures = new ArrayList<>(); + int totalSize = pointList.size(); + for (int i = 0; i < totalSize; i += batchSize) { + int endIndex = Math.min(i + batchSize, totalSize); + List batchPointList = pointList.subList(i, endIndex); + List batchColumnList = columnList.subList(i, endIndex); + List batchSupportList = supportList.subList(i, endIndex); + // 使用事务处理每批数据 + // 获取代理 + FacPhotovoltaicPanelPartsServiceImpl photovoltaicPanelPartsService = (FacPhotovoltaicPanelPartsServiceImpl) AopContext.currentProxy(); + // 异步处理每批数据,将任务添加到异步任务列表 + CompletableFuture future = CompletableFuture.runAsync(() -> photovoltaicPanelPartsService.batchInsertPartsInner(batchPointList, batchColumnList, batchSupportList), customExecutor); + insertFutures.add(future); } + // 等待所有批次完成操作 + CompletableFuture.allOf(insertFutures.toArray(new CompletableFuture[0])).join(); + // 关闭线程池 + customExecutor.shutdown(); return true; } + /** + * 批量新增设施-光伏板(桩点、立柱、支架)内部方法 + * + * @param pointList 桩点列表 + * @param columnList 立柱列表 + * @param supportList 支架列表 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void batchInsertPartsInner(List pointList, + List columnList, + List supportList) { + try { + if (CollUtil.isNotEmpty(pointList)) { + boolean result = photovoltaicPanelPointService.saveBatch(pointList); + if (!result) { + throw new ServiceException("批量新增光伏板桩点失败,数据库异常", HttpStatus.ERROR); + } + } + if (CollUtil.isNotEmpty(columnList)) { + boolean result = photovoltaicPanelColumnService.saveBatch(columnList); + if (!result) { + throw new ServiceException("批量新增光伏板立柱失败,数据库异常", HttpStatus.ERROR); + } + } + if (CollUtil.isNotEmpty(supportList)) { + boolean result = photovoltaicPanelSupportService.saveBatch(supportList); + if (!result) { + throw new ServiceException("批量新增光伏板支架失败,数据库异常", HttpStatus.ERROR); + } + } + } catch (DataIntegrityViolationException e) { + log.error("数据库唯一键冲突或违反其他完整性约束, 错误信息: {}", e.getMessage()); + throw new ServiceException("数据已存在,无法重复添加"); + } catch (DataAccessException e) { + log.error("数据库连接问题、事务问题等导致操作失败, 错误信息: {}", e.getMessage()); + throw new ServiceException("数据库操作失败"); + } catch (Exception e) { + // 捕获其他异常,做通用处理 + log.error("批量添加光伏板点时发生未知错误,错误信息: {}", e.getMessage()); + throw new ServiceException("批量添加光伏板点失败"); + } + } + + /** + * 批量删除设施-光伏板(桩点、立柱、支架)内部方法 + * + * @param pointList 桩点列表 + * @param columnList 立柱列表 + * @param supportList 支架列表 + */ + @Override + public void batchDeletePartsInner(List pointList, + List columnList, + List supportList) { + try { + if (CollUtil.isNotEmpty(pointList)) { + boolean result = photovoltaicPanelPointService.removeBatchByIds(pointList); + if (!result) { + throw new ServiceException("数据库操作失败", HttpStatus.ERROR); + } + } + if (CollUtil.isNotEmpty(columnList)) { + boolean result = photovoltaicPanelColumnService.removeBatchByIds(columnList); + if (!result) { + throw new ServiceException("数据库操作失败", HttpStatus.ERROR); + } + } + if (CollUtil.isNotEmpty(supportList)) { + boolean result = photovoltaicPanelSupportService.removeBatchByIds(supportList); + if (!result) { + throw new ServiceException("数据库操作失败", HttpStatus.ERROR); + } + } + } catch (DataIntegrityViolationException e) { + log.error("数据库唯一键冲突或违反其他完整性约束: {}", e.getMessage()); + throw new ServiceException("数据已存在,无法重复添加"); + } catch (DataAccessException e) { + log.error("数据库连接问题、事务问题等导致操作失败: {}", e.getMessage()); + throw new ServiceException("数据库操作失败"); + } catch (Exception e) { + // 捕获其他异常,做通用处理 + log.error("批量删除光伏板点时发生未知错误,错误信息: {}", e.getMessage()); + throw new ServiceException("批量添加光伏板点失败"); + } + } + /** * 批量新增设施-光伏板(桩点、立柱、支架) * diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java index 4aca9d23..4ca1083e 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java @@ -13,7 +13,6 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.facility.domain.FacMatrix; import org.dromara.facility.domain.FacPhotovoltaicPanel; import org.dromara.facility.domain.req.geojson.FeatureByPlane; import org.dromara.facility.domain.req.geojson.FeatureByPoint; @@ -37,6 +36,9 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 设施-光伏板Service业务层处理 @@ -146,11 +148,22 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl matrixList = matrixService.lambdaQuery() + // todo 获取项目下方阵信息 +/* List matrixList = matrixService.lambdaQuery() .eq(FacMatrix::getProjectId, projectId).list(); if (CollUtil.isEmpty(matrixList)) { throw new ServiceException("项目下无方阵数据,请先创建方阵消息后再添加光伏板信息", HttpStatus.NOT_FOUND); - } + }*/ + // 获取当下项目下光伏板的信息 + List oldPhotovoltaicPanelList = this.lambdaQuery() + .eq(FacPhotovoltaicPanel::getProjectId, projectId).list(); + Map photovoltaicPanelMap = oldPhotovoltaicPanelList.stream() + .collect(Collectors.toMap( + FacPhotovoltaicPanel::getName, + Function.identity(), + (existing, replacement) -> existing // 如果有重复,保留第一个 + )); + // 获取数据库中光伏板信息 List photovoltaicPanelList = new ArrayList<>(); List locationFeatures = geoJson.getLocationGeoJson().getFeatures(); List nameFeatures = geoJson.getNameGeoJson().getFeatures(); @@ -158,8 +171,8 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl> coordinates = geometry.getCoordinates().get(0); - // 判断光伏板在哪个方阵里 - Long matrixId = null; + // todo 判断光伏板在哪个方阵里 +/* Long matrixId = null; for (FacMatrix matrix : matrixList) { String positions = matrix.getPositions(); List> positionList = new ArrayList<>(); @@ -176,7 +189,8 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl uploadDxf2Json(@RequestParam("file") MultipartFile file, ProjectFileUploadDxfReq req) { - return toAjax(busProjectFileService.uploadDxf2Json(file, req)); + public R uploadDxf2Json(@RequestParam("file") MultipartFile file, ProjectFileUploadDxfReq req) { + return R.ok(busProjectFileService.uploadDxf2Json(file, req)); } /** diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/projectfile/ProjectFileUpdateReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/projectfile/ProjectFileUpdateReq.java index 9f5f5882..7dfe888c 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/projectfile/ProjectFileUpdateReq.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/projectfile/ProjectFileUpdateReq.java @@ -25,11 +25,6 @@ public class ProjectFileUpdateReq implements Serializable { */ private Long projectId; - /** - * 文件类型 - */ - private String fileType; - /** * 文件名称 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectFileService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectFileService.java index 21c768b9..969163ad 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectFileService.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectFileService.java @@ -81,7 +81,7 @@ public interface IBusProjectFileService extends IService { * @param req 请求 * @return 主键 */ - Boolean uploadDxf2Json(MultipartFile file, ProjectFileUploadDxfReq req); + Long uploadDxf2Json(MultipartFile file, ProjectFileUploadDxfReq req); /** * 获取项目文件存储视图对象 diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectFileServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectFileServiceImpl.java index cd4d36f1..5b689573 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectFileServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectFileServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.project.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.crypto.digest.MD5; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -64,7 +65,7 @@ public class BusProjectFileServiceImpl extends ServiceImpl USER_TASK_RUNNING = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap USER_TASK_RUNNING = new ConcurrentHashMap<>(); /** * 查询项目文件存储 @@ -118,7 +119,7 @@ public class BusProjectFileServiceImpl extends ServiceImpl ids, Boolean isValid) { + Long userId = LoginHelper.getUserId(); + List projectFileList = this.listByIds(ids); if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 + List projectId = projectFileList.stream().map(BusProjectFile::getProjectId).toList(); + projectService.validAuth(projectId, userId); } return baseMapper.deleteByIds(ids) > 0; } @@ -175,6 +178,15 @@ public class BusProjectFileServiceImpl extends ServiceImpl { try { // 构造命令行参数 Dxf2JsonUtils.dxf2json(exePath, inputDXFPath, outputJSONPath, sourceEPSG, targetEPSG); String jsonFilePath = bashPath + File.separator + uuid + "." + DesignMapFileConstant.JSONFileSuffix; String jsonFileName = FileUtil.getPrefix(fileName) + "." + DesignMapFileConstant.JSONFileSuffix; + // 修改数据库信息 BusProjectFile projectFile = new BusProjectFile(); - if (oldProjectFile != null) { - projectFile.setId(oldProjectFile.getId()); - projectFile.setFileName(jsonFileName); - projectFile.setFilePath(jsonFilePath); - boolean update = this.updateById(projectFile); - if (!update) throw new ServiceException("数据库修改异常"); - } else { - projectFile.setProjectId(projectId); - projectFile.setFileName(jsonFileName); - projectFile.setFilePath(jsonFilePath); - boolean save = this.save(projectFile); - if (!save) throw new ServiceException("数据库新增异常"); - } - SseMessageDto dto = new SseMessageDto(); - dto.setMessage("DXF 文件转换成 GeoJSON 成功"); - dto.setUserIds(List.of(userId)); - SseMessageUtils.publishMessage(dto); + projectFile.setId(projectFileId); + projectFile.setFilePath(jsonFilePath); + projectFile.setFileName(jsonFileName); + projectFile.setFileType(DesignMapFileConstant.JSONFileSuffix); + boolean update = this.updateById(projectFile); + if (!update) throw new ServiceException("数据库修改异常"); + messageDto.setMessage("DXF 文件转换成 GeoJSON 成功"); + SseMessageUtils.publishMessage(messageDto); } catch (Exception e) { log.error("DXF 转换失败", e); - SseMessageDto dto = new SseMessageDto(); - dto.setMessage("DXF 文件转换失败,请联系管理员处理"); - dto.setUserIds(List.of(userId)); - SseMessageUtils.publishMessage(dto); + messageDto.setMessage("DXF 文件转换失败,请联系管理员处理"); + SseMessageUtils.publishMessage(messageDto); } finally { // 无论成功或失败都释放状态 - USER_TASK_RUNNING.remove(userId); + USER_TASK_RUNNING.remove(md5); } }); - return true; + return projectFileId; } /** diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/utils/Dxf2JsonUtils.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/utils/Dxf2JsonUtils.java index e4dcbca9..274d6f7a 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/utils/Dxf2JsonUtils.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/utils/Dxf2JsonUtils.java @@ -59,14 +59,6 @@ public class Dxf2JsonUtils { reader.close(); } catch (IOException | InterruptedException e) { log.error("执行 dxf 转 json 命令行时出错", e); - }finally { - // 删除dxf文件 - if (inputDXFFile.exists()) { - boolean delete = inputDXFFile.delete(); - if (!delete) { - log.error("dxf文件删除失败,路径:{}", inputDXFPath); - } - } } }