Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/com/teaching/backend/service/impl/chapter/ChapterServiceImpl.java
master
小萌新 7 months ago
commit 4b68da7b83
  1. 25
      pom.xml
  2. 2
      src/main/java/com/teaching/backend/common/ErrorCode.java
  3. 1
      src/main/java/com/teaching/backend/config/CorsConfig.java
  4. 23
      src/main/java/com/teaching/backend/config/NonStaticResourceHttpRequestHandler.java
  5. 16
      src/main/java/com/teaching/backend/config/SecurityConfig.java
  6. 74
      src/main/java/com/teaching/backend/constant/ViewContentTypeEnum.java
  7. 129
      src/main/java/com/teaching/backend/controller/Know/KnowController.java
  8. 164
      src/main/java/com/teaching/backend/controller/KnowGraph/KnowController.java
  9. 56
      src/main/java/com/teaching/backend/controller/KnowGraph/KnowGraphController.java
  10. 90
      src/main/java/com/teaching/backend/controller/KnowGraph/ResourcesController.java
  11. 56
      src/main/java/com/teaching/backend/controller/Knowtmp/KnowtmpController.java
  12. 22
      src/main/java/com/teaching/backend/controller/courses/CoursesController.java
  13. 1
      src/main/java/com/teaching/backend/controller/courses/ObjectiveContentsController.java
  14. 4
      src/main/java/com/teaching/backend/controller/favour/SeCourseFavourController.java
  15. 46
      src/main/java/com/teaching/backend/controller/records/BaseSourceApiController.java
  16. 56
      src/main/java/com/teaching/backend/controller/records/Bf.java
  17. 2
      src/main/java/com/teaching/backend/controller/records/CourseLearningRecordController.java
  18. 66
      src/main/java/com/teaching/backend/controller/records/KnowledgeLearningRecordController.java
  19. 131
      src/main/java/com/teaching/backend/controller/records/ResourceLearningRecordController.java
  20. 81
      src/main/java/com/teaching/backend/controller/resource/ResourceController.java
  21. 6
      src/main/java/com/teaching/backend/controller/umsAdmin/ReportController.java
  22. 78
      src/main/java/com/teaching/backend/mapper/KnowGraph/KnowRepository.java
  23. 43
      src/main/java/com/teaching/backend/mapper/KnowGraph/ResourcesRepository.java
  24. 15
      src/main/java/com/teaching/backend/mapper/Knowtemp/KnowtempMapper.java
  25. 18
      src/main/java/com/teaching/backend/mapper/Knowtemp/KnowtmpMapper.java
  26. 6
      src/main/java/com/teaching/backend/mapper/favour/SeCourseFavourMapper.java
  27. 66
      src/main/java/com/teaching/backend/mapper/know/KnowRepository.java
  28. 11
      src/main/java/com/teaching/backend/mapper/records/KnowledgeLearningRecordMapper.java
  29. 6
      src/main/java/com/teaching/backend/mapper/records/ResourceLearningRecordMapper.java
  30. 17
      src/main/java/com/teaching/backend/mapper/resource/ResourceLearningNumberMapper.java
  31. 20
      src/main/java/com/teaching/backend/mapper/resource/ResourcesMapper.java
  32. 64
      src/main/java/com/teaching/backend/mapper/resource/ResourcesRepository.java
  33. 4
      src/main/java/com/teaching/backend/model/dto/Know/BaseKnowReturn.java
  34. 4
      src/main/java/com/teaching/backend/model/dto/Know/KnowChapterCreateRequest.java
  35. 4
      src/main/java/com/teaching/backend/model/dto/Know/KnowCourseCreateRequest.java
  36. 4
      src/main/java/com/teaching/backend/model/dto/Know/KnowRequest.java
  37. 4
      src/main/java/com/teaching/backend/model/dto/Know/KnowUpdateRequest.java
  38. 2
      src/main/java/com/teaching/backend/model/dto/Know/RelationshipKnowRequest.java
  39. 2
      src/main/java/com/teaching/backend/model/dto/Know/RelationshipResourceRequest.java
  40. 22
      src/main/java/com/teaching/backend/model/dto/KnowGraph/ResourceUpdateRequest.java
  41. 19
      src/main/java/com/teaching/backend/model/dto/KnowGraph/ResourcesAddRequest.java
  42. 15
      src/main/java/com/teaching/backend/model/dto/KnowGraph/ResourcesRequest.java
  43. 6
      src/main/java/com/teaching/backend/model/dto/Knowtmp/KnowtempAdd.java
  44. 5
      src/main/java/com/teaching/backend/model/dto/Knowtmp/KnowtempUpdate.java
  45. 31
      src/main/java/com/teaching/backend/model/dto/resource/BucketPolicyConfigDto.java
  46. 22
      src/main/java/com/teaching/backend/model/dto/resource/ResourceUploadDto.java
  47. 32
      src/main/java/com/teaching/backend/model/dto/upload/UploadFileParamsDto.java
  48. 6
      src/main/java/com/teaching/backend/model/entity/chapter/Chapter.java
  49. 4
      src/main/java/com/teaching/backend/model/entity/know/Know.java
  50. 5
      src/main/java/com/teaching/backend/model/entity/know/KnowChapter.java
  51. 3
      src/main/java/com/teaching/backend/model/entity/know/KnowCourse.java
  52. 2
      src/main/java/com/teaching/backend/model/entity/know/Links.java
  53. 10
      src/main/java/com/teaching/backend/model/entity/knowtmp/Knowtmp.java
  54. 4
      src/main/java/com/teaching/backend/model/entity/records/KnowledgeLearningRecord.java
  55. 4
      src/main/java/com/teaching/backend/model/entity/records/ResourceLearningRecord.java
  56. 47
      src/main/java/com/teaching/backend/model/entity/resource/Resource.java
  57. 47
      src/main/java/com/teaching/backend/model/entity/resource/ResourceLearningNumber.java
  58. 8
      src/main/java/com/teaching/backend/model/entity/resource/Resources.java
  59. 44
      src/main/java/com/teaching/backend/model/vo/courses/PersonalCenterStudentListVO.java
  60. 1
      src/main/java/com/teaching/backend/model/vo/knowGraph/KnowVO.java
  61. 4
      src/main/java/com/teaching/backend/model/vo/records/CourseLearningRecordsVo.java
  62. 37
      src/main/java/com/teaching/backend/model/vo/records/KnowledgeLearningRecordVo.java
  63. 29
      src/main/java/com/teaching/backend/model/vo/records/ResourceLearingRecordVo.java
  64. 74
      src/main/java/com/teaching/backend/service/Know/KnowService.java
  65. 138
      src/main/java/com/teaching/backend/service/KnowGraph/KnowGraphService.java
  66. 431
      src/main/java/com/teaching/backend/service/KnowGraph/KnowService.java
  67. 107
      src/main/java/com/teaching/backend/service/KnowGraph/ResourcesService.java
  68. 3
      src/main/java/com/teaching/backend/service/courses/ICoursesService.java
  69. 2
      src/main/java/com/teaching/backend/service/favour/SeCourseFavourService.java
  70. 268
      src/main/java/com/teaching/backend/service/impl/chapter/ChapterServiceImpl.java
  71. 40
      src/main/java/com/teaching/backend/service/impl/courses/CourseObjectivesServiceImpl.java
  72. 117
      src/main/java/com/teaching/backend/service/impl/courses/CoursesServiceImpl.java
  73. 29
      src/main/java/com/teaching/backend/service/impl/courses/ObjectiveContentKnowServiceImpl.java
  74. 2
      src/main/java/com/teaching/backend/service/impl/courses/ObjectiveContentsServiceImpl.java
  75. 26
      src/main/java/com/teaching/backend/service/impl/favour/SeCourseFavourServiceImpl.java
  76. 252
      src/main/java/com/teaching/backend/service/impl/know/knowServiceImpl.java
  77. 79
      src/main/java/com/teaching/backend/service/impl/knowtmp/KnowtmpServiceImpl.java
  78. 6
      src/main/java/com/teaching/backend/service/impl/records/CourseLearningRecordServiceImpl.java
  79. 119
      src/main/java/com/teaching/backend/service/impl/records/KnowledgeLearningRecordServiceImpl.java
  80. 203
      src/main/java/com/teaching/backend/service/impl/records/ResourceLearningRecordServiceImpl.java
  81. 29
      src/main/java/com/teaching/backend/service/impl/report/ReportServiceImpl.java
  82. 22
      src/main/java/com/teaching/backend/service/impl/resource/ResourceLearningNumberServiceImpl.java
  83. 171
      src/main/java/com/teaching/backend/service/impl/resource/ResourceServiceImpl.java
  84. 31
      src/main/java/com/teaching/backend/service/knowtmp/KnowtmpService.java
  85. 13
      src/main/java/com/teaching/backend/service/records/IKnowledgeLearningRecordService.java
  86. 7
      src/main/java/com/teaching/backend/service/records/IResourceLearningRecordService.java
  87. 2
      src/main/java/com/teaching/backend/service/report/ReportService.java
  88. 17
      src/main/java/com/teaching/backend/service/resource/IResourceLearningNumberService.java
  89. 33
      src/main/java/com/teaching/backend/service/resource/ResourceService.java
  90. 5
      src/main/java/com/teaching/backend/utils/Constants.java
  91. 4
      src/main/java/com/teaching/backend/utils/CourseCode.java
  92. 154
      src/main/java/com/teaching/backend/utils/MinioUtils.java
  93. 115
      src/main/java/com/teaching/backend/utils/UploadUtils.java
  94. 35
      src/main/java/com/teaching/backend/utils/knowGraph/AddNeoKnowByCourse.java
  95. 9
      src/main/resources/application.yml
  96. 5
      src/main/resources/mapper/CourseLearningRecordMapper.xml
  97. 20
      src/main/resources/mapper/KnowledgeLearningRecordMapper.xml
  98. 4
      src/main/resources/mapper/SeCourseFavourMapper.xml
  99. 101
      src/test/java/com/teaching/MinioTest.java
  100. 36
      src/test/java/com/teaching/test.java

@ -45,6 +45,12 @@
<artifactId>poi-ooxml</artifactId>
</dependency>
<!--MinIO Java SDK依赖-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
@ -221,6 +227,25 @@
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- 文件下载-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.10</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.6</version>
</dependency>
</dependencies>

@ -18,7 +18,7 @@ public enum ErrorCode {
STUDENT_NOT_EXIT(40006, "缺少学生信息"),
COURSES_NOT_EXIT(40007, "缺少课程信息"),
CONTENT_NOT_EXIT(40008, "内容id不存在"),
KNOWS_EXIT(40009, "该项下面存在关联的知识点"),
KNOWS_EXIT(40009, "该项下面存在关联的知识点,请在删除关联的知识点后再来操作!"),
INVALID_ROLE(400010, "角色不存在"),
NOT_LOGIN_ERROR(40100, "未登录"),

@ -11,6 +11,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// 覆盖所有请求

@ -0,0 +1,23 @@
package com.teaching.backend.config;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
import javax.servlet.http.HttpServletRequest;
/**
* @author longge93
*/
@Component
public class NonStaticResourceHttpRequestHandler extends ResourceHttpRequestHandler {
public final static String ATTR_FILE = "NON-STATIC-FILE";
@Override
protected Resource getResource(HttpServletRequest request) {
String filePath = (String) request.getAttribute(ATTR_FILE);
return new FileSystemResource(filePath);
}
}

@ -12,6 +12,8 @@ import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.access.intercept.FilterSecurityInterceptor;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.firewall.HttpFirewall;
import org.springframework.security.web.firewall.StrictHttpFirewall;
/**
@ -35,6 +37,20 @@ public class SecurityConfig {
@Autowired(required = false)
private DynamicSecurityFilter dynamicSecurityFilter;
/**
* 配置地址栏不能识别 // 的情况
* @return
*/
@Bean
public HttpFirewall allowUrlEncodedSlashHttpFirewall() {
StrictHttpFirewall firewall = new StrictHttpFirewall();
//此处可添加别的规则,目前只设置 允许双 //
firewall.setAllowUrlEncodedDoubleSlash(true);
return firewall;
}
@Bean
SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity

@ -0,0 +1,74 @@
package com.teaching.backend.constant;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* @Author:youhang
* @Date:2024-08-07-9:14
* @Description:
*/
public enum ViewContentTypeEnum {
DEFAULT("default","application/octet-stream"),
PNG("png", "image/png"),
JPEG("jpeg", "image/jpeg"),
JPG("jpg", "image/jpeg"),
GIF("gif", "image/gif"),
WBMP("wbmp", "image/vnd.wap.wbmp"),
TIFF("tiff", "image/tiff"),
JFIF("jfif", "image/jpeg"),
TIF("tif", "image/tiff"),
FAX("fax", "image/fax"),
JPE("jpe", "image/jpeg"),
NET("net", "image/pnetvue"),
RP("rp", "image/vnd.rn-realpix"),
ICO("ico", "image/x-icon");
private String prefix;
private String type;
private static final Map<String, ViewContentTypeEnum> ENUM_MAP = new HashMap<>();
static {
ViewContentTypeEnum[] values = values();
for (ViewContentTypeEnum value : values) {
ENUM_MAP.put(value.getPrefix(), value);
}
}
public static String getTypeByPrefix(String prefix) {
ViewContentTypeEnum viewContentTypeEnum = ENUM_MAP.get(prefix);
if (viewContentTypeEnum == null) {
return prefix;
}
return viewContentTypeEnum.getType();
}
public static String getContentType(String prefix){
if(StringUtils.isEmpty(prefix)){
return DEFAULT.getType();
}
prefix = prefix.substring(prefix.lastIndexOf(".") + 1);
String type = getTypeByPrefix(prefix);
if (StringUtils.isNotEmpty(type)) {
return type;
}
return DEFAULT.getType();
}
ViewContentTypeEnum(String prefix, String type) {
this.prefix = prefix;
this.type = type;
}
public String getPrefix() {
return prefix;
}
public String getType() {
return type;
}
}

@ -0,0 +1,129 @@
package com.teaching.backend.controller.Know;
/**
* @Author:youhang
* @Date:2024-06-09-9:55
* @Description:
*/
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.dto.Know.*;
import com.teaching.backend.model.entity.know.Know;
import com.teaching.backend.model.entity.know.KnowChapter;
import com.teaching.backend.model.entity.know.KnowCourse;
import com.teaching.backend.model.entity.resource.Resources;
import com.teaching.backend.model.vo.knowGraph.KnowVO1;
import com.teaching.backend.service.Know.KnowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Set;
@RestController
@RequestMapping("/knowNeo")
public class KnowController {
@Autowired
private KnowService knowService;
// 添加知识点
@PostMapping("/addKnow")
BaseResponse<String> addKnow(@RequestBody KnowRequest knowRequest){
return knowService.addKnow(knowRequest);
}
// 修改知识点
@PostMapping("/updateKnow")
BaseResponse<String> updateKnow(@RequestBody KnowUpdateRequest knowUpdateRequest){
return knowService.updateKnow(knowUpdateRequest);
}
// 删除知识点
@GetMapping("/deleteKnow")
BaseResponse<String> deleteKnow(@RequestParam Long id){
return knowService.deleteKnow(id);
}
//查询知识点通过id
@GetMapping("/queryKnow")
BaseResponse<Know> queryKnow(@RequestParam Long id){
return knowService.queryKnow(id);
}
//======================================
// 添加课程
@PostMapping("/addCourse")
BaseResponse<String> addCourse(@RequestBody KnowCourseCreateRequest knowCourseCreateRequest){
return knowService.addCourse(knowCourseCreateRequest);
}
// 修改课程
@PostMapping("/updateCourse")
BaseResponse<String> updateCourse(@RequestBody KnowCourseCreateRequest knowCourseCreateRequest){
return knowService.updateCourse(knowCourseCreateRequest);
}
// 删除课程
@PostMapping("/deleteCourse")
BaseResponse<String> deleteCourse(@RequestParam String courseId){
return knowService.deleteCourse(courseId);
}
//查询课程通过courseid
@GetMapping ("/queryCourse")
BaseResponse<KnowCourse> queryCourse(@RequestParam String courseId){
return knowService.queryCourse(courseId);
}
//=========================
// 添加章节
@PostMapping("/addChapter")
BaseResponse<String> addChapter(@RequestBody KnowChapterCreateRequest knowChapterCreateRequest){
return knowService.addChapter(knowChapterCreateRequest);
}
// 修改章节
@PostMapping("/updateChapter")
BaseResponse<String> updateChapter(@RequestBody KnowChapterCreateRequest knowChapterCreateRequest){
return knowService.updateChapter(knowChapterCreateRequest);
}
// 删除章节
@GetMapping("/deleteChapter")
BaseResponse<String> deleteChapter(@RequestParam Long chapterId){
return knowService.deleteChapter(chapterId);
}
//查询章节通过chapterId
@PostMapping("/queryChapter")
BaseResponse<KnowChapter> queryChapter(@RequestParam Long chapterId){
return knowService.queryChapter(chapterId);
}
//=====================
//获取课程下的所有知识点
@GetMapping("/getAllKnowByCourseId")
BaseKnowReturn getAllKnowByCourseId(@RequestParam String id){
return knowService.getAllKnowByCourseId(id);
}
//获取课程下的所有资源
@GetMapping("/getAllResourcesByCourseId")
BaseResponse<Set<KnowVO1>> getAllResourcesByCourseId(@RequestParam String id){
return knowService.getAllResourcesByCourseId(id);
}
//获取知识点下二级的所有资源
@GetMapping("/getSecondResources")
Set<Resources> getSecondResources(@RequestParam Long id){
return knowService.getSecondResources(id);
}
}

@ -1,164 +0,0 @@
package com.teaching.backend.controller.KnowGraph;
/**
* @Author:youhang
* @Date:2024-06-09-9:55
* @Description:
*/
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.model.dto.KnowGraph.BaseKnowReturn;
import com.teaching.backend.model.dto.Knowtemp.KnowtempAdd;
import com.teaching.backend.model.dto.Knowtemp.KnowtempUpdate;
import com.teaching.backend.model.entity.Knowtemp.Knowtemp;
import com.teaching.backend.model.vo.knowGraph.KnowVO;
import com.teaching.backend.model.vo.knowGraph.KnowVO1;
import com.teaching.backend.service.KnowGraph.KnowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Set;
@RestController
@RequestMapping("/know")
public class KnowController {
@Autowired
private KnowService knowService;
//根据 章节id 创建知识点到mysql中
@PostMapping("/add")
public BaseResponse<String> add(@RequestBody KnowtempAdd knowtempAdd) {
return knowService.add(knowtempAdd);
}
@PostMapping("/update")
public BaseResponse<String> update(@RequestBody KnowtempUpdate knowtempUpdate) {
return knowService.update(knowtempUpdate);
}
@PostMapping("/delete")
public BaseResponse<String> delete(@RequestParam Long id) {
return knowService.delete(id);
}
@PostMapping("/query")
public BaseResponse<Knowtemp> query(@RequestParam Long id) {
return knowService.query(id);
}
//根据 课程id 从chapter表中获取List 章节
@PostMapping("/addAll")
public BaseResponse<String> addAll(@RequestParam String id) {
return knowService.saveKnowToNeo(id);
}
// 改变节点关系
@PostMapping("/update/relationship")
public BaseResponse<String> updateRelationship(@RequestParam Long id, @RequestParam List<Long> ids, @RequestParam String relationship) {
return knowService.updateRelationship(id,ids,relationship);
}
//获取该节点下所有的节点
@GetMapping("/all")
public BaseResponse<BaseKnowReturn> getKnowAll(@RequestParam String id) {
BaseKnowReturn baseKnowReturn =knowService.getKnowAll(id);
return ResultUtils.success(baseKnowReturn);
}
@GetMapping("/getAllByCourseId")
public BaseResponse<Set<KnowVO1>> getKnowByCourseId(String id) {
return knowService.getKnowByCourseId(id);
}
// //根据 id查询所关联的所有结点
// @PostMapping ("/query/{id}")
// public List<Know> queryKnowAllKnowById(@PathVariable Long id) {
// return knowService.queryKnowAllKnowById(id);
// }
//
// //添加知识点
// @PostMapping("/add")
// public BaseResponse<Know> createKnow(@RequestBody KnowRequest knowRequest) {
// return knowService.createKnow(knowRequest);
// }
// //修改知识点
// @PostMapping ("/update")
// public BaseResponse<Know> updateKnow(@RequestBody KnowUpdateRequest knowUpdateRequest) {
// return knowService.updateKnow(knowUpdateRequest);
// }
// //删除知识点
// @GetMapping ("delete/{id}")
// public BaseResponse<String> deleteKnow(@PathVariable Long id) {
// return knowService.deleteKnow(id);
// }
//
// //添加知识点 - 课程
// @PostMapping("/add/KnowCourse")
// public BaseResponse<KnowCourse> createCourseKnow(@RequestBody Courses courses) {
// return knowService.createCourseKnow(courses);
// }
//
// //修改知识点 - 课程
// @PostMapping("/update/KnowCourse")
// public BaseResponse<KnowCourse> updateCourseKnow(@RequestBody Courses courses) {
// return knowService.createCourseKnow(courses);
// }
//
// //删除知识点 - 课程
// @PostMapping("/delete/KnowCourse")
// public BaseResponse<String> deleteCourseKnow(@RequestParam String courseId) {
// return knowService.deleteCourseKnow(courseId);
// }
//
// //添加知识点 - 章节
// @PostMapping("/addKnowChapter")
// public BaseResponse<KnowChapter> createKnowChapter(@RequestBody Chapter chapter) {
// return knowService.createKnowChapter(chapter);
// }
//
// //修改知识点 - 章节
// @PostMapping("/update/KnowChapter")
// public BaseResponse<KnowChapter> updateKnowChapter(@RequestBody Chapter chapter) {
// return knowService.updateKnowChapter(chapter);
// }
// //删除知识点 - 章节
// @PostMapping("/delete/KnowChapter")
// public BaseResponse<String> deleteKnowChapter(@RequestParam Long chapterId) {
// return knowService.deleteKnowChapter(chapterId);
// }
//
// @GetMapping("/KnowBychapterId")
// public Set<Know> queryByChapterId(@RequestParam Long chapterId) {
// return knowService.queryByChapterId(chapterId);
// }
//
//
//
// //添加知识点与知识点的关系 related
// @PostMapping ("/addKnowRelatedKnow")
// public BaseResponse<String> addKnowRelatedKnow(@RequestBody RelationshipKnowRequest relationshipKnowRequest) {
// return knowService.addKnowRelatedKnow(relationshipKnowRequest);
// }
//
// //添加知识点与知识点的关系 fatherandSon
// @PostMapping ("/addKnowFatherAndSonKnow")
// public BaseResponse<String> addKnowFatherAndSonKnow(@RequestBody RelationshipKnowRequest relationshipKnowRequest) {
// return knowService.addKnowFatherAndSonKnow(relationshipKnowRequest);
// }
//
// //获取该节点下所有的节点
// @GetMapping("/all")
// public BaseResponse<BaseKnowReturn> getKnowAll(@RequestParam String id) {
// BaseKnowReturn baseKnowReturn =knowService.getKnowAll(id);
// return ResultUtils.success(baseKnowReturn);
// }
//
// //返回该节点以及二级节点
// @GetMapping("/KnowById")
// public BaseResponse<BaseKnowReturn> getKnowById(@RequestParam Long id) {
// BaseKnowReturn baseKnowReturn =knowService.getKnowById(id);
// return ResultUtils.success(baseKnowReturn);
// }
}

@ -1,56 +0,0 @@
//package com.teaching.backend.controller.KnowGraph;
//
//import com.teaching.backend.common.BaseResponse;
//import com.teaching.backend.model.dto.Knowtemp.KnowtempAdd;
//import com.teaching.backend.model.dto.Knowtemp.KnowtempUpdate;
//import com.teaching.backend.model.entity.KnowGraph.Know;
//import com.teaching.backend.model.entity.Knowtemp.Knowtemp;
//import com.teaching.backend.model.entity.chapter.Chapter;
//import com.teaching.backend.service.KnowGraph.KnowGraphService;
//import io.swagger.models.auth.In;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.List;
//
///**
// * @Author:youhang
// * @Date:2024-07-29-10:32
// * @Description:
// */
//@RestController
//@RequestMapping("/knowGraph")
//public class KnowGraphController {
//
// @Autowired
// private KnowGraphService knowGraphService;
//
// //add knowtemp
// @PostMapping("/add")
// public BaseResponse<String> add(@RequestBody KnowtempAdd knowtempAdd) {
// return knowGraphService.add(knowtempAdd);
// }
//
// @PostMapping("/update")
// public BaseResponse<String> update(@RequestBody KnowtempUpdate knowtempUpdate) {
// return knowGraphService.update(knowtempUpdate);
// }
// @PostMapping("/delete")
// public BaseResponse<String> delete(@RequestParam Integer id) {
// return knowGraphService.delete(id);
// }
// @PostMapping("/query")
// public BaseResponse<Knowtemp> query(@RequestParam Integer id) {
// return knowGraphService.query(id);
// }
//
//
// //根据 课程id 从chapter表中获取List 章节
// @PostMapping("/addAll")
// public BaseResponse<String> addAll(@PathVariable String id) {
// return knowGraphService.saveKnowToNeo(id);
// }
//
//
//
//}

@ -1,90 +0,0 @@
package com.teaching.backend.controller.KnowGraph;
/**
* @Author:youhang
* @Date:2024-06-09-9:55
* @Description:
*/
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.dto.KnowGraph.*;
import com.teaching.backend.model.entity.KnowGraph.Know;
import com.teaching.backend.model.entity.KnowGraph.Resources;
import com.teaching.backend.service.KnowGraph.ResourcesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.List;
import java.util.Set;
@RestController
@RequestMapping("/resources")
public class ResourcesController {
@Autowired
private ResourcesService resourcesService;
//添加知识点
@PostMapping("/upload")
public BaseResponse<String> uploadFile(@RequestParam("file")MultipartFile file) {
return resourcesService.uploadFile(file);
}
//根据 id查询所关联的resources结点
@PostMapping ("/query/{id}")
public List<Resources> queryKnowAllKnowById(@PathVariable Long id) {
return resourcesService.queryKnowAllResources(id);
}
//添加资源
@PostMapping("/add")
public Resources createResources(@RequestBody ResourcesAddRequest resourceAddRequest) {
return resourcesService.createResource(resourceAddRequest);
}
//添加知识点 - 课程
@PostMapping("/addKnowResources")
public void createCourseKnow(@RequestBody RelationshipResourceRequest relationshipResourceRequest) {
resourcesService.addKnowWithResources(relationshipResourceRequest);
}
//修改知识点
@PostMapping ("/update")
public Resources updateKnow(@RequestBody ResourceUpdateRequest resourceUpdateRequest ) {
return resourcesService.updateResources(resourceUpdateRequest);
}
//删除知识点
@GetMapping ("delete/{id}")
public void deleteResource(@PathVariable Long id) {
resourcesService.deleteResources(id);
}
//添加知识点与资源的关系
@PostMapping ("/addKnowResourcesResources")
public void addKnowWithResource(@RequestBody RelationshipResourceRequest relationshipResourceRequest) {
resourcesService.addKnowWithResources(relationshipResourceRequest);
}
@GetMapping ("queryCourseKnow/{KnowId}")
public Set<Resources> queryCourseKnowToResources(@PathVariable Long KnowId) {
return resourcesService.queryCourseKnowToResources(KnowId);
}
@GetMapping ("queryBesidesKnowToResources/{KnowId}")
public List<MultipartFile> queryBesidesKnowToResources(@PathVariable Long KnowId) {
return resourcesService.queryBesidesKnowToResources(KnowId);
}
}

@ -0,0 +1,56 @@
package com.teaching.backend.controller.Knowtmp;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.dto.Knowtmp.KnowtempAdd;
import com.teaching.backend.model.dto.Knowtmp.KnowtempUpdate;
import com.teaching.backend.model.entity.knowtmp.Knowtmp;
import com.teaching.backend.service.knowtmp.KnowtmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author:youhang
* @Date:2024-08-07-19:38
* @Description:
*/
@RestController
@RequestMapping("/knowtmp")
public class KnowtmpController {
@Autowired
private KnowtmpService knowtmpService;
// 添加知识点
@PostMapping("/addKnow")
BaseResponse<String> add(@RequestBody KnowtempAdd knowtempAdd){
return knowtmpService.add(knowtempAdd);
}
//修改知识点
@PostMapping("/updateKnow")
BaseResponse<String> update(@RequestBody KnowtempUpdate knowtempUpdate){
return knowtmpService.update(knowtempUpdate);
}
//删除知识点
@GetMapping("/deleteKnow")
BaseResponse<String> delete(Long id){
return knowtmpService.delete(id);
}
//查询通过chapterId List
@GetMapping("/query")
BaseResponse<Knowtmp> query(Long id){
return knowtmpService.query(id);
}
//查询通过chapterId List
@GetMapping("/queryKnow")
BaseResponse<List<Knowtmp>> queryByChapterId(Long chapterId){
return knowtmpService.queryByChapterId(chapterId);
}
}

@ -3,19 +3,15 @@ package com.teaching.backend.controller.courses;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.CommonResult;
import com.teaching.backend.common.ErrorCode;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.exception.BusinessException;
import com.teaching.backend.filter.ValidateParams;
import com.teaching.backend.model.dto.courses.CoursesDTO;
import com.teaching.backend.model.dto.courses.PageDTO;
import com.teaching.backend.model.entity.courses.Courses;
import com.teaching.backend.model.entity.umsAdmin.UmsStudent;
import com.teaching.backend.model.query.CourseQuery;
import com.teaching.backend.model.vo.courses.CoursesVO;
import com.teaching.backend.model.vo.umsAdmin.UmsStudentVO;
import com.teaching.backend.model.vo.courses.PersonalCenterStudentListVO;
import com.teaching.backend.service.courses.ICoursesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -24,7 +20,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
/**
* <p>
@ -87,7 +85,6 @@ public class CoursesController {
@ApiOperation("查询课程列表")
@ValidateParams({"userId"})
@GetMapping("/page")
// @PostMapping("/page")
public BaseResponse<PageDTO<CoursesVO>> getCourses(CourseQuery courseQuery){
PageDTO<CoursesVO> coursesList = coursesService.queryCourses(courseQuery);
return ResultUtils.success(coursesList);
@ -97,9 +94,6 @@ public class CoursesController {
@ValidateParams({"id"})
@GetMapping("/{id}")
public BaseResponse<CoursesDTO> getByIdCourse(@PathVariable String id){
if(id==null){
throw new BusinessException(ErrorCode.PARAMS_ERROR,"课程id为空");
}
Courses course = coursesService.getById(id);
CoursesDTO coursesDTO = new CoursesDTO();
BeanUtils.copyProperties(course,coursesDTO);
@ -114,16 +108,12 @@ public class CoursesController {
return ResultUtils.success("编辑成功");
}
//TODO:删除功能暂未完善,数据缺失
// 暂时发现有个漏洞 就是目标关联的有知识点的时候还是可以直接删除
// (当有内容的时候本来就是得先删除内容--关联也有知识点 所以内容下面的不用校验 )
@ApiOperation("根据id删除课程")
@ValidateParams({"id"})
@DeleteMapping("/{id}")
public BaseResponse deleteCourses(@PathVariable String id){
coursesService.deleteBatchByIds(id);
// coursesService.removeBatchByIds(ids);
return ResultUtils.success("删除成功");
}
@ -142,8 +132,8 @@ public class CoursesController {
@ApiOperation("查询学生列表")
@PostMapping("/studentList")
public CommonResult<LinkedHashSet<UmsStudent>> getStudentList(CourseQuery courseQuery){
LinkedHashSet<UmsStudent> umsStudentList = coursesService.queryStudentList(courseQuery);
public CommonResult<LinkedHashSet<PersonalCenterStudentListVO>> getStudentList(@RequestParam String userId){
LinkedHashSet<PersonalCenterStudentListVO> umsStudentList = coursesService.queryStudentList(userId);
return CommonResult.success(umsStudentList);
}

@ -39,7 +39,6 @@ public class ObjectiveContentsController {
@ValidateParams({"id"})
@DeleteMapping("/{id}")
public BaseResponse<String> deleteContent(@PathVariable String id){
// objectiveContentsService.removeById(id);
String data = objectiveContentsService.deleteById(id);
return ResultUtils.success(data);
}

@ -99,8 +99,8 @@ public class SeCourseFavourController {
*/
@ApiOperation("查询最新收藏")
@PostMapping("/newCollect")
public CommonResult<CoursesVO> newCollect(@RequestParam String userId) {
CoursesVO newCoursesVO = seCourseFavourService.queryNewCollect(userId);
public CommonResult<List<CoursesVO>> newCollect(@RequestParam String userId) {
List<CoursesVO> newCoursesVO = seCourseFavourService.queryNewCollect(userId);
if (newCoursesVO == null){
CommonResult.failed("用户或角色错误");
}

@ -0,0 +1,46 @@
package com.teaching.backend.controller.records;
import com.teaching.backend.config.NonStaticResourceHttpRequestHandler;
import org.mybatis.logging.Logger;
import org.mybatis.logging.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.nio.charset.StandardCharsets;
@RestController
@RequestMapping(value = "/api/baseResource")
public class BaseSourceApiController {
@Autowired
private NonStaticResourceHttpRequestHandler nonStaticResourceHttpRequestHandler;
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping(value = "/video", method = RequestMethod.GET)
public void video(
HttpServletRequest request,
HttpServletResponse response
) {
try {
String path = "D:/Users/Desktop/image/剪映/7.18/7月20.mp4";
File file = new File(path);
if (file.exists()) {
request.setAttribute(NonStaticResourceHttpRequestHandler.ATTR_FILE, path);
nonStaticResourceHttpRequestHandler.handleRequest(request, response);
} else {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setCharacterEncoding(StandardCharsets.UTF_8.toString());
}
} catch (Exception e) {
}
}
}

@ -0,0 +1,56 @@
package com.teaching.backend.controller.records;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.OutputStream;
@RestController
@RequestMapping("/api/bf")
public class Bf {
/**
* 根据本地图片全路径响应给浏览器1个图片流
*/
@RequestMapping("/showImage")
public void showImage(HttpServletResponse response, @RequestParam("fileName")String fileName) {
System.out.println(fileName);
show(response,fileName,"image");
}
/**
* 根据本地视频全路径响应给浏览器1个视频
*/
@RequestMapping("/showVideo")
public void showVideo(HttpServletResponse response, @RequestParam("fileName")String fileName) {
show(response,fileName,"video");
}
/**
* 响应文件
* @param response
* @param fileName 文件全路径
* @param type 响应流类型
*/
public void show(HttpServletResponse response, String fileName,String type){
try{
FileInputStream fis = new FileInputStream(fileName); // 以byte流的方式打开文件
int i=fis.available(); //得到文件大小
System.out.println(i);
byte data[]=new byte[i];
fis.read(data); //读数据
response.setContentType(type+"/*"); //设置返回的文件类型
OutputStream toClient=response.getOutputStream(); //得到向客户端输出二进制数据的对象
toClient.write(data); //输出数据
toClient.flush();
toClient.close();
fis.close();
}catch(Exception e){
e.printStackTrace();
System.out.println("文件不存在");
}
}
}

@ -61,7 +61,7 @@ public class CourseLearningRecordController {
* 个人中心课程列表
* @return
*/
@ApiOperation("查询前4的课程")
@ApiOperation("按新旧排序查询的课程列表")
@PostMapping("/courseList")
public CommonResult<List<CoursesVO>> courseList(@RequestParam String userId) {
List<CoursesVO> coursesVOList = courseLearningRecordService.queryCourseList(userId);

@ -1,24 +1,28 @@
package com.teaching.backend.controller.records;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.CommonResult;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.filter.ValidateParams;
import com.teaching.backend.mapper.records.KnowledgeLearningRecordMapper;
import com.teaching.backend.model.entity.records.CourseLearningRecord;
import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
import com.teaching.backend.model.vo.knowGraph.KnowVO;
import com.teaching.backend.service.impl.records.KnowledgeLearningRecordServiceImpl;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/api/knowledgelearning")
public class KnowledgeLearningRecordController {
@Resource
private KnowledgeLearningRecordServiceImpl knowledgeLearningRecordService;
@Resource
private KnowledgeLearningRecordMapper knowledgeLearningRecordMapper;
@ApiOperation("添加知识点学习记录")
// @ValidateParams({"userId","type","coursesId"})
@ -27,4 +31,58 @@ public class KnowledgeLearningRecordController {
return knowledgeLearningRecordService.saveCoursesRecords(knowledgeLearningRecord);
}
/**
* 获取当前登录用户的学习知识点记录
* @param pagenum
* @param pagesize
* @return
*/
@ApiOperation("根据用户id查询学习记录")
@ValidateParams({"userId"})
@GetMapping("/page")
public BaseResponse<Page> getAll(@RequestParam(value = "pagenum", defaultValue = "1") int pagenum,
@RequestParam(value = "pagesize", defaultValue = "10") int pagesize,
@RequestParam String userId,
@RequestParam String courseId){
return knowledgeLearningRecordService.getPage(pagenum, pagesize, userId, courseId);
}
/**
* 根据ids删除
* @param ids
* @return
*/
@ApiOperation("学习记录删除")
@DeleteMapping("/delete")
public BaseResponse<String> deleteRecords(@RequestParam List<Long> ids){
return knowledgeLearningRecordService.removeKnowledgeRecord(ids);
}
/**
* 统计单个学生学习知识点数量
* @param userId
* @return
*/
@ApiOperation("统计单个学生学习知识点数量")
@GetMapping("/countknowledgenumber")
public BaseResponse<Integer> countKnowledgeNumber(@RequestParam String userId) {
return ResultUtils.success(knowledgeLearningRecordMapper.selectDistinctKnowledgeIdsByUser(userId).size());
}
/**
* 获取学习最多的知识点
*
* @return
*/
@ApiOperation("查询学习最多的知识点")
@PostMapping("/studyMaxKnowledge")
public CommonResult<List<KnowVO>> studyMaxKnowledge(@RequestParam String userId) {
List<KnowVO> knowVO = knowledgeLearningRecordService.queryMaxKnowledge(userId);
if (knowVO == null){
CommonResult.failed("用户或角色错误");
}
return CommonResult.success(knowVO);
}
}

@ -1,29 +1,102 @@
package com.teaching.backend.controller.records;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
import com.teaching.backend.model.entity.records.ResourceLearningRecord;
import com.teaching.backend.service.impl.records.KnowledgeLearningRecordServiceImpl;
import com.teaching.backend.service.impl.records.ResourceLearningRecordServiceImpl;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/api/resourcelearningrecords")
public class ResourceLearningRecordController {
@Resource
private ResourceLearningRecordServiceImpl resourceLearningRecordService;
@ApiOperation("添加资源学习记录")
// @ValidateParams({"userId","type","coursesId"})
@PostMapping("/saverecords")
public BaseResponse<String> saveResourceRecords(@RequestBody ResourceLearningRecord resourceLearningRecord) {
return resourceLearningRecordService.saveCoursesRecords(resourceLearningRecord);
}
}
//package com.teaching.backend.controller.records;
//
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.teaching.backend.common.BaseResponse;
//import com.teaching.backend.common.ResultUtils;
//import com.teaching.backend.filter.ValidateParams;
//import com.teaching.backend.mapper.records.ResourceLearningRecordMapper;
//import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
//import com.teaching.backend.model.entity.records.ResourceLearningRecord;
//import com.teaching.backend.service.impl.records.KnowledgeLearningRecordServiceImpl;
//import com.teaching.backend.service.impl.records.ResourceLearningRecordServiceImpl;
//import com.teaching.backend.utils.UploadUtils;
//import io.swagger.annotations.ApiOperation;
//import org.springframework.http.MediaType;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.annotation.Resource;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.File;
//import java.io.IOException;
//import java.util.List;
//
//@RestController
//@RequestMapping("/api/resourcelearningrecords")
//public class ResourceLearningRecordController {
// @Resource
// private ResourceLearningRecordServiceImpl resourceLearningRecordService;
// @Resource
// private ResourceLearningRecordMapper resourceLearningRecordMapper;
//
//
//
// @ApiOperation("添加资源学习记录")
//// @ValidateParams({"userId","type","coursesId"})
// @PostMapping("/saverecords")
// public BaseResponse<String> saveResourceRecords(@RequestBody ResourceLearningRecord resourceLearningRecord) {
// return resourceLearningRecordService.saveCoursesRecords(resourceLearningRecord);
// }
//
// /**
// * 获取当前登录用户的学习资源记录
// * @param pagenum
// * @param pagesize
// * @return
// */
// @ApiOperation("根据用户id查询学习记录")
// @ValidateParams({"userId"})
// @GetMapping("/page")
// public BaseResponse<Page> getAll(@RequestParam(value = "pagenum", defaultValue = "1") int pagenum,
// @RequestParam(value = "pagesize", defaultValue = "10") int pagesize,
// @RequestParam String userId,
// @RequestParam String courseId,
// @RequestParam String knowledgeId){
// return resourceLearningRecordService.getPage(pagenum, pagesize, userId, knowledgeId,courseId);
//
// }
// /**
// * 根据ids删除
// * @param ids
// * @return
// */
// @ApiOperation("学习记录删除")
// @DeleteMapping("/delete")
// public BaseResponse<String> deleteRecords(@RequestParam List<Long> ids){
// return resourceLearningRecordService.removeResourceRecord(ids);
// }
//
// /**
// * 统计单个学生学习资源数量
// * @param userId
// * @return
// */
// @ApiOperation("统计单个学生学习资源数量")
// @GetMapping("/countresourcenumber")
// public BaseResponse<Integer> countResourceNumber(@RequestParam String userId) {
// return ResultUtils.success(resourceLearningRecordMapper.selectDistinctResourceIdsByUser(userId).size());
// }
//
//
// @ApiOperation("上传图片")
// @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
// public BaseResponse<String> upload(@RequestPart("filedata") MultipartFile filedata) throws IOException {
// //调用ser
// System.out.println(filedata.getResource());
// System.out.println(UploadUtils.saveFileByDirectory(filedata));
//// File file = filedata.getResource().getFile();
//// UploadUtils.Chunk(file);
//// UploadUtils.Merge(file);
// //源文件
//// File sourseFile = (File) file;
// return ResultUtils.success("hello");
// };
//
// @GetMapping("/bf")
// public BaseResponse<String> bf(@RequestParam String path, File file,HttpServletRequest request, HttpServletResponse response){
// File sourseFile = new File(path);
// return ResultUtils.success(path);
// };
//
//}

@ -1,52 +1,83 @@
package com.teaching.backend.controller.resource;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.service.KnowGraph.ResourcesService;
/**
* @Author:youhang
* @Date:2024-06-09-9:55
* @Description:
*/
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.dto.resource.ResourceUploadDto;
import com.teaching.backend.model.entity.resource.Resources;
import com.teaching.backend.service.resource.ResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Set;
import java.io.*;
/**
* ClassName: CommonController
* Package: com.teaching.backend.controller
* Description:
*
* @Author 姜钧瀚
* @Create 2024/6/1 10:30
* @Version 1.0
*/
@RestController
@RequestMapping("/resource")
public class ResourceController {
@Autowired
private ResourcesService resourcesService;
private ResourceService resourceService;
//添加知识点
@PostMapping("/upload")
public BaseResponse<String> uploadFile(@RequestParam("file")MultipartFile file) {
return resourcesService.uploadFile(file);
@ResponseBody
public BaseResponse<ResourceUploadDto> uploadFile(@RequestPart("file") MultipartFile file) {
return resourceService.upload(file);
}
//删除资源
@GetMapping ("delete")
@ResponseBody
public BaseResponse<String> deleteResource(@RequestParam("filename") String filename) {
return resourceService.delete(filename);
}
@GetMapping("/read")
public ResponseEntity<InputStreamResource> readFile(@RequestParam String filename) {
return resourceService.readFile(filename);
}
@GetMapping("/addRelationship/BetweenCourseAndResources")
public BaseResponse<String> addResourcesAndKnowByCourseId(@RequestParam String courseId, @RequestParam List<Long> resourcesIds){
return resourceService.addResourcesAndKnowByCourseId(courseId,resourcesIds);
}
@GetMapping("/addRelationship/BetweenChapterAndResources")
public BaseResponse<String> addResourcesAndKnowByChapterId(@RequestParam Long chapterId,@RequestParam List<Long> resourcesIds){
return resourceService.addResourcesAndKnowByChapterId(chapterId,resourcesIds);
}
@GetMapping("/addRelationship/BetweenKnowAndResources")
public BaseResponse<String> addResourcesAndKnowById(@RequestParam Long id, @RequestParam List<Long> resourcesIds){
return resourceService.addResourcesAndKnowById(id,resourcesIds);
}
}
//查询课程下资源
@GetMapping("/queryByCourseId")
Set<Resources> queryResourcesByCourseId(String courseId){
return resourceService.queryResourcesByCourseId(courseId);
}
//查询章节下资源
@GetMapping("/queryByChapterId")
Set<Resources> queryResourcesByChapterId(Long chapterId){
return resourceService.queryResourcesByChapterId(chapterId);
}
//查询二级节点下资源
@GetMapping("/queryBesidesKnow")
Set<Resources> queryBesidesKnowToResources(Long KnowId){
return resourceService.queryBesidesKnowToResources(KnowId);
}
}

@ -33,11 +33,11 @@ public class ReportController {
* 接收每日浏览量
* @return
*/
@PostMapping("/receptionBrowse")
@GetMapping("/receptionBrowse")
@ApiOperation("接收每日浏览量")
public CommonResult receptionBrowse(@RequestBody ReportDTO reportDTO){
public CommonResult receptionBrowse(){
boolean receptionBrowse = reportService.getReceptionBrowse(reportDTO);
boolean receptionBrowse = reportService.getReceptionBrowse();
if (receptionBrowse == false){
return CommonResult.failed();
}

@ -1,78 +0,0 @@
package com.teaching.backend.mapper.KnowGraph;
/**
* @Author:youhang
* @Date:2024-06-09-8:59
* @Description:
*/
import com.teaching.backend.model.dto.KnowGraph.KnowCourseCreateRequest;
import com.teaching.backend.model.entity.KnowGraph.Know;
import com.teaching.backend.model.entity.KnowGraph.KnowChapter;
import com.teaching.backend.model.entity.KnowGraph.KnowCourse;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.neo4j.repository.query.Query;
import java.util.List;
import java.util.Set;
public interface KnowRepository extends Neo4jRepository<Know, Long> {
@Query("MATCH (p:Know) where ID(p) = $id RETURN count(p);")
Boolean deleteKnow(Long id);
@Query("MATCH (p:Know), (c:Know) WHERE ID(p) = $id AND ID(c) IN $KnowIds CREATE (p)-[r:FatherAndSon]->(c) return r")
int addKnowFatherAndSonKnow(Long id, List<Long> KnowIds);
@Query("MATCH(n)-[r:related]->(nn:Know) where ID(nn) = $id RETURN n")
List<Know> queryKnowAllKnowById(Long id);
@Query("CREATE (n:Know {name: $name, courseId: $courseId,info:$info}) return count(n)")
int createKnowCourse(String courseId, String name, String info);
@Query("MATCH (p:Know {courseId:$courseId }) SET p.name = $name set p.info= $info RETURN p;")
Boolean updateKnowCourse(String courseId, String name, String info);
@Query("MATCH (p:Know {courseId:$courseId }) RETURN count(p);")
Boolean deleteKnowCourse(String courseId);
@Query("CREATE (n:Know {name: $name, chapterId: $chapterId,info:$info}) return count(n)")
int createKnowChapter(Long chapterId, String name, String info);
@Query("MATCH (p:Know {chapterId:$chapterId }) SET p.name = $name set p.info= $info RETURN p;")
Boolean updateKnowChapter(Long chapterId, String name, String info);
@Query("MATCH (p:Know {chapterId:$chapterId }) RETURN count(p);")
Boolean deleteKnowChapter(Long chapterId);
@Query("MATCH(n:Know)-[r:FatherAndSon*]->(nn:Know) where n.chapterId = $chapterId RETURN nn")
Set<Know> queryByChapterId(Long chapterId);
//在章节表里面添加章与课程的关系
@Query("MATCH (p:Know), (c:Know) WHERE p.courseId = $courseId AND c.chapterId = $ChapterId CREATE (p)-[r:FatherAndSon]->(c) return count(r)")
int addChapterAndCourse(String courseId, Long ChapterId);
//添加章与节的关系
@Query("MATCH (p:Know), (c:Know) WHERE p.chapterId = $ChapterId1 AND c.chapterId = $ChapterId2 CREATE (p)-[r:FatherAndSon]->(c) return count(r)")
int addChapterAndCourse( Long ChapterId1, Long ChapterId2);
//创造知识点并,添加节与知识点的关系
@Query("MATCH (p:Know) WHERE p.chapterId = $ChapterId CREATE (c:Know{name:$name,info:$info}),(p)-[r:FatherAndSon]->(c) return count(r)")
int CreateKnowaddChapter( Long ChapterId, String name,String info);
@Query("MATCH (p:Know), (c:Know) WHERE ID(p) = $id AND ID(c) IN $KnowIds CREATE (p)-[r:FatherAndSon]->(c),(c)-[:related]->(p) return count(r)")
int addKnowWithFaherAndSon(Long id, List<Long> KnowIds);
@Query("MATCH (p:Know), (c:Know) WHERE ID(p) = $id AND ID(c) IN $KnowIds CREATE (p)-[r:related]->(c),(c)-[:related]->(p) return count(r)")
int addKnowWithRelated(Long id, List<Long> KnowIds);
@Query("MATCH (p:Know), (c:Know) WHERE ID(p) = $id AND ID(c) IN $KnowIds CREATE (p)-[r:PreCondition]->(c),(c)-[:related]->(p) return count(r)")
int addKnowWithPreCondition(Long id, List<Long> KnowIds);
}

@ -1,43 +0,0 @@
package com.teaching.backend.mapper.KnowGraph;
/**
* @Author:youhang
* @Date:2024-06-09-8:59
* @Description:
*/
import java.util.concurrent.*;
import com.teaching.backend.model.entity.KnowGraph.Know;
import com.teaching.backend.model.entity.KnowGraph.Resources;
import org.neo4j.driver.Result;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.neo4j.repository.query.Query;
import java.util.List;
import java.util.Set;
public interface ResourcesRepository extends Neo4jRepository<Resources, Long> {
@Query("MATCH(n:Resources) where n.resourcesId = $resourcesId RETURN n")
Resources queryResources(Long resourcesId);
@Query("MATCH (p:Know), (c:Resources) WHERE ID(p) = $id AND ID(c) in $ResourcesIds CREATE (p)-[r:resources]->(c)")
void addResourceResourcesKnow(Long id, List<Long> ResourcesIds);
@Query("MATCH(n:Know)-[r:resources]->(nn:Resources) where ID(nn) = $id RETURN nn")
List<Resources> queryResourceAllId(Long id);
@Query("MATCH p = (a:Know)-[rels*]-(b:Resources) WHERE ID(a) = $KnowId and ANY(rel IN rels WHERE TYPE(rel) = 'resources') RETURN b")
Set<Resources> queryCourseKnowToResources(Long KnowId);
@Query("MATCH (p:Know)-[:FatherAndSon]->(n:Know)-[:resources]->(m:Resources) WHERE ID(p) = $KnowId RETURN m")
Set<Resources> queryBesidesKnowToResources(Long KnowId);
@Query(" MATCH (p:Know)-[:resources]->(m:Resources) WHERE ID(p) = 272 RETURN m")
Set<Resources> queryKnowToResources(Long KnowId);
}

@ -1,15 +0,0 @@
package com.teaching.backend.mapper.Knowtemp;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teaching.backend.model.entity.Knowtemp.Knowtemp;
/**
* 课程点赞数据库操作
*/
public interface KnowtempMapper extends BaseMapper<Knowtemp> {
}

@ -0,0 +1,18 @@
package com.teaching.backend.mapper.Knowtemp;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teaching.backend.model.entity.knowtmp.Knowtmp;
import org.apache.ibatis.annotations.Mapper;
/**
*
*/
@Mapper
public interface KnowtmpMapper extends BaseMapper<Knowtmp> {
}

@ -4,15 +4,17 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teaching.backend.model.entity.courses.Courses;
import com.teaching.backend.model.entity.favour.SeCourseFavour;
import java.util.List;
/**
* 课程点赞数据库操作
*/
public interface SeCourseFavourMapper extends BaseMapper<SeCourseFavour> {
String queryAllNewCollectCourse();
List<String> queryAllNewCollectCourse();
String queryStudentNewCollectCourse(String userId);
List<String> queryStudentNewCollectCourse(String userId);
}

@ -0,0 +1,66 @@
package com.teaching.backend.mapper.know;
/**
* @Author:youhang
* @Date:2024-06-09-8:59
* @Description:
*/
import com.teaching.backend.model.entity.know.Know;
import com.teaching.backend.model.entity.know.KnowChapter;
import com.teaching.backend.model.entity.know.KnowCourse;
import com.teaching.backend.model.entity.resource.Resources;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.neo4j.repository.query.Query;
import java.util.Set;
public interface KnowRepository extends Neo4jRepository<Know, Long> {
@Query("CREATE (n:Know {name: $name,info:$info}) return count(n)")
int addKnow(String name,String info);
@Query("MATCH ID(p:Know) = $id SET p.name = $name set p.info= $info RETURN count(p);")
int updateKnow(Long id, String name, String info);
@Query("MATCH ID(p:Know) = $id delete p RETURN count(p);")
int deleteKnow(Long id);
@Query("MATCH ID(p:Know) = $id RETURN p;")
Know queryKnow(Long id);
//=============================
@Query("CREATE (n:Know {name: $name, courseId: $courseId,info:$info}) return count(n)")
int addCourse(String courseId, String name, String info);
@Query("MATCH (p:Know {courseId:$courseId }) SET p.name = $name set p.info= $info RETURN count(p);")
int updateCourse(String courseId, String name, String info);
@Query("MATCH (p:Know {courseId:$courseId }) delete p RETURN count(p);")
int deleteCourse(String courseId);
@Query("MATCH (p:Know {courseId:$courseId }) RETURN p;")
KnowCourse queryCourse(String courseId);
//====================
@Query("CREATE (n:Know {name: $name, chapterId:$chapterId,info:$info}) return count(n)")
int addChapter(Long chapterId, String name, String info);
@Query("MATCH (p:Know {chapterId:$chapterId }) SET p.name = $name set p.info= $info RETURN count(p);")
int updateChapter(Long chapterId, String name, String info);
@Query("MATCH (p:Know {chapterId:$chapterId }) delete p RETURN count(p);")
int deleteChapter(Long chapterId);
@Query("MATCH (p:Know {chapterId:$chapterId }) RETURN p;")
KnowChapter queryChapter(Long chapterId);
//查询二级节点下资源
@Query("MATCH (p:Know)-[:FatherAndSon]->(n:Know)-[:resources]->(m:Resources) WHERE ID(p) = $id RETURN m")
Set<Resources> queryBesidesKnowToResources(Long id);
}

@ -3,6 +3,12 @@ package com.teaching.backend.mapper.records;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.List;
/**
* <p>
@ -14,4 +20,9 @@ import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
*/
public interface KnowledgeLearningRecordMapper extends BaseMapper<KnowledgeLearningRecord> {
@Select("SELECT knowledge_id FROM knowledge_learning_record WHERE user_id = #{userId} GROUP BY knowledge_id")
List<String > selectDistinctKnowledgeIdsByUser(@Param("userId") String userId);
List<String> queryStudyKnowledgeMaxNumber();
List<String> queryStudyMaxKnowledgeId(String userId);
}

@ -3,6 +3,10 @@ package com.teaching.backend.mapper.records;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teaching.backend.model.entity.records.ResourceLearningRecord;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* <p>
@ -13,5 +17,7 @@ import com.teaching.backend.model.entity.records.ResourceLearningRecord;
* @since 2024-07-24
*/
public interface ResourceLearningRecordMapper extends BaseMapper<ResourceLearningRecord> {
@Select("SELECT resource_id FROM resource_learning_record WHERE user_id = #{userId} GROUP BY resource_id")
List<String> selectDistinctResourceIdsByUser(@Param("userId") String userId);
}

@ -1,17 +0,0 @@
package com.teaching.backend.mapper.resource;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teaching.backend.model.entity.resource.ResourceLearningNumber;
/**
* <p>
* Mapper 接口
* </p>
*
* @author author
* @since 2024-07-29
*/
public interface ResourceLearningNumberMapper extends BaseMapper<ResourceLearningNumber> {
}

@ -1,20 +0,0 @@
package com.teaching.backend.mapper.resource;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teaching.backend.model.entity.resource.Resource;
import org.apache.ibatis.annotations.Mapper;
/**
* ClassName: FileTableMapper
* Package: com.teaching.backend.mapper
* Description:
*
* @Author 姜钧瀚
* @Create 2024/6/4 11:51
* @Version 1.0
*/
@Mapper
public interface ResourcesMapper extends BaseMapper<Resource> {
}

@ -0,0 +1,64 @@
package com.teaching.backend.mapper.resource;
/**
* @Author:youhang
* @Date:2024-06-09-8:59
* @Description:
*/
import com.teaching.backend.model.entity.resource.Resources;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.neo4j.repository.query.Query;
import java.util.List;
import java.util.Set;
public interface ResourcesRepository extends Neo4jRepository<Resources, Long> {
//删除资源节点
@Query("MATCH(n:Resources) where n.name = $name DETACH DELETE n RETURN COUNT(n) >0;")
Boolean deleteByobjectName(String name);
//添加课程与资源关系
@Query("MATCH (p:Know), (c:Resources) WHERE p.courseId = $courseId AND ID(c) in $resourcesIds CREATE (p)-[r:resources]->(c) return count(r)")
int addResourcesAndKnowByCourseId(String courseId, List<Long> resourcesIds);
//添加章节与资源关系
@Query("MATCH (p:Know), (c:Resources) WHERE p.chapterId = $chapterId AND ID(c) in $resourcesIds CREATE (p)-[r:resources]->(c) return count(r)")
int addResourcesAndKnowByChapterId(Long chapterId, List<Long> resourcesIds);
//添加知识点与资源关系
@Query("MATCH (p:Know), (c:Resources) WHERE ID(p) = $id AND ID(c) in $resourcesIds CREATE (p)-[r:resources]->(c) return count(r)")
int addResourcesAndKnowById(Long id, List<Long> resourcesIds);
//查询课程下资源
@Query("MATCH p = (a:Know)-[rels*]-(b:Resources) WHERE a.courseId = $courseId and ANY(rel IN rels WHERE TYPE(rel) = 'resources') RETURN b")
Set<Resources> queryResourcesByCourseId(String courseId);
//查询章节下资源
@Query("MATCH p = (a:Know)-[rels*]-(b:Resources) WHERE a.chapterId = chapterId and ANY(rel IN rels WHERE TYPE(rel) = 'resources') RETURN b")
Set<Resources> queryResourcesByChapterId(Long chapterId);
//查询二级节点下资源
@Query("MATCH (p:Know)-[:FatherAndSon]->(n:Know)-[:resources]->(m:Resources) WHERE ID(p) = $KnowId RETURN m")
Set<Resources> queryBesidesKnowToResources(Long KnowId);
//
//
// @Query("MATCH(n:Know)-[r:resources]->(nn:Resources) where ID(nn) = $id RETURN nn")
// List<Resource> queryResourceAllId(Long id);
//
// @Query("MATCH p = (a:Know)-[rels*]-(b:Resources) WHERE ID(a) = $KnowId and ANY(rel IN rels WHERE TYPE(rel) = 'resources') RETURN b")
// Set<Resources> queryCourseKnowToResources(Long KnowId);
//
//
// @Query(" MATCH (p:Know)-[:resources]->(m:Resources) WHERE ID(p) = 272 RETURN m")
// Set<Resources> queryKnowToResources(Long KnowId);
}

@ -1,4 +1,4 @@
package com.teaching.backend.model.dto.KnowGraph;
package com.teaching.backend.model.dto.Know;
/**
* @Author:youhang
@ -7,7 +7,7 @@ package com.teaching.backend.model.dto.KnowGraph;
*/
import com.teaching.backend.model.entity.KnowGraph.Links;
import com.teaching.backend.model.entity.know.Links;
import com.teaching.backend.model.vo.knowGraph.KnowVO;
import lombok.AllArgsConstructor;
import lombok.Data;

@ -1,10 +1,8 @@
package com.teaching.backend.model.dto.KnowGraph;
package com.teaching.backend.model.dto.Know;
import lombok.Data;
import org.springframework.data.neo4j.core.schema.Property;
import java.io.Serializable;
import java.util.List;
@Data
public class KnowChapterCreateRequest implements Serializable {

@ -1,10 +1,8 @@
package com.teaching.backend.model.dto.KnowGraph;
package com.teaching.backend.model.dto.Know;
import lombok.Data;
import org.springframework.data.neo4j.core.schema.Property;
import java.io.Serializable;
import java.util.List;
@Data
public class KnowCourseCreateRequest implements Serializable {

@ -1,10 +1,8 @@
package com.teaching.backend.model.dto.KnowGraph;
package com.teaching.backend.model.dto.Know;
import lombok.Data;
import org.springframework.data.neo4j.core.schema.Property;
import java.io.Serializable;
import java.util.List;
@Data
public class KnowRequest implements Serializable {

@ -1,10 +1,8 @@
package com.teaching.backend.model.dto.KnowGraph;
package com.teaching.backend.model.dto.Know;
import lombok.Data;
import org.springframework.data.neo4j.core.schema.Property;
import java.io.Serializable;
import java.util.List;
@Data
public class KnowUpdateRequest implements Serializable {

@ -1,4 +1,4 @@
package com.teaching.backend.model.dto.KnowGraph;
package com.teaching.backend.model.dto.Know;
import lombok.Data;

@ -1,4 +1,4 @@
package com.teaching.backend.model.dto.KnowGraph;
package com.teaching.backend.model.dto.Know;
import lombok.Data;

@ -1,22 +0,0 @@
package com.teaching.backend.model.dto.KnowGraph;
import lombok.Data;
/**
* @Author:youhang
* @Date:2024-07-25-8:39
* @Description:
*/
@Data
public class ResourceUpdateRequest {
private Long id;
private String name;
private Integer type;
private String path;
}

@ -1,19 +0,0 @@
package com.teaching.backend.model.dto.KnowGraph;
import lombok.Data;
import org.springframework.data.neo4j.core.schema.Property;
/**
* @Author:youhang
* @Date:2024-07-25-8:39
* @Description:
*/
@Data
public class ResourcesAddRequest {
private String name;
private Integer type;
private String path;
}

@ -1,15 +0,0 @@
package com.teaching.backend.model.dto.KnowGraph;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
/**
* @Author:youhang
* @Date:2024-07-25-8:39
* @Description:
*/
@Data
public class ResourcesRequest {
private MultipartFile file;
}

@ -1,8 +1,5 @@
package com.teaching.backend.model.dto.Knowtemp;
package com.teaching.backend.model.dto.Knowtmp;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
@ -24,7 +21,6 @@ public class KnowtempAdd implements Serializable {
private Long chapterid;
private String courseid;
private Integer ordernum;

@ -1,6 +1,5 @@
package com.teaching.backend.model.dto.Knowtemp;
package com.teaching.backend.model.dto.Knowtmp;
import io.swagger.models.auth.In;
import lombok.Data;
import java.io.Serializable;
@ -23,8 +22,6 @@ public class KnowtempUpdate implements Serializable {
private String info;
private Long chapterid;
private String courseid;
private Integer ordernum;

@ -0,0 +1,31 @@
package com.teaching.backend.model.dto.resource;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* Minio Bucket访问策略配置
* Created by macro on 2020/8/11.
*/
@Data
@EqualsAndHashCode
@Builder
public class BucketPolicyConfigDto {
private String Version;
private List<Statement> Statement;
@Data
@EqualsAndHashCode
@Builder
public static class Statement {
private String Effect;
private String Principal;
private String Action;
private String Resource;
}
}

@ -0,0 +1,22 @@
package com.teaching.backend.model.dto.resource;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 文件上传返回结果
* Created by macro on 2019/12/25.
*/
@Data
@EqualsAndHashCode
public class ResourceUploadDto {
private String url;
private String name;
private String objectName;
}

@ -0,0 +1,32 @@
package com.teaching.backend.model.dto.upload;
import lombok.Data;
@Data
public class UploadFileParamsDto {
/**
* 文件名称
*/
private String filename;
/**
* 文件类型(文档音频视频)
*/
private String fileType;
/**
* 文件大小
*/
private Long fileSize;
/**
* 标签
*/
private String tags;
/**
* 上传人
*/
private String username;
/**
* 备注
*/
private String remark;
}

@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.teaching.backend.model.entity.KnowGraph.Know;
import com.teaching.backend.model.entity.Knowtemp.Knowtemp;
import com.teaching.backend.model.entity.knowtmp.Knowtmp;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -90,7 +90,7 @@ public class Chapter implements Serializable {
@ApiModelProperty(value = "知识点")
@TableField(exist = false)
private List<Knowtemp> knowledgePoints; // 用于存储章节下的知识点
private List<Knowtmp> knowledgePoints; // 用于存储章节下的知识点
}

@ -1,4 +1,4 @@
package com.teaching.backend.model.entity.KnowGraph;
package com.teaching.backend.model.entity.know;
import lombok.Data;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
@ -7,7 +7,6 @@ import org.springframework.data.neo4j.core.schema.Node;
import org.springframework.data.neo4j.core.schema.Property;
import java.io.Serializable;
import java.util.List;
@Node
@Data
@ -20,7 +19,6 @@ public class Know implements Serializable {
@GeneratedValue
private Long id;
/**
* 知识点名称
*/

@ -1,4 +1,4 @@
package com.teaching.backend.model.entity.KnowGraph;
package com.teaching.backend.model.entity.know;
import lombok.Data;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
@ -7,7 +7,6 @@ import org.springframework.data.neo4j.core.schema.Node;
import org.springframework.data.neo4j.core.schema.Property;
import java.io.Serializable;
import java.util.List;
@Node
@Data
@ -24,7 +23,7 @@ public class KnowChapter implements Serializable {
/**
* 章节id
*/
private String chapterId;
private Long chapterId;
/**

@ -1,4 +1,4 @@
package com.teaching.backend.model.entity.KnowGraph;
package com.teaching.backend.model.entity.know;
import lombok.Data;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
@ -7,7 +7,6 @@ import org.springframework.data.neo4j.core.schema.Node;
import org.springframework.data.neo4j.core.schema.Property;
import java.io.Serializable;
import java.util.List;
@Node
@Data

@ -1,4 +1,4 @@
package com.teaching.backend.model.entity.KnowGraph;
package com.teaching.backend.model.entity.know;
import lombok.Data;
import org.springframework.data.neo4j.core.schema.GeneratedValue;

@ -1,13 +1,9 @@
package com.teaching.backend.model.entity.Knowtemp;
package com.teaching.backend.model.entity.knowtmp;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.models.auth.In;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@ -20,7 +16,7 @@ import java.io.Serializable;
* @since 2024-05-31
*/
@Data
public class Knowtemp implements Serializable {
public class Knowtmp implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@ -36,7 +32,5 @@ public class Knowtemp implements Serializable {
private Long chapterid;
private String courseid;
}

@ -37,8 +37,8 @@ public class KnowledgeLearningRecord implements Serializable {
@TableField("knowledge_id")
private String knowledgeId;
@ApiModelProperty(value = "知识点id")
@TableField("knowledge_id")
@ApiModelProperty(value = "知识点名称")
@TableField("knowledge_name")
private String knowledgeName;
@ApiModelProperty(value = "课程id")

@ -37,6 +37,10 @@ public class ResourceLearningRecord implements Serializable {
@TableField("resource_id")
private String resourceId;
@ApiModelProperty(value = "资源名称")
@TableField("resource_name")
private String resourceName;
@ApiModelProperty(value = "知识点id")
@TableField("knowledge_id")
private String knowledgeId;

@ -1,47 +0,0 @@
package com.teaching.backend.model.entity.resource;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.stream.Stream;
/**
* ClassName: FileTable
* Package: com.teaching.backend.model.entity
* Description:
*
* @Author youhang
* @Create 2024/6/4 11:48
* @Version 1.0
*/
@Data
@TableName("Resource")
public class Resource {
private static final long serialVersionUID = 1L;
/**
* 内部编号
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
private String name;
private int type;
private int status;
private String tags;
private String path;
/**
* 简介
*/
private String description;
/**
* 封面
*/
private String img;
}

@ -1,47 +0,0 @@
package com.teaching.backend.model.entity.resource;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author author
* @since 2024-07-29
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("resource_learning_number")
@ApiModel(value="ResourceLearningNumber对象", description="")
public class ResourceLearningNumber implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "资源学习记录id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "课程id")
private String courseId;
@ApiModelProperty(value = "知识点id")
private String knowledgeId;
@ApiModelProperty(value = "资源id")
private String resourceId;
@ApiModelProperty(value = "学习人数")
private Integer number;
}

@ -1,4 +1,4 @@
package com.teaching.backend.model.entity.KnowGraph;
package com.teaching.backend.model.entity.resource;
import lombok.Data;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
@ -18,13 +18,13 @@ public class Resources {
@GeneratedValue
private Long id;
@Property
private String name;
@Property
private Integer type;
private Integer status;
@Property
private String path;
private String url;
}

@ -0,0 +1,44 @@
package com.teaching.backend.model.vo.courses;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author zjh
* @since 2024-06-12
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class PersonalCenterStudentListVO implements Serializable {
/**
* 头像
*/
private String icon;
/**
* 姓名
*/
private String name;
/**
* 学号
*/
private String number;
}

@ -3,7 +3,6 @@ package com.teaching.backend.model.vo.knowGraph;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data

@ -17,6 +17,10 @@ public class CourseLearningRecordsVo {
* 课程学习id
*/
private String id;
/**
* 课程id
*/
private String courseId;
/**
* 课程名称
*/

@ -0,0 +1,37 @@
package com.teaching.backend.model.vo.records;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel(description = "知识点学习记录")
public class KnowledgeLearningRecordVo {
/**
* 知识点学习id
*/
private String id;
/**
* 课程id
*/
private String coursesId;
/**
* 知识点id
*/
private String knowledgeId;
/**
* 知识点名称
*/
private String knowledgeName;
/**
* 用户id
*/
private String userId;
/**
* 学习人数
*/
private Integer number;
/**
* 学习时间
*/
private String time;
}

@ -0,0 +1,29 @@
package com.teaching.backend.model.vo.records;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel(description = "资源学习记录")
public class ResourceLearingRecordVo {
/**
* 资源学习id
*/
private String id;
/**
* 资源名称
*/
private String resourceName;
/**
* 用户id
*/
private String userId;
/**
* 学习人数
*/
private Integer number;
/**
* 学习时间
*/
private String time;
}

@ -0,0 +1,74 @@
package com.teaching.backend.service.Know;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.dto.Know.*;
import com.teaching.backend.model.entity.know.Know;
import com.teaching.backend.model.entity.know.KnowChapter;
import com.teaching.backend.model.entity.know.KnowCourse;
import com.teaching.backend.model.entity.resource.Resources;
import com.teaching.backend.model.vo.knowGraph.KnowVO1;
import java.util.Set;
/**
* @Author:youhang
* @Date:2024-08-07-15:50
* @Description:
*/
public interface KnowService {
// 添加知识点
BaseResponse<String> addKnow(KnowRequest knowRequest);
// 修改知识点
BaseResponse<String> updateKnow(KnowUpdateRequest knowUpdateRequest);
// 删除知识点
BaseResponse<String> deleteKnow(Long id);
//查询知识点通过id
BaseResponse<Know> queryKnow(Long id);
//======================================
// 添加课程
BaseResponse<String> addCourse(KnowCourseCreateRequest knowCourseCreateRequest);
// 修改课程
BaseResponse<String> updateCourse(KnowCourseCreateRequest knowCourseCreateRequest);
// 删除课程
BaseResponse<String> deleteCourse(String courseId);
//查询课程通过courseid
BaseResponse<KnowCourse> queryCourse(String courseId);
//=========================
// 添加章节
BaseResponse<String> addChapter(KnowChapterCreateRequest knowChapterCreateRequest);
// 修改章节
BaseResponse<String> updateChapter(KnowChapterCreateRequest knowChapterCreateRequest);
// 删除章节
BaseResponse<String> deleteChapter(Long chapterId);
//查询章节通过chapterId
BaseResponse<KnowChapter> queryChapter(Long chapterId);
//=====================
//获取课程下的所有知识点
BaseKnowReturn getAllKnowByCourseId(String id);
//获取课程下的所有资源
BaseResponse<Set<KnowVO1>> getAllResourcesByCourseId(String id);
//获取知识点下二级的所有资源
Set<Resources> getSecondResources(Long id);
}

@ -1,138 +0,0 @@
//package com.teaching.backend.service.KnowGraph;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.teaching.backend.common.BaseResponse;
//import com.teaching.backend.common.ErrorCode;
//import com.teaching.backend.common.ResultUtils;
//import com.teaching.backend.mapper.KnowGraph.KnowRepository;
//import com.teaching.backend.mapper.Knowtemp.KnowtempMapper;
//import com.teaching.backend.mapper.chapter.ChapterMapper;
//import com.teaching.backend.mapper.courses.CoursesMapper;
//import com.teaching.backend.model.dto.Knowtemp.KnowtempAdd;
//import com.teaching.backend.model.dto.Knowtemp.KnowtempUpdate;
//import com.teaching.backend.model.entity.KnowGraph.Know;
//import com.teaching.backend.model.entity.Knowtemp.Knowtemp;
//import com.teaching.backend.model.entity.chapter.Chapter;
//import com.teaching.backend.model.entity.courses.Courses;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.time.LocalDateTime;
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * @Author:youhang
// * @Date:2024-07-29-10:33
// * @Description:
// */
//@Service
//public class KnowGraphService {
//
// @Autowired
// private ChapterMapper chapterMapper;
//
// @Autowired
// private KnowtempMapper knowtempMapper;
//
// @Autowired
// private CoursesMapper coursesMapper;
//
// @Autowired
// private KnowRepository knowRepository;
//
// public BaseResponse<String> add(KnowtempAdd knowtempAdd){
// String name = knowtempAdd.getName();
// String info = knowtempAdd.getInfo();
// Integer chapterId = knowtempAdd.getChapterId();
//
// Knowtemp knowtemp = new Knowtemp();
// knowtemp.setName(name);
// knowtemp.setInfo(info);
// knowtemp.setChapterId(chapterId);
// int insert = knowtempMapper.insert(knowtemp);
// if(insert > 0){
// return ResultUtils.success("添加成功");
// }
// return ResultUtils.error(ErrorCode.OPERATION_ERROR);
// }
//
//// public BaseResponse<String> update(KnowtempUpdate knowtempUpdate){
//// Integer id = knowtempUpdate.getId();
//// String name = knowtempUpdate.getName();
//// String info = knowtempUpdate.getInfo();
//// Integer chapterId = knowtempUpdate.getChapterId();
//// Knowtemp knowtemp = new Knowtemp();
//// knowtemp = knowtempMapper.selectById(id);
//// if(knowtemp == null){
//// return ResultUtils.error(ErrorCode.NOT_FOUND_ERROR);
//// }
//// knowtemp.setName(name);
//// knowtemp.setInfo(info);
//// knowtemp.setChapterId(chapterId);
//// int insert = knowtempMapper.updateById(knowtemp);
//// if(insert > 0){
//// return ResultUtils.success("修改成功");
//// }
//// return ResultUtils.error(ErrorCode.OPERATION_ERROR);
//// }
////
//// public BaseResponse<String> delete(Integer id){
//// Knowtemp knowtemp = new Knowtemp();
//// knowtemp = knowtempMapper.selectById(id);
//// if(knowtemp == null){
//// return ResultUtils.error(ErrorCode.NOT_FOUND_ERROR);
//// }
//// int insert = knowtempMapper.deleteById(id);
//// if(insert > 0){
//// return ResultUtils.success("删除成功");
//// }
//// return ResultUtils.error(ErrorCode.OPERATION_ERROR);
//// }
////
//// public BaseResponse<Knowtemp> query(Integer id){
//// Knowtemp knowtemp = new Knowtemp();
//// knowtemp = knowtempMapper.selectById(id);
//// if(knowtemp != null){
//// return ResultUtils.success(knowtemp);
//// }
//// return ResultUtils.error(ErrorCode.NOT_FOUND_ERROR);
//// }
//
//
//// public BaseResponse<String> saveKnowToNeo(String id) {
//// Courses courses = coursesMapper.selectById(id);
//// int f = knowRepository.createKnowCourse(courses.getId(),courses.getName(),courses.getDescription());
//// if(f <= 0)return ResultUtils.error(ErrorCode.OPERATION_ERROR);
////
//// List<Chapter> chapterList = chapterMapper.selectSectionsByCourseId(id);
//// for (int i = 0; i < chapterList.size(); i++) {
//// Chapter chapter = chapterList.get(i);
//// f = knowRepository.createKnowChapter(chapter.getId(),chapter.getName(),chapter.getContent());
//// if(f <= 0)return ResultUtils.error(ErrorCode.OPERATION_ERROR);
//// }
//// for (int i = 0; i < chapterList.size(); i++) {
//// Chapter chapter = chapterList.get(i);
//// if("".equals(chapter.getPid())){
//// f = knowRepository.addCourseFatherAndSonKnow(chapter.getCourseId(),chapter.getId());
//// if(f <= 0)return ResultUtils.error(ErrorCode.OPERATION_ERROR);
//// }else{
//// f = knowRepository.addChapterFatherAndSonKnow(chapter.getPid(),chapter.getId());
//// if(f <= 0)return ResultUtils.error(ErrorCode.OPERATION_ERROR);
//// }
////
//// }
//// QueryWrapper queryWrapper = new QueryWrapper<>();
//// queryWrapper.eq("courseid",id);
//// List<Knowtemp> list = knowtempMapper.selectList(queryWrapper);
//// for (int j = 0; j < list.size(); j++) {
//// Knowtemp knowtemp = list.get(j);
//// f = knowRepository.addFatherAndSonKnow(knowtemp.getChapterId(),knowtemp.getName(),knowtemp.getInfo());
//// if(f <= 0)return ResultUtils.error(ErrorCode.OPERATION_ERROR);
//// }
////
//// return ResultUtils.success("添加成功");
//// }
//
//
//}

@ -1,431 +0,0 @@
package com.teaching.backend.service.KnowGraph;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ErrorCode;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.mapper.KnowGraph.KnowRepository;
import com.teaching.backend.mapper.Knowtemp.KnowtempMapper;
import com.teaching.backend.mapper.chapter.ChapterMapper;
import com.teaching.backend.mapper.courses.CoursesMapper;
import com.teaching.backend.model.dto.KnowGraph.*;
import com.teaching.backend.model.dto.Knowtemp.KnowtempAdd;
import com.teaching.backend.model.dto.Knowtemp.KnowtempUpdate;
import com.teaching.backend.model.dto.chapter.ChapterDTO;
import com.teaching.backend.model.dto.courses.CoursesDTO;
import com.teaching.backend.model.entity.KnowGraph.Know;
import com.teaching.backend.model.entity.KnowGraph.KnowChapter;
import com.teaching.backend.model.entity.KnowGraph.KnowCourse;
import com.teaching.backend.model.entity.KnowGraph.Links;
import com.teaching.backend.model.entity.Knowtemp.Knowtemp;
import com.teaching.backend.model.entity.chapter.Chapter;
import com.teaching.backend.model.entity.courses.Courses;
import com.teaching.backend.model.vo.knowGraph.KnowVO;
import com.teaching.backend.model.vo.knowGraph.KnowVO1;
import org.neo4j.driver.internal.InternalRelationship;
import org.neo4j.driver.types.Node;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.neo4j.core.Neo4jClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.*;
/**
* @Author:youhang
* @Date:2024-07-21-14:46
* @Description:
*/
@Service
public class KnowService {
@Autowired
private KnowRepository knowRepository;
@Autowired
private ChapterMapper chapterMapper;
@Autowired
private KnowtempMapper knowtempMapper;
@Autowired
private CoursesMapper coursesMapper;
@Resource
private Neo4jClient neo4jClient;
public BaseResponse<String> add(KnowtempAdd knowtempAdd){
String name = knowtempAdd.getName();
String info = knowtempAdd.getInfo();
Long chapterId = knowtempAdd.getChapterid();
String courseid = knowtempAdd.getCourseid();
Knowtemp knowtemp = new Knowtemp();
knowtemp.setName(name);
knowtemp.setInfo(info);
knowtemp.setChapterid(chapterId);
knowtemp.setCourseid(courseid);
int insert = knowtempMapper.insert(knowtemp);
if(insert > 0){
return ResultUtils.success("添加成功");
}
return ResultUtils.error(ErrorCode.OPERATION_ERROR);
}
public BaseResponse<String> update(KnowtempUpdate knowtempUpdate){
Long id = knowtempUpdate.getId();
String name = knowtempUpdate.getName();
String info = knowtempUpdate.getInfo();
Long chapterId = knowtempUpdate.getChapterid();
String courseid = knowtempUpdate.getCourseid();
Knowtemp knowtemp = new Knowtemp();
knowtemp = knowtempMapper.selectById(id);
if(knowtemp == null){
return ResultUtils.error(ErrorCode.NOT_FOUND_ERROR);
}
knowtemp.setName(name);
knowtemp.setInfo(info);
knowtemp.setChapterid(chapterId);
knowtemp.setCourseid(courseid);
int insert = knowtempMapper.updateById(knowtemp);
if(insert > 0){
return ResultUtils.success("修改成功");
}
return ResultUtils.error(ErrorCode.OPERATION_ERROR);
}
public BaseResponse<String> delete(Long id){
Knowtemp knowtemp = new Knowtemp();
knowtemp = knowtempMapper.selectById(id);
if(knowtemp == null){
return ResultUtils.error(ErrorCode.NOT_FOUND_ERROR);
}
int insert = knowtempMapper.deleteById(id);
if(insert > 0){
return ResultUtils.success("删除成功");
}
return ResultUtils.error(ErrorCode.OPERATION_ERROR);
}
public BaseResponse<Knowtemp> query(Long id){
Knowtemp knowtemp = new Knowtemp();
knowtemp = knowtempMapper.selectById(id);
if(knowtemp != null){
return ResultUtils.success(knowtemp);
}
return ResultUtils.error(ErrorCode.NOT_FOUND_ERROR);
}
public BaseResponse<String> saveKnowToNeo(String id) {
Courses courses = coursesMapper.selectById(id);
int f = knowRepository.createKnowCourse(courses.getId(),courses.getName(),courses.getDescription());
if(f <= 0)return ResultUtils.error(ErrorCode.OPERATION_ERROR);
List<Chapter> chapterList = chapterMapper.selectSectionsByCourseId(id);
for (int i = 0; i < chapterList.size(); i++) {
Chapter chapter = chapterList.get(i);
f = knowRepository.createKnowChapter(chapter.getId(),chapter.getName(),chapter.getContent());
if(f <= 0)return ResultUtils.error(ErrorCode.OPERATION_ERROR);
}
for (int i = 0; i < chapterList.size(); i++) {
Chapter chapter = chapterList.get(i);
if(chapter.getPid()== 0){
f = knowRepository.addChapterAndCourse(chapter.getCourseId(),chapter.getId());
if(f <= 0)return ResultUtils.error(ErrorCode.OPERATION_ERROR);
}else{
f = knowRepository.addChapterAndCourse(chapter.getPid(),chapter.getId());
if(f <= 0)return ResultUtils.error(ErrorCode.OPERATION_ERROR);
}
}
QueryWrapper<Knowtemp> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("courseid",id);
List<Knowtemp> list = knowtempMapper.selectList(queryWrapper);
for (int j = 0; j < list.size(); j++) {
Knowtemp knowtemp = list.get(j);
f = knowRepository.CreateKnowaddChapter(knowtemp.getChapterid(),knowtemp.getName(),knowtemp.getInfo());
if(f <= 0)return ResultUtils.error(ErrorCode.OPERATION_ERROR);
}
return ResultUtils.success("添加成功");
}
public BaseResponse<String> updateRelationship(Long id,List<Long> ids,String relationship){
//必须先学id1的知识点才能学习id2的知识点
int f = -1;
if("PreCondition".equals(relationship)){
f = knowRepository.addKnowWithPreCondition(id,ids);
if(f<=0)return ResultUtils.error(ErrorCode.ADD_RELATION_FAILED);
} else if ("FatherAndSon".equals(relationship)) {
f = knowRepository.addKnowWithFaherAndSon(id,ids);
if(f<=0)return ResultUtils.error(ErrorCode.ADD_RELATION_FAILED);
}else{
f = knowRepository.addKnowWithRelated(id,ids);
if(f<=0)return ResultUtils.error(ErrorCode.ADD_RELATION_FAILED);
}
return ResultUtils.success("添加成功");
}
public BaseKnowReturn getKnowAll(String id) {
Collection<Map<String, Object>> all =
neo4jClient.query( "match(n:Know)-[r*0..]->(p:Know) where n.courseId = '"+id+"' return n as `n`,r as `r`,p as `p`,length(r) as `d`").fetch().all();
Map<Long,String>colorChoose = new HashMap<>();
String color[] = new String[10];
String[] colorList = {"#91CC75", "#5470C6", "#FAC858", "#EE6666", "#73C0DE", "#EA7CCC", "#5577FF", "#5577FF", "#9DBFFF", "#78A7FF"};
for (int i = 0; i < 10; i++) {
colorChoose.put((long) i,colorList[i]);
}
Iterator<Map<String, Object>> iterator = all.iterator();
Set<KnowVO> knowList = new HashSet<>();
Set<Links>linksList = new HashSet<>();
KnowVO knowVO;
List node2 = new ArrayList<>();
Links links;
int p = 0;
while (iterator.hasNext()) {
Map<String, Object> element = iterator.next();
knowVO = new KnowVO();
Node node1 = (Node) element.get("p");
Long group = (Long) element.get("d");
knowVO.setColor(colorChoose.get(group));
Long id1 = node1.id();
String name1 = node1.get("name").asString();
knowVO.setId(id1);
knowVO.setLabel(name1);
knowList.add(knowVO);
node2 = (List) element.get("r");
for (int i = 0; i < node2.size(); i++) {
InternalRelationship e = (InternalRelationship) node2.get(i);
links = new Links();
links.setId(e.id());
links.setSource(e.startNodeId());
links.setTarget(e.endNodeId());
links.setLabel(e.type());
linksList.add(links);
}
}
BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList,linksList);
return baseKnowReturn;
}
public BaseResponse<Set<KnowVO1>> getKnowByCourseId(String id) {
Collection<Map<String, Object>> all =
neo4jClient.query( "match(n:Know)-[r*0..]->(p:Know) where n.courseId = '"+id+"' return p as `p`").fetch().all();
Iterator<Map<String, Object>> iterator = all.iterator();
Set<KnowVO1> knowList = new HashSet<>();
KnowVO1 knowVO;
while (iterator.hasNext()) {
Map<String, Object> element = iterator.next();
knowVO = new KnowVO1();
Node node1 = (Node) element.get("p");
Long id1 = node1.id();
String name1 = node1.get("name").asString();
knowVO.setId(id1);
knowVO.setLabel(name1);
knowList.add(knowVO);
}
return ResultUtils.success(knowList);
}
// public List<Know> queryKnowAllKnowById(Long id) {
// return knowRepository.queryKnowAllKnowById(id);
// }
//
//
// public BaseResponse<Know> createKnow(KnowRequest knowRequest ) {
// String name = knowRequest.getName();
// String info = knowRequest.getInfo();
// if("".equals(name) || name.length()<=0){
// return ResultUtils.error(ErrorCode.PARAMS_EMPTY);
// }
// Know know = new Know();
// BeanUtils.copyProperties(knowRequest,know);
// return ResultUtils.success(knowRepository.save(know)) ;
// }
//
// public BaseResponse<Know> updateKnow(KnowUpdateRequest knowUpdateRequest ) {
// Know know = new Know();
// try {
// know = knowRepository.findById(knowUpdateRequest.getId()).orElseThrow(() -> new RuntimeException("知识点 not found"));
// }catch (RuntimeException e){
// return ResultUtils.error(ErrorCode.NOT_FOUND_ERROR);
// }
// String name = knowUpdateRequest.getName();
// String info = knowUpdateRequest.getInfo();
// if("".equals(name) || name.length()<=0){
// return ResultUtils.error(ErrorCode.PARAMS_EMPTY);
// }
// BeanUtils.copyProperties(knowUpdateRequest,know);
// return ResultUtils.success(knowRepository.save(know));
// }
// public BaseResponse<String> deleteKnow(Long id) {
// Boolean f = knowRepository.deleteKnow(id);
// if(f)return ResultUtils.success("删除成功");
// return ResultUtils.error(ErrorCode.DELETE_FAILED);
// }
//
//
//
// public BaseResponse<KnowCourse> createCourseKnow( Courses courses) {
// String courseId = courses.getId();
// String name = courses.getName();
// String description = courses.getDescription();
// return ResultUtils.success(knowRepository.createKnowCourse(courseId,name,description));
// }
//
// public BaseResponse<String> deleteCourseKnow( String courseId) {
// boolean f = knowRepository.deleteKnowCourse(courseId);
// if(f)return ResultUtils.success("删除成功");
// return ResultUtils.error(ErrorCode.DELETE_FAILED);
// }
//
// public Boolean updateCourseKnow( Courses courses) {
// String id = courses.getId();
// String name = courses.getName();
// String description = courses.getDescription();
// return knowRepository.updateKnowCourse(id,name,description);
//
// }
//
// public BaseResponse<KnowChapter> createKnowChapter(Chapter chapter) {
// return ResultUtils.success(knowRepository.createKnowChapter(chapter.getId(), chapter.getName(), chapter.getContent()));
//
// }
// public BaseResponse<KnowChapter> updateKnowChapter(Chapter chapter) {
// return ResultUtils.success(knowRepository.createKnowChapter(chapter.getId(), chapter.getName(), chapter.getContent()));
// }
// public BaseResponse<String> deleteKnowChapter(Long chapterId) {
// boolean f = knowRepository.deleteKnowChapter(chapterId);
// if(f)return ResultUtils.success("删除成功");
// return ResultUtils.error(ErrorCode.DELETE_FAILED);
// }
// public Set<Know> queryByChapterId(Long chapterId){
// Set<Know> knows = knowRepository.queryByChapterId(chapterId);
// return knows;
// }
//
//
//
// public BaseResponse<String> addKnowRelatedKnow(RelationshipKnowRequest relationshipKnowRequest) {
// int num = knowRepository.addKnowRelatedKnow(relationshipKnowRequest.getId(),relationshipKnowRequest.getKnowIds());
// if(num == relationshipKnowRequest.getKnowIds().size())return ResultUtils.success("添加关系成功,共添加了"+num+" 条关系");
// return ResultUtils.error(ErrorCode.DELETE_RELATIONSHIP_FAILED);
// }
// public BaseResponse<String> addKnowFatherAndSonKnow( RelationshipKnowRequest relationshipKnowRequest) {
// int num = knowRepository.addKnowFatherAndSonKnow(relationshipKnowRequest.getId(),relationshipKnowRequest.getKnowIds());
// if(num == relationshipKnowRequest.getKnowIds().size())return ResultUtils.success("添加关系成功,共添加了"+num+" 条关系");
// return ResultUtils.error(ErrorCode.DELETE_RELATIONSHIP_FAILED);
// }
//
//
// public BaseKnowReturn getKnowAll(String id) {
// Collection<Map<String, Object>> all =
// neo4jClient.query( "match(n:Know)-[r*0..]->(p:Know) where n.courseId = '"+id+"' return n as `n`,r as `r`,p as `p`,length(r) as `d`").fetch().all();
//
// Map<Long,String>colorChoose = new HashMap<>();
// String color[] = new String[10];
// String[] colorList = {"#91CC75", "#5470C6", "#FAC858", "#EE6666", "#73C0DE", "#EA7CCC", "#5577FF", "#5577FF", "#9DBFFF", "#78A7FF"};
// for (int i = 0; i < 10; i++) {
// colorChoose.put((long) i,colorList[i]);
// }
//
// Iterator<Map<String, Object>> iterator = all.iterator();
// Set<KnowVO> knowList = new HashSet<>();
// Set<Links>linksList = new HashSet<>();
// KnowVO knowVO;
// List node2 = new ArrayList<>();
// Links links;
// int p = 0;
// while (iterator.hasNext()) {
// Map<String, Object> element = iterator.next();
// knowVO = new KnowVO();
// Node node1 = (Node) element.get("p");
//
// Long group = (Long) element.get("d");
// knowVO.setColor(colorChoose.get(group));
//
// Long id1 = node1.id();
// String name1 = node1.get("name").asString();
// knowVO.setId(id1);
// knowVO.setLabel(name1);
//
// knowList.add(knowVO);
//
// node2 = (List) element.get("r");
// for (int i = 0; i < node2.size(); i++) {
// InternalRelationship e = (InternalRelationship) node2.get(i);
// links = new Links();
// links.setId(e.id());
// links.setSource(e.startNodeId());
// links.setTarget(e.endNodeId());
// links.setLabel(e.type());
// linksList.add(links);
// }
//
//
// }
// BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList,linksList);
// System.out.println(baseKnowReturn);
// return baseKnowReturn;
// }
//
// public BaseKnowReturn getKnowById(Long id) {
// Collection<Map<String, Object>> all =
// neo4jClient.query( "match(n:Know)-[r*0..2]->(p:Know) where ID(n) = "+id+" return n as `n`,r as `r`,p as `p`,length(r) as `d`").fetch().all();
// Map<Long,String>colorChoose = new HashMap<>();
// String color[] = new String[10];
// String[] colorList = {"#91CC75", "#5470C6", "#FAC858", "#EE6666", "#73C0DE", "#EA7CCC", "#5577FF", "#5577FF", "#9DBFFF", "#78A7FF"};
// for (int i = 0; i < 10; i++) {
// colorChoose.put((long) i,colorList[i]);
// }
//
// Iterator<Map<String, Object>> iterator = all.iterator();
// Set<KnowVO> knowList = new HashSet<>();
// Set<Links>linksList = new HashSet<>();
// KnowVO knowVO;
// List node2 = new ArrayList<>();
// Links links;
// int p = 0;
// while (iterator.hasNext()) {
// Map<String, Object> element = iterator.next();
//
// knowVO = new KnowVO();
// Node node1 = (Node) element.get("p");
// Long group = (Long) element.get("d");
// knowVO.setColor(colorChoose.get(group));
// Long id1 = node1.id();
// String name1 = node1.get("name").asString();
// knowVO.setId(id1);
// knowVO.setLabel(name1);
// knowList.add(knowVO);
//
// node2 = (List) element.get("r");
// for (int i = 0; i < node2.size(); i++) {
// InternalRelationship e = (InternalRelationship) node2.get(i);
// links = new Links();
// links.setId(e.id());
// links.setSource(e.startNodeId());
// links.setTarget(e.endNodeId());
// links.setLabel(e.type());
// linksList.add(links);
// }
//
//
// }
// BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList,linksList);
// System.out.println(baseKnowReturn);
// return baseKnowReturn;
// }
}

@ -1,107 +0,0 @@
package com.teaching.backend.service.KnowGraph;
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ErrorCode;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.mapper.KnowGraph.ResourcesRepository;
import com.teaching.backend.model.dto.KnowGraph.*;
import com.teaching.backend.model.entity.KnowGraph.Resources;
import com.teaching.backend.utils.FileUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.neo4j.core.Neo4jClient;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.*;
/**
* @Author:youhang
* @Date:2024-07-21-14:46
* @Description:
*/
@Service
public class ResourcesService {
private static final String GLOBAL_CODE_DIR_NAME = "tempFile";
@Autowired
private ResourcesRepository resourcesRepository;
@Resource
private Neo4jClient neo4jClient;
public List<Resources> queryKnowAllResources(Long id) {
return resourcesRepository.queryResourceAllId(id);
}
public Resources createResource(ResourcesAddRequest resourceAddRequest ) {
String name = resourceAddRequest.getName();
Integer type = resourceAddRequest.getType();
String path = resourceAddRequest.getPath();
Resources resources = new Resources();
BeanUtils.copyProperties(resourceAddRequest,resources);
return resourcesRepository.save(resources);
}
public void deleteResources(Long id) {
resourcesRepository.deleteById(id);
}
public Resources updateResources(ResourceUpdateRequest resourceUpdateRequest ) {
Resources resources = new Resources();
resources = resourcesRepository.findById(resourceUpdateRequest.getId()).orElseThrow(() -> new RuntimeException("知识点 not found"));
BeanUtils.copyProperties(resourceUpdateRequest,resources);
return resourcesRepository.save(resources);
}
public void addKnowWithResources( RelationshipResourceRequest relationshipResourceRequest) {
resourcesRepository.addResourceResourcesKnow(relationshipResourceRequest.getId(),relationshipResourceRequest.getResourceIds());
}
public Set<Resources> queryCourseKnowToResources(Long KnowId){
return resourcesRepository.queryCourseKnowToResources(KnowId);
}
public List<MultipartFile> queryBesidesKnowToResources(Long KnowId){
List<MultipartFile>multipartFileList = new ArrayList<>();
Set<Resources>resourcesSet = resourcesRepository.queryBesidesKnowToResources(KnowId);
resourcesSet = resourcesRepository.queryKnowToResources(KnowId);
Iterator<Resources>iterator = resourcesSet.iterator();
while (iterator.hasNext()){
Resources resources = iterator.next();
MultipartFile multipartFile = FileUtils.fileUrlConvertToMultipartFile(resources.getPath());
multipartFileList.add(multipartFile);
}
return multipartFileList;
}
public BaseResponse<String> uploadFile(MultipartFile file) {
String userDir = System.getProperty("user.dir");
String globalFilePathName = userDir + File.separator + GLOBAL_CODE_DIR_NAME;
if (!FileUtil.exist(globalFilePathName)) {
FileUtil.mkdir(globalFilePathName);
}
// 把用户的文件隔离存放
File userCodeFile = null;
try {
String userCodeParentPath = globalFilePathName + File.separator + UUID.randomUUID();
String userCodePath = userCodeParentPath + File.separator + file.getOriginalFilename();
userCodeFile = FileUtil.writeFromStream(file.getInputStream(), userCodePath);
} catch (Exception e) {
return ResultUtils.error(ErrorCode.UPLOAD_FAILED);
}
return ResultUtils.success(userCodeFile.getPath());
}
}

@ -8,6 +8,7 @@ import com.teaching.backend.model.entity.courses.Courses;
import com.teaching.backend.model.entity.umsAdmin.UmsStudent;
import com.teaching.backend.model.query.CourseQuery;
import com.teaching.backend.model.vo.courses.CoursesVO;
import com.teaching.backend.model.vo.courses.PersonalCenterStudentListVO;
import com.teaching.backend.model.vo.umsAdmin.UmsStudentVO;
import javax.servlet.http.HttpServletResponse;
@ -46,5 +47,5 @@ public interface ICoursesService extends IService<Courses> {
Map<String, Object> getPagePageSize2(int page, int pageSize);
LinkedHashSet<UmsStudent> queryStudentList(CourseQuery courseQuery);
LinkedHashSet<PersonalCenterStudentListVO> queryStudentList(String userId);
}

@ -61,5 +61,5 @@ public interface SeCourseFavourService extends IService<SeCourseFavour> {
* @param userId
* @return
*/
CoursesVO queryNewCollect(String userId);
List<CoursesVO> queryNewCollect(String userId);
}

@ -4,19 +4,18 @@ package com.teaching.backend.service.impl.chapter;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.teaching.backend.common.ErrorCode;
import com.teaching.backend.exception.BusinessException;
import com.teaching.backend.mapper.Knowtemp.KnowtempMapper;
import com.teaching.backend.mapper.Knowtemp.KnowtmpMapper;
import com.teaching.backend.mapper.chapter.ChapterMapper;
import com.teaching.backend.mapper.chapter.TemporaryChapterMapper;
import com.teaching.backend.model.dto.chapter.ChapterDTO;
import com.teaching.backend.model.entity.Knowtemp.Knowtemp;
import com.teaching.backend.model.entity.chapter.Chapter;
import com.teaching.backend.model.entity.chapter.TemporaryChapter;
import com.teaching.backend.model.vo.chapter.ChapterVo;
import com.teaching.backend.service.KnowGraph.KnowService;
import com.teaching.backend.service.Know.KnowService;
import com.teaching.backend.service.chapter.IChapterService;
import com.teaching.backend.utils.Chapter.ExcelUtils;
import org.springframework.beans.BeanUtils;
@ -45,12 +44,10 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
@Autowired
private TemporaryChapterMapper temporaryChapterMapper;
@Autowired
private KnowtempMapper knowtempMapper;
// private int count=0;
List<Chapter> list=new ArrayList<>();
private KnowtmpMapper knowtmpMapper;
// private int count=0;
List<Chapter> list = new ArrayList<>();
@Autowired
private KnowService knowService;
@Override
public String updateNumShow(Chapter chapter) {
@ -59,26 +56,26 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
String courseid = chapter.getCourseId();
Long pid = chapter.getPid();
LambdaQueryWrapper<Chapter> wrapper = new LambdaQueryWrapper<>();
Long countChapter ;
Long countChapter;
// pid为0时,说明为章
if("0".equals(pid)|| "".equals(pid)){
wrapper.eq(Chapter::getCourseId,courseid);
if ("0".equals(pid) || "".equals(pid)) {
wrapper.eq(Chapter::getCourseId, courseid);
countChapter = chapterMapper.selectCount(wrapper);
finalNumShow=String.valueOf(countChapter+1);
finalNumShow = String.valueOf(countChapter + 1);
// chapter.setNumshow(String.valueOf(countChapter+1));
// System.out.println(chapter.getNumshow());
}else{
} else {
// 为小节
Chapter chapter1 = chapterMapper.selectById(pid);
String parentNumShow =chapter1.getNumshow();
String parentNumShow = chapter1.getNumshow();
System.out.println("909090");
System.out.println(parentNumShow);
wrapper.eq(Chapter::getCourseId,courseid)
.eq(Chapter::getPid,pid);
wrapper.eq(Chapter::getCourseId, courseid)
.eq(Chapter::getPid, pid);
countChapter = chapterMapper.selectCount(wrapper);
System.out.println("-=-=-=-=-="+countChapter);
finalNumShow=parentNumShow + "-" + String.valueOf(countChapter + 1);
System.out.println("-=-=-=-=-=" + countChapter);
finalNumShow = parentNumShow + "-" + String.valueOf(countChapter + 1);
}
System.out.println("-=-=-=-=11");
System.out.println(finalNumShow);
@ -89,10 +86,10 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
public LinkedList<Chapter> getAll() {
List<Chapter> list = chapterMapper.selectList(null);
LinkedList<Chapter> linkedList = new LinkedList<>(list);
int i=0;
for (Chapter chapter:linkedList){
int i = 0;
for (Chapter chapter : linkedList) {
System.out.println(linkedList.get(i));
System.out.println(i+"----"+chapter);
System.out.println(i + "----" + chapter);
i++;
}
System.out.println(linkedList);
@ -102,7 +99,7 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
@Override
public LinkedList<Chapter> getCourseChapter(String courseid) {
LambdaQueryWrapper<Chapter> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Chapter::getCourseId,courseid)
wrapper.eq(Chapter::getCourseId, courseid)
.orderByAsc(Chapter::getNumshow);
List<Chapter> list = chapterMapper.selectList(wrapper);
LinkedList<Chapter> linkedList = new LinkedList<>(list);
@ -110,38 +107,38 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
}
@Override
public LinkedList<ChapterVo> getChapterSection(String courseid){
public LinkedList<ChapterVo> getChapterSection(String courseid) {
// LinkedList<Chapter> list = new LinkedList<>();
// 获得所有的节,并按顺序进行排列
LambdaQueryWrapper<Chapter> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Chapter::getCourseId,courseid)
.like(Chapter::getNumshow,"-")
wrapper.eq(Chapter::getCourseId, courseid)
.like(Chapter::getNumshow, "-")
.orderByAsc(Chapter::getNumshow);
List<Chapter> prelist = chapterMapper.selectList(wrapper);
System.out.println("所有的节");
System.out.println(prelist);
// 获得所有的章节信息
LambdaQueryWrapper<Chapter> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(Chapter::getCourseId,courseid)
.notLike(Chapter::getNumshow,"-")
wrapper1.eq(Chapter::getCourseId, courseid)
.notLike(Chapter::getNumshow, "-")
.orderByAsc(Chapter::getNumshow);
List<Chapter> chapterList = chapterMapper.selectList(wrapper1);
System.out.println("0-0-0-0所有的章------------");
System.out.println(chapterList);
// 类型转换chapter => chapterVo
List<ChapterVo> chapterVoList = BeanUtil.copyToList(chapterList, ChapterVo.class);
chapterVoList = chapterVoList.stream().map((item) ->{
for (int i=0;i<prelist.size();i++){
chapterVoList = chapterVoList.stream().map((item) -> {
for (int i = 0; i < prelist.size(); i++) {
System.out.println("=====================");
// System.out.println(prelist.get(i).getNumshow().split("-")[0].equals(item.getNumshow()));
if (prelist.get(i).getNumshow().split("-")[0].equals(item.getNumshow())){
if (prelist.get(i).getNumshow().split("-")[0].equals(item.getNumshow())) {
// System.out.println(item.getNumshow()+"[][][]"+i);
System.out.println("88888888888888888888888888"+prelist.get(i).getNumshow().split("-")[0]);
System.out.println("88888888888888888888888888" + prelist.get(i).getNumshow().split("-")[0]);
// Chapter chapter = prelist.get(i);
list.add(prelist.get(i));
item.setChapterSection(list);
System.out.println(prelist.get(i).getNumshow()+"-------------+121--");
}else {
System.out.println(prelist.get(i).getNumshow() + "-------------+121--");
} else {
// list1=list;
// System.out.println(item.getNumshow() + "[8888][][]");
// System.out.println(prelist.get(i).getNumshow().split("-")[0]);
@ -175,27 +172,27 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
@Override
public List<Chapter> getChapterTree(String courseId) {
List<Chapter> chapters=baseMapper.selectSectionsByCourseId(courseId);
List<Chapter> chapters = baseMapper.selectSectionsByCourseId(courseId);
Map<Long,Chapter> chapterMap=new HashMap<>();
Map<Long, Chapter> chapterMap = new HashMap<>();
List<Chapter> roots=new ArrayList<>();
List<Chapter> roots = new ArrayList<>();
for (Chapter chapter:chapters){
for (Chapter chapter : chapters) {
chapter.setChildren(new ArrayList<>());
chapter.setKnowledgePoints(new ArrayList<>());
chapterMap.put(chapter.getId(),chapter);
chapterMap.put(chapter.getId(), chapter);
}
for (Chapter chapter:chapters){
Long parentId=chapter.getPid();
if (parentId!=0){
Chapter parentChapter=chapterMap.get(parentId);
for (Chapter chapter : chapters) {
Long parentId = chapter.getPid();
if (parentId != 0) {
Chapter parentChapter = chapterMap.get(parentId);
if (parentChapter != null) {
parentChapter.getChildren().add(chapter);
}
}else {
} else {
roots.add(chapter);
}
}
@ -217,18 +214,19 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
.collect(Collectors.toList());
chapter.setChildren(sortedChildren);
QueryWrapper<Knowtemp>queryWrapper = new QueryWrapper<>();
QueryWrapper<Knowtmp> queryWrapper = new QueryWrapper<>();
for (Chapter child : sortedChildren) {
queryWrapper.eq("chapterId",child.getId());
List<Knowtemp> knows = knowtempMapper.selectList(queryWrapper);
queryWrapper.eq("chapterId", child.getId());
List<Knowtmp> knows = knowtmpMapper.selectList(queryWrapper);
child.setKnowledgePoints(new ArrayList<>(knows));
loadKnowledgePointsRecursively(child);
}
}
@Override
public void saveChapter(ChapterDTO chapterDTO) {
System.out.println("我导入Excel成功进入到了这一步");
Chapter chapter = new Chapter();
try {
BeanUtils.copyProperties(chapterDTO, chapter);
@ -236,7 +234,7 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
throw new RuntimeException("复制数据出错", e);
}
Long pid = chapter.getPid();
if (pid == null ) {
if (pid == null) {
chapter.setPid(0L);
LambdaQueryWrapper<Chapter> maxSortWrapper = new LambdaQueryWrapper<>();
maxSortWrapper.eq(Chapter::getPid, 0).orderByDesc(Chapter::getOrderNum).last("limit 1");
@ -256,7 +254,7 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
if (parentChapter != null) {
LambdaQueryWrapper<Chapter> maxSortWrapper = new LambdaQueryWrapper<>();
maxSortWrapper.eq(Chapter::getPid,pid).orderByDesc(Chapter::getOrderNum).last("limit 1");
maxSortWrapper.eq(Chapter::getPid, pid).orderByDesc(Chapter::getOrderNum).last("limit 1");
parentChapter.setUpdateTime(LocalDateTime.now());
Chapter maxSortChapter = this.getOne(maxSortWrapper);
@ -273,10 +271,11 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
chapter.setUpdateTime(LocalDateTime.now());
this.save(chapter);
} else {
throw new BusinessException(ErrorCode.PARAMS_ERROR,"未找到父章节,ID 为: " + pid);
throw new BusinessException(ErrorCode.PARAMS_ERROR, "未找到父章节,ID 为: " + pid);
}
}
}
@Override
public Long saveExcelChapter2(ChapterDTO chapterDTO, boolean isParent) {
Chapter chapter = new Chapter();
@ -306,29 +305,29 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
return chapter.getId();
}
}else {
Chapter parentChapter = this.getById(pid);
if (parentChapter != null) {
LambdaQueryWrapper<Chapter> maxSortWrapper = new LambdaQueryWrapper<>();
maxSortWrapper.eq(Chapter::getPid, pid).orderByDesc(Chapter::getOrderNum).last("limit 1");
} else {
Chapter parentChapter = this.getById(pid);
if (parentChapter != null) {
LambdaQueryWrapper<Chapter> maxSortWrapper = new LambdaQueryWrapper<>();
maxSortWrapper.eq(Chapter::getPid, pid).orderByDesc(Chapter::getOrderNum).last("limit 1");
Chapter maxSortChapter = this.getOne(maxSortWrapper);
double newSort = (maxSortChapter != null) ? maxSortChapter.getOrderNum() + 1 : 1;
Chapter maxSortChapter = this.getOne(maxSortWrapper);
double newSort = (maxSortChapter != null) ? maxSortChapter.getOrderNum() + 1 : 1;
chapter.setOrderNum(newSort);
chapter.setOrderNum(newSort);
parentChapter.setUpdateTime(now);
this.updateById(parentChapter);
parentChapter.setUpdateTime(now);
this.updateById(parentChapter);
this.save(chapter);
this.save(chapter);
return chapter.getId();
} else {
throw new BusinessException(ErrorCode.PARAMS_ERROR, "未找到父章节,ID 为: " + pid);
}
} return null;
return chapter.getId();
} else {
throw new BusinessException(ErrorCode.PARAMS_ERROR, "未找到父章节,ID 为: " + pid);
}
}
return null;
}
@Override
@ -341,13 +340,14 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
throw new RuntimeException("复制数据出错", e);
}
if (chapterId1 == null && chapterId2 == null||chapterId1!=null && chapterId2==null) {
if (chapterId1 == null && chapterId2 == null || chapterId1 != null && chapterId2 == null) {
handleRootChapterInsertion(chapter);
} else {
handleChapterInsertion(chapterId1, chapterId2, chapter);
}
}
private void handleRootChapterInsertion(Chapter chapter) {
Long pid = chapter.getPid();
if (pid == null) {
@ -405,6 +405,7 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
public void upChapter(Long chapterId) {
moveChapter(chapterId, true);
}
@Override
public void downChapter(Long chapterId) {
moveChapter(chapterId, false);
@ -412,15 +413,15 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
@Override
public void downExcel(HttpServletResponse response) throws IOException {
ExcelUtils.createTemplateExcel(response);
}
ExcelUtils.createTemplateExcel(response);
}
@Override
public Page<Chapter>getAllChapters(int page, int pageSize) {
public Page<Chapter> getAllChapters(int page, int pageSize) {
Page<Chapter> pageInfo=new Page<>(page,pageSize);
LambdaQueryWrapper<Chapter> queryWrapper=new LambdaQueryWrapper<>();
this.page(pageInfo,queryWrapper);
Page<Chapter> pageInfo = new Page<>(page, pageSize);
LambdaQueryWrapper<Chapter> queryWrapper = new LambdaQueryWrapper<>();
this.page(pageInfo, queryWrapper);
return pageInfo;
}
@ -437,7 +438,7 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
if (chapter.getPid() == 0) {
String courseId = chapter.getCourseId();
List<Chapter> subChapters = chapterMapper.selectByIdAndPid(chapterId,courseId);
List<Chapter> subChapters = chapterMapper.selectByIdAndPid(chapterId, courseId);
BigDecimal totalClassHours = BigDecimal.ZERO;
@ -451,7 +452,7 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
}
chapter.setTotalClassHours(String.valueOf(totalClassHours));
}else {
} else {
chapter.setTotalClassHours(chapter.getTotalClassHours());
}
@ -484,14 +485,13 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
}
Chapter finalChapter = new Chapter();
try {
BeanUtils.copyProperties(tempChapter, finalChapter);
} catch (Exception e) {
throw new RuntimeException("复制数据出错", e);
}
finalChapter.setId(null);
finalChapter.setId(null);
this.save(finalChapter);
tempIdToFinalIdMap.put(tempChapter.getId(), finalChapter.getId());
}
@ -550,8 +550,6 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
}
public void moveChapter(Long chapterId, boolean moveUp) {
Chapter chapter = this.getById(chapterId);
if (chapter == null) {
@ -604,79 +602,80 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
updateChapter.setOrderNum(newOrderNum);
this.updateById(updateChapter);
}
@Override
public void deleteChapter(Long id) {
if (id==null){
throw new BusinessException(ErrorCode.PARAMS_ERROR,"请求参数不能为空");
if (id == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请求参数不能为空");
}
LambdaQueryWrapper<Chapter>queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(Chapter::getId,id);
LambdaQueryWrapper<Chapter> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Chapter::getId, id);
LambdaQueryWrapper<Chapter>lambdaQueryWrapper=new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(Chapter::getPid,id);
Long count= this.count(lambdaQueryWrapper);
LambdaQueryWrapper<Chapter> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(Chapter::getPid, id);
Long count = this.count(lambdaQueryWrapper);
if (count>0){
throw new BusinessException(ErrorCode.OPERATION_ERROR,"存在子章节,无法删除");
}
QueryWrapper<Knowtemp>queryWrapper1 = new QueryWrapper<>();
queryWrapper1.eq("chapterId",id);
List<Knowtemp> knows = knowtempMapper.selectList(queryWrapper1);
if (count > 0) {
throw new BusinessException(ErrorCode.OPERATION_ERROR, "存在子章节,无法删除");
}
QueryWrapper<Knowtmp> queryWrapper1 = new QueryWrapper<>();
queryWrapper1.eq("chapterId", id);
List<Knowtmp> knows = knowtmpMapper.selectList(queryWrapper1);
if (!knows.isEmpty()) {
throw new BusinessException(ErrorCode.OPERATION_ERROR, "子章节下存在知识点,无法删除");
}
this.remove(queryWrapper);
this.remove(queryWrapper);
}
public void updateNumShow(String numshow, String courseid){
public void updateNumShow(String numshow, String courseid) {
// 查询课程章节 getCourseChapter
LambdaQueryWrapper<Chapter> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Chapter::getCourseId,courseid)
wrapper.eq(Chapter::getCourseId, courseid)
.orderByAsc(Chapter::getNumshow);
List<Chapter> chapterList = chapterMapper.selectList(wrapper);
System.out.println("0-0-0-0-00-------");
System.out.println(chapterList);
List<Chapter> newlist = new ArrayList<>();
int count=0,j=0;
int count = 0, j = 0;
int i = numshow.indexOf("-");
// 删除的为章
if(i==-1){
if (i == -1) {
System.out.println("9999999");
for(int k=0;k<chapterList.size();k++){
for (int k = 0; k < chapterList.size(); k++) {
// System.out.println("=-=-=--="+k+"-=-=-==-"+numshow);
// System.out.println(chapterList.get(k).getNumshow());
// System.out.println(chapterList.get(k).getNumshow().equals(numshow));
if (chapterList.get(k).getNumshow().equals(numshow)){
j=k;
}else if (chapterList.get(k).getNumshow().contains(numshow+"-")){
if (chapterList.get(k).getNumshow().equals(numshow)) {
j = k;
} else if (chapterList.get(k).getNumshow().contains(numshow + "-")) {
count++;
chapterMapper.deleteById(chapterList.get(k).getId());
}else{
} else {
System.out.println(chapterList.get(k));
newlist.add(chapterList.get(k));
}
}
System.out.println("======"+count+"======"+j);
System.out.println("======" + count + "======" + j);
System.out.println(newlist);
for (int k=j;k< newlist.size();k++){
Chapter chapter= newlist.get(k);
if (newlist.get(k).getNumshow().indexOf("-")==-1){
chapter.setNumshow(String.valueOf(Integer.parseInt(newlist.get(k).getNumshow())-1));
chapterMapper.updateById(chapter);
newlist.set(k,chapter);
}else{
String[] split = newlist.get(k).getNumshow().split("-");
String s = String.valueOf(Integer.parseInt(split[0]) - 1);
chapter.setNumshow(s+"-"+split[1]);
chapterMapper.updateById(chapter);
System.out.println(chapter);
newlist.set(k,chapter);
}
for (int k = j; k < newlist.size(); k++) {
Chapter chapter = newlist.get(k);
if (newlist.get(k).getNumshow().indexOf("-") == -1) {
chapter.setNumshow(String.valueOf(Integer.parseInt(newlist.get(k).getNumshow()) - 1));
chapterMapper.updateById(chapter);
newlist.set(k, chapter);
} else {
String[] split = newlist.get(k).getNumshow().split("-");
String s = String.valueOf(Integer.parseInt(split[0]) - 1);
chapter.setNumshow(s + "-" + split[1]);
chapterMapper.updateById(chapter);
System.out.println(chapter);
newlist.set(k, chapter);
}
// if (list.get(k).getNumshow().contains(numshow+"-") ){
// chapterMapper.deleteById(list.get(i).getId());
// }else{
@ -684,32 +683,31 @@ public class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> impl
// list.get(i).setNumshow( String.valueOf(num) );
// }
}
}
else{
} else {
String[] split = numshow.split("-");
for (int k=0;k< chapterList.size();k++){
System.out.println("009988"+String.valueOf(Integer.parseInt(split[0])+1));
for (int k = 0; k < chapterList.size(); k++) {
System.out.println("009988" + String.valueOf(Integer.parseInt(split[0]) + 1));
// 找到下一章的起始点
if (chapterList.get(k).getNumshow().equals(String.valueOf(Integer.parseInt(split[0])+1))){
count=k;
if (chapterList.get(k).getNumshow().equals(String.valueOf(Integer.parseInt(split[0]) + 1))) {
count = k;
}
if (chapterList.get(k).getNumshow().equals(numshow)){
j=k;
if (chapterList.get(k).getNumshow().equals(numshow)) {
j = k;
chapterMapper.deleteById(chapterList.get(k).getId());
}else{
} else {
newlist.add(chapterList.get(k));
}
}
System.out.println(count+"''''''"+j);
for (int k=j;k<count-1;k++){
System.out.println(count + "''''''" + j);
for (int k = j; k < count - 1; k++) {
// System.out.println(newlist.get(k));
String[] split1 = newlist.get(k).getNumshow().split("-");
String s = split1[0]+"-"+String.valueOf(Integer.parseInt(split1[1]) - 1);
Chapter chapter= newlist.get(k);
String s = split1[0] + "-" + String.valueOf(Integer.parseInt(split1[1]) - 1);
Chapter chapter = newlist.get(k);
chapter.setNumshow(s);
chapterMapper.updateById(chapter);
newlist.set(k,chapter);
newlist.set(k, chapter);
}
}

@ -25,6 +25,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.teaching.backend.utils.CourseCode.TOTAL_OBJECTIVE_HAS_NO_CHILD;
/**
* <p>
* 服务实现类
@ -54,33 +56,33 @@ public class CourseObjectivesServiceImpl extends ServiceImpl<CourseObjectivesMap
CourseObjectives courseObjectivesNew = new CourseObjectives();
BeanUtil.copyProperties(courseObjectivesDTO,courseObjectivesNew);
String pid = courseObjectivesDTO.getPid();
// if(pid.equals(null)){
// throw new BusinessException(ErrorCode.NOT_FOUND_ERROR,"pid父节点不能为空");
// }
Integer type = courseObjectivesDTO.getType();
//判断是否已经添加过该类型的目标
//每个类型的目标只能有一个
//判断是否已经添加过该类型的目标(每个类型的目标只能有一个)
Long count = courseObjectivesMapper.selectCount(new LambdaQueryWrapper<CourseObjectives>()
.eq(CourseObjectives::getPid, pid)
.eq(CourseObjectives::getType, type));
if (count==CourseCode.OBJECTIVE_EXIT.getValue()){
throw new BusinessException(ErrorCode.CONTENT_EXISTS,"该类型的目标已存在,禁止重复添加!");
}
if (type!=CourseCode.SI_ZHENG_TYPE.getValue()){
if (!type.equals(CourseCode.SI_ZHENG_TYPE.getValue())){
Long sz = SZ_EXIT(courseObjectivesDTO);
if (sz!=CourseCode.SI_ZHENG_EXIT.getValue()){
throw new BusinessException(ErrorCode.PARAMS_ILLEGAL,"请在添加完思政目标以后再添加此类型目标!");
}
}
courseObjectivesMapper.insert(courseObjectivesNew);
//插入新的课程目标
int insert = courseObjectivesMapper.insert(courseObjectivesNew);
//插入数据以后要把总体目标那边的haschild改成1
if (insert>0){
CourseObjectives courseObjectivesOld = courseObjectivesMapper.selectById(pid);
if (courseObjectivesOld.getHasChild() == TOTAL_OBJECTIVE_HAS_NO_CHILD.getValue()) {
courseObjectivesOld.setHasChild(1);
courseObjectivesMapper.updateById(courseObjectivesOld);
}
}
return "添加成功";
//往表里面写分项目标
// courseObjectivesMapper.insert(courseObjectivesNew);
// //插入数据以后要把总体目标那边的haschild改成1
// CourseObjectives courseObjectivesOld = courseObjectivesMapper.selectById(pid);
// courseObjectivesOld.setHasChild(1);
// courseObjectivesMapper.updateById(courseObjectivesOld);
}
private Long SZ_EXIT(CourseObjectivesDTO courseObjectivesDTO) {
@ -110,7 +112,7 @@ public class CourseObjectivesServiceImpl extends ServiceImpl<CourseObjectivesMap
if (type == CourseCode.TOTAL_OBJECTIVE_TYPE.getValue()){
throw new BusinessException(ErrorCode.OPERATION_ERROR,"课程总目标只需清除所列内容即可!");
}
//TODO:等到删完内容后判断还是上来就判断?
//等到删完内容后判断还是上来就判断?
Long count = objectiveContentKnowMapper.selectCount(new LambdaQueryWrapper<ObjectiveContentKnow>()
.eq(ObjectiveContentKnow::getObjectiveOrContent, id));
if(count > CourseCode.KNOWS_EXIT.getValue()){
@ -121,9 +123,9 @@ public class CourseObjectivesServiceImpl extends ServiceImpl<CourseObjectivesMap
LambdaQueryWrapper<CourseObjectives> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CourseObjectives::getPid, pid);
Long countSZ = courseObjectivesMapper.selectCount(queryWrapper);
if (countSZ==CourseCode.SI_ZHENG_EXIT.getValue()){
if (countSZ.equals(CourseCode.SI_ZHENG_EXIT.getValue())){
Long countContentsSZ = getCount(id);
if (countContentsSZ<(CourseCode.CONTENT_EXIT.getValue()))
if (countContentsSZ == (CourseCode.CONTENT_EXIT.getValue()))
{
// 删除操作和更新父目标状态
deleteObjectiveAndUpdateParent(id, pid);
@ -140,7 +142,7 @@ public class CourseObjectivesServiceImpl extends ServiceImpl<CourseObjectivesMap
}
else {
Long countContentsF = getCount(id);
if (countContentsF<CourseCode.CONTENT_EXIT.getValue()){
if (countContentsF == CourseCode.CONTENT_EXIT.getValue()){
courseObjectivesMapper.deleteById(id);
return "删除成功";
}
@ -160,7 +162,7 @@ public class CourseObjectivesServiceImpl extends ServiceImpl<CourseObjectivesMap
private void deleteObjectiveAndUpdateParent(String id, String pid) {
courseObjectivesMapper.deleteById(id);
CourseObjectives parentObjective = courseObjectivesMapper.selectById(pid);
parentObjective.setHasChild(0);
parentObjective.setHasChild(TOTAL_OBJECTIVE_HAS_NO_CHILD.getValue());
courseObjectivesMapper.updateById(parentObjective);
}

@ -29,16 +29,17 @@ import com.teaching.backend.model.entity.umsAdmin.UmsUser;
import com.teaching.backend.model.query.CourseQuery;
import com.teaching.backend.model.vo.courses.CourseObjectivesTreeVO;
import com.teaching.backend.model.vo.courses.CoursesVO;
import com.teaching.backend.model.vo.courses.PersonalCenterStudentListVO;
import com.teaching.backend.model.vo.umsAdmin.UmsStudentVO;
import com.teaching.backend.service.courses.ICoursesService;
import com.teaching.backend.utils.CourseCode;
import com.teaching.backend.utils.knowGraph.AddNeoKnowByCourse;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ResourceUtils;
import org.springframework.util.StringUtils;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
@ -91,71 +92,74 @@ public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses> impl
@Autowired
private LearningRecordsMapper learningRecordsMapper;
@Autowired
private AddNeoKnowByCourse addNeoKnowByCourse;
@Autowired
CourseLearningRecordMapper courseLearningRecordMapper;
@Override
@Transactional
public String saveCourseWithObjective(CoursesDTO coursesDTO) {
// String teacher = coursesDTO.getTeacher();
// if (teacher == null || teacher.equals("")) {
// throw new BusinessException(ErrorCode.USERNAME_NOT_EXIT);
// }
// 初始化并生成新的课程ID
Courses courses = new Courses();
String courseId = UUID.randomUUID().toString().replace("-", "");
CourseObjectives courseObjectives = new CourseObjectives();
// 拷贝属性并设置创建时间和ID
BeanUtils.copyProperties(coursesDTO, courses);
courses.setCreateTime(LocalDateTime.now());
courses.setId(courseId);
// 检查课程代码是否已存在
String code = coursesDTO.getCode();
QueryWrapper<Courses> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("code", code);
Long count = coursesMapper.selectCount(queryWrapper);
if (count == 0) {
int insert = coursesMapper.insert(courses);
if (insert > 0) {
Courses coursesNew = coursesMapper.selectById(courseId);
courseObjectives.setCourseId(courseId);
courseObjectives.setType(CourseCode.TOTAL_OBJECTIVE_TYPE.getValue());
// courseObjectives.setName(coursesNew.getName() + "课程总体目标");
int insertTotal = courseObjectivesMapper.insert(courseObjectives);
if (insertTotal>0){
CourseObjectives courseTotalObjectives = courseObjectivesMapper.selectOne
(new LambdaQueryWrapper<CourseObjectives>().eq(CourseObjectives::getCourseId, courseId));
String courseTotalObjectivesId = courseTotalObjectives.getId();
List<ObjectivesType> objectivesTypes = objectivesTypeMapper.selectList(new LambdaQueryWrapper<ObjectivesType>());
ArrayList<CourseObjectives> courseObjectivesFList = new ArrayList<>();
CourseObjectives courseObjectivesF = null;
for (ObjectivesType objectivesType : objectivesTypes) {
Integer typeId = objectivesType.getId();
if (!typeId.equals(CourseCode.TOTAL_OBJECTIVE_TYPE.getValue())){
// String typeName = objectivesType.getTypeName();
courseObjectivesF = new CourseObjectives();
courseObjectivesF.setType(typeId);
// courseObjectivesF.setName(typeName);
courseObjectivesF.setPid(courseTotalObjectivesId);
courseObjectivesFList.add(courseObjectivesF);
}
}
courseObjectivesMapper.insertBatch(courseObjectivesFList);
courseTotalObjectives.setHasChild(1);
courseObjectivesMapper.updateById(courseTotalObjectives);
}
}
return "添加成功";
} else {
Long count = query().eq("code", code).count();
if (count > 0) {
throw new BusinessException(ErrorCode.OPERATION_ERROR, "这个课程已经存在了!请联系系统相关人员为您导入课程数据!");
}
// 插入课程信息
int insert = coursesMapper.insert(courses);
if (insert <= 0) {
throw new BusinessException(ErrorCode.OPERATION_ERROR, "课程插入失败!");
}
// 插入课程目标信息
CourseObjectives courseObjectives = new CourseObjectives();
courseObjectives.setCourseId(courseId);
courseObjectives.setType(CourseCode.TOTAL_OBJECTIVE_TYPE.getValue());
int insertTotal = courseObjectivesMapper.insert(courseObjectives);
if (insertTotal <= 0) {
throw new BusinessException(ErrorCode.OPERATION_ERROR, "课程目标插入失败!");
}
// 获取插入后的课程目标信息
CourseObjectives courseTotalObjectives = courseObjectivesMapper.selectOne(
new LambdaQueryWrapper<CourseObjectives>().eq(CourseObjectives::getCourseId, courseId)
);
String courseTotalObjectivesId = courseTotalObjectives.getId();
// 获取所有目标类型并插入子目标
List<ObjectivesType> objectivesTypes = objectivesTypeMapper.selectList(new LambdaQueryWrapper<>());
ArrayList<CourseObjectives> courseObjectivesFList = new ArrayList<>();
for (ObjectivesType objectivesType : objectivesTypes) {
if (!objectivesType.getId().equals(CourseCode.TOTAL_OBJECTIVE_TYPE.getValue())) {
CourseObjectives courseObjectivesF = new CourseObjectives();
courseObjectivesF.setType(objectivesType.getId());
courseObjectivesF.setPid(courseTotalObjectivesId);
courseObjectivesFList.add(courseObjectivesF);
}
}
// 批量插入子目标并更新父目标的hasChild字段
if (!courseObjectivesFList.isEmpty()) {
courseObjectivesMapper.insertBatch(courseObjectivesFList);
courseTotalObjectives.setHasChild(1);
courseObjectivesMapper.updateById(courseTotalObjectives);
}
return "添加成功";
}
@Override
public PageDTO<CoursesVO> queryCourses(CourseQuery courseQuery) {
// int roleId = Integer.parseInt(umsUserMapper.selectOne(new LambdaQueryWrapper<UmsUser>()
// .eq(UmsUser::getUsername, courseQuery.getUsername())).getRoleId());
UmsUser umsUser = umsUserMapper.selectById(courseQuery.getUserId());
if (umsUser == null){
throw new BusinessException(ErrorCode.PARAMS_USER_NOTEXISTS);
@ -187,9 +191,11 @@ public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses> impl
Page<Courses> p = lambdaQuery()
.like(courseQuery.getName() != null, Courses::getName, courseQuery.getName())
.apply("FIND_IN_SET({0}, teacher)", courseQuery.getUserId())
.eq(courseQuery.getCategory() != null && !courseQuery.getCategory().isEmpty(), Courses::getCategory, courseQuery.getCategory())
.eq(StringUtils.hasText(courseQuery.getCategory()), Courses::getCategory, courseQuery.getCategory())
// .eq(courseQuery.getCategory() != null && !courseQuery.getCategory().isEmpty(), Courses::getCategory, courseQuery.getCategory())
.eq(courseQuery.getNature() != null && !courseQuery.getNature().isEmpty(), Courses::getNature, courseQuery.getNature())
.eq(courseQuery.getAssessmenttype() != null &&!courseQuery.getAssessmenttype().isEmpty(), Courses::getAssessmenttype, courseQuery.getAssessmenttype())
.select(Courses::getId,Courses::getTeacher,Courses::getImg,Courses::getName,Courses::getCredit,Courses::getClasshours)
.page(page);
return PageDTO.of(p,CoursesVO.class);
}
@ -204,6 +210,7 @@ public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses> impl
Page<Courses> p = lambdaQuery()
.like(courseQuery.getName() != null, Courses::getName, courseQuery.getName())
.in(Courses::getId, coursesList)
.select(Courses::getId,Courses::getTeacher,Courses::getImg,Courses::getName,Courses::getCredit,Courses::getClasshours)
.page(page);
return PageDTO.of(p, CoursesVO.class);
}
@ -215,6 +222,7 @@ public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses> impl
.eq(courseQuery.getNature() != null && !courseQuery.getNature().isEmpty(), Courses::getNature, courseQuery.getNature())
.eq(courseQuery.getAssessmenttype() != null &&!courseQuery.getAssessmenttype().isEmpty(), Courses::getAssessmenttype, courseQuery.getAssessmenttype())
.apply(courseQuery.getTeacher() != null && !courseQuery.getTeacher().isEmpty(), "FIND_IN_SET({0}, teacher)", courseQuery.getTeacher())
.select(Courses::getId,Courses::getTeacher,Courses::getImg,Courses::getName,Courses::getCredit,Courses::getClasshours)
.page(page);
return PageDTO.of(p, CoursesVO.class);
}
@ -342,13 +350,15 @@ public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses> impl
}
@Override
public LinkedHashSet<UmsStudent> queryStudentList(CourseQuery courseQuery) {
String roleId = umsUserMapper.getbyIdRoleId(courseQuery.getUserId());
public LinkedHashSet<PersonalCenterStudentListVO> queryStudentList(String userId) {
String roleId = umsUserMapper.getbyIdRoleId(userId);
CourseQuery courseQuery = new CourseQuery();
courseQuery.setUserId(userId);
if (roleId.equals("1")){
PageDTO<CoursesVO> queryCourses = queryCourses(courseQuery);
List<CoursesVO> coursesList = queryCourses.getList();
List<String> courseIds = coursesList.stream().map(CoursesVO::getId).collect(Collectors.toList());
LinkedHashSet<UmsStudent> studentNameList = new LinkedHashSet<>();
LinkedHashSet<PersonalCenterStudentListVO> studentNameList = new LinkedHashSet<>();
for (String courseId : courseIds) {
List<StudentCourses> studentUsernames = studentCoursesMapper.selectBatchSomeStudent(courseId);
List<CourseLearningRecord> courseLearningRecordList = new ArrayList<>();
@ -359,7 +369,12 @@ public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses> impl
courseLearningRecordList = courseLearningRecordList.stream().sorted(Comparator.comparing(CourseLearningRecord::getTimes).reversed()).collect(Collectors.toList());
for (CourseLearningRecord courseLearningRecord : courseLearningRecordList) {
UmsStudent umsStudent = umsStudentMapper.selectByUserId(Integer.valueOf(courseLearningRecord.getUserId()));
studentNameList.add(umsStudent);
UmsUser user = umsUserMapper.selectById(courseLearningRecord.getUserId());
PersonalCenterStudentListVO pcsl = new PersonalCenterStudentListVO();
pcsl.setName(umsStudent.getName());
pcsl.setNumber(umsStudent.getNumber());
pcsl.setIcon(user.getIcon());
studentNameList.add(pcsl);
}
}
return studentNameList;

@ -18,6 +18,7 @@ import com.teaching.backend.service.courses.IObjectiveContentKnowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
@ -71,7 +72,6 @@ public class ObjectiveContentKnowServiceImpl extends ServiceImpl<ObjectiveConten
objectiveContentKnow.setKnow(knowId);
objectiveContentKnowList.add(objectiveContentKnow);
}
try {
objectiveContentKnowMapper.insertBatchSomeColumn(objectiveContentKnowList);
} catch (Exception e) {
@ -84,12 +84,7 @@ public class ObjectiveContentKnowServiceImpl extends ServiceImpl<ObjectiveConten
@Override
public ObjectiveContentKnowVO getCountData(String objectiveOrContentId) {
// 检查objectiveOrContentId是否为空,如果为空则抛出异常
if (objectiveOrContentId == null) {
throw new BusinessException(ErrorCode.OBJECTIVE_OR_CONTENT_NOT_EXIT);
}
// 查询分项目标关联的知识点数据
// 查询分项目标或者是下面的内容关联的知识点数据(按设计要求,这个传的就是分项目标的id)
List<ObjectiveContentKnow> objectiveContentKnows = objectiveContentKnowMapper.selectList(
new LambdaQueryWrapper<ObjectiveContentKnow>()
.eq(ObjectiveContentKnow::getObjectiveOrContent, objectiveOrContentId));
@ -105,16 +100,16 @@ public class ObjectiveContentKnowServiceImpl extends ServiceImpl<ObjectiveConten
Integer classhours = coursesMapper.selectById(courseId).getClasshours();
// 计算并设置比例(百分比)
BigDecimal percentage = calculatePercentage(objectiveContentKnowVO.getKnowsTime(), classhours);
objectiveContentKnowVO.setPersent(percentage + "%");
// BigDecimal percentage = calculatePercentage(objectiveContentKnowVO.getKnowsTime(), classhours);
// objectiveContentKnowVO.setPersent(percentage + "%");
// 查找分项目标下的内容
List<ObjectiveContents> objectiveContents = objectiveContentsMapper.selectList(
new LambdaQueryWrapper<ObjectiveContents>()
List<ObjectiveContents> objectiveContents = objectiveContentsMapper.selectList(new LambdaQueryWrapper<ObjectiveContents>()
.eq(ObjectiveContents::getObjectiveId, objectiveOrContentId));
// 如果存在分项目标内容,处理并计算每个内容的相关数据
if (objectiveContents != null && !objectiveContents.isEmpty()) {
if (!CollectionUtils.isEmpty(objectiveContents)) {
List<ObjectiveContentKnowVO> contentKnowVOs = objectiveContents.stream()
.map(content -> createObjectiveContentKnowVO(content.getId(), objectiveContentKnowMapper.selectList(
new LambdaQueryWrapper<ObjectiveContentKnow>()
@ -123,10 +118,10 @@ public class ObjectiveContentKnowServiceImpl extends ServiceImpl<ObjectiveConten
.collect(Collectors.toList());
// 计算每个内容的知识点总学时的比例(百分比)
contentKnowVOs.forEach(contentKnowVO -> {
BigDecimal contentPercentage = calculatePercentage(contentKnowVO.getKnowsTime(), classhours);
contentKnowVO.setPersent(contentPercentage + "%");
});
// contentKnowVOs.forEach(contentKnowVO -> {
// BigDecimal contentPercentage = calculatePercentage(contentKnowVO.getKnowsTime(), classhours);
// contentKnowVO.setPersent(contentPercentage + "%");
// });
// 设置内容的知识点数据
objectiveContentKnowVO.setContentKnowsData(contentKnowVOs);
@ -168,6 +163,4 @@ public class ObjectiveContentKnowServiceImpl extends ServiceImpl<ObjectiveConten
// 计算knowsTime占classhours的比例,先除以classhours再乘以100,保留两位小数,并四舍五入
return knowsTime.divide(classHoursBigDecimal, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP);
}
}

@ -41,6 +41,6 @@ public class ObjectiveContentsServiceImpl extends ServiceImpl<ObjectiveContentsM
throw new BusinessException(ErrorCode.KNOWS_EXIT);
}
int delete = objectiveContentsMapper.deleteById(id);
return delete>0 ? "删除成功!" : "删除失败!";
return delete > 0 ? "删除成功!" : "删除失败!";
}
}

@ -156,21 +156,27 @@ public class SeCourseFavourServiceImpl extends ServiceImpl<SeCourseFavourMapper,
}
@Override
public CoursesVO queryNewCollect(String userId) {
public List<CoursesVO> queryNewCollect(String userId) {
String roleId = umsUserMapper.getbyIdRoleId(userId);
CoursesVO coursesVO = new CoursesVO();
List<Courses> coursesList = new ArrayList<>();
if (roleId.equals("1")){
//老师
String courseId = seCourseFavourMapper.queryAllNewCollectCourse();
Courses courses = coursesMapper.selectById(courseId);
BeanUtil.copyProperties(courses,coursesVO);
return coursesVO;
List<String> courseIdList = seCourseFavourMapper.queryAllNewCollectCourse();
for (String courseId : courseIdList) {
Courses courses = coursesMapper.selectById(courseId);
coursesList.add(courses);
}
List<CoursesVO> coursesVOList = BeanUtil.copyToList(coursesList, CoursesVO.class);
return coursesVOList;
}else if (roleId.equals("2")){
//学生
String courseId = seCourseFavourMapper.queryStudentNewCollectCourse(userId);
Courses courses = coursesMapper.selectById(courseId);
BeanUtil.copyProperties(courses,coursesVO);
return coursesVO;
List<String> courseIdList = seCourseFavourMapper.queryStudentNewCollectCourse(userId);
for (String courseId : courseIdList) {
Courses courses = coursesMapper.selectById(courseId);
coursesList.add(courses);
}
List<CoursesVO> coursesVOList = BeanUtil.copyToList(coursesList,CoursesVO.class);
return coursesVOList;
}else {
return null;
}

@ -0,0 +1,252 @@
package com.teaching.backend.service.impl.know;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ErrorCode;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.mapper.know.KnowRepository;
import com.teaching.backend.model.dto.Know.*;
import com.teaching.backend.model.entity.know.Know;
import com.teaching.backend.model.entity.know.KnowChapter;
import com.teaching.backend.model.entity.know.KnowCourse;
import com.teaching.backend.model.entity.know.Links;
import com.teaching.backend.model.entity.resource.Resources;
import com.teaching.backend.model.vo.knowGraph.KnowVO;
import com.teaching.backend.model.vo.knowGraph.KnowVO1;
import com.teaching.backend.service.Know.KnowService;
import org.neo4j.driver.internal.InternalRelationship;
import org.neo4j.driver.types.Node;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.neo4j.core.Neo4jClient;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
* @Author:youhang
* @Date:2024-08-07-15:47
* @Description:
*/
@Service
public class knowServiceImpl implements KnowService {
@Autowired
private KnowRepository knowRepository;
@Resource
private Neo4jClient neo4jClient;
@Override
public BaseResponse<String> addKnow(KnowRequest knowRequest) {
Know know = new Know();
BeanUtils.copyProperties(knowRequest,know);
int f = knowRepository.addKnow(know.getName(),know.getInfo());
if(f > 0){
return ResultUtils.success("添加知识点成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"添加知识点失败");
}
}
@Override
public BaseResponse<String> updateKnow(KnowUpdateRequest knowUpdateRequest) {
Know know = new Know();
BeanUtils.copyProperties(knowUpdateRequest,know);
int f = knowRepository.updateKnow(know.getId(),know.getName(),know.getInfo());
if(f > 0){
return ResultUtils.success("修改知识点成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"修改知识点失败");
}
}
@Override
public BaseResponse<String> deleteKnow(Long id) {
// todo 判断知识点存在否
int f = knowRepository.deleteKnow(id);
if(f > 0){
return ResultUtils.success("删除知识点成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"删除知识点失败");
}
}
@Override
public BaseResponse<Know> queryKnow(Long id) {
Know know = knowRepository.queryKnow(id);
return ResultUtils.success(know);
}
//========================
@Override
public BaseResponse<String> addCourse(KnowCourseCreateRequest knowCourseCreateRequest) {
KnowCourse knowCourse = new KnowCourse();
BeanUtils.copyProperties(knowCourseCreateRequest,knowCourse);
int f = knowRepository.addCourse(knowCourse.getCourseId(),knowCourse.getName(),knowCourse.getInfo());
if(f > 0){
return ResultUtils.success("添加知识点成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"添加知识点失败");
}
}
@Override
public BaseResponse<String> updateCourse(KnowCourseCreateRequest knowCourseCreateRequest) {
KnowCourse knowCourse = new KnowCourse();
BeanUtils.copyProperties(knowCourseCreateRequest,knowCourse);
int f = knowRepository.updateCourse(knowCourse.getCourseId(),knowCourse.getName(),knowCourse.getInfo());
if(f > 0){
return ResultUtils.success("修改知识点成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"修改知识点失败");
}
}
@Override
public BaseResponse<String> deleteCourse(String courseId) {
int f = knowRepository.deleteCourse(courseId);
if(f > 0){
return ResultUtils.success("删除知识点成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"删除知识点失败");
}
}
@Override
public BaseResponse<KnowCourse> queryCourse(String courseId) {
KnowCourse Knowcourse = knowRepository.queryCourse(courseId);
return ResultUtils.success(Knowcourse);
}
//=========================
@Override
public BaseResponse<String> addChapter(KnowChapterCreateRequest knowChapterCreateRequest) {
KnowChapter knowChapter = new KnowChapter();
BeanUtils.copyProperties(knowChapterCreateRequest,knowChapter);
int f = knowRepository.addChapter(knowChapter.getChapterId(),knowChapter.getName(),knowChapter.getInfo());
if(f > 0){
return ResultUtils.success("添加知识点成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"添加知识点失败");
}
}
@Override
public BaseResponse<String> updateChapter(KnowChapterCreateRequest knowChapterCreateRequest) {
KnowChapter knowChapter = new KnowChapter();
BeanUtils.copyProperties(knowChapterCreateRequest,knowChapter);
int f = knowRepository.updateChapter(knowChapter.getChapterId(),knowChapter.getName(),knowChapter.getInfo());
if(f > 0){
return ResultUtils.success("修改知识点成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"修改知识点失败");
}
}
@Override
public BaseResponse<String> deleteChapter(Long chapterId) {
int f = knowRepository.deleteChapter(chapterId);
if(f > 0){
return ResultUtils.success("删除知识点成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"删除知识点失败");
}
}
@Override
public BaseResponse<KnowChapter> queryChapter(Long chapterId) {
KnowChapter knowChapter = knowRepository.queryChapter(chapterId);
return ResultUtils.success(knowChapter);
}
//===============
//获取课程下的所有知识点
@Override
public BaseKnowReturn getAllKnowByCourseId(String id) {
Collection<Map<String, Object>> all =
neo4jClient.query( "match(n:Know)-[r*0..]->(p:Know) where n.courseId = '"+id+"' return n as `n`,r as `r`,p as `p`,length(r) as `d`").fetch().all();
Map<Long,String>colorChoose = new HashMap<>();
String color[] = new String[10];
String[] colorList = {"#91CC75", "#5470C6", "#FAC858", "#EE6666", "#73C0DE", "#EA7CCC", "#5577FF", "#5577FF", "#9DBFFF", "#78A7FF"};
for (int i = 0; i < 10; i++) {
colorChoose.put((long) i,colorList[i]);
}
Iterator<Map<String, Object>> iterator = all.iterator();
Set<KnowVO> knowList = new HashSet<>();
Set<Links>linksList = new HashSet<>();
KnowVO knowVO;
List node2 = new ArrayList<>();
Links links;
int p = 0;
while (iterator.hasNext()) {
Map<String, Object> element = iterator.next();
knowVO = new KnowVO();
Node node1 = (Node) element.get("p");
Long group = (Long) element.get("d");
knowVO.setColor(colorChoose.get(group));
Long id1 = node1.id();
String name1 = node1.get("name").asString();
knowVO.setId(id1);
knowVO.setLabel(name1);
knowList.add(knowVO);
node2 = (List) element.get("r");
for (int i = 0; i < node2.size(); i++) {
InternalRelationship e = (InternalRelationship) node2.get(i);
links = new Links();
links.setId(e.id());
links.setSource(e.startNodeId());
links.setTarget(e.endNodeId());
links.setLabel(e.type());
linksList.add(links);
}
}
BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList,linksList);
return baseKnowReturn;
}
//获取课程下的所有资源
@Override
public BaseResponse<Set<KnowVO1>> getAllResourcesByCourseId(String id) {
Collection<Map<String, Object>> all =
neo4jClient.query( "match(n:Know)-[r*0..]->(p:Know) where n.courseId = '"+id+"' return p as `p`").fetch().all();
Iterator<Map<String, Object>> iterator = all.iterator();
Set<KnowVO1> knowList = new HashSet<>();
KnowVO1 knowVO;
while (iterator.hasNext()) {
Map<String, Object> element = iterator.next();
knowVO = new KnowVO1();
Node node1 = (Node) element.get("p");
Long id1 = node1.id();
String name1 = node1.get("name").asString();
knowVO.setId(id1);
knowVO.setLabel(name1);
knowList.add(knowVO);
}
return ResultUtils.success(knowList);
}
//获取知识点下二级的所有资源
@Override
public Set<Resources> getSecondResources(Long id) {
Set<Resources>resourcesSet ;
resourcesSet = knowRepository.queryBesidesKnowToResources(id);
return resourcesSet;
}
}

@ -0,0 +1,79 @@
package com.teaching.backend.service.impl.knowtmp;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ErrorCode;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.mapper.Knowtemp.KnowtmpMapper;
import com.teaching.backend.model.dto.Knowtmp.KnowtempAdd;
import com.teaching.backend.model.dto.Knowtmp.KnowtempUpdate;
import com.teaching.backend.model.entity.knowtmp.Knowtmp;
import com.teaching.backend.service.knowtmp.KnowtmpService;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author:youhang
* @Date:2024-08-07-19:40
* @Description:
*/
@Service
public class KnowtmpServiceImpl implements KnowtmpService {
@Autowired
private KnowtmpMapper knowtmpMapper;
@Override
public BaseResponse<String> add(KnowtempAdd knowtempAdd) {
Knowtmp knowtmp = new Knowtmp();
BeanUtils.copyProperties(knowtempAdd,knowtmp);
int f = knowtmpMapper.insert(knowtmp);
if(f > 0){
return ResultUtils.success("添加成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"添加失败");
}
}
@Override
public BaseResponse<String> update(KnowtempUpdate knowtempUpdate) {
Knowtmp knowtmp = new Knowtmp();
BeanUtils.copyProperties(knowtempUpdate,knowtmp);
int f = knowtmpMapper.updateById(knowtmp);
if(f > 0){
return ResultUtils.success("修改成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"修改失败");
}
}
@Override
public BaseResponse<String> delete(Long id) {
// todo 查询 id
int f = knowtmpMapper.deleteById(id);
if(f > 0){
return ResultUtils.success("删除成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"删除失败");
}
}
@Override
public BaseResponse<Knowtmp> query(Long id) {
Knowtmp knowtmp = knowtmpMapper.selectById(id);
return ResultUtils.success(knowtmp);
}
@Override
public BaseResponse<List<Knowtmp>> queryByChapterId(Long chapterId) {
Knowtmp knowtmp = new Knowtmp();
final QueryWrapper<Knowtmp> knowtmpQueryWrapper = new QueryWrapper<>();
knowtmpQueryWrapper.eq("chapterId",chapterId);
List<Knowtmp> knowtmps = knowtmpMapper.selectList(knowtmpQueryWrapper);
return ResultUtils.success(knowtmps);
}
}

@ -61,19 +61,21 @@ public class CourseLearningRecordServiceImpl extends ServiceImpl<CourseLearningR
Long count = courseLearningNumberService.query()
.eq("course_id", courseId).count();
//2.2判断自己是否学习过
Long count1 = query().eq("user_id", userId).count();
Long count1 = query().eq("user_id", userId).eq("course_id", courseId).count();
if (count > 0){
//自己没学过,人数加1
if (count1 == 0){
courseLearningNumberService.update().setSql("number = number + 1").eq("course_id",courseId).update();
// System.out.println("用户:"+userId+"第一次学这门课");
//System.out.println("用户:"+userId+"第一次学这门课");
}
//System.out.println("重复学习");
}else {
//该课程第一次被学,人数设置为1
CourseLearningNumber courseLearningNumber = new CourseLearningNumber();
courseLearningNumber.setNumber(1);
courseLearningNumber.setCourseId(courseId);
courseLearningNumberService.save(courseLearningNumber);
//System.out.println("该课程第一次被学习");
}
//设置人数
String numberId = courseLearningNumberService.query().eq("course_id", courseId).one().getId();

@ -2,20 +2,41 @@ package com.teaching.backend.service.impl.records;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.mapper.records.KnowledgeLearningRecordMapper;
import com.teaching.backend.mapper.umsAdmin.UmsUserMapper;
import com.teaching.backend.model.entity.KnowGraph.KnowledgeLearningNumber;
import com.teaching.backend.model.entity.courses.CourseLearningNumber;
import com.teaching.backend.model.entity.courses.Courses;
import com.teaching.backend.model.entity.knowtmp.Knowtmp;
import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
import com.teaching.backend.model.vo.courses.CoursesVO;
import com.teaching.backend.model.vo.knowGraph.KnowVO;
import com.teaching.backend.model.vo.records.KnowledgeLearningRecordVo;
import com.teaching.backend.service.Know.KnowService;
import com.teaching.backend.service.impl.courses.CourseLearningNumberServiceImpl;
import com.teaching.backend.service.impl.knowledge.KnowledgeLearningNumberServiceImpl;
import com.teaching.backend.service.knowtmp.KnowtmpService;
import com.teaching.backend.service.records.IKnowledgeLearningRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* <p>
@ -29,6 +50,12 @@ import java.time.LocalDateTime;
public class KnowledgeLearningRecordServiceImpl extends ServiceImpl<KnowledgeLearningRecordMapper, KnowledgeLearningRecord> implements IKnowledgeLearningRecordService {
@Resource
private KnowledgeLearningNumberServiceImpl knowledgeLearningNumberService;
@Autowired
private UmsUserMapper umsUserMapper;
@Autowired
private KnowledgeLearningRecordMapper knowledgeLearningRecordMapper;
@Resource
private KnowtmpService knowtmpService;
@Override
public BaseResponse<String> saveCoursesRecords(KnowledgeLearningRecord knowledgeLearningRecord) {
@ -44,14 +71,22 @@ public class KnowledgeLearningRecordServiceImpl extends ServiceImpl<KnowledgeLea
.eq("course_id", courseId)
.eq("knowledge_id",knowledgeId).count();
//2.2判断自己是否学习过
Long count1 = query().eq("user_id", userId).count();
if (count > 0){
Long count1 = query()
.eq("user_id", userId)
.eq("courses_id", courseId)
.eq("knowledge_id",knowledgeId).count();
if (count > 0){//有人学过
//自己没学过,人数加1
if (count1 == 0){
knowledgeLearningNumberService.update().setSql("number = number + 1").eq("course_id", courseId).eq("knowledge_id",knowledgeId).update();
// System.out.println("用户:"+userId+"第一次学这门课");
//该知识点学习人数
knowledgeLearningNumberService.update()
.setSql("number = number + 1")
.eq("course_id", courseId)
.eq("knowledge_id",knowledgeId).update();
System.out.println("用户:"+userId+":第一次学这门课");
}
}else {
}else {//没人学过(自己肯定也没学)
//该课程第一次被学,人数设置为1
KnowledgeLearningNumber knowledgeLearningNumber = new KnowledgeLearningNumber();
knowledgeLearningNumber.setNumber(1);
@ -68,4 +103,78 @@ public class KnowledgeLearningRecordServiceImpl extends ServiceImpl<KnowledgeLea
save(knowledgeLearningRecord);
return ResultUtils.success("添加成功");
}
@Override
public BaseResponse<Page> getPage(int pagenum, int pagesize, String userId, String courseId) {
//格式化时间
String strDateFormat = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
//分页查询
Page<KnowledgeLearningRecord> page = query()
.orderByDesc("times")
.eq("user_id", userId)
.eq("courses_id",courseId).page(new Page<>(pagenum, pagesize));
Page<KnowledgeLearningRecordVo> page1 = new Page<>();
List<KnowledgeLearningRecord> records = page.getRecords();
BeanUtil.copyProperties(page, page1);
List<KnowledgeLearningRecordVo> recordsVos = new ArrayList<>();
//copy集合
records.forEach(knowledgeLearningRecord -> {
KnowledgeLearningRecordVo knowledgeLearningRecordVo = new KnowledgeLearningRecordVo();
BeanUtil.copyProperties(knowledgeLearningRecord,knowledgeLearningRecordVo);
Date date = Date.from(knowledgeLearningRecord.getTimes().atZone(ZoneId.systemDefault()).toInstant());
knowledgeLearningRecordVo.setTime(sdf.format(date));
// //填充学习人数
knowledgeLearningRecordVo.setNumber(knowledgeLearningNumberService.getById(knowledgeLearningRecord.getNumber()).getNumber());
recordsVos.add(knowledgeLearningRecordVo);
});
page1.setRecords(recordsVos);
return ResultUtils.success(page1);
}
@Override
public BaseResponse<String> removeKnowledgeRecord(List<Long> ids) {
removeByIds(ids);
return ResultUtils.success("删除成功!");
}
@Override
public List<KnowVO> queryMaxKnowledge(String userId) {
String roleId = umsUserMapper.getbyIdRoleId(userId);
List<KnowVO> coursesList = new ArrayList<>();
KnowVO knowVO = null;
if (roleId.equals("1")){
//老师
List<String> knowledgeIdList = knowledgeLearningRecordMapper.queryStudyKnowledgeMaxNumber();
for (String knowledgeId : knowledgeIdList) {
BaseResponse<Knowtmp> knowledge = knowtmpService.query(Long.valueOf(knowledgeId));
if (knowledge.getData() != null){
knowVO = new KnowVO();
knowVO.setId(knowledge.getData().getId());
knowVO.setLabel(knowledge.getData().getName());
knowVO.setColor(knowledge.getData().getInfo());
coursesList.add(knowVO);
}
}
return coursesList;
}else if (roleId.equals("2")){
//学生
List<String> knowledgeIdList = knowledgeLearningRecordMapper.queryStudyMaxKnowledgeId(userId);
for (String knowledgeId : knowledgeIdList) {
BaseResponse<Knowtmp> knowledge = knowtmpService.query(Long.valueOf(knowledgeId));
if (knowledge.getData() != null) {
knowVO = new KnowVO();
knowVO.setId(knowledge.getData().getId());
knowVO.setLabel(knowledge.getData().getName());
knowVO.setColor(knowledge.getData().getInfo());
coursesList.add(knowVO);
}
}
return coursesList;
}else {
return null;
}
}
}

@ -1,76 +1,127 @@
package com.teaching.backend.service.impl.records;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.mapper.records.ResourceLearningRecordMapper;
import com.teaching.backend.model.entity.records.ResourceLearningRecord;
import com.teaching.backend.model.entity.resource.ResourceLearningNumber;
import com.teaching.backend.service.impl.resource.ResourceLearningNumberServiceImpl;
import com.teaching.backend.service.records.IResourceLearningRecordService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
/**
* <p>
* 服务实现类
* </p>
*
* @author author
* @since 2024-07-24
*/
@Service
public class ResourceLearningRecordServiceImpl extends ServiceImpl<ResourceLearningRecordMapper, ResourceLearningRecord> implements IResourceLearningRecordService {
@Resource
private ResourceLearningNumberServiceImpl resourceLearningNumberService;
@Override
public BaseResponse<String> saveCoursesRecords(ResourceLearningRecord resourceLearningRecord) {
//课程id
String courseId = resourceLearningRecord.getCoursesId();
String knowledgeId = resourceLearningRecord.getKnowledgeId();
String resourceId = resourceLearningRecord.getResourceId();
String userId = resourceLearningRecord.getUserId();
//1.生成学习时间
resourceLearningRecord.setTimes(LocalDateTime.now());
//2.设置人数
//2.1查人数
Long count = resourceLearningNumberService.query()
.eq("course_id", courseId)
.eq("knowledge_id",knowledgeId)
.eq("resource_id",resourceId).count();
//2.2判断自己是否学习过
Long count1 = query().eq("user_id", userId).count();
if (count > 0){
//自己没学过,人数加1
if (count1 == 0){
resourceLearningNumberService.update().setSql("number = number + 1")
.eq("course_id",courseId)
.eq("knowledge_id",knowledgeId)
.eq("resource_id",resourceId).update();
// System.out.println("用户:"+userId+"第一次学这门课");
}
}else {
//该课程第一次被学,人数设置为1
ResourceLearningNumber resourceLearningNumber = new ResourceLearningNumber();
resourceLearningNumber.setNumber(1);
resourceLearningNumber.setCourseId(courseId);
resourceLearningNumber.setKnowledgeId(knowledgeId);
resourceLearningNumber.setResourceId(resourceId);
resourceLearningNumberService.save(resourceLearningNumber);
}
//设置人数
String numberId = resourceLearningNumberService.query()
.eq("course_id", courseId)
.eq("knowledge_id",knowledgeId)
.eq("resource_id",resourceId).one().getId();
resourceLearningRecord.setNumber(numberId);
//保存记录
save(resourceLearningRecord);
return ResultUtils.success("添加成功");
}
}
//package com.teaching.backend.service.impl.records;
//
//
//import cn.hutool.core.bean.BeanUtil;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.teaching.backend.common.BaseResponse;
//import com.teaching.backend.common.ResultUtils;
//import com.teaching.backend.mapper.records.ResourceLearningRecordMapper;
//import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
//import com.teaching.backend.model.entity.records.ResourceLearningRecord;
//import com.teaching.backend.model.entity.resource.ResourceLearningNumber;
//import com.teaching.backend.model.vo.records.KnowledgeLearningRecordVo;
//import com.teaching.backend.model.vo.records.ResourceLearingRecordVo;
//import com.teaching.backend.service.impl.resource.ResourceLearningNumberServiceImpl;
//import com.teaching.backend.service.records.IResourceLearningRecordService;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.text.SimpleDateFormat;
//import java.time.LocalDateTime;
//import java.time.ZoneId;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//
///**
// * <p>
// * 服务实现类
// * </p>
// *
// * @author author
// * @since 2024-07-24
// */
//@Service
//public class ResourceLearningRecordServiceImpl extends ServiceImpl<ResourceLearningRecordMapper, ResourceLearningRecord> implements IResourceLearningRecordService {
//
// @Resource
// private ResourceLearningNumberServiceImpl resourceLearningNumberService;
//
// @Override
// public BaseResponse<String> saveCoursesRecords(ResourceLearningRecord resourceLearningRecord) {
// //课程id
// String courseId = resourceLearningRecord.getCoursesId();
// String knowledgeId = resourceLearningRecord.getKnowledgeId();
// String resourceId = resourceLearningRecord.getResourceId();
// String userId = resourceLearningRecord.getUserId();
// //1.生成学习时间
// resourceLearningRecord.setTimes(LocalDateTime.now());
// //2.设置人数
// //2.1查人数
// Long count = resourceLearningNumberService.query()
// .eq("course_id", courseId)
// .eq("knowledge_id",knowledgeId)
// .eq("resource_id",resourceId).count();
// //2.2判断自己是否学习过
// Long count1 = query()
// .eq("user_id", userId)
// .eq("courses_id", courseId)
// .eq("knowledge_id",knowledgeId)
// .eq("resource_id",resourceId).count();
// if (count > 0){
// //自己没学过,人数加1
// if (count1 == 0){
// resourceLearningNumberService.update().setSql("number = number + 1")
// .eq("course_id",courseId)
// .eq("knowledge_id",knowledgeId)
// .eq("resource_id",resourceId).update();
//// System.out.println("用户:"+userId+"第一次学这门课");
// }
// }else {
// //该课程第一次被学,人数设置为1
// ResourceLearningNumber resourceLearningNumber = new ResourceLearningNumber();
// resourceLearningNumber.setNumber(1);
// resourceLearningNumber.setCourseId(courseId);
// resourceLearningNumber.setKnowledgeId(knowledgeId);
// resourceLearningNumber.setResourceId(resourceId);
// resourceLearningNumberService.save(resourceLearningNumber);
// }
// //设置人数
// String numberId = resourceLearningNumberService.query()
// .eq("course_id", courseId)
// .eq("knowledge_id",knowledgeId)
// .eq("resource_id",resourceId).one().getId();
// resourceLearningRecord.setNumber(numberId);
// //保存记录
// save(resourceLearningRecord);
// return ResultUtils.success("添加成功");
// }
//
// @Override
// public BaseResponse<Page> getPage(int pagenum, int pagesize, String userId, String knowledgeId, String courseId) {
////格式化时间
// String strDateFormat = "yyyy-MM-dd HH:mm:ss";
// SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
// //分页查询
// Page<ResourceLearningRecord> page = query()
// .orderByDesc("times")
// .eq("user_id", userId)
// .eq("knowledge_id",knowledgeId)
// .eq("courses_id",courseId).page(new Page<>(pagenum, pagesize));
// Page<ResourceLearingRecordVo> page1 = new Page<>();
// List<ResourceLearningRecord> records = page.getRecords();
// BeanUtil.copyProperties(page, page1);
// List<ResourceLearingRecordVo> recordsVos = new ArrayList<>();
// //copy集合
// records.forEach(resourceLearningRecord -> {
// ResourceLearingRecordVo resourceLearingRecordVo = new ResourceLearingRecordVo();
// BeanUtil.copyProperties(resourceLearningRecord,resourceLearingRecordVo);
// Date date = Date.from(resourceLearningRecord.getTimes().atZone(ZoneId.systemDefault()).toInstant());
// resourceLearingRecordVo.setTime(sdf.format(date));
//// //填充学习人数
// resourceLearingRecordVo.setNumber(resourceLearningNumberService.getById(resourceLearningRecord.getNumber()).getNumber());
// recordsVos.add(resourceLearingRecordVo);
// });
// page1.setRecords(recordsVos);
// return ResultUtils.success(page1);
// }
//
// @Override
// public BaseResponse<String> removeResourceRecord(List<Long> ids) {
// removeByIds(ids);
// return ResultUtils.success("删除成功!");
// }
//
//
//}

@ -11,6 +11,7 @@ import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@ -24,7 +25,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
@Override
public BrowseReportVO getBrowseStatistics() {
//存放访问的前一天至前七天的每天对应的日期
List<LocalDate> dateList = new ArrayList<>();
List<String> dateList = new ArrayList<>();
//存放这个月访问的前一天至前七天的每天对应的浏览量
List<String> ThisMonthBrowseList = new ArrayList<>();
//存放上个月访问的前一天至前七天的每天对应的浏览量
@ -36,7 +37,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
// 获取前七天的日期
for (int i = 1; i <= 7; i++) {
LocalDate day = end.minusDays(i);
dateList.add(day);
// 定义一个仅包含月日的格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd");
dateList.add(day.format(formatter));
//查询今天对应的浏览量
String browse = reportMapper.getBrowseByTime(day);
@ -47,6 +50,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
LocalDate lastMonth = lastMonthToday.minusDays(i);
//查询上个月的今天对应的浏览量
String lastMonthBrowse = reportMapper.getBrowseByTime(lastMonth);
LastMonthBrowseList.add(lastMonthBrowse);
}
@ -59,13 +64,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
}
@Override
public boolean getReceptionBrowse(ReportDTO reportDTO) {
if (reportDTO.getCreateTime() == null || reportDTO.getPageView() == null){
return false;
}
boolean todayBrowse = reportMapper.addTodayBrowse(reportDTO);
if (todayBrowse == false){
return false;
public boolean getReceptionBrowse() {
//查询今日有无记录
List<Report> list = lambdaQuery().eq(Report::getCreateTime, LocalDate.now()).list();
if (list.size() > 0){
//有,给记录加一
update().setSql("page_view = page_view + 1").eq("create_time",LocalDate.now()).update();
}else {
//无,创建一个记录
Report report = new Report();
report.setCreateTime(LocalDate.now());
report.setPageView("1");
save(report);
}
return true;
}

@ -1,22 +0,0 @@
package com.teaching.backend.service.impl.resource;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.teaching.backend.mapper.resource.ResourceLearningNumberMapper;
import com.teaching.backend.model.entity.resource.ResourceLearningNumber;
import com.teaching.backend.service.resource.IResourceLearningNumberService;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author author
* @since 2024-07-29
*/
@Service
public class ResourceLearningNumberServiceImpl extends ServiceImpl<ResourceLearningNumberMapper, ResourceLearningNumber> implements IResourceLearningNumberService {
}

@ -1,45 +1,168 @@
package com.teaching.backend.service.impl.resource;
import cn.hutool.core.io.FileUtil;
import com.teaching.backend.mapper.KnowGraph.ResourcesRepository;
import com.teaching.backend.mapper.resource.ResourcesMapper;
import com.teaching.backend.model.entity.KnowGraph.Resources;
import com.teaching.backend.model.entity.resource.Resource;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ErrorCode;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.constant.ViewContentTypeEnum;
import com.teaching.backend.mapper.resource.ResourcesRepository;
import com.teaching.backend.model.dto.resource.BucketPolicyConfigDto;
import com.teaching.backend.model.dto.resource.ResourceUploadDto;
import com.teaching.backend.model.entity.resource.Resources;
import com.teaching.backend.service.resource.ResourceService;
import org.springframework.beans.BeanUtils;
import com.teaching.backend.utils.MinioUtils;
import io.minio.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.InputStreamResource;
import org.springframework.data.neo4j.core.Neo4jClient;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.UUID;
import javax.annotation.Resource;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @Author:youhang
* @Date:2024-07-26-13:58
* @Description:
*/
@Service
public class ResourceServiceImpl implements ResourceService {
private static final String GLOBAL_CODE_DIR_NAME = "tempFile";
@Autowired
private ResourcesRepository resourcesRepository;
private ResourcesMapper resourcesMapper;
private static final Logger LOGGER = LoggerFactory.getLogger(ResourceService.class);
@Autowired
private MinioUtils minioUtils;
@Value("${minio.endpoint}")
private String ENDPOINT;
@Value("${minio.bucketName}")
private String BUCKET_NAME;
@Value("${minio.accessKey}")
private String ACCESS_KEY;
@Value("${minio.secretKey}")
private String SECRET_KEY;
@Resource
private Neo4jClient neo4jClient;
@Override
public BaseResponse<ResourceUploadDto> upload(MultipartFile file) {
ResourceUploadDto resourceUploadDto = minioUtils.upload(file);
if (resourceUploadDto == null) {
return ResultUtils.error(ErrorCode.OPERATION_ERROR, "上传失败");
}
String url = resourceUploadDto.getUrl();
String name = resourceUploadDto.getName();
String objectName = resourceUploadDto.getObjectName();
//添加到图数据库中
Resources resource = new Resources();
resource.setName(objectName);
resource.setStatus(0);
resource.setUrl(url);
resourcesRepository.save(resource);
return ResultUtils.success(resourceUploadDto);
}
@Override
public BaseResponse<String> delete(String objectName) {
try {
minioUtils.delete(objectName);
}catch (Exception e){
e.printStackTrace();
LOGGER.info("删除失败,故障");
}
//删除图数据库
boolean f = resourcesRepository.deleteByobjectName(objectName);
if (f) {
return ResultUtils.success("删除成功");
} else {
return ResultUtils.error(ErrorCode.OPERATION_ERROR, "图数据库删除失败");
}
}
public ResponseEntity<InputStreamResource> readFile(String filename) {
return minioUtils.readFile(filename);
}
@Override
public String upload(MultipartFile file) {
String userDir = System.getProperty("user.dir");
String globalFilePathName = userDir + File.separator + GLOBAL_CODE_DIR_NAME;
if (!FileUtil.exist(globalFilePathName)) {
FileUtil.mkdir(globalFilePathName);
public BaseResponse<String> addResourcesAndKnowByCourseId(String courseId, List<Long> resourcesIds){
// todo 查询课程是否存在 ,资源是否存在
int count = resourcesRepository.addResourcesAndKnowByCourseId(courseId,resourcesIds);
if(count == resourcesIds.size()){
return ResultUtils.success("添加关系成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"添加失败");
}
// 把用户的代码隔离存放
File userCodeFile = null;
try {
String userCodeParentPath = globalFilePathName + File.separator + UUID.randomUUID();
String userCodePath = userCodeParentPath + File.separator + file.getOriginalFilename();
userCodeFile = FileUtil.writeFromStream(file.getInputStream(), userCodePath);
} catch (Exception e) {
System.out.println("失败");
}
@Override
public BaseResponse<String> addResourcesAndKnowByChapterId(Long chapterId, List<Long> resourcesIds){
// todo 查询章节是否存在 ,资源是否存在
int count = resourcesRepository.addResourcesAndKnowByChapterId(chapterId,resourcesIds);
if(count == resourcesIds.size()){
return ResultUtils.success("添加关系成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"添加失败");
}
return userCodeFile.getPath();
}
@Override
public BaseResponse<String> addResourcesAndKnowById(Long id, List<Long> resourcesIds){
// todo 查询知识点是否存在 ,资源是否存在
int count = resourcesRepository.addResourcesAndKnowById(id,resourcesIds);
if(count == resourcesIds.size()){
return ResultUtils.success("添加关系成功");
}else{
return ResultUtils.error(ErrorCode.OPERATION_ERROR,"添加失败");
}
}
@Override
//查询课程下资源
public Set<Resources> queryResourcesByCourseId(String courseId){
// todo 判空,查询
Set<Resources>resourcesSet;
resourcesSet = resourcesRepository.queryResourcesByCourseId(courseId);
return resourcesSet;
}
@Override
//查询章节下资源
public Set<Resources> queryResourcesByChapterId(Long chapterId){
// todo 判空,查询
Set<Resources>resourcesSet ;
resourcesSet = resourcesRepository.queryResourcesByChapterId(chapterId);
return resourcesSet;
}
@Override
//查询二级节点下资源
public Set<Resources> queryBesidesKnowToResources(Long KnowId){
// todo 判空,查询
Set<Resources>resourcesSet ;
resourcesSet = resourcesRepository.queryBesidesKnowToResources(KnowId);
return resourcesSet;
}
}

@ -0,0 +1,31 @@
package com.teaching.backend.service.knowtmp;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.dto.Knowtmp.KnowtempAdd;
import com.teaching.backend.model.dto.Knowtmp.KnowtempUpdate;
import com.teaching.backend.model.entity.knowtmp.Knowtmp;
import java.util.List;
/**
* @Author:youhang
* @Date:2024-08-07-15:09
* @Description:
*/
public interface KnowtmpService {
// 添加知识点
BaseResponse<String> add(KnowtempAdd knowtempAdd);
//修改知识点
BaseResponse<String> update(KnowtempUpdate knowtempUpdate);
//删除知识点
BaseResponse<String> delete(Long id);
//查询
BaseResponse<Knowtmp> query(Long id);
//查询通过chapterId List
BaseResponse<List<Knowtmp>> queryByChapterId(Long chapterId);
}

@ -1,9 +1,14 @@
package com.teaching.backend.service.records;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
import io.swagger.models.auth.In;
import com.teaching.backend.model.vo.knowGraph.KnowVO;
import java.util.List;
/**
* <p>
@ -16,4 +21,12 @@ import com.teaching.backend.model.entity.records.KnowledgeLearningRecord;
public interface IKnowledgeLearningRecordService extends IService<KnowledgeLearningRecord> {
BaseResponse<String> saveCoursesRecords(KnowledgeLearningRecord knowledgeLearningRecord);
BaseResponse<Page> getPage(int pagenum, int pagesize, String userId, String courseId);
BaseResponse<String> removeKnowledgeRecord(List<Long> ids);
List<KnowVO> queryMaxKnowledge(String userId);
}

@ -1,10 +1,13 @@
package com.teaching.backend.service.records;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.entity.records.ResourceLearningRecord;
import java.util.List;
/**
* <p>
* 服务类
@ -16,4 +19,8 @@ import com.teaching.backend.model.entity.records.ResourceLearningRecord;
public interface IResourceLearningRecordService extends IService<ResourceLearningRecord> {
BaseResponse<String> saveCoursesRecords(ResourceLearningRecord resourceLearningRecord);
BaseResponse<Page> getPage(int pagenum, int pagesize, String userId, String knowledgeId, String courseId);
BaseResponse<String> removeResourceRecord(List<Long> ids);
}

@ -17,5 +17,5 @@ public interface ReportService extends IService<Report> {
* 接收每日浏览量
* @return
*/
boolean getReceptionBrowse(ReportDTO reportDTO);
boolean getReceptionBrowse();
}

@ -1,17 +0,0 @@
package com.teaching.backend.service.resource;
import com.baomidou.mybatisplus.extension.service.IService;
import com.teaching.backend.model.entity.resource.ResourceLearningNumber;
/**
* <p>
* 服务类
* </p>
*
* @author author
* @since 2024-07-29
*/
public interface IResourceLearningNumberService extends IService<ResourceLearningNumber> {
}

@ -1,17 +1,44 @@
package com.teaching.backend.service.resource;
import org.springframework.stereotype.Service;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.dto.resource.ResourceUploadDto;
import com.teaching.backend.model.entity.resource.Resources;
import org.springframework.core.io.InputStreamResource;
import org.springframework.data.neo4j.repository.query.Query;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Set;
/**
* @Author:youhang
* @Date:2024-07-26-13:55
* @Description:
*/
@Service
public interface ResourceService {
public String upload(MultipartFile file);
BaseResponse<ResourceUploadDto> upload(MultipartFile file) ;
BaseResponse<String> delete(String filename) ;
ResponseEntity<InputStreamResource> readFile(String filename);
BaseResponse<String> addResourcesAndKnowByCourseId(String courseId, List<Long> resourcesIds);
BaseResponse<String> addResourcesAndKnowByChapterId(Long chapterId, List<Long> resourcesIds);
BaseResponse<String> addResourcesAndKnowById(Long id, List<Long> resourcesIds);
//查询课程下资源
Set<Resources> queryResourcesByCourseId(String courseId);
//查询章节下资源
Set<Resources> queryResourcesByChapterId(Long chapterId);
//查询二级节点下资源
Set<Resources> queryBesidesKnowToResources(Long KnowId);
}

@ -0,0 +1,5 @@
package com.teaching.backend.utils;
public class Constants {
public static final String UPLOAD_URL = "E:\\workspace\\file\\";
}

@ -4,14 +4,14 @@ public enum CourseCode {
HAS_CHILD(1, "存在子节点"),
OBJECTIVE_EXIT(1,"目标存在"),
CONTENT_EXIT(1, "存在内容"),
CONTENT_EXIT(0, "存在内容"),
SI_ZHENG_TYPE(1, "思政目标类型"),
SI_ZHENG_EXIT(1, "思政目标存在"),
KNOWS_EXIT(0, "存在关联的知识点"),
TEACHER_ROLE_ID(1, "教师的角色id是1"),
TOTAL_OBJECTIVE_TYPE(0, "课程总目标"),
TOTAL_OBJECTIVE_HAS_NO_CHILD(0, "课程总目标下面没有分项目标"),
Total_EXIT(0, "课程总目标"),
COURSE_UPDATING(1, "课程正在修改中");

@ -0,0 +1,154 @@
package com.teaching.backend.utils;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ErrorCode;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.constant.ViewContentTypeEnum;
import com.teaching.backend.model.dto.resource.BucketPolicyConfigDto;
import com.teaching.backend.model.dto.resource.ResourceUploadDto;
import com.teaching.backend.model.entity.resource.Resources;
import com.teaching.backend.service.resource.ResourceService;
import io.minio.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author:youhang
* @Date:2024-08-07-11:38
* @Description:
*/
@Component
public class MinioUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(MinioUtils.class);
@Value("${filename.maxlength}")
private int MAX_FILENAMELENGTH;
@Value("${minio.endpoint}")
private String ENDPOINT;
@Value("${minio.bucketName}")
private String BUCKET_NAME;
@Value("${minio.accessKey}")
private String ACCESS_KEY;
@Value("${minio.secretKey}")
private String SECRET_KEY;
public ResourceUploadDto upload(MultipartFile file) {
ResourceUploadDto minioUploadDto = new ResourceUploadDto();
try {
//创建一个MinIO的Java客户端
MinioClient minioClient =MinioClient.builder()
.endpoint(ENDPOINT)
.credentials(ACCESS_KEY,SECRET_KEY)
.build();
boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(BUCKET_NAME).build());
if (isExist) {
LOGGER.info("存储桶已经存在!");
} else {
//创建存储桶并设置只读权限
minioClient.makeBucket(MakeBucketArgs.builder().bucket(BUCKET_NAME).build());
BucketPolicyConfigDto bucketPolicyConfigDto = createBucketPolicyConfigDto(BUCKET_NAME);
SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder()
.bucket(BUCKET_NAME)
.config(JSONUtil.toJsonStr(bucketPolicyConfigDto))
.build();
minioClient.setBucketPolicy(setBucketPolicyArgs);
}
String filename = file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddhhmmss");
// todo 字符串截取
int dotIndex = filename.lastIndexOf('.');
String prefix = filename.substring(0,dotIndex);
String suffix = filename.substring(dotIndex+1,filename.length());
if(prefix.length() > MAX_FILENAMELENGTH){
prefix = prefix.substring(0,MAX_FILENAMELENGTH);
}
filename = prefix+"-"+sdf.format(new Date())+"."+suffix;
sdf = new SimpleDateFormat("yyyyMMdd");
// 设置存储对象名称
String objectName = sdf.format(new Date()) + "/" + suffix + "/" + filename;
// 使用putObject上传一个文件到存储桶中
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
.bucket(BUCKET_NAME)
.object(objectName)
.contentType(ViewContentTypeEnum.getContentType(objectName))
.stream(file.getInputStream(), file.getSize(), ObjectWriteArgs.MIN_MULTIPART_SIZE).build();
minioClient.putObject(putObjectArgs);
LOGGER.info("文件上传成功!");
minioUploadDto.setName(filename);
minioUploadDto.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
minioUploadDto.setObjectName(objectName);
} catch (Exception e) {
e.printStackTrace();
LOGGER.info("上传发生错误: {}!", e.getMessage());
}
return minioUploadDto;
}
/**
* 创建存储桶的访问策略设置为只读权限
*/
private BucketPolicyConfigDto createBucketPolicyConfigDto(String bucketName) {
BucketPolicyConfigDto.Statement statement = BucketPolicyConfigDto.Statement.builder()
.Effect("Allow")
.Principal("*")
.Action("s3:GetObject")
.Resource("arn:aws:s3:::"+bucketName+"/*.**").build();
return BucketPolicyConfigDto.builder()
.Version("2012-10-17")
.Statement(CollUtil.toList(statement))
.build();
}
public void delete(String objectName) throws Exception {
MinioClient minioClient = MinioClient.builder()
.endpoint(ENDPOINT)
.credentials(ACCESS_KEY,SECRET_KEY)
.build();
minioClient.removeObject(RemoveObjectArgs.builder().bucket(BUCKET_NAME).object(objectName).build());
}
public ResponseEntity<InputStreamResource> readFile(String filename) {
try {
// 创建MinIO客户端
MinioClient minioClient = MinioClient.builder()
.endpoint(ENDPOINT)
.credentials(ACCESS_KEY, SECRET_KEY)
.build();
// 获取文件流
GetObjectResponse objectResponse = minioClient.getObject(GetObjectArgs.builder()
.bucket(BUCKET_NAME) // 替换为你实际的存储桶名称
.object(filename)
.build());
InputStream inputStream = objectResponse;
return ResponseEntity.ok()
.body(new InputStreamResource(inputStream));
} catch (Exception e) {
e.printStackTrace();
return ResponseEntity.notFound().build();
}
}
}

@ -0,0 +1,115 @@
package com.teaching.backend.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.FileUtils;
import org.springframework.util.DigestUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.*;
import static com.teaching.backend.utils.Constants.UPLOAD_URL;
@Slf4j
//文件上传工具类
public class UploadUtils {
public static String saveFileByDirectory (MultipartFile file) {
String url = "";
try {
// 将文件保存在服务器目录中
// 文件名称
String uuid = UUID.randomUUID().toString();
// 得到上传文件后缀
String originalName = file.getOriginalFilename();
String ext = "." + FilenameUtils.getExtension(originalName);
// 新生成的文件名称
String fileName = uuid + ext;
// 复制文件
File targetFile = new File(UPLOAD_URL, fileName);
url = UPLOAD_URL + fileName;
FileUtils.writeByteArrayToFile(targetFile, file.getBytes());
System.out.println("保存成功");
} catch (IOException e) {
log.error("保存文件到服务器(本地)失败",e);
}
return url;
}
public static void Chunk(File sourseFile) throws IOException {
// //源文件
// File sourseFile = new File("D:/Users/Desktop/image/剪映/7.18/7月20.mp4");
//分块文件存储路径
String chunkFilePath = "E:\\workspace\\chunk";
//分块文件大小
int chunkSize = 1024 * 1024 * 1;
//分块文件个数
int chunkNum = (int) Math.ceil(sourseFile.length() * 1.0 / chunkSize);
//使用流从源文件读数据,向分块文件中写数据
RandomAccessFile raf_r = new RandomAccessFile(sourseFile, "r");
//缓存区
byte[] bytes = new byte[1024];
for (int i = 0; i < chunkNum; i++) {
File chunkFile = new File(chunkFilePath + i);
//分块文件写入流
RandomAccessFile raf_rw = new RandomAccessFile(chunkFile, "rw");
int len = -1;
while((len=raf_r.read(bytes)) != -1){
raf_rw.write(bytes, 0, len);
if (chunkFile.length() >= chunkSize){
break;
}
}
raf_rw.close();
}
raf_r.close();
}
public static void Merge(File sourseFile) throws IOException {
//块文件目录
File chunkFolder = new File("E:\\workspace\\chunk");
// //源文件
// File sourseFile = new File("D:/Users/Desktop/image/剪映/7.18/7月20.mp4");
//合并后的文件
File mergeFile = new File("E:\\workspace\\file\\"+sourseFile.getName());
//取出所有分块文件
File[] files = chunkFolder.listFiles();
//将数组转成list
List<File> fileList = Arrays.asList(files);
//对分块文件排序
Collections.sort(fileList, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return Integer.parseInt(o1.getName()) - Integer.parseInt(o2.getName()); //升序
}
});
//向合并文件写的流
RandomAccessFile raf_rw = new RandomAccessFile(mergeFile, "rw");
//缓存区
byte[] bytes = new byte[1024];
//遍历分块文件,向合并的文件写
for (File file : fileList) {
//读分块的流
RandomAccessFile raf_r = new RandomAccessFile(file, "r");
int len = -1;
while((len = raf_r.read(bytes)) != -1){
raf_rw.write(bytes, 0, len);
}
raf_r.close();
}
raf_rw.close();
//合并文件完成后对合并的文件校验
FileInputStream fileInputStream_merge = new FileInputStream(mergeFile);
FileInputStream fileInputStream_source = new FileInputStream(sourseFile);
String md5_merge = DigestUtils.md5DigestAsHex(fileInputStream_merge);
String md5_source = DigestUtils.md5DigestAsHex(fileInputStream_source);
if (md5_merge.equals(md5_source)){
System.out.println("文件合并成功!");
}
}
}

@ -1,35 +0,0 @@
package com.teaching.backend.utils.knowGraph;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.model.dto.chapter.ChapterDTO;
import com.teaching.backend.model.dto.courses.CoursesDTO;
import com.teaching.backend.model.entity.KnowGraph.KnowChapter;
import com.teaching.backend.model.entity.KnowGraph.KnowCourse;
import com.teaching.backend.model.entity.chapter.Chapter;
import com.teaching.backend.model.entity.courses.Courses;
import com.teaching.backend.service.KnowGraph.KnowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @Author:youhang
* @Date:2024-07-26-17:57
* @Description:
*/
@Component
public class AddNeoKnowByCourse {
@Autowired
private KnowService knowService;
// public BaseResponse<KnowCourse> addCourse(String courseId , String name, String description){
// return knowService.createCourseKnow( courseId , name, description);
// }
// public BaseResponse<KnowChapter> addChapter(Chapter chapter){
// return knowService.createKnowChapter(chapter);
// }
}

@ -80,3 +80,12 @@ aliyun:
accessKeyId: LTAI5tFkdu3y5WddxbjgaG2F
accessKeySecret: 1xUchxUTlmUBoTV5JQIrKsVjSkmsLF
bucketName: ceshi132132
minio:
endpoint: http://39.106.16.162:9090 #MinIO服务所在地址
bucketName: teaching # 存储桶名称
accessKey: minioadmin # 访问的key
secretKey: minioadmin # 访问的秘钥
filename:
maxlength: 10

@ -19,14 +19,13 @@
course_learning_number cln
ORDER BY
number
DESC LIMIT 4;
DESC;
</select>
<select id="selectMaxCourseId" resultType="java.lang.String" parameterType="java.lang.String">
SELECT course_id, COUNT(*) as frequency
FROM course_learning_record
WHERE user_id = #{userId}
GROUP BY course_id
ORDER BY frequency DESC
LIMIT 4;
ORDER BY frequency DESC;
</select>
</mapper>

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.teaching.backend.mapper.records.KnowledgeLearningRecordMapper">
<select id="queryStudyKnowledgeMaxNumber" resultType="java.lang.String">
SELECT
kln.knowledge_id knowledgeId
FROM
knowledge_learning_number kln
ORDER BY
number
DESC;
</select>
<select id="queryStudyMaxKnowledgeId" resultType="java.lang.String">
SELECT knowledge_id,knowledge_name
FROM knowledge_learning_record
WHERE user_id = #{userId}
ORDER BY times DESC;
</select>
</mapper>

@ -10,7 +10,7 @@
se_course_favour scf
ORDER BY
createtime
DESC LIMIT 1;
DESC;
</select>
<select id="queryStudentNewCollectCourse" resultType="java.lang.String">
SELECT
@ -21,7 +21,7 @@
scf.user_id = #{userId}
ORDER BY
createtime
DESC LIMIT 1;
DESC;
</select>
</mapper>

@ -0,0 +1,101 @@
package com.teaching;
import org.junit.jupiter.api.Test;
import org.springframework.util.DigestUtils;
import java.io.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class MinioTest {
//分块测试
@Test
public void testChunk() throws IOException {
//源文件
File sourseFile = new File("D:/Users/Desktop/image/剪映/7.18/7月20.mp4");
//分块文件存储路径
String chunkFilePath = "D:/Users/Desktop/image/剪映/7.18/chunk/";
//分块文件大小
int chunkSize = 1024 * 1024 * 1;
//分块文件个数
int chunkNum = (int) Math.ceil(sourseFile.length() * 1.0 / chunkSize);
//使用流从源文件读数据,向分块文件中写数据
RandomAccessFile raf_r = new RandomAccessFile(sourseFile, "r");
//缓存区
byte[] bytes = new byte[1024];
for (int i = 0; i < chunkNum; i++) {
File chunkFile = new File(chunkFilePath + i);
//分块文件写入流
RandomAccessFile raf_rw = new RandomAccessFile(chunkFile, "rw");
int len = -1;
while((len=raf_r.read(bytes)) != -1){
raf_rw.write(bytes, 0, len);
if (chunkFile.length() >= chunkSize){
break;
}
}
raf_rw.close();
}
raf_r.close();
}
//将分块进行合并
@Test
public void testMerge() throws IOException {
//块文件目录
File chunkFolder = new File("D:\\Users\\Desktop\\image\\剪映\\7.18\\chunk");
//源文件
File sourseFile = new File("D:/Users/Desktop/image/剪映/7.18/7月20.mp4");
//合并后的文件
File mergeFile = new File("D:/Users/Desktop/image/剪映/7.18/7月20_merge.mp4");
//取出所有分块文件
File[] files = chunkFolder.listFiles();
//将数组转成list
List<File> fileList = Arrays.asList(files);
//对分块文件排序
Collections.sort(fileList, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return Integer.parseInt(o1.getName()) - Integer.parseInt(o2.getName()); //升序
}
});
//向合并文件写的流
RandomAccessFile raf_rw = new RandomAccessFile(mergeFile, "rw");
//缓存区
byte[] bytes = new byte[1024];
//遍历分块文件,向合并的文件写
for (File file : fileList) {
//读分块的流
RandomAccessFile raf_r = new RandomAccessFile(file, "r");
int len = -1;
while((len = raf_r.read(bytes)) != -1){
raf_rw.write(bytes, 0, len);
}
raf_r.close();
}
raf_rw.close();
//合并文件完成后对合并的文件校验
FileInputStream fileInputStream_merge = new FileInputStream(mergeFile);
FileInputStream fileInputStream_source = new FileInputStream(sourseFile);
String md5_merge = DigestUtils.md5DigestAsHex(fileInputStream_merge);
String md5_source = DigestUtils.md5DigestAsHex(fileInputStream_source);
if (md5_merge.equals(md5_source)){
System.out.println("文件合并成功!");
}
}
//将分块文件上传到minio
public void uploadChunk(){
}
//调用minio接口合并分块
//批量清理分块文件
}

@ -0,0 +1,36 @@
package com.teaching;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
@Slf4j
@SpringBootTest
public class test {
@Test
public void countknowledge(){
String userId = "2";
// System.out.println(knowledgeLearningCountService.list());
// List<KnowledgeLearningCount> list = knowledgeLearningCountService.query().eq("user_id", userId).list();
// HashSet<KnowledgeLearningCount> set = new HashSet<>(list);
// System.out.println(set.size());
// Long count = knowledgeLearningCountService.query().eq("user_id", userId).count();
// if (count == 0){
// KnowledgeLearningCount knowledgeLearningCount = new KnowledgeLearningCount();
// knowledgeLearningCount.setUserId(userId);
// knowledgeLearningCount.setNumber(1);
// knowledgeLearningCountService.save(knowledgeLearningCount);
// }else {
// //该用户学习知识点数+1
// boolean is = knowledgeLearningCountService.update()
// .setSql("number = "+set.size())
// .eq("user_id", userId).update();
// System.out.println(is);
// }
}
}
Loading…
Cancel
Save