@GetMapping("exportTask")
public @ResponseBody
RestResult exportTask(String taskId) {
Map<String, Object> hashMap = new HashMap<>();
Task task = taskService.getById(taskId);
String time = taskUserService.getMaxCdt(taskId);
Integer filestatus = task.getFilestatus();
if (filestatus == null) {
filestatus = 0;
}
if (filestatus == 1) {
return RestResult.Fail("任务正在生成,请稍后在试");
}
if (filestatus == 2 && StringUtils.isNotBlank(task.getFileurl()) && StringUtils.isNotBlank(task.getUpdatetime())) {
if (StringUtils.isNotBlank(task.getUpdatetime()) && DateUtil.compareTime(time, task.getUpdatetime())) {
hashMap.put("url", task.getFileurl());
return RestResult.OK(hashMap);
}
}
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
task.setFilestatus(1);
taskService.updateById(task);
String zipPath = UpLoadUtil.getPath() + "/task2021" + UpLoadUtil.getTIMEPath() + "/zip/" + taskId + "/";
File file = new File(zipPath);
if (!file.exists()) {
file.mkdirs();
}
String savePath = "/task2021" + UpLoadUtil.getTIMEPath() + "/zip/" + taskId + "/";
if (StringUtils.isNotBlank(task.getFileurl())) {
try {
String command = "cd " + zipPath + " && rm -rf " + task.getFileurl();
System.out.println(command);
CommandUtil.exec(command);
} catch (Exception e) {
task.setFilestatus(3);
taskService.updateById(task);
e.printStackTrace();
}
}
Map<String, List<TaskAnswer>> map = checkExportFiles(taskId);
if (map.size() > 0) {
answerUserService.moveCopyFile(zipPath, map);
String fileName = task.getTitle() + ".zip";
System.out.println("文件名称 = " + fileName);
String command = "cd " + zipPath + " && zip -q -r " + fileName + " *";
System.out.println(command);
try {
CommandUtil.exec(command);
String url = savePath + fileName;
System.out.println("拼接文件下载链接 url=" + url);
if (StringUtils.isNotBlank(url)) {
task.setFileurl(url);
task.setUpdatetime(DateUtil.now());
task.setFilestatus(2);
taskService.updateById(task);
}
} catch (Exception e) {
task.setFilestatus(3);
taskService.updateById(task);
e.printStackTrace();
}
}
}
});
thread.start();
return RestResult.Fail("任务正在生成,请稍后在试");
}
public class CommandUtil {
public static void main(String[] args) {
exec("cd /Users/lyh/Documents/my/test/test && zip -q -r test202111.zip * ");
}
public static Object exec(String cmd) {
try {
String[] cmdA = {"/bin/sh", "-c", cmd};
Process process = Runtime.getRuntime().exec(cmdA);
LineNumberReader br = new LineNumberReader(new InputStreamReader(
process.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
sb.append(line).append("\n");
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}