From d796e1ebda8eec7f439c46543737255620601042 Mon Sep 17 00:00:00 2001 From: gjh <1421wake> Date: Thu, 26 Jun 2025 10:07:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/utils/file/FileUtils.java | 24 +++++++++++ .../platform/controller/ExcelController.java | 41 +++++++++++++++++-- .../listener/WorkOrderInfoListener.java | 4 +- .../impl/WorkOrderInfoServiceImpl.java | 20 +++++---- 4 files changed, 76 insertions(+), 13 deletions(-) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/file/FileUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/file/FileUtils.java index 573b207..fe86e90 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/file/FileUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/file/FileUtils.java @@ -4,9 +4,12 @@ import cn.hutool.core.io.FileUtil; import jakarta.servlet.http.HttpServletResponse; import lombok.AccessLevel; import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.multipart.MultipartFile; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.rmi.ServerException; /** * 文件处理工具类 @@ -14,6 +17,7 @@ import java.nio.charset.StandardCharsets; * @author Lion Li */ @NoArgsConstructor(access = AccessLevel.PRIVATE) +@Slf4j public class FileUtils extends FileUtil { /** @@ -40,4 +44,24 @@ public class FileUtils extends FileUtil { String encode = URLEncoder.encode(s, StandardCharsets.UTF_8); return encode.replaceAll("\\+", "%20"); } + + public static void checkExcel(MultipartFile file, String templateFileName) throws ServerException { + if (file == null || file.isEmpty()) { + throw new ServerException("请选择要上传的文件"); + } + // ✅ 获取上传文件的原始名称 + String originalFilename = file.getOriginalFilename(); + + // 校验文件名称是否匹配模板 + //templateFileName = "批量点位上报模板.xlsx"; + if (!templateFileName.contains(originalFilename)){ + throw new ServerException("请检查上传的文件名称!"); + } + + if (originalFilename == null || !(originalFilename.endsWith(".xls") || originalFilename.endsWith(".xlsx"))) { + throw new ServerException("请上传正确的文件格式"); + } + // 打印文件名(例如:test.xlsx) + log.info("上传的文件名是:" + originalFilename); + } } 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 2a1e3cf..3e3c33d 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 @@ -7,10 +7,9 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; -import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.file.FileUtils; import org.dromara.platform.domain.bo.PointInfoBo; import org.dromara.platform.domain.bo.WorkOrderInfoBo; -import org.dromara.platform.domain.vo.DocumentTypeVo; import org.dromara.platform.domain.vo.PointInfoVo; import org.dromara.platform.domain.vo.WorkOrderInfoVo; import org.dromara.platform.listener.PointInfoListener; @@ -26,6 +25,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.net.URLEncoder; +import java.rmi.ServerException; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -101,10 +101,17 @@ public class ExcelController { } - + /** + * 批量点位上报 + * @param file + * @param response + * @return + * @throws IOException + */ @PostMapping("/uploadWorkOrderInfo") public R> uploadWorkOrderInfo(MultipartFile file, HttpServletResponse response) throws IOException { long t1 = System.currentTimeMillis(); + // TODO 文件校验 WorkOrderInfoListener listener = new WorkOrderInfoListener(workOrderInfoService, contractInfoService); @@ -133,4 +140,32 @@ public class ExcelController { return R.fail("文件导入失败: " + e.getMessage()); } } + + + @PostMapping("/checkFile") + public void checkFile(MultipartFile file, String templateFileName,HttpServletResponse response) throws IOException { + FileUtils.checkExcel(file, templateFileName); + } + + private void checkExcel(MultipartFile file, String templateFileName) throws ServerException { + if (file == null || file.isEmpty()) { + throw new ServerException("请选择要上传的文件"); + } + // ✅ 获取上传文件的原始名称 + String originalFilename = file.getOriginalFilename(); + + // 校验文件名称是否匹配模板 + //templateFileName = "批量点位上报模板.xlsx"; + if (!templateFileName.contains(originalFilename)){ + throw new ServerException("请检查上传的文件名称!"); + } + + if (originalFilename == null || !(originalFilename.endsWith(".xls") || originalFilename.endsWith(".xlsx"))) { + throw new ServerException("请上传正确的文件格式"); + } + // 打印文件名(例如:test.xlsx) + log.info("上传的文件名是:" + originalFilename); + } + + } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java index f2a4e4d..7806da8 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java @@ -76,13 +76,13 @@ public class WorkOrderInfoListener implements ReadListener { return; } // 不允许重复点位上报 -/* if (faultLocationList.contains(info.getFaultLocation())) { + if (faultLocationList.contains(info.getFaultLocation())) { int rowNum = analysisContext.readRowHolder().getRowIndex(); String errorMsg = String.format("第 %d 行数据导入失败:该点位正在维修 故障地点: %s", rowNum, workOrderInfoVo.getFaultLocation()); errorMessages.add(errorMsg); return; - }*/ + } String unit = contractInfoService.getIoCompany(contractName); if (unit != null) { diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java index af9ef05..4778f39 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java @@ -284,7 +284,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { workOrderProcess1.setOperationTime(date1); workOrderProcess1.setFeedback("故障以上报,等待派遣"); - if ( workOrderProcessService.insertByBo(workOrderProcess1)){ + if (workOrderProcessService.insertByBo(workOrderProcess1)) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(WorkOrderInfo::getId, generatedId) .set(WorkOrderInfo::getStatus, 0); @@ -312,18 +312,22 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { long durationInSeconds = duration.getSeconds(); String formatDuration = formatDuration((int) durationInSeconds); workOrderProcess2.setDuration(formatDuration); - if(workOrderProcessService.insertByBo(workOrderProcess2)){ - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(WorkOrderInfo::getId, generatedId) - .set(BaseEntity::getUpdateTime,new Date()) - .set(WorkOrderInfo::getStatus, 1); - baseMapper.update(null, updateWrapper); - log.info("修改对应的工单的状态 :待接单"); } + if (workOrderProcessService.insertByBo(workOrderProcess2)) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(WorkOrderInfo::getId, generatedId) + .set(BaseEntity::getUpdateTime, new Date()) + .set(WorkOrderInfo::getStatus, 1); + baseMapper.update(null, updateWrapper); + log.info("修改对应的工单的状态 :待接单"); + } } } return flag; } + + + // 规范格式,如:01时02分03秒 public static String formatDuration(int seconds) { int hours = seconds / 3600;