wip(sj_1.0.0): 添加ImportUtils,ExportUtils
This commit is contained in:
parent
2dab8f45b0
commit
0f762339b6
@ -1,12 +1,7 @@
|
||||
package com.aizuda.snailjob.server.web.controller;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import com.aizuda.snailjob.common.core.annotation.OriginalControllerReturnValue;
|
||||
import com.aizuda.snailjob.common.core.exception.SnailJobCommonException;
|
||||
import com.aizuda.snailjob.common.core.util.JsonUtil;
|
||||
import com.aizuda.snailjob.server.common.exception.SnailJobServerException;
|
||||
import com.aizuda.snailjob.server.common.util.DateUtils;
|
||||
import com.aizuda.snailjob.server.web.annotation.LoginRequired;
|
||||
import com.aizuda.snailjob.server.web.annotation.RoleEnum;
|
||||
import com.aizuda.snailjob.server.web.model.base.PageResult;
|
||||
@ -15,13 +10,9 @@ import com.aizuda.snailjob.server.web.model.request.JobRequestVO;
|
||||
import com.aizuda.snailjob.server.web.model.request.JobUpdateJobStatusRequestVO;
|
||||
import com.aizuda.snailjob.server.web.model.response.JobResponseVO;
|
||||
import com.aizuda.snailjob.server.web.service.JobService;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import jakarta.validation.ConstraintViolation;
|
||||
import jakarta.validation.Validation;
|
||||
import jakarta.validation.Validator;
|
||||
import jakarta.validation.ValidatorFactory;
|
||||
import com.aizuda.snailjob.server.web.util.ExportUtils;
|
||||
import com.aizuda.snailjob.server.web.util.ImportUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -29,7 +20,6 @@ import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@ -42,7 +32,6 @@ import java.util.Set;
|
||||
@RequestMapping("/job")
|
||||
public class JobController {
|
||||
|
||||
private static final List<String> FILE_EXTENSIONS = List.of("json");
|
||||
|
||||
@Autowired
|
||||
private JobService jobService;
|
||||
@ -117,31 +106,7 @@ public class JobController {
|
||||
if (file.isEmpty()) {
|
||||
throw new SnailJobCommonException("请选择一个文件上传");
|
||||
}
|
||||
|
||||
// 保存文件到服务器
|
||||
String suffix = FileUtil.getSuffix(file.getOriginalFilename());
|
||||
if (!FILE_EXTENSIONS.contains(suffix)) {
|
||||
throw new SnailJobCommonException("文件类型错误");
|
||||
}
|
||||
|
||||
JsonNode node = JsonUtil.toJson(file.getBytes());
|
||||
|
||||
List<JobRequestVO> requestList = JsonUtil.parseList(JsonUtil.toJsonString(node),
|
||||
JobRequestVO.class);
|
||||
requestList.forEach(vo -> vo.setId(null));
|
||||
|
||||
Assert.notEmpty(requestList, () -> new SnailJobServerException("导入数据不能为空"));
|
||||
|
||||
// 校验参数是否合法
|
||||
requestList.forEach(vo ->{
|
||||
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
|
||||
Validator validator = vf.getValidator();
|
||||
Set<ConstraintViolation<JobRequestVO>> set = validator.validate(vo);
|
||||
for (final ConstraintViolation<JobRequestVO> violation : set) {
|
||||
throw new SnailJobCommonException(violation.getMessage());
|
||||
}
|
||||
});
|
||||
|
||||
List<JobRequestVO> requestList = ImportUtils.parseList(file, JobRequestVO.class);
|
||||
jobService.importJobs(requestList);
|
||||
}
|
||||
|
||||
@ -150,17 +115,7 @@ public class JobController {
|
||||
@OriginalControllerReturnValue
|
||||
public ResponseEntity<String> exportGroup(@RequestBody Set<Long> jobIds) {
|
||||
String jobsJson = jobService.exportJobs(jobIds);
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
// 设置下载时的文件名称
|
||||
String fileName = String.format("job-%s.json", DateUtils.toNowFormat(DateUtils.PURE_DATETIME_MS_PATTERN));
|
||||
String disposition = "attachment; filename=" +
|
||||
new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
|
||||
headers.add(HttpHeaders.CONTENT_DISPOSITION, disposition);
|
||||
return ResponseEntity.ok()
|
||||
.headers(headers)
|
||||
.body(jobsJson);
|
||||
return ExportUtils.doExport(jobsJson);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -251,7 +251,7 @@ public class JobServiceImpl implements JobService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void importJobs(List<JobRequestVO> requestList) {
|
||||
requestList.forEach(vo -> saveJob(vo));
|
||||
requestList.forEach(this::saveJob);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,25 @@
|
||||
package com.aizuda.snailjob.server.web.util;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class ExportUtils {
|
||||
|
||||
public static ResponseEntity<String> doExport(String json) {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
// 设置下载时的文件名称, 由前端重命名
|
||||
String fileName = "export.json";
|
||||
String disposition = "attachment; filename=" +
|
||||
new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
|
||||
headers.add(HttpHeaders.CONTENT_DISPOSITION, disposition);
|
||||
return ResponseEntity.ok()
|
||||
.headers(headers)
|
||||
.body(json);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package com.aizuda.snailjob.server.web.util;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import com.aizuda.snailjob.common.core.exception.SnailJobCommonException;
|
||||
import com.aizuda.snailjob.common.core.util.JsonUtil;
|
||||
import com.aizuda.snailjob.server.common.exception.SnailJobServerException;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import jakarta.validation.ConstraintViolation;
|
||||
import jakarta.validation.Validation;
|
||||
import jakarta.validation.Validator;
|
||||
import jakarta.validation.ValidatorFactory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class ImportUtils {
|
||||
|
||||
private static final List<String> FILE_EXTENSIONS = List.of("json");
|
||||
|
||||
public static @NotNull <VO> List<VO> parseList(MultipartFile file, Class<VO> clazz) throws IOException {
|
||||
// 保存文件到服务器
|
||||
String suffix = FileUtil.getSuffix(file.getOriginalFilename());
|
||||
if (!FILE_EXTENSIONS.contains(suffix)) {
|
||||
throw new SnailJobCommonException("文件类型错误");
|
||||
}
|
||||
|
||||
JsonNode node = JsonUtil.toJson(file.getBytes());
|
||||
List<VO> requestList = JsonUtil.parseList(JsonUtil.toJsonString(node), clazz);
|
||||
Assert.notEmpty(requestList, () -> new SnailJobServerException("导入数据不能为空"));
|
||||
|
||||
// 校验参数是否合法
|
||||
requestList.forEach(vo -> {
|
||||
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
|
||||
Validator validator = vf.getValidator();
|
||||
Set<ConstraintViolation<VO>> rules = validator.validate(vo);
|
||||
rules.forEach(rule -> {
|
||||
throw new SnailJobCommonException(rule.getMessage());
|
||||
});
|
||||
});
|
||||
|
||||
return requestList;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user