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. 6
      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 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);
}
}

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.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<List<String>> 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);
}
}

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;
}
// 不允许重复点位上报
/* 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) {

6
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java

@ -318,12 +318,16 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
.set(BaseEntity::getUpdateTime, new Date())
.set(WorkOrderInfo::getStatus, 1);
baseMapper.update(null, updateWrapper);
log.info("修改对应的工单的状态 :待接单"); }
log.info("修改对应的工单的状态 :待接单");
}
}
}
return flag;
}
// 规范格式,如:01时02分03秒
public static String formatDuration(int seconds) {
int hours = seconds / 3600;

Loading…
Cancel
Save