diff --git a/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminComponentCodeController.java b/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminComponentCodeController.java index 3c71e12..63898a3 100644 --- a/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminComponentCodeController.java +++ b/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminComponentCodeController.java @@ -33,13 +33,11 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.UUID; +import java.util.*; /** * @author tz @@ -130,19 +128,15 @@ public class AdminComponentCodeController { @ApiOperation("编辑") @AnonymousAccess @Transactional - public ResultEntity updateAdminData(@ApiParam("案例ID") @RequestParam Integer id, - @ApiParam("代码内容")@RequestParam(required = false) String codeContent, - @ApiParam("参数释义")@RequestParam(required = false) String parameterContent, - @ApiParam("步骤名称(一级标签)")@RequestParam(required = false) String stepName, - @ApiParam("案例名称(二级标签)")@RequestParam(required = false) String caseName) { + public ResultEntity updateAdminData(@RequestBody UpdateAdminDataDTO dto) { //编辑 try { AdminComponentCodeWithBLOBs adminComponentCode = new AdminComponentCodeWithBLOBs(); - adminComponentCode.setId(id); - adminComponentCode.setCourseName(stepName); - adminComponentCode.setChapterName(caseName); - adminComponentCode.setItem(codeContent); - adminComponentCode.setDefinition(parameterContent); + adminComponentCode.setId(dto.getId()); + adminComponentCode.setCourseName(dto.getStepName()); + adminComponentCode.setChapterName(dto.getCaseName()); + adminComponentCode.setItem(dto.getCodeContent()); + adminComponentCode.setDefinition(dto.getParameterContent()); adminComponentCode.setStatus(0); //默认下架,发布后上架 adminComponentCode.setCreateTime(new Date()); //修改时间 @@ -240,44 +234,49 @@ public class AdminComponentCodeController { } + @ApiOperation("后端根据名字创建notebook") @GetMapping("/createNoteBook") @AnonymousAccess public ResultEntity createNoteBook(@ApiParam("参数为:案例名") String name, - @ApiParam("代码内容") String codeContent){ + @ApiParam("代码内容") String codeContent) throws IOException { //判断有无这个案例 -// -// String path = "/usr/local/tianzeProject/jupyter/tch"; -// -// // 创建表示该目录的 File 对象 -// File directory = new File(path); -// -// // 获取目录中的所有文件和子目录 -// File[] filesList = directory.listFiles(); -// -// -// if (filesList != null) { -// // 使用流查找目标文件 -// Optional targetFile = Arrays.stream(filesList) -// .filter(file -> file.getName().equals(name)) -// .findFirst(); -// -// if (targetFile.isPresent()) { -// return new ResultEntity<>(HttpStatus.OK,"文件已存在"); -// } -// } + String path = "/usr/local/tianzeProject/jupyter/tch/"; + + // 创建表示该目录的 File 对象 + File directory = new File(path); + + // 获取目录中的所有文件和子目录 + File[] filesList = directory.listFiles(); - //没有就创建 + if (filesList != null) { + // 使用流查找目标文件 + Optional targetFile = Arrays.stream(filesList) + .filter(file -> file.getName().equals(name)) + .findFirst(); + if (targetFile.isPresent()) { + // 找到目标文件 + File file = targetFile.get(); + // 删除文件 + boolean deleted = file.delete(); + if (deleted) { + System.out.println("文件已删除: " + file.getAbsolutePath()); + } else { + System.out.println("删除文件失败: " + file.getAbsolutePath()); + } + } + } + + //没有就创建 AdminJupyterTokenExample tokenExample = new AdminJupyterTokenExample(); tokenExample.createCriteria().andTypeEqualTo(1); List adminJupyterTokenList = adminJupyterTokenMapper.selectByExample(tokenExample); - if (adminJupyterTokenList.isEmpty()) - { - return new ResultEntity<>(HttpStatus.BAD_REQUEST,"Token不存在!"); + if (adminJupyterTokenList.isEmpty()) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "Token不存在!"); } try (CloseableHttpClient client = HttpClients.createDefault()) { @@ -302,6 +301,14 @@ public class AdminComponentCodeController { // + "\"nbformat_minor\": 2" // + "}"; + + if (codeContent.startsWith("```python")) { + codeContent = codeContent.replaceFirst("```python", ""); + } + if (codeContent.endsWith("```")) { + codeContent = codeContent.substring(0, codeContent.length() - 3); + } + String notebookContent = "{" + "\"cells\": [" + "{" @@ -336,15 +343,8 @@ public class AdminComponentCodeController { + "}"; - - - - // 在根目录下创建新的笔记本 - HttpPut createNotebookRequest = new HttpPut(JUPYTER_URL + "/api/contents/"+name+".ipynb"); - - - + HttpPut createNotebookRequest = new HttpPut(JUPYTER_URL + "/api/contents/" + name + ".ipynb"); createNotebookRequest.addHeader("Authorization", "token " + adminJupyterTokenList.get(0).getToken()); createNotebookRequest.addHeader("Content-Type", "application/json charset=UTF-8"); //createNotebookRequest.setEntity(new StringEntity("{\"type\": \"notebook\", \"content\": " + notebookContent + "}")); @@ -354,17 +354,36 @@ public class AdminComponentCodeController { int statusCode = createNotebookResponse.getStatusLine().getStatusCode(); if (statusCode == 201) { System.out.println("Notebook created successfully!"); - return new ResultEntity<>(HttpStatus.OK,"创建成功!"); + + + String toPath = "/usr/local/tianzeProject/jupyter/stu/" + name + ".ipynb"; + + String[] commandMove = {"cp", "-f", path + name + ".ipynb", toPath}; + + + Process process = Runtime.getRuntime().exec(commandMove); + + + // 等待进程执行完成 + int exitCodeInfo = process.waitFor(); + System.out.println(exitCodeInfo); + if (exitCodeInfo == 0) { + return new ResultEntity<>(HttpStatus.OK, "创建成功", true); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "创建失败!请联系管理员", false); + } } else { String responseBody = EntityUtils.toString(createNotebookResponse.getEntity()); System.out.println("Failed to create notebook: " + responseBody); - return new ResultEntity<>(HttpStatus.OK,"已经存在,不用重复创建"); + return new ResultEntity<>(HttpStatus.OK, "已经存在,不用重复创建"); } + } catch (IOException e) { + throw new RuntimeException(e); + } catch (InterruptedException e) { + throw new RuntimeException(e); } - } catch (IOException e) { - throw new RuntimeException(e); - } + } } }