diff --git a/pom.xml b/pom.xml index f115ca6..16ab815 100644 --- a/pom.xml +++ b/pom.xml @@ -218,6 +218,12 @@ ip2region 2.6.5 + + + org.apache.httpcomponents + httpmime + 4.5.14 + diff --git a/src/main/java/com/sztzjy/resource_center/config/Constant.java b/src/main/java/com/sztzjy/resource_center/config/Constant.java index ab81e52..693bd17 100644 --- a/src/main/java/com/sztzjy/resource_center/config/Constant.java +++ b/src/main/java/com/sztzjy/resource_center/config/Constant.java @@ -33,4 +33,7 @@ public class Constant { // public static final String THEORY = "理论考试模块"; // public static final String RESOURCE = "资源中心模块"; + public static final String JUPYTERHUB_API_URL = "http://120.78.220.29:8000/hub/api"; + public static final String ADMIN_TOKEN = "170bed30b34242cfb3fda3171e1a111d"; // 替换为你的JupyterHub管理员API令牌 + } diff --git a/src/main/java/com/sztzjy/resource_center/controller/CaseController.java b/src/main/java/com/sztzjy/resource_center/controller/CaseController.java index 1138e73..8ab676c 100644 --- a/src/main/java/com/sztzjy/resource_center/controller/CaseController.java +++ b/src/main/java/com/sztzjy/resource_center/controller/CaseController.java @@ -151,8 +151,9 @@ public class CaseController { @ApiOperation("案例题编辑") @PostMapping("updateCase") public ResultEntity updateCase(@RequestBody SysCaseQuestion sysCaseQuestion, - @ApiParam("谁调的请求,传管理员/学校ID") @RequestParam String source) { - List sysTopicAndCourses = getSysTopicAndCourses(sysCaseQuestion.getCaseId(), sysCaseQuestion.getOneId()); + @ApiParam("谁调的请求,传管理员/学校ID") @RequestParam String source, + @ApiParam("修改前旧的oneId") @RequestParam String oldOneId) { + List sysTopicAndCourses = getSysTopicAndCourses(sysCaseQuestion.getCaseId(), oldOneId); // if (!sysTopicAndCourses.isEmpty()) { // return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该案例题正在被使用!"); // } else { @@ -160,6 +161,8 @@ public class CaseController { if ("管理员".equals(source) || source.equals(sysCaseQuestion.getSource())) { if (!sysTopicAndCourses.isEmpty()) { SysTopicAndCourse sysTopicAndCourse = sysTopicAndCourses.get(0); + sysTopicAndCourse.setOneId(sysCaseQuestion.getOneId()); + sysTopicAndCourse.setOneName(sysCaseQuestion.getOneName()); sysTopicAndCourse.setTwoId(sysCaseQuestion.getTwoId()); sysTopicAndCourse.setThreeId(sysCaseQuestion.getThreeId()); sysTopicAndCourse.setTwoName(sysCaseQuestion.getTwoName()); diff --git a/src/main/java/com/sztzjy/resource_center/controller/CaseStepController.java b/src/main/java/com/sztzjy/resource_center/controller/CaseStepController.java index f078878..225c595 100644 --- a/src/main/java/com/sztzjy/resource_center/controller/CaseStepController.java +++ b/src/main/java/com/sztzjy/resource_center/controller/CaseStepController.java @@ -55,19 +55,19 @@ public class CaseStepController { @PostMapping("updateCase") public ResultEntity updateCase(@RequestBody SysCaseQuestionStepWithBLOBs caseQuestionStepWithBLOBs, @ApiParam("谁调的请求,传管理员/学校ID") @RequestParam String source) { - List sysTopicAndCourses = getSysTopicAndCourses(caseQuestionStepWithBLOBs.getCaseId()); +// List sysTopicAndCourses = getSysTopicAndCourses(caseQuestionStepWithBLOBs.getCaseId()); // if (!sysTopicAndCourses.isEmpty()) { // return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该案例题正在被使用!"); // } // else { - //todo 管理员任意修改,老师只能改自己的 - SysCaseQuestion sysCaseQuestion = sysCaseQuestionMapper.selectByPrimaryKey(caseQuestionStepWithBLOBs.getCaseId()); - if ("管理员".equals(source) || source.equals(sysCaseQuestion.getSource())) { - caseQuestionStepMapper.updateByPrimaryKey(caseQuestionStepWithBLOBs); - return new ResultEntity<>(HttpStatus.OK, "编辑成功!"); - } else { - return new ResultEntity<>(HttpStatus.BAD_REQUEST, "权限不足!"); - } + //todo 管理员任意修改,老师只能改自己的 + SysCaseQuestion sysCaseQuestion = sysCaseQuestionMapper.selectByPrimaryKey(caseQuestionStepWithBLOBs.getCaseId()); + if ("管理员".equals(source) || source.equals(sysCaseQuestion.getSource())) { + caseQuestionStepMapper.updateByPrimaryKeyWithBLOBs(caseQuestionStepWithBLOBs); + return new ResultEntity<>(HttpStatus.OK, "编辑成功!"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "权限不足!"); + } // } } @@ -77,19 +77,17 @@ public class CaseStepController { @PostMapping("deleteCase") public ResultEntity deleteCase(@RequestBody SysCaseQuestionStepWithBLOBs sysCaseQuestionStep, @ApiParam("哪个用的掉的请求,传管理员/学校ID") @RequestParam String source) { - List sysTopicAndCourses = getSysTopicAndCourses(sysCaseQuestionStep.getCaseId()); - if (!sysTopicAndCourses.isEmpty()) { - return new ResultEntity<>(HttpStatus.BAD_REQUEST, "无法删除!该案例题正在被使用!"); - } else { - //todo 管理员任意删除 老师只能删除自己上传的 - SysCaseQuestion sysCaseQuestion = sysCaseQuestionMapper.selectByPrimaryKey(sysCaseQuestionStep.getCaseId()); - if ("管理员".equals(source) || source.equals(sysCaseQuestion.getSource())) { - caseQuestionStepMapper.deleteByPrimaryKey(sysCaseQuestionStep.getCaseStepId()); - return new ResultEntity<>(HttpStatus.OK, "删除成功!"); - } else { - return new ResultEntity<>(HttpStatus.BAD_REQUEST, "权限不足!"); - } +// List sysTopicAndCourses = getSysTopicAndCourses(sysCaseQuestionStep.getCaseId()); +// if (!sysTopicAndCourses.isEmpty()) { +// return new ResultEntity<>(HttpStatus.BAD_REQUEST, "无法删除!该案例题正在被使用!"); todo 暂时把判断去掉 +// } + //todo 管理员任意删除 老师只能删除自己上传的 + SysCaseQuestion sysCaseQuestion = sysCaseQuestionMapper.selectByPrimaryKey(sysCaseQuestionStep.getCaseId()); + if ("管理员".equals(source) || source.equals(sysCaseQuestion.getSource())) { + caseQuestionStepMapper.deleteByPrimaryKey(sysCaseQuestionStep.getCaseStepId()); + return new ResultEntity<>(HttpStatus.OK, "删除成功!"); } + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "权限不足!"); } private List getSysTopicAndCourses(String caseId) { diff --git a/src/main/java/com/sztzjy/resource_center/controller/CourseTagManageController.java b/src/main/java/com/sztzjy/resource_center/controller/CourseTagManageController.java index 49fb103..2a65854 100644 --- a/src/main/java/com/sztzjy/resource_center/controller/CourseTagManageController.java +++ b/src/main/java/com/sztzjy/resource_center/controller/CourseTagManageController.java @@ -43,6 +43,12 @@ public class CourseTagManageController { private SysTopicAndCourseMapper sysTopicAndCourseMapper; @Autowired private SysResourceAndCourseMapper sysResourceAndCourseMapper; + @Autowired + private SysResourceMapper sysResourceMapper; + @Autowired + private SysCaseQuestionMapper sysCaseQuestionMapper; + @Autowired + private SysObjectiveQuestionsMapper sysObjectiveQuestionsMapper; @AnonymousAccess @@ -98,11 +104,11 @@ public class CourseTagManageController { List ids = sysResourceAndCourses.stream().map(SysResourceAndCourse::getId).collect(Collectors.toList()); sysResourceAndCourseMapper.batchUpdateTwoName(ids, name); - SysTopicAndCourseExample example1 =new SysTopicAndCourseExample(); + SysTopicAndCourseExample example1 = new SysTopicAndCourseExample(); example1.createCriteria().andTwoIdEqualTo(id); List sysTopicAndCourses = sysTopicAndCourseMapper.selectByExample(example1); List collect = sysTopicAndCourses.stream().map(SysTopicAndCourse::getId).collect(Collectors.toList()); - sysTopicAndCourseMapper.batchUpdateTwoName(collect,name); + sysTopicAndCourseMapper.batchUpdateTwoName(collect, name); } else { SysThreeCatalog sysThreeCatalog = sysThreeCatalogMapper.selectByPrimaryKey(id); @@ -115,11 +121,11 @@ public class CourseTagManageController { List ids = sysResourceAndCourses.stream().map(SysResourceAndCourse::getId).collect(Collectors.toList()); sysResourceAndCourseMapper.batchUpdateThreeName(ids, name); - SysTopicAndCourseExample example1 =new SysTopicAndCourseExample(); + SysTopicAndCourseExample example1 = new SysTopicAndCourseExample(); example1.createCriteria().andThreeIdEqualTo(id); List sysTopicAndCourses = sysTopicAndCourseMapper.selectByExample(example1); List collect = sysTopicAndCourses.stream().map(SysTopicAndCourse::getId).collect(Collectors.toList()); - sysTopicAndCourseMapper.batchUpdateThreeName(collect,name); + sysTopicAndCourseMapper.batchUpdateThreeName(collect, name); } return new ResultEntity<>(HttpStatus.OK, "修改成功"); } @@ -133,59 +139,87 @@ public class CourseTagManageController { try { if (type == 2) { sysTwoCatalogMapper.deleteByPrimaryKey(id); - //删除资源 + //删除资源关系表 SysResourceAndCourseExample example1 = new SysResourceAndCourseExample(); example1.createCriteria().andTwoIdEqualTo(id); + + List sysResourceAndCourses = sysResourceAndCourseMapper.selectByExample(example1); + List resourceIds = sysResourceAndCourses.stream().map(SysResourceAndCourse::getResourceId).collect(Collectors.toList()); + sysResourceAndCourseMapper.deleteByExample(example1); - //删除题目 + //删除资源 + if (!resourceIds.isEmpty()) { + SysResourceExample sysResourceExample = new SysResourceExample(); + sysResourceExample.createCriteria().andResourceIdIn(resourceIds); + sysResourceMapper.deleteByExample(sysResourceExample); + } + + //删除题目关系表 SysTopicAndCourseExample example = new SysTopicAndCourseExample(); example.createCriteria().andTwoIdEqualTo(id); + List topicAndCourseList = sysTopicAndCourseMapper.selectByExample(example); + List topicIds = topicAndCourseList.stream().map(SysTopicAndCourse::getTopicId).collect(Collectors.toList()); sysTopicAndCourseMapper.deleteByExample(example); + + + //删除案例题 + if (!topicIds.isEmpty()) { + SysCaseQuestionExample sysCaseQuestionExample = new SysCaseQuestionExample(); + sysCaseQuestionExample.createCriteria().andCaseIdIn(topicIds); + sysCaseQuestionMapper.deleteByExample(sysCaseQuestionExample); + + //删除客观题 + SysObjectiveQuestionsExample sysObjectiveQuestionsExample = new SysObjectiveQuestionsExample(); + sysObjectiveQuestionsExample.createCriteria().andObjectiveIdIn(topicIds); + sysObjectiveQuestionsMapper.deleteByExample(sysObjectiveQuestionsExample); + } } else { sysThreeCatalogMapper.deleteByPrimaryKey(id); + + //删除资源关系表 + SysResourceAndCourseExample sysResourceAndCourseExample = new SysResourceAndCourseExample(); + sysResourceAndCourseExample.createCriteria().andThreeIdEqualTo(id); + + List sysResourceAndCourses = sysResourceAndCourseMapper.selectByExample(sysResourceAndCourseExample); + List resourceIds = sysResourceAndCourses.stream().map(SysResourceAndCourse::getResourceId).collect(Collectors.toList()); + + sysResourceAndCourseMapper.deleteByExample(sysResourceAndCourseExample); //删除资源 - SysResourceAndCourseExample example1 = new SysResourceAndCourseExample(); - example1.createCriteria().andThreeIdEqualTo(id); - sysResourceAndCourseMapper.deleteByExample(example1); + if (!resourceIds.isEmpty()) { + SysResourceExample sysResourceExample = new SysResourceExample(); + sysResourceExample.createCriteria().andResourceIdIn(resourceIds); + sysResourceMapper.deleteByExample(sysResourceExample); + } - //删除题目 - SysTopicAndCourseExample example = new SysTopicAndCourseExample(); - example.createCriteria().andThreeIdEqualTo(id); - sysTopicAndCourseMapper.deleteByExample(example); - sysThreeCatalogMapper.deleteByPrimaryKey(id); + //删除题目关系表 + SysTopicAndCourseExample sysTopicAndCourseExample = new SysTopicAndCourseExample(); + sysTopicAndCourseExample.createCriteria().andThreeIdEqualTo(id); + + List topicAndCourseList = sysTopicAndCourseMapper.selectByExample(sysTopicAndCourseExample); + List topicIds = topicAndCourseList.stream().map(SysTopicAndCourse::getTopicId).collect(Collectors.toList()); + + sysTopicAndCourseMapper.deleteByExample(sysTopicAndCourseExample); + + //删除案例题 + if (!topicIds.isEmpty()) { + SysCaseQuestionExample sysCaseQuestionExample = new SysCaseQuestionExample(); + sysCaseQuestionExample.createCriteria().andCaseIdIn(topicIds); + sysCaseQuestionMapper.deleteByExample(sysCaseQuestionExample); + + //删除客观题 + SysObjectiveQuestionsExample sysObjectiveQuestionsExample = new SysObjectiveQuestionsExample(); + sysObjectiveQuestionsExample.createCriteria().andObjectiveIdIn(topicIds); + sysObjectiveQuestionsMapper.deleteByExample(sysObjectiveQuestionsExample); + } } } catch (Exception e) { e.printStackTrace(); - return new ResultEntity<>(HttpStatus.INTERNAL_SERVER_ERROR,"删除失败,请联系管理员"); + return new ResultEntity<>(HttpStatus.INTERNAL_SERVER_ERROR, "删除失败,请联系管理员"); } return new ResultEntity<>(HttpStatus.OK, "删除成功"); } -// @AnonymousAccess -// @ApiOperation("排序") -// @PostMapping("setRank") //修改成LIST -// public ResultEntity setRank(@ApiParam("一级传1/二级传2/三级传3") @RequestParam int type, -// @RequestParam String id, -// @RequestParam int rank) { -// if (type == 1) { -// SysOneCatalog sysOneCatalog = sysOneCatalogMapper.selectByPrimaryKey(id); -// sysOneCatalog.setSort(rank); -// sysOneCatalogMapper.updateByPrimaryKey(sysOneCatalog); -// return new ResultEntity<>(HttpStatus.OK, "排序成功"); -// } else if (type == 2) { -// SysTwoCatalog sysTwoCatalog = sysTwoCatalogMapper.selectByPrimaryKey(id); -// sysTwoCatalog.setSort(rank); -// sysTwoCatalogMapper.updateByPrimaryKey(sysTwoCatalog); -// return new ResultEntity<>(HttpStatus.OK, "排序成功"); -// } else { -// SysThreeCatalog sysThreeCatalog = sysThreeCatalogMapper.selectByPrimaryKey(id); -// sysThreeCatalog.setSort(rank); -// sysThreeCatalogMapper.updateByPrimaryKey(sysThreeCatalog); -// return new ResultEntity<>(HttpStatus.OK, "排序成功"); -// } -// } - @AnonymousAccess @ApiOperation("一级目录重新排序") diff --git a/src/main/java/com/sztzjy/resource_center/controller/TopicResourceController.java b/src/main/java/com/sztzjy/resource_center/controller/TopicResourceController.java index e8acfa2..e186c1a 100644 --- a/src/main/java/com/sztzjy/resource_center/controller/TopicResourceController.java +++ b/src/main/java/com/sztzjy/resource_center/controller/TopicResourceController.java @@ -234,7 +234,7 @@ public class TopicResourceController { SysObjectiveQuestions newData = new SysObjectiveQuestions(); BeanUtils.copyProperties(dto, newData); sysObjectiveQuestionMapper.updateByPrimaryKey(newData); - return new ResultEntity<>(HttpStatus.BAD_REQUEST, "编辑完成!"); + return new ResultEntity<>(HttpStatus.OK, "编辑完成!"); } @AnonymousAccess diff --git a/src/main/java/com/sztzjy/resource_center/controller/api/CaseApi.java b/src/main/java/com/sztzjy/resource_center/controller/api/CaseApi.java index 9b2c28d..989b15e 100644 --- a/src/main/java/com/sztzjy/resource_center/controller/api/CaseApi.java +++ b/src/main/java/com/sztzjy/resource_center/controller/api/CaseApi.java @@ -293,6 +293,7 @@ public class CaseApi { SysCaseQuestionExample example1 = new SysCaseQuestionExample(); example1.createCriteria().andCaseIdIn(collect).andSourceEqualTo("管理员"); + example1.setOrderByClause("create_time"); List list = caseQuestionMapper.selectByExampleWithBLOBs(example1); return list; } @@ -307,12 +308,8 @@ public class CaseApi { @PostMapping("selectCaseStepListBatchByIdListAndSort") @ApiOperation("查询案例题步骤并排序") @AnonymousAccess - public List selectCaseStepListBatchByIdListAndSort(@RequestBody List caseIdList) { - SysCaseQuestionStepExample example = new SysCaseQuestionStepExample(); - example.createCriteria().andCaseIdIn(caseIdList); - example.setOrderByClause("sort"); - List sysCaseQuestionStepWithBLOBs = caseQuestionStepMapper.selectByExampleWithBLOBs(example); - return sysCaseQuestionStepWithBLOBs; + public List selectCaseStepListBatchByIdListAndSort(@RequestParam String threeId) { + return caseQuestionStepMapper.selectCaseStepListBatchByIdListAndSort(threeId); } diff --git a/src/main/java/com/sztzjy/resource_center/controller/api/CourseApi.java b/src/main/java/com/sztzjy/resource_center/controller/api/CourseApi.java index edb3483..85db12b 100644 --- a/src/main/java/com/sztzjy/resource_center/controller/api/CourseApi.java +++ b/src/main/java/com/sztzjy/resource_center/controller/api/CourseApi.java @@ -123,15 +123,40 @@ public class CourseApi { return false; } twoCatalogMapper.deleteByPrimaryKey(twoId); - //删除资源 + //删除资源关系表 SysResourceAndCourseExample example1 = new SysResourceAndCourseExample(); example1.createCriteria().andTwoIdEqualTo(twoId); + + List sysResourceAndCourses = sysResourceAndCourseMapper.selectByExample(example1); + List resourceIds = sysResourceAndCourses.stream().map(SysResourceAndCourse::getResourceId).collect(Collectors.toList()); + sysResourceAndCourseMapper.deleteByExample(example1); - //删除题目 + //删除资源 + if (!resourceIds.isEmpty()) { + SysResourceExample sysResourceExample = new SysResourceExample(); + sysResourceExample.createCriteria().andResourceIdIn(resourceIds); + sysResourceMapper.deleteByExample(sysResourceExample); + } + //删除题目关系表 SysTopicAndCourseExample example = new SysTopicAndCourseExample(); example.createCriteria().andTwoIdEqualTo(twoId); + List topicAndCourseList = sysTopicAndCourseMapper.selectByExample(example); + List topicIds = topicAndCourseList.stream().map(SysTopicAndCourse::getTopicId).collect(Collectors.toList()); sysTopicAndCourseMapper.deleteByExample(example); + + + //删除案例题 + if (!topicIds.isEmpty()) { + SysCaseQuestionExample sysCaseQuestionExample = new SysCaseQuestionExample(); + sysCaseQuestionExample.createCriteria().andCaseIdIn(topicIds); + sysCaseQuestionMapper.deleteByExample(sysCaseQuestionExample); + + //删除客观题 + SysObjectiveQuestionsExample sysObjectiveQuestionsExample = new SysObjectiveQuestionsExample(); + sysObjectiveQuestionsExample.createCriteria().andObjectiveIdIn(topicIds); + sysObjectiveQuestionsMapper.deleteByExample(sysObjectiveQuestionsExample); + } return true; } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/com/sztzjy/resource_center/controller/api/ResourceDataApi.java b/src/main/java/com/sztzjy/resource_center/controller/api/ResourceDataApi.java index 02cdc14..9487714 100644 --- a/src/main/java/com/sztzjy/resource_center/controller/api/ResourceDataApi.java +++ b/src/main/java/com/sztzjy/resource_center/controller/api/ResourceDataApi.java @@ -1,32 +1,24 @@ package com.sztzjy.resource_center.controller.api; -import cn.hutool.core.util.CharsetUtil; import com.sztzjy.resource_center.annotation.AnonymousAccess; import com.sztzjy.resource_center.entity.SysCaseQuestion; import com.sztzjy.resource_center.entity.SysResourceData; import com.sztzjy.resource_center.entity.SysResourceDataExample; import com.sztzjy.resource_center.mapper.SysCaseQuestionMapper; import com.sztzjy.resource_center.mapper.SysResourceDataMapper; +import com.sztzjy.resource_center.util.CompressUtil; import com.sztzjy.resource_center.util.file.IFileUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.util.Assert; -import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; -import java.io.BufferedInputStream; import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URLEncoder; -import java.nio.file.Files; -import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.UUID; @RestController @@ -40,7 +32,8 @@ public class ResourceDataApi { private SysCaseQuestionMapper caseQuestionMapper; @Autowired IFileUtil fileUtil; - + @Value("${file.path}") + private String filePath; /** * 数据集文件上传 @@ -91,6 +84,8 @@ public class ResourceDataApi { } + + /** * 数据集删除 * 方法名:deleteResourceData @@ -120,14 +115,22 @@ public class ResourceDataApi { */ @AnonymousAccess @ApiOperation("数据集下载") - @GetMapping("downloadResourceData") - private void selectResourceDataList(@RequestParam String resourceId, - HttpServletResponse response) { - try { - SysResourceData sysResourceData = sysResourceDataMapper.selectByPrimaryKey(resourceId); - String resourceName = sysResourceData.getResourceName(); - fileUtil.download(response, resourceName, sysResourceData.getUrl()); - } catch (Exception e) { + @PostMapping("downloadResourceData") + private void downloadResourceData(@RequestBody List ids, HttpServletResponse response) { + this.downloadFile(ids, response); + } + + + public void downloadFile(List ids, HttpServletResponse response) { + if (ids != null && !ids.isEmpty()) { + List> filePaths = sysResourceDataMapper.getByIds(ids); + String zipName = "TZ_" + ((int) (Math.random() * 10000)) + ".zip"; + String zipPath = filePath + "/" + zipName; + CompressUtil.compress11(filePaths, zipPath, false); + File pocZipFile = new File(zipPath); + CompressUtil.downloadZip(response, zipName, pocZipFile); + pocZipFile.delete(); } } + } diff --git a/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminCaseController.java b/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminCaseController.java index 56a9590..9800f9e 100644 --- a/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminCaseController.java +++ b/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminCaseController.java @@ -8,6 +8,7 @@ import com.nimbusds.jose.shaded.gson.JsonSyntaxException; import com.sztzjy.resource_center.annotation.AnonymousAccess; import com.sztzjy.resource_center.entity.admin.*; import com.sztzjy.resource_center.mapper.admin.AdminCaseMapper; +import com.sztzjy.resource_center.mapper.admin.AdminCollectCaseMapper; import com.sztzjy.resource_center.mapper.admin.AdminDataLabelMapper; import com.sztzjy.resource_center.mapper.admin.AdminFileMapper; import com.sztzjy.resource_center.util.PageUtil; @@ -47,6 +48,8 @@ public class AdminCaseController { @Autowired private AdminFileMapper adminFileMapper; @Autowired + private AdminCollectCaseMapper adminCollectCaseMapper; + @Autowired private IFileUtil fileUtil; @Value("${file.path}") private String filePath; @@ -325,25 +328,31 @@ public class AdminCaseController { } - @PostMapping("deleteCase") - @ApiOperation("删除案例题/管理员使用") - private ResultEntity deleteCase(@RequestParam String caseId) { + @PostMapping("deleteAdminCase") + @ApiOperation("案例集锦/删除") + @AnonymousAccess + private ResultEntity deleteAdminData(@RequestParam String caseId) { try { - //删除案例绑定文件 - AdminFileExample example = new AdminFileExample(); - example.createCriteria().andDataCaseIdEqualTo(caseId); - adminFileMapper.deleteByExample(example); - - //删除案例绑定标签 - AdminDataLabelExample example1 = new AdminDataLabelExample(); - example1.createCriteria().andDataCaseIdEqualTo(caseId); - adminDataLabelMapper.deleteByExample(example1); + //删除数据 adminCaseMapper.deleteByPrimaryKey(caseId); + + //删除标签绑定表 + AdminDataLabelExample adminDataLabelExample = new AdminDataLabelExample(); + adminDataLabelExample.createCriteria().andDataCaseIdEqualTo(caseId); + adminDataLabelMapper.deleteByExample(adminDataLabelExample); + + AdminFileExample adminFileExample = new AdminFileExample(); + adminFileExample.createCriteria().andDataCaseIdEqualTo(caseId); + adminFileMapper.deleteByExample(adminFileExample); + + AdminCollectCaseExample adminCollectCaseExample = new AdminCollectCaseExample(); + adminCollectCaseExample.createCriteria().andCaseIdEqualTo(caseId); + adminCollectCaseMapper.deleteByExample(adminCollectCaseExample); } catch (Exception e) { e.printStackTrace(); - return new ResultEntity<>(HttpStatus.INTERNAL_SERVER_ERROR, "上传失败,请联系管理员!"); + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "删除失败,请联系管理员!"); } - return new ResultEntity<>(HttpStatus.OK, "删除成功!"); + return new ResultEntity(HttpStatus.OK, "删除成功!"); } } diff --git a/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminDataController.java b/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminDataController.java index d5884ca..e106fdb 100644 --- a/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminDataController.java +++ b/src/main/java/com/sztzjy/resource_center/controller/new_module/admin/AdminDataController.java @@ -1,12 +1,12 @@ package com.sztzjy.resource_center.controller.new_module.admin; import cn.hutool.core.util.IdUtil; -import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.nimbusds.jose.shaded.gson.Gson; import com.nimbusds.jose.shaded.gson.JsonSyntaxException; import com.sztzjy.resource_center.annotation.AnonymousAccess; import com.sztzjy.resource_center.entity.admin.*; +import com.sztzjy.resource_center.mapper.admin.AdminCollectDataMapper; import com.sztzjy.resource_center.mapper.admin.AdminDataLabelMapper; import com.sztzjy.resource_center.mapper.admin.AdminDataMapper; import com.sztzjy.resource_center.mapper.admin.AdminFileMapper; @@ -46,6 +46,9 @@ public class AdminDataController { private AdminFileMapper adminFileMapper; @Autowired private AdminDataMapper adminDataMapper; + @Autowired + private AdminCollectDataMapper adminCollectDataMapper; + @PostMapping("/add") @ApiOperation("新增") @@ -90,6 +93,8 @@ public class AdminDataController { adminDataWithBLOBs.setName(adminDataDto.getName()); adminDataWithBLOBs.setDataScenarios(adminDataDto.getDataScenarios()); adminDataWithBLOBs.setFieldDescription(adminDataDto.getFieldDescription()); + adminDataWithBLOBs.setDataScenariosOriginal(adminDataDto.getDataScenariosOriginal()); + adminDataWithBLOBs.setFieldDescriptionOriginal(adminDataDto.getFieldDescriptionOriginal()); adminDataWithBLOBs.setStatus(0); //默认下架,发布后上架 adminDataWithBLOBs.setCreateTime(new Date()); if (pictureFile != null) { @@ -189,7 +194,9 @@ public class AdminDataController { adminDataWithBLOBs.setDataId(adminDataDto.getDataId()); adminDataWithBLOBs.setName(adminDataDto.getName()); adminDataWithBLOBs.setDataScenarios(adminDataDto.getDataScenarios()); + adminDataWithBLOBs.setDataScenariosOriginal(adminDataDto.getDataScenariosOriginal()); adminDataWithBLOBs.setFieldDescription(adminDataDto.getFieldDescription()); + adminDataWithBLOBs.setFieldDescriptionOriginal(adminDataDto.getFieldDescriptionOriginal()); adminDataWithBLOBs.setStatus(adminDataDto.getStatus()); //默认下架,发布后上架 adminDataWithBLOBs.setCreateTime(adminDataDto.getCreateTime()); // 文件上传并行处理 @@ -269,4 +276,32 @@ public class AdminDataController { } return new ResultEntity(HttpStatus.OK, "删除成功!"); } + + @PostMapping("deleteAdminData") + @ApiOperation("数据仓库/删除") + @AnonymousAccess + private ResultEntity deleteAdminData(@RequestParam String dataId) { + try { + //删除数据 + adminDataMapper.deleteByPrimaryKey(dataId); + + //删除标签绑定表 + AdminDataLabelExample adminDataLabelExample = new AdminDataLabelExample(); + adminDataLabelExample.createCriteria().andDataCaseIdEqualTo(dataId); + adminDataLabelMapper.deleteByExample(adminDataLabelExample); + + AdminFileExample adminFileExample = new AdminFileExample(); + adminFileExample.createCriteria().andDataCaseIdEqualTo(dataId); + adminFileMapper.deleteByExample(adminFileExample); + + AdminCollectDataExample adminCollectDataExample = new AdminCollectDataExample(); + adminCollectDataExample.createCriteria().andDataIdEqualTo(dataId); + adminCollectDataMapper.deleteByExample(adminCollectDataExample); + } catch (Exception e) { + e.printStackTrace(); + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "删除失败,请联系管理员!"); + } + return new ResultEntity(HttpStatus.OK, "删除成功!"); + } + } diff --git a/src/main/java/com/sztzjy/resource_center/controller/new_module/stu/JupyterhubController.java b/src/main/java/com/sztzjy/resource_center/controller/new_module/stu/JupyterhubController.java new file mode 100644 index 0000000..a2d65c3 --- /dev/null +++ b/src/main/java/com/sztzjy/resource_center/controller/new_module/stu/JupyterhubController.java @@ -0,0 +1,243 @@ +package com.sztzjy.resource_center.controller.new_module.stu; + + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sztzjy.resource_center.annotation.AnonymousAccess; +import com.sztzjy.resource_center.config.Constant; +import com.sztzjy.resource_center.util.ResultEntity; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.entity.mime.HttpMultipartMode; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.entity.mime.content.ByteArrayBody; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.Optional; + +/** + * @author 17803 + * @date 2024-07-30 15:23 + */ + +@Api(tags = "jupyterhub的Api接口") +@RequestMapping("api/jupyterhub") +@RestController +public class JupyterhubController { + + + + @ApiOperation("创建容器") + @GetMapping("/jumpJupyerHub") + public ResultEntity jumpJupyerHub() throws IOException { + startServer("jupyterhub"); + System.out.println("启动服务!"); + String url = generateToken("jupyterhub"); + return new ResultEntity<>(HttpStatus.OK,"容器创建成功!",url); + } + + + public static String generateToken(String username) throws IOException { + CloseableHttpClient client = HttpClients.createDefault(); + HttpPost request = new HttpPost(Constant.JUPYTERHUB_API_URL + "/users/" + username + "/tokens"); + request.addHeader("Authorization", "Bearer " + Constant.ADMIN_TOKEN); + request.addHeader("Content-Type", "application/json"); + + String json = "{\"note\": \"" + username + "\"}"; + StringEntity entity = new StringEntity(json); + request.setEntity(entity); + + HttpResponse response = client.execute(request); + HttpEntity responseEntity = response.getEntity(); + String responseBody = EntityUtils.toString(responseEntity); + + if (response.getStatusLine().getStatusCode() == 201) { + + // 解析 JSON 响应体 + JSONObject jsonObject = JSON.parseObject(responseBody); + // 提取生成的令牌 + String token = jsonObject.getString("token"); + + + System.out.println("Token : " + token); + + String url = "http://jrdsj.sztzjy.com:8000/user/" + username + "/?token=" + token; + + return url; + } else { + System.err.println("Failed to generate token. Status code: " + response.getStatusLine().getStatusCode()); + System.err.println("Response: " + responseBody); + return null; + } + } + + // 启动用户的 Jupyter 服务器 + public static void startServer(String username) throws IOException { + + // 启动服务器后将需要的文件复制到刚创建的容器内 模拟实现文件挂载 + CloseableHttpClient client = HttpClients.createDefault(); + HttpPost request = new HttpPost(Constant.JUPYTERHUB_API_URL + "/users/" + username + "/server"); + request.addHeader("Authorization", "Bearer " + Constant.ADMIN_TOKEN); + request.addHeader("Content-Type", "application/json"); + + HttpResponse response = client.execute(request); + HttpEntity responseEntity = response.getEntity(); + String responseBody = EntityUtils.toString(responseEntity); + + if (response.getStatusLine().getStatusCode() == 200 || response.getStatusLine().getStatusCode() == 201) { + + + System.out.println("服务成功的启动: " + username); + + + client.close(); + } + } + + + + + + @ApiOperation("超管端或者教师端上传ipynb文件") + @PostMapping("/uploadFileByIpynb") + @AnonymousAccess + public ResponseEntity uploadFileByIpynb(@RequestPart @ApiParam("文件") MultipartFile file, @ApiParam("案例名") String caseName) { + String url = "https://jrdsj.sztzjy.com:598/api/jupyterhub/uploadFileByIpynb"; + + try { + uploadFile(url, file, caseName); + return new ResponseEntity<>("上传成功", HttpStatus.OK); + } catch (IOException e) { + e.printStackTrace(); + return new ResponseEntity<>("上传失败", HttpStatus.INTERNAL_SERVER_ERROR); + } + } + +// public static void uploadFile(String url, MultipartFile file, String caseName) throws IOException { +// try (CloseableHttpClient httpClient = HttpClients.createDefault()) { +// HttpPost uploadFile = new HttpPost(url); +// +// // Build the multipart entity +// MultipartEntityBuilder builder = MultipartEntityBuilder.create(); +// builder.addPart("file", new ByteArrayBody(file.getBytes(), file.getOriginalFilename())); // Use ByteArrayBody for MultipartFile +// builder.addTextBody("caseName", caseName); +// +// HttpEntity entity = builder.build(); +// uploadFile.setEntity(entity); +// +// // Execute the request +// try (CloseableHttpResponse response = httpClient.execute(uploadFile)) { +// HttpEntity responseEntity = response.getEntity(); +// String responseString = EntityUtils.toString(responseEntity, "UTF-8"); +// System.out.println("Response: " + responseString); +// } +// } +// } + + public static void uploadFile(String url, MultipartFile file, String caseName) throws IOException { + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpPost uploadFile = new HttpPost(url); + + // Build the multipart entity + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + + // Use ByteArrayBody with proper encoding for the file name + ByteArrayBody byteArrayBody = new ByteArrayBody(file.getBytes(), file.getOriginalFilename()); + builder.addPart("file", byteArrayBody); + builder.addTextBody("caseName", caseName, ContentType.TEXT_PLAIN.withCharset("UTF-8")); + builder.setMode(HttpMultipartMode.RFC6532);//解决文件名乱码问题 + + HttpEntity entity = builder.build(); + uploadFile.setEntity(entity); + + // Execute the request + try (CloseableHttpResponse response = httpClient.execute(uploadFile)) { + HttpEntity responseEntity = response.getEntity(); + // Convert response entity to String with UTF-8 encoding + String responseString = EntityUtils.toString(responseEntity, "UTF-8"); + System.out.println("Response: " + responseString); + } + } + } + + + @ApiOperation("保存时候判断ipynb文件是否存在") + @GetMapping("/filesIfExist") + @AnonymousAccess + public ResultEntity filesIfExist(@ApiParam("参数为:案例名") String caseName) throws InterruptedException, IOException { + String url = "https://jrdsj.sztzjy.com:598/api/jupyterhub/uploadFileByIpynbExist?caseName=" + caseName; + + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpGet httpGet = new HttpGet(url); + + // 执行 GET 请求 + try (CloseableHttpResponse response = httpClient.execute(httpGet)) { + HttpEntity responseEntity = response.getEntity(); + String responseString = EntityUtils.toString(responseEntity); + + // 解析 JSON 响应 + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonResponse = objectMapper.readTree(responseString); + + // 假设返回的 JSON 对象包含 "data" 字段 + JsonNode dataNode = jsonResponse.get("data"); + return new ResultEntity<>(HttpStatus.OK,dataNode != null && dataNode.asBoolean()); + } + } + + } + + + + @ApiOperation("删除ipynb文件") + @GetMapping("/delUploadFileByIpynb") + @AnonymousAccess + public ResultEntity delUploadFileByIpynb(@ApiParam("参数为:案例名") String caseName) throws InterruptedException, IOException { + String url = "https://jrdsj.sztzjy.com:598/api/jupyterhub/delUploadFileByIpynb?caseName=" + caseName; + + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpGet httpGet = new HttpGet(url); + + // 执行 GET 请求 + try (CloseableHttpResponse response = httpClient.execute(httpGet)) { + HttpEntity responseEntity = response.getEntity(); + String responseString = EntityUtils.toString(responseEntity); + + // 解析 JSON 响应 + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonResponse = objectMapper.readTree(responseString); + + // 假设返回的 JSON 对象包含 "data" 字段 + JsonNode dataNode = jsonResponse.get("data"); + return new ResultEntity<>(HttpStatus.OK,dataNode != null && dataNode.asBoolean()); + } + } + + } + + + + + +} diff --git a/src/main/java/com/sztzjy/resource_center/controller/new_module/stu/StuJupyterController.java b/src/main/java/com/sztzjy/resource_center/controller/new_module/stu/StuJupyterController.java index 44aa672..56758ca 100644 --- a/src/main/java/com/sztzjy/resource_center/controller/new_module/stu/StuJupyterController.java +++ b/src/main/java/com/sztzjy/resource_center/controller/new_module/stu/StuJupyterController.java @@ -381,67 +381,33 @@ public class StuJupyterController { //文件查询 ,判断有无文件 - @ApiOperation("文件上传") - @PostMapping("/importIpynb") + @ApiOperation("Html文件上传") + @PostMapping("/importHtml") @AnonymousAccess - public ResultEntity importIpynb(@ApiParam("案例名") String caseName,@RequestPart MultipartFile file ) { - - - + public ResultEntity importHtml(@ApiParam("案例名") String caseName,@RequestPart MultipartFile file) { String originalFilename = file.getOriginalFilename(); int i = originalFilename.lastIndexOf("."); String substring = originalFilename.substring(i); - if ("html".equals(substring)|| "md".equals(substring)) - { - // 上传到不同文件夹 - if (!(caseName+".md").equals(file.getOriginalFilename())) - { - return new ResultEntity<>(HttpStatus.ACCEPTED,"请上传和案例名相同的文件!"); - } - String upload = localFileUtil.uploadByRelativePath(file,"/usr/local/tianzeProject/jupyter/tch"); + if ("html".equals(substring)) { - if (upload!=null) - { - return new ResultEntity<>(HttpStatus.OK,"上传成功!"); - }else { - return new ResultEntity<>(HttpStatus.BAD_REQUEST,"上传失败!"); - } + String htmlPath = "/usr/local/tianzeProject/jupyter/md/html"; - } - if ("ipynb".equals(substring)) - { - // 上传到不同文件夹 - if (!(caseName+".ipynb").equals(file.getOriginalFilename())) - { - return new ResultEntity<>(HttpStatus.ACCEPTED,"请上传和案例名相同的文件!"); - } - String upload = localFileUtil.uploadByRelativePath(file,"/usr/local/tianzeProject/jupyter/tch"); + String upload = localFileUtil.uploadByRelativePath(file, htmlPath,caseName); - if (upload!=null) - { - return new ResultEntity<>(HttpStatus.OK,"上传成功!"); - }else { - return new ResultEntity<>(HttpStatus.BAD_REQUEST,"上传失败!"); + if (upload != null) { + return new ResultEntity<>(HttpStatus.OK, "上传成功!"); + } else { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "上传失败!"); } - } - - - - - //转换出md文件 - - return new ResultEntity<>("上传成功!"); - } - // 导入ipynb文件 diff --git a/src/main/java/com/sztzjy/resource_center/entity/admin/AdminData.java b/src/main/java/com/sztzjy/resource_center/entity/admin/AdminData.java index a47a153..99b8363 100644 --- a/src/main/java/com/sztzjy/resource_center/entity/admin/AdminData.java +++ b/src/main/java/com/sztzjy/resource_center/entity/admin/AdminData.java @@ -2,7 +2,6 @@ package com.sztzjy.resource_center.entity.admin; import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; /** * diff --git a/src/main/java/com/sztzjy/resource_center/entity/admin/AdminDataReturnDto.java b/src/main/java/com/sztzjy/resource_center/entity/admin/AdminDataReturnDto.java index 1d08bf0..98dd734 100644 --- a/src/main/java/com/sztzjy/resource_center/entity/admin/AdminDataReturnDto.java +++ b/src/main/java/com/sztzjy/resource_center/entity/admin/AdminDataReturnDto.java @@ -31,12 +31,18 @@ public class AdminDataReturnDto { @ApiModelProperty("数据应用场景") private String dataScenarios; + @ApiModelProperty("数据应用场景原始数据") + private String dataScenariosOriginal; + @ApiModelProperty("收藏ID") private String collectId; @ApiModelProperty("字段描述") private String fieldDescription; + @ApiModelProperty("字段描述原始数据") + private String fieldDescriptionOriginal; + @ApiModelProperty("创建时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private Date createTime; diff --git a/src/main/java/com/sztzjy/resource_center/entity/admin/AdminDataWithBLOBs.java b/src/main/java/com/sztzjy/resource_center/entity/admin/AdminDataWithBLOBs.java index 0371aad..2961e2e 100644 --- a/src/main/java/com/sztzjy/resource_center/entity/admin/AdminDataWithBLOBs.java +++ b/src/main/java/com/sztzjy/resource_center/entity/admin/AdminDataWithBLOBs.java @@ -1,5 +1,6 @@ package com.sztzjy.resource_center.entity.admin; +import com.sztzjy.resource_center.entity.admin.AdminData; import io.swagger.annotations.ApiModelProperty; /** * @@ -10,9 +11,15 @@ public class AdminDataWithBLOBs extends AdminData { @ApiModelProperty("数据应用场景") private String dataScenarios; + @ApiModelProperty("数据应用场景原始数据") + private String dataScenariosOriginal; + @ApiModelProperty("字段描述") private String fieldDescription; + @ApiModelProperty("字段描述原始数据") + private String fieldDescriptionOriginal; + public String getDataScenarios() { return dataScenarios; } @@ -21,6 +28,14 @@ public class AdminDataWithBLOBs extends AdminData { this.dataScenarios = dataScenarios == null ? null : dataScenarios.trim(); } + public String getDataScenariosOriginal() { + return dataScenariosOriginal; + } + + public void setDataScenariosOriginal(String dataScenariosOriginal) { + this.dataScenariosOriginal = dataScenariosOriginal == null ? null : dataScenariosOriginal.trim(); + } + public String getFieldDescription() { return fieldDescription; } @@ -28,4 +43,12 @@ public class AdminDataWithBLOBs extends AdminData { public void setFieldDescription(String fieldDescription) { this.fieldDescription = fieldDescription == null ? null : fieldDescription.trim(); } + + public String getFieldDescriptionOriginal() { + return fieldDescriptionOriginal; + } + + public void setFieldDescriptionOriginal(String fieldDescriptionOriginal) { + this.fieldDescriptionOriginal = fieldDescriptionOriginal == null ? null : fieldDescriptionOriginal.trim(); + } } \ No newline at end of file diff --git a/src/main/java/com/sztzjy/resource_center/mapper/SysCaseQuestionStepMapper.java b/src/main/java/com/sztzjy/resource_center/mapper/SysCaseQuestionStepMapper.java index 007d1ec..69b44c5 100644 --- a/src/main/java/com/sztzjy/resource_center/mapper/SysCaseQuestionStepMapper.java +++ b/src/main/java/com/sztzjy/resource_center/mapper/SysCaseQuestionStepMapper.java @@ -45,4 +45,6 @@ public interface SysCaseQuestionStepMapper { List selectTrainingByIds(@Param("list") List caseStepIdList); List getCaseStepByIds(@Param("ids") List ids); + + List selectCaseStepListBatchByIdListAndSort(@Param("threeId") String threeId); } \ No newline at end of file diff --git a/src/main/java/com/sztzjy/resource_center/mapper/SysResourceDataMapper.java b/src/main/java/com/sztzjy/resource_center/mapper/SysResourceDataMapper.java index 5f8129c..6feb42c 100644 --- a/src/main/java/com/sztzjy/resource_center/mapper/SysResourceDataMapper.java +++ b/src/main/java/com/sztzjy/resource_center/mapper/SysResourceDataMapper.java @@ -3,6 +3,7 @@ package com.sztzjy.resource_center.mapper; import com.sztzjy.resource_center.entity.SysResourceData; import com.sztzjy.resource_center.entity.SysResourceDataExample; import java.util.List; +import java.util.Map; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -29,4 +30,6 @@ public interface SysResourceDataMapper { int updateByPrimaryKeySelective(SysResourceData record); int updateByPrimaryKey(SysResourceData record); + + List> getByIds(@Param("ids") List ids); } \ No newline at end of file diff --git a/src/main/java/com/sztzjy/resource_center/mapper/admin/AdminDataMapper.java b/src/main/java/com/sztzjy/resource_center/mapper/admin/AdminDataMapper.java index 19f6732..115a62d 100644 --- a/src/main/java/com/sztzjy/resource_center/mapper/admin/AdminDataMapper.java +++ b/src/main/java/com/sztzjy/resource_center/mapper/admin/AdminDataMapper.java @@ -4,11 +4,10 @@ import com.sztzjy.resource_center.entity.admin.AdminData; import com.sztzjy.resource_center.entity.admin.AdminDataExample; import com.sztzjy.resource_center.entity.admin.AdminDataReturnDto; import com.sztzjy.resource_center.entity.admin.AdminDataWithBLOBs; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; @Mapper public interface AdminDataMapper { long countByExample(AdminDataExample example); diff --git a/src/main/java/com/sztzjy/resource_center/util/CompressUtil.java b/src/main/java/com/sztzjy/resource_center/util/CompressUtil.java index 40ba6f6..8748cf9 100644 --- a/src/main/java/com/sztzjy/resource_center/util/CompressUtil.java +++ b/src/main/java/com/sztzjy/resource_center/util/CompressUtil.java @@ -48,7 +48,51 @@ public class CompressUtil { if (keepDirStructure != null && keepDirStructure) { zos.putNextEntry(new ZipEntry(relativePath)); } else { - zos.putNextEntry(new ZipEntry(i + "_" + relativeName)); + zos.putNextEntry(new ZipEntry(relativeName)); + } + int len; + while ((len = fis.read(buf)) > 0) { + zos.write(buf, 0, len); + } + zos.closeEntry(); + // zos.close(); + } + zos.close(); + if (!zipFile.exists()) { + zipFile.createNewFile(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + + /** + * 生成zip压缩文件 + * @param filePaths + * @param zipFilePath + * @param keepDirStructure + */ + public static void compress11(List> filePaths, String zipFilePath, Boolean keepDirStructure) { + byte[] buf = new byte[1024]; + File zipFile = new File(zipFilePath); + try { + ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile)); + for (int i = 0; i < filePaths.size(); i++) { + String relativeName = filePaths.get(i).get("resource_name"); + String relativePath = filePath+filePaths.get(i).get("url"); + if (StringUtils.isEmpty(relativePath)) { + continue; + } + File sourceFile = new File(relativePath); + if (sourceFile == null || !sourceFile.exists()) { + continue; + } + FileInputStream fis = new FileInputStream(sourceFile); + if (keepDirStructure != null && keepDirStructure) { + zos.putNextEntry(new ZipEntry(relativePath)); + } else { + zos.putNextEntry(new ZipEntry(relativeName)); } int len; while ((len = fis.read(buf)) > 0) { diff --git a/src/main/java/com/sztzjy/resource_center/util/file/IFileUtil.java b/src/main/java/com/sztzjy/resource_center/util/file/IFileUtil.java index 586fd27..266130f 100644 --- a/src/main/java/com/sztzjy/resource_center/util/file/IFileUtil.java +++ b/src/main/java/com/sztzjy/resource_center/util/file/IFileUtil.java @@ -84,6 +84,6 @@ public interface IFileUtil { */ String getDiskRelativePath(String fileName, String suffix); - String uploadByRelativePath(MultipartFile file, String relativePath); + String uploadByRelativePath(MultipartFile file, String relativePath,String caseName); } diff --git a/src/main/java/com/sztzjy/resource_center/util/file/LocalFileUtil.java b/src/main/java/com/sztzjy/resource_center/util/file/LocalFileUtil.java index 45ada64..71320f6 100644 --- a/src/main/java/com/sztzjy/resource_center/util/file/LocalFileUtil.java +++ b/src/main/java/com/sztzjy/resource_center/util/file/LocalFileUtil.java @@ -176,24 +176,29 @@ public class LocalFileUtil implements IFileUtil{ } - public String uploadByRelativePath(MultipartFile file, String relativePath) { + public String uploadByRelativePath(MultipartFile file, String relativePath,String caseName) { Assert.isTrue(!file.isEmpty(), "文件不存在"); - String originalFilename = file.getOriginalFilename(); try { - String filePath; + // 创建目录如果不存在 + File directory = new File(relativePath); + if (!directory.exists()) { + directory.mkdirs(); + } + // 设置目标文件路径 + String result = caseName == null ? file.getOriginalFilename() : caseName; - relativePath = relativePath.endsWith("/") ? relativePath : relativePath + "/"; - filePath = relativePath + originalFilename; + int i = file.getOriginalFilename().lastIndexOf("."); + String substring = file.getOriginalFilename().substring(i); + + File destFile = new File(relativePath + File.separator + result+substring); - File destFile = new File(getFullPath(filePath)); - destFile.getParentFile().mkdirs(); file.transferTo(destFile); - return filePath; + return "上传成功!"; } catch (FileNotFoundException e) { - throw new IllegalArgumentException("上传文件失败,FileNotFound错误"); + throw new IllegalArgumentException("上传文件失败,FileNotFound错误", e); } catch (IOException e) { - throw new IllegalArgumentException("上传文件失败,IO错误"); + throw new IllegalArgumentException("上传文件失败,IO错误", e); } } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index efaf92f..a770766 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -13,7 +13,7 @@ spring: application: name: trading_system profiles: - active: dev + active: pro mvc: pathmatch: matching-strategy: ant_path_matcher diff --git a/src/main/resources/generatorConfig.xml b/src/main/resources/generatorConfig.xml index 5bd6340..718d157 100644 --- a/src/main/resources/generatorConfig.xml +++ b/src/main/resources/generatorConfig.xml @@ -46,14 +46,14 @@ - + - +
diff --git a/src/main/resources/mapper/AdminDataMapper.xml b/src/main/resources/mapper/AdminDataMapper.xml index 32fbb32..f70772c 100644 --- a/src/main/resources/mapper/AdminDataMapper.xml +++ b/src/main/resources/mapper/AdminDataMapper.xml @@ -1,388 +1,412 @@ - - - - - - - - - - - - - - - - - - - - - and ${criterion.condition} - - - and ${criterion.condition} #{criterion.value} - - - and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} - - - and ${criterion.condition} - - #{listItem} - - - - - - + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + - - - - - - - - - - - and ${criterion.condition} - - - and ${criterion.condition} #{criterion.value} - - - and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} - - - and ${criterion.condition} - - #{listItem} - - - - - - - - - - - data_id - , name, picture_url, status, source, create_time - - - data_scenarios - , field_description - - - - - - delete - from admin_data - where data_id = #{dataId,jdbcType=VARCHAR} - - - delete from admin_data - - - - - - insert into admin_data (data_id, name, picture_url, - status, source, create_time, - data_scenarios, field_description) - values (#{dataId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{pictureUrl,jdbcType=VARCHAR}, - #{status,jdbcType=INTEGER}, #{source,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, - #{dataScenarios,jdbcType=LONGVARCHAR}, #{fieldDescription,jdbcType=LONGVARCHAR}) - - - insert into admin_data - - - data_id, - - - name, - - - picture_url, - - - status, - - - source, - - - create_time, - - - data_scenarios, - - - field_description, - - - - - #{dataId,jdbcType=VARCHAR}, - - - #{name,jdbcType=VARCHAR}, - - - #{pictureUrl,jdbcType=VARCHAR}, - - - #{status,jdbcType=INTEGER}, - - - #{source,jdbcType=VARCHAR}, - - - #{createTime,jdbcType=TIMESTAMP}, - - - #{dataScenarios,jdbcType=LONGVARCHAR}, - - - #{fieldDescription,jdbcType=LONGVARCHAR}, - - - - - - update admin_data - - - data_id = #{record.dataId,jdbcType=VARCHAR}, - - - name = #{record.name,jdbcType=VARCHAR}, - - - picture_url = #{record.pictureUrl,jdbcType=VARCHAR}, - - - status = #{record.status,jdbcType=INTEGER}, - - - source = #{record.source,jdbcType=VARCHAR}, - - - create_time = #{record.createTime,jdbcType=TIMESTAMP}, - - - data_scenarios = #{record.dataScenarios,jdbcType=LONGVARCHAR}, - - - field_description = #{record.fieldDescription,jdbcType=LONGVARCHAR}, - - - - + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + - - - update admin_data - set data_id = #{record.dataId,jdbcType=VARCHAR}, + + + + + data_id, name, picture_url, status, source, create_time + + + data_scenarios, data_scenarios_original, field_description, field_description_original + + + + + + delete from admin_data + where data_id = #{dataId,jdbcType=VARCHAR} + + + delete from admin_data + + + + + + insert into admin_data (data_id, name, picture_url, + status, source, create_time, + data_scenarios, data_scenarios_original, + field_description, field_description_original + ) + values (#{dataId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{pictureUrl,jdbcType=VARCHAR}, + #{status,jdbcType=INTEGER}, #{source,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, + #{dataScenarios,jdbcType=LONGVARCHAR}, #{dataScenariosOriginal,jdbcType=LONGVARCHAR}, + #{fieldDescription,jdbcType=LONGVARCHAR}, #{fieldDescriptionOriginal,jdbcType=LONGVARCHAR} + ) + + + insert into admin_data + + + data_id, + + + name, + + + picture_url, + + + status, + + + source, + + + create_time, + + + data_scenarios, + + + data_scenarios_original, + + + field_description, + + + field_description_original, + + + + + #{dataId,jdbcType=VARCHAR}, + + + #{name,jdbcType=VARCHAR}, + + + #{pictureUrl,jdbcType=VARCHAR}, + + + #{status,jdbcType=INTEGER}, + + + #{source,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{dataScenarios,jdbcType=LONGVARCHAR}, + + + #{dataScenariosOriginal,jdbcType=LONGVARCHAR}, + + + #{fieldDescription,jdbcType=LONGVARCHAR}, + + + #{fieldDescriptionOriginal,jdbcType=LONGVARCHAR}, + + + + + + update admin_data + + + data_id = #{record.dataId,jdbcType=VARCHAR}, + + name = #{record.name,jdbcType=VARCHAR}, + + picture_url = #{record.pictureUrl,jdbcType=VARCHAR}, + + status = #{record.status,jdbcType=INTEGER}, + + source = #{record.source,jdbcType=VARCHAR}, + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + data_scenarios = #{record.dataScenarios,jdbcType=LONGVARCHAR}, - field_description = #{record.fieldDescription,jdbcType=LONGVARCHAR} - - - - - - update admin_data - set data_id = #{record.dataId,jdbcType=VARCHAR}, - name = #{record.name,jdbcType=VARCHAR}, - picture_url = #{record.pictureUrl,jdbcType=VARCHAR}, - status = #{record.status,jdbcType=INTEGER}, - source = #{record.source,jdbcType=VARCHAR}, - create_time = #{record.createTime,jdbcType=TIMESTAMP} - - - - - - update admin_data - - - name = #{name,jdbcType=VARCHAR}, - - - picture_url = #{pictureUrl,jdbcType=VARCHAR}, - - - status = #{status,jdbcType=INTEGER}, - - - source = #{source,jdbcType=VARCHAR}, - - - create_time = #{createTime,jdbcType=TIMESTAMP}, - - - data_scenarios = #{dataScenarios,jdbcType=LONGVARCHAR}, - - - field_description = #{fieldDescription,jdbcType=LONGVARCHAR}, - - - where data_id = #{dataId,jdbcType=VARCHAR} - - - update admin_data - set name = #{name,jdbcType=VARCHAR}, - picture_url = #{pictureUrl,jdbcType=VARCHAR}, - status = #{status,jdbcType=INTEGER}, - source = #{source,jdbcType=VARCHAR}, - create_time = #{createTime,jdbcType=TIMESTAMP}, - data_scenarios = #{dataScenarios,jdbcType=LONGVARCHAR}, - field_description = #{fieldDescription,jdbcType=LONGVARCHAR} - where data_id = #{dataId,jdbcType=VARCHAR} - - - update admin_data - set name = #{name,jdbcType=VARCHAR}, - picture_url = #{pictureUrl,jdbcType=VARCHAR}, - status = #{status,jdbcType=INTEGER}, - source = #{source,jdbcType=VARCHAR}, - create_time = #{createTime,jdbcType=TIMESTAMP} - where data_id = #{dataId,jdbcType=VARCHAR} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + data_scenarios_original = #{record.dataScenariosOriginal,jdbcType=LONGVARCHAR}, + + + field_description = #{record.fieldDescription,jdbcType=LONGVARCHAR}, + + + field_description_original = #{record.fieldDescriptionOriginal,jdbcType=LONGVARCHAR}, + + + + + + + + update admin_data + set data_id = #{record.dataId,jdbcType=VARCHAR}, + name = #{record.name,jdbcType=VARCHAR}, + picture_url = #{record.pictureUrl,jdbcType=VARCHAR}, + status = #{record.status,jdbcType=INTEGER}, + source = #{record.source,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + data_scenarios = #{record.dataScenarios,jdbcType=LONGVARCHAR}, + data_scenarios_original = #{record.dataScenariosOriginal,jdbcType=LONGVARCHAR}, + field_description = #{record.fieldDescription,jdbcType=LONGVARCHAR}, + field_description_original = #{record.fieldDescriptionOriginal,jdbcType=LONGVARCHAR} + + + + + + update admin_data + set data_id = #{record.dataId,jdbcType=VARCHAR}, + name = #{record.name,jdbcType=VARCHAR}, + picture_url = #{record.pictureUrl,jdbcType=VARCHAR}, + status = #{record.status,jdbcType=INTEGER}, + source = #{record.source,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP} + + + + + + update admin_data + + + name = #{name,jdbcType=VARCHAR}, + + + picture_url = #{pictureUrl,jdbcType=VARCHAR}, + + + status = #{status,jdbcType=INTEGER}, + + + source = #{source,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + data_scenarios = #{dataScenarios,jdbcType=LONGVARCHAR}, + + + data_scenarios_original = #{dataScenariosOriginal,jdbcType=LONGVARCHAR}, + + + field_description = #{fieldDescription,jdbcType=LONGVARCHAR}, + + + field_description_original = #{fieldDescriptionOriginal,jdbcType=LONGVARCHAR}, + + + where data_id = #{dataId,jdbcType=VARCHAR} + + + update admin_data + set name = #{name,jdbcType=VARCHAR}, + picture_url = #{pictureUrl,jdbcType=VARCHAR}, + status = #{status,jdbcType=INTEGER}, + source = #{source,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + data_scenarios = #{dataScenarios,jdbcType=LONGVARCHAR}, + data_scenarios_original = #{dataScenariosOriginal,jdbcType=LONGVARCHAR}, + field_description = #{fieldDescription,jdbcType=LONGVARCHAR}, + field_description_original = #{fieldDescriptionOriginal,jdbcType=LONGVARCHAR} + where data_id = #{dataId,jdbcType=VARCHAR} + + + update admin_data + set name = #{name,jdbcType=VARCHAR}, + picture_url = #{pictureUrl,jdbcType=VARCHAR}, + status = #{status,jdbcType=INTEGER}, + source = #{source,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP} + where data_id = #{dataId,jdbcType=VARCHAR} + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/src/main/resources/mapper/SysCaseQuestionStepMapper.xml b/src/main/resources/mapper/SysCaseQuestionStepMapper.xml index 0a95801..809df3a 100644 --- a/src/main/resources/mapper/SysCaseQuestionStepMapper.xml +++ b/src/main/resources/mapper/SysCaseQuestionStepMapper.xml @@ -421,7 +421,8 @@ + + \ No newline at end of file diff --git a/src/main/resources/mapper/SysResourceDataMapper.xml b/src/main/resources/mapper/SysResourceDataMapper.xml index 5178c53..40164ea 100644 --- a/src/main/resources/mapper/SysResourceDataMapper.xml +++ b/src/main/resources/mapper/SysResourceDataMapper.xml @@ -223,4 +223,12 @@ source = #{source,jdbcType=VARCHAR} where resource_data_id = #{resourceDataId,jdbcType=VARCHAR} + \ No newline at end of file