Browse Source

文件校验

ops-management-platform-backend-dev
gjh 2 days ago
parent
commit
d796e1ebda
  1. 24
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/file/FileUtils.java
  2. 41
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java
  3. 4
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java
  4. 20
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java

24
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 jakarta.servlet.http.HttpServletResponse;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.rmi.ServerException;
/** /**
* 文件处理工具类 * 文件处理工具类
@ -14,6 +17,7 @@ import java.nio.charset.StandardCharsets;
* @author Lion Li * @author Lion Li
*/ */
@NoArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor(access = AccessLevel.PRIVATE)
@Slf4j
public class FileUtils extends FileUtil { public class FileUtils extends FileUtil {
/** /**
@ -40,4 +44,24 @@ public class FileUtils extends FileUtil {
String encode = URLEncoder.encode(s, StandardCharsets.UTF_8); String encode = URLEncoder.encode(s, StandardCharsets.UTF_8);
return encode.replaceAll("\\+", "%20"); 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);
}
} }

41
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.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R; 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.PointInfoBo;
import org.dromara.platform.domain.bo.WorkOrderInfoBo; 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.PointInfoVo;
import org.dromara.platform.domain.vo.WorkOrderInfoVo; import org.dromara.platform.domain.vo.WorkOrderInfoVo;
import org.dromara.platform.listener.PointInfoListener; import org.dromara.platform.listener.PointInfoListener;
@ -26,6 +25,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.rmi.ServerException;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -101,10 +101,17 @@ public class ExcelController {
} }
/**
* 批量点位上报
* @param file
* @param response
* @return
* @throws IOException
*/
@PostMapping("/uploadWorkOrderInfo") @PostMapping("/uploadWorkOrderInfo")
public R<List<String>> uploadWorkOrderInfo(MultipartFile file, HttpServletResponse response) throws IOException { public R<List<String>> uploadWorkOrderInfo(MultipartFile file, HttpServletResponse response) throws IOException {
long t1 = System.currentTimeMillis(); long t1 = System.currentTimeMillis();
// TODO 文件校验
WorkOrderInfoListener listener = new WorkOrderInfoListener(workOrderInfoService, contractInfoService); WorkOrderInfoListener listener = new WorkOrderInfoListener(workOrderInfoService, contractInfoService);
@ -133,4 +140,32 @@ public class ExcelController {
return R.fail("文件导入失败: " + e.getMessage()); 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);
}
} }

4
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java

@ -76,13 +76,13 @@ public class WorkOrderInfoListener implements ReadListener<WorkOrderInfoVo> {
return; return;
} }
// 不允许重复点位上报 // 不允许重复点位上报
/* if (faultLocationList.contains(info.getFaultLocation())) { if (faultLocationList.contains(info.getFaultLocation())) {
int rowNum = analysisContext.readRowHolder().getRowIndex(); int rowNum = analysisContext.readRowHolder().getRowIndex();
String errorMsg = String.format("第 %d 行数据导入失败:该点位正在维修 故障地点: %s", String errorMsg = String.format("第 %d 行数据导入失败:该点位正在维修 故障地点: %s",
rowNum, workOrderInfoVo.getFaultLocation()); rowNum, workOrderInfoVo.getFaultLocation());
errorMessages.add(errorMsg); errorMessages.add(errorMsg);
return; return;
}*/ }
String unit = contractInfoService.getIoCompany(contractName); String unit = contractInfoService.getIoCompany(contractName);
if (unit != null) { if (unit != null) {

20
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.setOperationTime(date1);
workOrderProcess1.setFeedback("故障以上报,等待派遣"); workOrderProcess1.setFeedback("故障以上报,等待派遣");
if ( workOrderProcessService.insertByBo(workOrderProcess1)){ if (workOrderProcessService.insertByBo(workOrderProcess1)) {
LambdaUpdateWrapper<WorkOrderInfo> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<WorkOrderInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(WorkOrderInfo::getId, generatedId) updateWrapper.eq(WorkOrderInfo::getId, generatedId)
.set(WorkOrderInfo::getStatus, 0); .set(WorkOrderInfo::getStatus, 0);
@ -312,18 +312,22 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
long durationInSeconds = duration.getSeconds(); long durationInSeconds = duration.getSeconds();
String formatDuration = formatDuration((int) durationInSeconds); String formatDuration = formatDuration((int) durationInSeconds);
workOrderProcess2.setDuration(formatDuration); workOrderProcess2.setDuration(formatDuration);
if(workOrderProcessService.insertByBo(workOrderProcess2)){ if (workOrderProcessService.insertByBo(workOrderProcess2)) {
LambdaUpdateWrapper<WorkOrderInfo> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<WorkOrderInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(WorkOrderInfo::getId, generatedId) updateWrapper.eq(WorkOrderInfo::getId, generatedId)
.set(BaseEntity::getUpdateTime,new Date()) .set(BaseEntity::getUpdateTime, new Date())
.set(WorkOrderInfo::getStatus, 1); .set(WorkOrderInfo::getStatus, 1);
baseMapper.update(null, updateWrapper); baseMapper.update(null, updateWrapper);
log.info("修改对应的工单的状态 :待接单"); } log.info("修改对应的工单的状态 :待接单");
}
} }
} }
return flag; return flag;
} }
// 规范格式,如:01时02分03秒 // 规范格式,如:01时02分03秒
public static String formatDuration(int seconds) { public static String formatDuration(int seconds) {
int hours = seconds / 3600; int hours = seconds / 3600;

Loading…
Cancel
Save