From f63029e4d14a26e91015e723b80fe38f1613ba29 Mon Sep 17 00:00:00 2001 From: you hang <2998465706@qq.com> Date: Tue, 27 Aug 2024 11:05:24 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E7=82=B9gf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/Know/KnowController.java | 186 ++-- .../controller/Knowtmp/KnowtmpController.java | 19 +- .../resource/ResourceController.java | 45 +- .../resource/ResourceGraphController.java | 78 ++ .../mapper/Knowtemp/KnowstrMapper.java | 23 + .../backend/mapper/know/KnowRepository.java | 18 +- .../mapper/resource/ResourcesRepository.java | 19 + .../model/dto/Knowtmp/KnowtempAdd.java | 1 - .../backend/model/entity/know/KnowStr.java | 30 + .../backend/model/entity/know/LinksVO.java | 29 + .../backend/service/Know/KnowService.java | 82 +- .../service/impl/know/knowServiceImpl.java | 941 +++++++++--------- .../impl/knowtmp/KnowtmpServiceImpl.java | 22 +- .../resource/ResourceGraphServiceImpl.java | 151 +++ .../impl/resource/ResourceServiceImpl.java | 68 +- .../service/knowtmp/KnowtmpService.java | 5 +- .../resource/ResourceGraphService.java | 39 + .../service/resource/ResourceService.java | 17 +- 18 files changed, 983 insertions(+), 790 deletions(-) create mode 100644 src/main/java/com/teaching/backend/controller/resource/ResourceGraphController.java create mode 100644 src/main/java/com/teaching/backend/mapper/Knowtemp/KnowstrMapper.java create mode 100644 src/main/java/com/teaching/backend/model/entity/know/KnowStr.java create mode 100644 src/main/java/com/teaching/backend/model/entity/know/LinksVO.java create mode 100644 src/main/java/com/teaching/backend/service/impl/resource/ResourceGraphServiceImpl.java create mode 100644 src/main/java/com/teaching/backend/service/resource/ResourceGraphService.java diff --git a/src/main/java/com/teaching/backend/controller/Know/KnowController.java b/src/main/java/com/teaching/backend/controller/Know/KnowController.java index 989f77e..a63e279 100644 --- a/src/main/java/com/teaching/backend/controller/Know/KnowController.java +++ b/src/main/java/com/teaching/backend/controller/Know/KnowController.java @@ -6,183 +6,111 @@ package com.teaching.backend.controller.Know; * @Description: */ import com.teaching.backend.common.BaseResponse; - -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.resource.Resources; -import com.teaching.backend.model.vo.knowGraph.KnowVO1; - +import com.teaching.backend.model.entity.know.*; +import com.teaching.backend.model.entity.knowtmp.Knowtmp; +import com.teaching.backend.model.vo.knowGraph.KnowVO; import com.teaching.backend.service.Know.KnowService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.neo4j.core.Neo4jClient; import org.springframework.web.bind.annotation.*; +import java.util.List; -import javax.annotation.Resource; -import java.util.Collection; -import java.util.Map; -import java.util.Set; @RestController @RequestMapping("/api/knowNeo") +@Api(tags= "图-知识点管理") public class KnowController { @Autowired private KnowService knowService; - @Autowired - private KnowRepository knowRepository; - @Resource - private Neo4jClient neo4jClient; - - - - - - //返回2层知识点 - @GetMapping("/twoLevelKnows") - BaseResponse getTwoLevelKnows(@RequestParam Long id){ - return knowService.getTwoLevelKnows(id); - } - //返回3层知识点 - @GetMapping("/threeLevelKnows") - BaseResponse getThreeLevelKnows(@RequestParam Long id){ - return knowService.getThreeLevelKnows(id); - } - //返回4层知识点 - @GetMapping("/fourLevelKnows") - BaseResponse getFourLevelKnows(@RequestParam Long id){ - return knowService.getFourLevelKnows(id); - } - - //通过courseId 显示图的JSON - @GetMapping("/test") - void test(){ - String t = "related"; - String str = "MATCH (p:Know), (j:Know) WHERE ID(p)= "+407+" AND ID(j)= "+389+" CREATE (p)-[r: "+t+" ]->(j) return count(r);"; - Collection> res = neo4jClient.query(str).fetch().all(); - System.out.println(res); - } - - //通过courseId 显示图的JSON + //通过courseId 查询所有结点,存储成JSON + @ApiOperation(value = "通过courseId 查询所有结点,存储成JSON") @GetMapping("/showGraphJson") BaseResponse showGraphJson(@RequestParam String courseId){ return knowService.showGraphJson(courseId); } - - // 添加全部知识点 - @PostMapping("/addAllKnow") - BaseResponse addAllKnow(@RequestParam String courseId){ - return knowService.addAllKnow(courseId); + //通过courseId 查询 JSON 生成图 + @ApiOperation(value = "通过courseId 查询 JSON 生成图") + @GetMapping("/generateGraph") + BaseResponse generateGraph(@RequestParam String courseId){ + return knowService.generateGraph(courseId); } - // 添加知识点与资源的关系 - @PostMapping("/addRelationship/Withresources") - BaseResponse addRelationshipWithresources(@RequestParam Long id,@RequestParam Long resourceId){ - return knowService.addRelationshipWithresources(id,resourceId); - } - //=================== - -// // 添加知识点 -// @PostMapping("/addKnow") -// BaseResponse addKnow(@RequestBody KnowRequest knowRequest){ -// return knowService.addKnow(knowRequest); -// } - - // 修改知识点 - @PostMapping("/updateKnow") - BaseResponse updateKnow(@RequestBody KnowUpdateRequest knowUpdateRequest){ - return knowService.updateKnow(knowUpdateRequest); - } - - // 删除知识点 - @GetMapping("/deleteKnow") - BaseResponse deleteKnow(@RequestParam Long id){ - return knowService.deleteKnow(id); + //生成知识点学习路径 默认从第一个知识点到第最后个知识点 + @ApiOperation(value = "生成知识点学习路径") + @GetMapping("/knowLearnPath") + BaseResponse knowLearnPath(@RequestParam String corseId){ + return knowService.knowLearnPath(corseId); } - //查询知识点通过id - @GetMapping("/queryKnow") - BaseResponse queryKnow(@RequestParam Long id){ - return knowService.queryKnow(id); + //返回depth层知识点 + @ApiOperation(value = "返回depth层知识点") + @GetMapping("/getNodeByDepth") + BaseResponse getNodeByDepth(@RequestParam Long id,@RequestParam Long depth){ + return knowService.getNodeByDepth(id,depth); } - //====================================== - // 添加课程 - @PostMapping("/addCourse") - BaseResponse addCourse(@RequestBody KnowCourseCreateRequest knowCourseCreateRequest){ - return knowService.addCourse(knowCourseCreateRequest); + //返回课程下指定关系的知识图谱 + @ApiOperation(value = "返回课程下指定关系的知识图谱") + @GetMapping("/getRelsNodesByCourseId") + BaseResponse getRelsNodesByCourseId(@RequestParam String courseId,@RequestParam Listtypes){ + return knowService.getRelsNodesByCourseId(courseId,types); } - - // 修改课程 - @PostMapping("/updateCourse") - BaseResponse updateCourse(@RequestBody KnowCourseCreateRequest knowCourseCreateRequest){ - return knowService.updateCourse(knowCourseCreateRequest); + //返回知识点的前后知识点 + @ApiOperation(value = "返回知识点的前后知识点") + @GetMapping("/getFontedAndBackKnows") + BaseResponse> getFontedAndBackKnows(@RequestParam Long id){ + return knowService.getFontedAndBackKnows(id); } - // 删除课程 - @PostMapping("/deleteCourse") - BaseResponse deleteCourse(@RequestParam String courseId){ - return knowService.deleteCourse(courseId); - } - - //查询课程通过courseid - @GetMapping ("/queryCourse") - BaseResponse queryCourse(@RequestParam String courseId){ - return knowService.queryCourse(courseId); - } - //========================= - - // 添加章节 - @PostMapping("/addChapter") - BaseResponse addChapter(@RequestBody KnowChapterCreateRequest knowChapterCreateRequest){ - return knowService.addChapter(knowChapterCreateRequest); + //返回知识点下指定关系的知识图谱 + @ApiOperation(value = "返回知识点下指定关系的知识图谱") + @GetMapping("/getRelsNodesById") + BaseResponse getRelsNodesById(@RequestParam Long id,@RequestParam Listtypes){ + return knowService.getRelsNodesById(id,types); } - // 修改章节 - @PostMapping("/updateChapter") - BaseResponse updateChapter(@RequestBody KnowChapterCreateRequest knowChapterCreateRequest){ - return knowService.updateChapter(knowChapterCreateRequest); + //重置 知识点下 知识图谱 + @ApiOperation(value = "重置-知识点下-知识图谱") + @GetMapping("/getKnowGraphById") + BaseResponse getKnowGraphById(@RequestParam Long id){ + return knowService.getKnowGraphById(id); } - // 删除章节 - @GetMapping("/deleteChapter") - BaseResponse deleteChapter(@RequestParam Long chapterId){ - return knowService.deleteChapter(chapterId); - } - //查询章节通过chapterId - @PostMapping("/queryChapter") - BaseResponse queryChapter(@RequestParam Long chapterId){ - return knowService.queryChapter(chapterId); - } - //===================== + //通过courseId 删除所有节点 + @ApiOperation(value = "通过courseId 删除所有节点") + @GetMapping("/deleteAllByCourseId") + BaseResponse deleteAllByCourseId(@RequestParam String courseId){ + return knowService.deleteAllByCourseId(courseId); + } //获取课程下的所有知识点 + @ApiOperation(value = "获取课程下的所有知识点") @GetMapping("/getAllKnowByCourseId") BaseResponse getAllKnowByCourseId(@RequestParam String id){ return knowService.getAllKnowByCourseId(id); } - - //获取二级知识图谱 - @GetMapping("/getsecondKnowsById") - BaseResponse getsecondKnowsById(@RequestParam Long id){ - return knowService.getsecondKnowsById(id); + //批量修改节点关系 + @ApiOperation(value = "批量修改节点关系") + @PostMapping("/updateLinks") + BaseResponse updateLinks(@RequestBody List linksList){ + return knowService.updateLinks(linksList); } - - } diff --git a/src/main/java/com/teaching/backend/controller/Knowtmp/KnowtmpController.java b/src/main/java/com/teaching/backend/controller/Knowtmp/KnowtmpController.java index c71c1a8..686ff1c 100644 --- a/src/main/java/com/teaching/backend/controller/Knowtmp/KnowtmpController.java +++ b/src/main/java/com/teaching/backend/controller/Knowtmp/KnowtmpController.java @@ -6,6 +6,9 @@ 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 io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -18,21 +21,25 @@ import java.util.List; */ @RestController @RequestMapping("/knowtmp") +@Api(tags="Mysql-知识点管理") public class KnowtmpController { @Autowired private KnowtmpService knowtmpService; + + + //返回课程下所有知识点 + @ApiOperation(value = "返回课程下所有知识点") @GetMapping("/getAllKnows") BaseResponse getAllKnows(@RequestParam String courseId){ return knowtmpService.getAllKnows(courseId); } - - // 添加知识点 + @ApiOperation(value = "添加知识点") @PostMapping("/addKnow") BaseResponse add(@RequestBody KnowtempAdd knowtempAdd){ return knowtmpService.add(knowtempAdd); @@ -40,26 +47,30 @@ public class KnowtmpController { //修改知识点 + @ApiOperation(value = "修改知识点") @PostMapping("/updateKnow") BaseResponse update(@RequestBody KnowtempUpdate knowtempUpdate){ return knowtmpService.update(knowtempUpdate); } - //删除知识点 + @ApiOperation(value = "删除知识点") @GetMapping("/deleteKnow") BaseResponse delete(Long id){ return knowtmpService.delete(id); } //查询通过chapterId List + @ApiOperation(value = "查询通过chapterId List") @GetMapping("/query") BaseResponse query(Long id){ return knowtmpService.query(id); } + //查询通过chapterId List + @ApiOperation(value = "查询通过chapterId List") @GetMapping("/queryKnow") - List queryByChapterId(Long chapterId){ + BaseResponse> queryByChapterId(Long chapterId){ return knowtmpService.queryByChapterId(chapterId); } } diff --git a/src/main/java/com/teaching/backend/controller/resource/ResourceController.java b/src/main/java/com/teaching/backend/controller/resource/ResourceController.java index 9c45bd9..fe2cd08 100644 --- a/src/main/java/com/teaching/backend/controller/resource/ResourceController.java +++ b/src/main/java/com/teaching/backend/controller/resource/ResourceController.java @@ -11,6 +11,9 @@ 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 io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.ResponseEntity; @@ -23,6 +26,7 @@ import java.util.Set; @RestController @RequestMapping("/api/resource") +@Api(tags= "资源管理") public class ResourceController { @Autowired @@ -32,6 +36,7 @@ public class ResourceController { //添加知识点 @PostMapping("/upload") @ResponseBody + @ApiOperation(value = "添加资源") public BaseResponse uploadFile(@RequestPart("file") MultipartFile file) { return resourceService.upload(file); } @@ -39,51 +44,15 @@ public class ResourceController { //删除资源 @GetMapping ("delete") @ResponseBody + @ApiOperation(value = "删除资源") public BaseResponse deleteResource(@RequestParam("filename") String filename) { return resourceService.delete(filename); } @GetMapping("/read") + @ApiOperation(value = "查询资源") public ResponseEntity readFile(@RequestParam String filename) { return resourceService.readFile(filename); } - @GetMapping("/addRelationship/BetweenCourseAndResources") - public BaseResponse addResourcesAndKnowByCourseId(@RequestParam String courseId, @RequestParam List resourcesIds){ - return resourceService.addResourcesAndKnowByCourseId(courseId,resourcesIds); - } - @GetMapping("/addRelationship/BetweenChapterAndResources") - public BaseResponse addResourcesAndKnowByChapterId(@RequestParam Long chapterId,@RequestParam List resourcesIds){ - return resourceService.addResourcesAndKnowByChapterId(chapterId,resourcesIds); - } - @GetMapping("/addRelationship/BetweenKnowAndResources") - public BaseResponse addResourcesAndKnowById(@RequestParam Long id, @RequestParam List resourcesIds){ - return resourceService.addResourcesAndKnowById(id,resourcesIds); - } - - //查询课程下资源 - @GetMapping("/queryByCourseId") - BaseResponse> queryResourcesByCourseId(@RequestParam String courseId){ - return resourceService.queryResourcesByCourseId(courseId); - } - - //查询章节下资源 - @GetMapping("/queryByChapterId") - BaseResponse> queryResourcesByChapterId(@RequestParam Long chapterId){ - return resourceService.queryResourcesByChapterId(chapterId); - } - - //查询二级节点下资源 - @GetMapping("/queryBesidesKnow") - BaseResponse> queryBesidesKnowToResources(@RequestParam Long KnowId){ - return resourceService.queryBesidesKnowToResources(KnowId); - } - //查询知识点下资源 - @GetMapping("/queryResourcesByKnowId") - BaseResponse> queryResourcesByKnowId(@RequestParam Long KnowId){ - return resourceService.queryResourcesByKnowId(KnowId); - } - - - } diff --git a/src/main/java/com/teaching/backend/controller/resource/ResourceGraphController.java b/src/main/java/com/teaching/backend/controller/resource/ResourceGraphController.java new file mode 100644 index 0000000..f1fa86d --- /dev/null +++ b/src/main/java/com/teaching/backend/controller/resource/ResourceGraphController.java @@ -0,0 +1,78 @@ +package com.teaching.backend.controller.resource; + +/** + * @Author:youhang + * @Date:2024-06-09-9:55 + * @Description: + */ + + +import com.teaching.backend.common.BaseResponse; +import com.teaching.backend.model.entity.resource.Resources; +import com.teaching.backend.service.resource.ResourceGraphService; +import com.teaching.backend.service.resource.ResourceService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiOperation; +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 java.util.List; +import java.util.Set; + + +@RestController +@RequestMapping("/api/resource/graph") +@Api(tags= "资源与图管理") +public class ResourceGraphController { + + @Autowired + private ResourceGraphService resourceGraphService; + + + @GetMapping("/addRelationship/BetweenKnowAndResources") + @ApiOperation(value = "添加知识点资源关系") + public BaseResponse addResourcesByIdAndResourcesIds(@RequestParam Long id,@RequestParam List resourcesIds){ + return resourceGraphService.addResourcesByIdAndResourcesIds(id,resourcesIds); + } + + @GetMapping("/deleteRelationship/BetweenKnowAndResources") + @ApiOperation(value = "删除知识点资源关系") + public BaseResponse deleteResourcesAndKnowById(@RequestParam Long id, @RequestParam List resourcesIds){ + return resourceGraphService.deleteResourcesAndKnowById(id,resourcesIds); + } + + //查询课程下资源 + @GetMapping("/queryByCourseId") + @ApiOperation(value = "查询课程下资源") + BaseResponse> queryResourcesByCourseId(@RequestParam String courseId){ + return resourceGraphService.queryResourcesByCourseId(courseId); + } + + //查询章节下资源 + @GetMapping("/queryByChapterId") + @ApiOperation(value = "查询章节下资源") + BaseResponse> queryResourcesByChapterId(@RequestParam Long chapterId){ + return resourceGraphService.queryResourcesByChapterId(chapterId); + } + + //查询二级节点下资源 + @ApiOperation(value = "查询二级节点下资源") + @GetMapping("/queryBesidesKnow") + BaseResponse> queryBesidesKnowToResources(@RequestParam Long knowId){ + return resourceGraphService.queryBesidesKnowToResources(knowId); + } + + //查询知识点下资源 + @GetMapping("/queryResourcesByKnowId") + @ApiOperation(value = "查询知识点下资源") + BaseResponse> queryResourcesByKnowId(@RequestParam Long knowId){ + return resourceGraphService.queryResourcesByKnowId(knowId); + } + + + +} diff --git a/src/main/java/com/teaching/backend/mapper/Knowtemp/KnowstrMapper.java b/src/main/java/com/teaching/backend/mapper/Knowtemp/KnowstrMapper.java new file mode 100644 index 0000000..58727d0 --- /dev/null +++ b/src/main/java/com/teaching/backend/mapper/Knowtemp/KnowstrMapper.java @@ -0,0 +1,23 @@ +package com.teaching.backend.mapper.Knowtemp; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.teaching.backend.model.entity.know.KnowStr; +import com.teaching.backend.model.entity.knowtmp.Knowtmp; +import io.lettuce.core.dynamic.annotation.Param; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + + +/** + * + */ +@Mapper +public interface KnowstrMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/teaching/backend/mapper/know/KnowRepository.java b/src/main/java/com/teaching/backend/mapper/know/KnowRepository.java index c1861d7..dcbd7e0 100644 --- a/src/main/java/com/teaching/backend/mapper/know/KnowRepository.java +++ b/src/main/java/com/teaching/backend/mapper/know/KnowRepository.java @@ -23,6 +23,14 @@ import java.util.Set; public interface KnowRepository extends Neo4jRepository { + @Query("MATCH (n:Know) WHERE n.courseId = $courseId OPTIONAL MATCH p=(n)-[*0..]-() DETACH DELETE p return count(p);") + Long deleteAllByCourseId(String courseId); + + + @Query("MATCH (n:Know) WHERE ID(n)= ${id} DETACH DELETE n;") + Long deleteNode(Long id); + //============= + @Query("MATCH (p:Know)-[:FatherAndSon]->(n:Know) WHERE p.chapterId = $chapterId RETURN p.id ORDER BY ordernum;") @@ -42,8 +50,14 @@ public interface KnowRepository extends Neo4jRepository { @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("MATCH (p:Know) where ID(p) = $id RETURN count(p);") + int queryNode(Long id); + @Query("MATCH (p:Know) where ID(p) = $id RETURN p;") + Know queryNodeT(Long id); + + + @Query("MATCH (p:Know) where p.knowId = $knowId RETURN p;") + Know queryKnowByKnowId(Long knowId); //============================= diff --git a/src/main/java/com/teaching/backend/mapper/resource/ResourcesRepository.java b/src/main/java/com/teaching/backend/mapper/resource/ResourcesRepository.java index 256b73c..d32bc7b 100644 --- a/src/main/java/com/teaching/backend/mapper/resource/ResourcesRepository.java +++ b/src/main/java/com/teaching/backend/mapper/resource/ResourcesRepository.java @@ -16,6 +16,20 @@ import java.util.Set; public interface ResourcesRepository extends Neo4jRepository { + //查询资源 + @Query("MATCH (b:Resources) WHERE ID(b) in $resourceIds RETURN b") + Set queryResourcesByIds(List resourceIds); + + //查询资源 - 知识点 + @Query("MATCH (p:Know)-[r:resources]->(c:Resources) WHERE ID(p) = $id AND ID(c) = $resourcesId return count(r)") + int queryExisitRel(Long id, Long resourcesId); + + //添加知识点与资源关系 + @Query("MATCH (p:Know), (c:Resources) WHERE ID(p) = $id AND ID(c) = $resourcesId CREATE (p)-[r:resources]->(c) return count(r)") + int addResourcesAndKnowById(Long id, Long resourcesId); + + + //删除资源节点 @Query("MATCH(n:Resources) where n.name = $name DETACH DELETE n RETURN COUNT(n) >0;") Boolean deleteByobjectName(String name); @@ -29,6 +43,11 @@ public interface ResourcesRepository extends Neo4jRepository { @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 resourcesIds); + //删除知识点与资源关系 + @Query("MATCH (p:Know)-[r:resources]->(c:Resources) WHERE ID(p) = $id AND ID(c) = $resourcesId delete r return count(r)") + int deleteResourcesAndKnowById(Long id, Long resourcesId); + + //添加知识点与资源关系 @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 resourcesIds); diff --git a/src/main/java/com/teaching/backend/model/dto/Knowtmp/KnowtempAdd.java b/src/main/java/com/teaching/backend/model/dto/Knowtmp/KnowtempAdd.java index fc5cbe7..9391cfd 100644 --- a/src/main/java/com/teaching/backend/model/dto/Knowtmp/KnowtempAdd.java +++ b/src/main/java/com/teaching/backend/model/dto/Knowtmp/KnowtempAdd.java @@ -21,7 +21,6 @@ public class KnowtempAdd implements Serializable { private Long chapterid; - private Integer ordernum; private double hour; diff --git a/src/main/java/com/teaching/backend/model/entity/know/KnowStr.java b/src/main/java/com/teaching/backend/model/entity/know/KnowStr.java new file mode 100644 index 0000000..f648a42 --- /dev/null +++ b/src/main/java/com/teaching/backend/model/entity/know/KnowStr.java @@ -0,0 +1,30 @@ +package com.teaching.backend.model.entity.know; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import javax.xml.soap.Text; +import java.io.Serializable; + +/** + * @Author:youhang + * @Date:2024-08-23-17:29 + * @Description: + */ +@Data +@TableName("know_str") +public class KnowStr implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + private String courseId; + + private String coursestr; + private String chapterstr; + private String knowstr; + private String edgestr; + +} diff --git a/src/main/java/com/teaching/backend/model/entity/know/LinksVO.java b/src/main/java/com/teaching/backend/model/entity/know/LinksVO.java new file mode 100644 index 0000000..605a934 --- /dev/null +++ b/src/main/java/com/teaching/backend/model/entity/know/LinksVO.java @@ -0,0 +1,29 @@ +package com.teaching.backend.model.entity.know; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.checkerframework.checker.units.qual.A; +import org.springframework.data.neo4j.core.schema.GeneratedValue; +import org.springframework.data.neo4j.core.schema.Id; +import org.springframework.data.neo4j.core.schema.Node; +import org.springframework.data.neo4j.core.schema.Property; + +/** + * @Author:youhang + * @Date:2024-07-21-16:32 + * @Description: + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LinksVO { + + private Long source; + + private Long target; + + private String label; + + +} diff --git a/src/main/java/com/teaching/backend/service/Know/KnowService.java b/src/main/java/com/teaching/backend/service/Know/KnowService.java index 064bbc5..fc184a6 100644 --- a/src/main/java/com/teaching/backend/service/Know/KnowService.java +++ b/src/main/java/com/teaching/backend/service/Know/KnowService.java @@ -2,13 +2,14 @@ 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.know.*; +import com.teaching.backend.model.entity.knowtmp.Knowtmp; 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 org.springframework.web.bind.annotation.RequestParam; +import java.util.List; import java.util.Set; /** @@ -17,78 +18,33 @@ import java.util.Set; * @Description: */ public interface KnowService { + public BaseResponse getNodeByDepth(long id,Long depth); - BaseResponse getTwoLevelKnows(Long id); - BaseResponse getThreeLevelKnows(Long id); - BaseResponse getFourLevelKnows(Long id); + BaseResponse knowLearnPath(String corseId); - //通过courseId 显示图的JSON - BaseResponse showGraphJson(String courseId); - - - //通过courseId 添加所有节点 - BaseResponse addAllKnow(String courseId); - - BaseResponse addRelationshipWithresources(Long id, Long resourceId); - - - - //===================== - -// // 添加知识点 -// BaseResponse addKnow(KnowRequest knowRequest); - - // 修改知识点 - BaseResponse updateKnow(KnowUpdateRequest knowUpdateRequest); - - // 删除知识点 - BaseResponse deleteKnow(Long id); - - //查询知识点通过id - BaseResponse queryKnow(Long id); - - //====================================== + BaseResponse updateLinks(List linksList); + BaseResponse deleteAllByCourseId(String courseId1); + BaseResponse generateGraph(String courseId1); - // 添加课程 - BaseResponse addCourse(KnowCourseCreateRequest knowCourseCreateRequest); - // 修改课程 - BaseResponse updateCourse(KnowCourseCreateRequest knowCourseCreateRequest); - - - // 删除课程 - BaseResponse deleteCourse(String courseId); - - //查询课程通过courseid - BaseResponse queryCourse(String courseId); - - - //========================= - - // 添加章节 - BaseResponse addChapter(KnowChapterCreateRequest knowChapterCreateRequest); - - // 修改章节 - BaseResponse updateChapter(KnowChapterCreateRequest knowChapterCreateRequest); - - // 删除章节 - BaseResponse deleteChapter(Long chapterId); - - //查询章节通过chapterId - BaseResponse queryChapter(Long chapterId); + //通过courseId 显示图的JSON + BaseResponse showGraphJson(String courseId); - //===================== //获取课程下的所有知识点 BaseResponse getAllKnowByCourseId(String id); - //获取课程下的所有知识点 - BaseResponse getsecondKnowsById(Long id); + //返回课程下指定关系的知识图谱 + BaseResponse getRelsNodesByCourseId(String courseId,Listtypes); - //获取课程下的所有资源 - BaseResponse> getAllResourcesByCourseId(String id); + //返回课程下指定关系的知识图谱 + BaseResponse getRelsNodesById(Long id,Listtypes); + //返回课程下指定关系的知识图谱 + BaseResponse getKnowGraphById(Long id); + //查询 + BaseResponse> getFontedAndBackKnows(Long id); } diff --git a/src/main/java/com/teaching/backend/service/impl/know/knowServiceImpl.java b/src/main/java/com/teaching/backend/service/impl/know/knowServiceImpl.java index bed4f66..9663d9c 100644 --- a/src/main/java/com/teaching/backend/service/impl/know/knowServiceImpl.java +++ b/src/main/java/com/teaching/backend/service/impl/know/knowServiceImpl.java @@ -19,6 +19,7 @@ import com.teaching.backend.common.ResultUtils; import com.teaching.backend.controller.Know.Edge; import com.teaching.backend.controller.Know.KnowJson; import com.teaching.backend.controller.Know.KnowJsonListVO; +import com.teaching.backend.mapper.Knowtemp.KnowstrMapper; import com.teaching.backend.mapper.Knowtemp.KnowtmpMapper; import com.teaching.backend.mapper.chapter.ChapterMapper; import com.teaching.backend.mapper.courses.CoursesMapper; @@ -26,10 +27,7 @@ import com.teaching.backend.mapper.know.KnowRepository; import com.teaching.backend.model.dto.Know.*; import com.teaching.backend.model.entity.chapter.Chapter; import com.teaching.backend.model.entity.courses.Courses; -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.know.*; import com.teaching.backend.model.entity.knowtmp.Knowtmp; import com.teaching.backend.model.entity.resource.Resources; import com.teaching.backend.model.vo.knowGraph.KnowVO; @@ -78,211 +76,112 @@ public class knowServiceImpl implements KnowService { @Resource private Neo4jClient neo4jClient; + @Autowired + private KnowstrMapper knowstrMapper; - public BaseResponse addRelationshipWithresources(Long id, Long resourceId) { - int f = knowRepository.addResourceResourcesKnow(id, resourceId); - if (f <= 0) { - throw new RuntimeException("添加关系失败"); - } - return ResultUtils.success("添加关系成功"); - } - - - @Override - public BaseResponse getTwoLevelKnows(Long id) { - Collection> 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(); + final static String[] colorList = {"#91CC75", "#5470C6", "#FAC858", "#EE6666", "#73C0DE", "#EA7CCC", "#5577FF", "#5577FF", "#9DBFFF", "#78A7FF"}; + static Map colorChoose = new HashMap<>(); - Map colorChoose = new - HashMap<>(); - String color[] = new String[10]; - String[] colorList = {"#91CC75", "#5470C6", "#FAC858", "#EE6666", "#73C0DE", "#EA7CCC", "#5577FF", "#5577FF", "#9DBFFF", "#78A7FF"}; + static { for (int i = 0; i < 10; i++) { colorChoose.put((long) i, colorList[i]); } - Iterator> iterator = all.iterator(); - Set knowList = new HashSet<>(); - Set linksList = new HashSet<>(); - KnowVO knowVO; - List node2 = new ArrayList<>(); - Links links; - int p = 0; - while (iterator.hasNext()) { - Map 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()); - if ("contain".equals(e.type())) { - links.setLabel("包含"); - } else if ("order".equals(e.type())) { - links.setLabel("顺序"); - } - linksList.add(links); - } - - - } - BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList, linksList); - return ResultUtils.success(baseKnowReturn); } - @Override - public BaseResponse getThreeLevelKnows(Long id) { + public BaseResponse getNodeByDepth(long id, Long depth) { Collection> all = - neo4jClient.query("match(n:Know)-[r*0..3]->(p:Know) where ID(n) = " + id + " return n as `n`,r as `r`,p as `p`,length(r) as `d`").fetch().all(); + neo4jClient.query("match(n:Know)-[r:contain*0.." + depth + "]->(p:Know) where ID(n) = " + id + " return n as `n`,r as `r`,p as `p`,length(r) as `d`").fetch().all(); + Collection> all2 = + neo4jClient.query("match(n:Know)-[r*0.." + depth + "]->(p:Know) where ID(n) = " + id + " return r as `r`").fetch().all(); - Map 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> iterator = all.iterator(); + Iterator> iterator2 = all2.iterator(); Set knowList = new HashSet<>(); Set linksList = new HashSet<>(); KnowVO knowVO; List node2 = new ArrayList<>(); Links links; int p = 0; + while (iterator.hasNext()) { Map 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); + Long group = (Long) element.get("d"); + knowVO.setColor(colorChoose.get(group)); + if (node1 != null) { + Long id1 = node1.id(); + String name1 = node1.get("name").asString(); + knowVO.setId(id1); + knowVO.setLabel(name1); + knowList.add(knowVO); + knowVO.setColor(colorChoose.get(group)); + } 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()); - if ("contain".equals(e.type())) { - links.setLabel("包含"); - } else if ("order".equals(e.type())) { - links.setLabel("顺序"); + if (!node2.isEmpty()) { + 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()); + if ("contain".equals(e.type())) { + links.setLabel("包含"); + } else if ("order".equals(e.type())) { + links.setLabel("顺序"); + } else if ("dependent".equals(e.type())) { + links.setLabel("依赖"); + } + linksList.add(links); } - linksList.add(links); } } - BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList, linksList); - return ResultUtils.success(baseKnowReturn); - } - - @Override - public BaseResponse getFourLevelKnows(Long id) { - Collection> all = - neo4jClient.query("match(n:Know)-[r*0..4]->(p:Know) where ID(n) = " + id + " return n as `n`,r as `r`,p as `p`,length(r) as `d`").fetch().all(); - - Map 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> iterator = all.iterator(); - Set knowList = new HashSet<>(); - Set linksList = new HashSet<>(); - KnowVO knowVO; - List node2 = new ArrayList<>(); - Links links; - int p = 0; - while (iterator.hasNext()) { - Map 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); - + while (iterator2.hasNext()) { + Map element = iterator2.next(); 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()); - if ("contain".equals(e.type())) { - links.setLabel("包含"); - } else if ("order".equals(e.type())) { - links.setLabel("顺序"); + if (!node2.isEmpty()) { + 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()); + if ("contain".equals(e.type())) { + links.setLabel("包含"); + } else if ("order".equals(e.type())) { + links.setLabel("顺序"); + } else if ("dependent".equals(e.type())) { + links.setLabel("依赖"); + } + linksList.add(links); } - linksList.add(links); } } + BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList, linksList); return ResultUtils.success(baseKnowReturn); } - @Override - public BaseResponse showGraphJson(String courseId) { - return addInformation(courseId); - } @Override - public BaseResponse addAllKnow(String courseId) { - try { - addAllKnowTransation(courseId); - } catch (Exception e) { - e.printStackTrace(); - return ResultUtils.error(ErrorCode.OPERATION_ERROR, e.getMessage()); - } - //6.返回成功信息,关闭事务 - return ResultUtils.success("添加成功"); - } - - private BaseResponse addInformation(String courseId) { - + public BaseResponse showGraphJson(String courseId) { // 创建 JSON 对象数组 JSONArray jsonArrayKnowNode = JSONUtil.createArray(); JSONArray jsonArrayCourseNode = JSONUtil.createArray(); JSONArray jsonArrayChapterNode = JSONUtil.createArray(); - //查询数据库-课程 Courses courses = coursesMapper.selectById(courseId); + if (courses == null) { + return ResultUtils.error(ErrorCode.PARAMS_ERROR, "课程不存在"); + } JSONObject obj1 = JSONUtil.createObj(); obj1.put("courseId", courseId); obj1.put("name", courses.getName()); @@ -293,6 +192,7 @@ public class knowServiceImpl implements KnowService { //查询数据库-章-节 List chapterList = new ArrayList<>(); List chapterListPID = chapterMapper.selectChapterPIDByCourseId(courseId); + List chapterOneIds = new ArrayList<>(); List chapterTwoIds = new ArrayList<>(); for (int i = 0; i < chapterListPID.size(); i++) { @@ -318,7 +218,7 @@ public class knowServiceImpl implements KnowService { for (int i = 0; i < chapterList.size(); i++) { Chapter chapter = chapterList.get(i); if (chapter.getPid() != 0) { - List knowlist = knowtmpService.queryByChapterId(chapter.getId()); + List knowlist = knowtmpService.queryByChapterId(chapter.getId()).getData(); for (int j = 0; j < knowlist.size(); j++) { Knowtmp knowtmp = knowlist.get(j); JSONObject obj3 = JSONUtil.createObj(); @@ -336,7 +236,6 @@ public class knowServiceImpl implements KnowService { // =======创建关系 JSONArray edgesArray = JSONUtil.createArray(); - // 创建边列表 // 课程-章节 父子 for (int i = 0; i < chapterListPID.size(); i++) { @@ -344,7 +243,7 @@ public class knowServiceImpl implements KnowService { JSONObject edge = JSONUtil.createObj(); edge.put("source", courses.getId()); edge.put("target", chapter.getId()); - edge.put("type", "FatherAndSon"); + edge.put("type", "contain"); edge.put("sta", 1); edgesArray.add(edge); } @@ -355,7 +254,7 @@ public class knowServiceImpl implements KnowService { JSONObject edge = JSONUtil.createObj(); edge.put("source", chapterListPID.get(i).getId()); edge.put("target", chapterListSecond.get(j).getId()); - edge.put("type", "FatherAndSon"); + edge.put("type", "contain"); edge.put("sta", 2); edgesArray.add(edge); } @@ -363,13 +262,13 @@ public class knowServiceImpl implements KnowService { //节与点父子 List knowIds = new ArrayList<>(); for (int i = 0; i < chapterTwoIds.size(); i++) { - List knowlist = knowtmpService.queryByChapterId(chapterTwoIds.get(i)); + List knowlist = knowtmpService.queryByChapterId(chapterTwoIds.get(i)).getData(); for (int j = 0; j < knowlist.size(); j++) { Knowtmp knowtmp = knowlist.get(j); JSONObject edge = JSONUtil.createObj(); edge.put("source", chapterTwoIds.get(i)); edge.put("target", knowtmp.getId()); - edge.put("type", "FatherAndSon"); + edge.put("type", "contain"); edge.put("sta", 3); edgesArray.add(edge); knowIds.add(knowtmp.getId()); @@ -382,7 +281,7 @@ public class knowServiceImpl implements KnowService { JSONObject edge = JSONUtil.createObj(); edge.put("source", chapterOneIds.get(i)); edge.put("target", chapterOneIds.get(i + 1)); - edge.put("type", "Subsequence"); + edge.put("type", "order"); edge.put("sta", 2); edgesArray.add(edge); } @@ -393,7 +292,7 @@ public class knowServiceImpl implements KnowService { JSONObject edge = JSONUtil.createObj(); edge.put("source", chapterTwoIds.get(i)); edge.put("target", chapterTwoIds.get(i + 1)); - edge.put("type", "Subsequence"); + edge.put("type", "order"); edge.put("sta", 2); edgesArray.add(edge); } @@ -404,7 +303,7 @@ public class knowServiceImpl implements KnowService { JSONObject edge = JSONUtil.createObj(); edge.put("source", knowIds.get(i)); edge.put("target", knowIds.get(i + 1)); - edge.put("type", "Subsequence"); + edge.put("type", "order"); edge.put("sta", 4); edgesArray.add(edge); } @@ -413,77 +312,246 @@ public class knowServiceImpl implements KnowService { String jsonNodeCourse = jsonArrayCourseNode.toString(); String jsonEdges = edgesArray.toString(); - System.out.println("json node " + jsonNodeKnow); - System.out.println("json jsonNodeChapter " + jsonNodeChapter); - System.out.println("json edge " + jsonEdges); - return generateGraph(jsonNodeCourse, jsonNodeChapter, jsonNodeKnow, jsonEdges); + + KnowStr knowStr = new KnowStr(); + knowStr.setCourseId(courseId); + knowStr.setCoursestr(jsonNodeCourse); + knowStr.setChapterstr(jsonNodeChapter); + knowStr.setKnowstr(jsonNodeKnow); + knowStr.setEdgestr(jsonEdges); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("course_id", courseId); + KnowStr knowStrOld = knowstrMapper.selectOne(queryWrapper); + if (knowStrOld != null) { + int f = knowstrMapper.update(knowStr, queryWrapper); + if (f > 0) { + return ResultUtils.success("修改成功"); + } + } + int f = knowstrMapper.insert(knowStr); + if (f > 0) { + return ResultUtils.success("创建成功"); + } //将json保存在mysql表中 + return ResultUtils.error(ErrorCode.OPERATION_ERROR); + } + + @Override + public BaseResponse knowLearnPath(String corseId) { + //查询第一个知识点-最后一个知识点 + List knowIds = new ArrayList<>(); + List chapterList = chapterMapper.selectChapterPIDByCourseId(corseId); + for (int i = 0; i < chapterList.size(); i++) { + List chapterList1 = chapterMapper.selectChapterChildrenOrderByNum(chapterList.get(i).getId()); + for (int j = 0; j < chapterList1.size(); j++) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("chapterid", chapterList1.get(j).getId()); + List knowtmp = knowtmpMapper.selectList(queryWrapper); + for (int k = 0; k < knowtmp.size(); k++) { + Knowtmp knowtmp1 = knowtmp.get(k); + knowIds.add(knowtmp1.getId()); + } + } + + } + // 生成学习路径 + + BaseKnowReturn baseKnowReturn = new BaseKnowReturn(); + String str = "MATCH p = (:Know{knowId:" + knowIds.get(0) + "})-[*]->(:Know{knowId:" + knowIds.get(knowIds.size() - 1) + "}) WITH p, REDUCE(totalWeight = 0.0, r IN relationships(p) | totalWeight + r.weight) AS pathWeight " + + "RETURN nodes(p) as `p`, relationships(p) as `r`, pathWeight " + + "ORDER BY pathWeight DESC LIMIT 1;"; + Collection> result = neo4jClient.query(str).fetch().all(); + Iterator> iterator = result.iterator(); + Set knowList = new HashSet<>(); + Set linksList = new HashSet<>(); + + while (iterator.hasNext()) { + Map element = iterator.next(); + KnowVO knowVO; + List node1 = new ArrayList<>(); + node1 = (List) element.get("p"); + + if (node1 != null) { + for (int i = 0; i < node1.size(); i++) { + Node e = (Node) node1.get(i); + Long id1 = e.id(); + String name1 = e.get("name").asString(); + knowVO = new KnowVO(); + knowVO.setId(id1); + knowVO.setLabel(name1); + knowVO.setColor(colorList[0]); + knowList.add(knowVO); + } + } + + List node2 = new ArrayList<>(); + node2 = (List) element.get("r"); + if (!node2.isEmpty()) { + for (int i = 0; i < node2.size(); i++) { + InternalRelationship e = (InternalRelationship) node2.get(i); + Links links = new Links(); + links.setId(e.id()); + links.setSource(e.startNodeId()); + links.setTarget(e.endNodeId()); + if ("contain".equals(e.type())) { + links.setLabel("包含"); + } else if ("order".equals(e.type())) { + links.setLabel("顺序"); + }else if ("dependent".equals(e.type())) { + links.setLabel("依赖"); + } + linksList.add(links); + } + } + } + baseKnowReturn.setKnowList(knowList); + baseKnowReturn.setLinksList(linksList); + return ResultUtils.success(baseKnowReturn); + } + @Override + public BaseResponse updateLinks(List linksList) { + for (int i = 0; i < linksList.size(); i++) { + LinksVO links = linksList.get(i); + Long source = links.getSource(); + Long target = links.getTarget(); + String label = links.getLabel(); + //查询source ,target是否存在 + int f = knowRepository.queryNode(source); + if (f <= 0) { + return ResultUtils.error(ErrorCode.PARAMS_ERROR, "source Id不存在"); + } + f = knowRepository.queryNode(target); + if (f <= 0) { + return ResultUtils.error(ErrorCode.PARAMS_ERROR, "source Id不存在"); + } + if (label == null || (!"order".equals(label) && "conatin".equals(label) && "dependent".equals(label))) { + return ResultUtils.error(ErrorCode.PARAMS_ERROR, "type 不存在"); + } + //判断关系是否存在 + String weight = null; + if ("contain".equals(label)) { + weight = " {weight:5}"; + } else if ("dependent".equals(label)) { + weight = " {weight:9}"; + } else if ("order".equals(label)) { + weight = " {weight: 1}"; + } + + String str = "MATCH (n:Know)-[r:" + label +weight+ "]->(p:Know)" + + "WHERE Id(n) =" + source + " AND Id(p) = " + target + + " RETURN COUNT(r) > 0 AS relationshipExists;"; + + Collection> result = neo4jClient.query(str).fetch().all(); + Iterator> iterator = result.iterator(); + while (iterator.hasNext()) { + Map element = iterator.next(); + Boolean res = (Boolean) element.get("relationshipExists"); + if (res) { + return ResultUtils.error(ErrorCode.OPERATION_ERROR, "关系已存在"); + } + } + + + + str = "MATCH (n:Know), (p:Know) where ID(n) = " + source + " and ID(p) = " + target + " CREATE (n)-[r:" + + label + weight + "]->(p) RETURN count(r) as `r`;"; + Collection> result1 = neo4jClient.query(str).fetch().all(); + Iterator> iterator1 = result1.iterator(); + while (iterator1.hasNext()) { + Map element1 = iterator1.next(); + Long res1 = (Long) element1.get("r"); + if (res1 < 0L) { + return ResultUtils.error(ErrorCode.OPERATION_ERROR, "添加关系失败"); + } + + } + } + + + return ResultUtils.success("添加成功"); + + } + + + @Override + public BaseResponse deleteAllByCourseId(String courseId) { + Long f = knowRepository.deleteAllByCourseId(courseId); + if (f > 0) { + return ResultUtils.success("删除成功"); + } + return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "删除失败"); } - Long opResult( String source, String target, String type, Integer sta){ + + Long opResult(String source, String target, String type, Integer sta) { Long res = -1L; String weight = null; - if("contain".equals(type)){ - weight = " {weight:5}"; - }else if("dependent".equals(type)){ - weight = " {weight:9}"; - }else if("order".equals(type)){ - weight = " {weight: 1}"; - } - if(sta != null && sta == 1){ + if ("contain".equals(type)) { + weight = " {weight:5}"; + } else if ("dependent".equals(type)) { + weight = " {weight:9}"; + } else if ("order".equals(type)) { + weight = " {weight: 1}"; + } + if (sta != null && sta == 1) { res = -1L; Long target1 = Long.parseLong(target); - res = knowRepository.addCourseRelationship(source,target1); - if (res< 0L) { + String str = "MATCH (p:Know), (j:Know) WHERE p.courseId= '" + source + "' AND j.chapterId= " + target1 + " CREATE (p)-[r: " + type + weight + " ]->(j) return count(r) as `count`;"; + Collection> result = neo4jClient.query(str).fetch().all(); + Iterator> iterator = result.iterator(); + while (iterator.hasNext()) { + Map element = iterator.next(); + res = (Long) element.get("count"); + } + if (res < 0L) { throw new RuntimeException("添加课程-章节 包含 失败"); } return res; - } - else if (sta != null && sta == 2) { + } else if (sta != null && sta == 2) { Long source1 = Long.parseLong(source); Long target1 = Long.parseLong(target); - String str = "MATCH (p:Know), (j:Know) WHERE p.chapterId= "+source1+" AND j.chapterId= "+target1+" CREATE (p)-[r: "+type+weight+" ]->(j) return count(r) as `count`;"; + String str = "MATCH (p:Know), (j:Know) WHERE p.chapterId= " + source1 + " AND j.chapterId= " + target1 + " CREATE (p)-[r: " + type + weight + " ]->(j) return count(r) as `count`;"; Collection> result = neo4jClient.query(str).fetch().all(); Iterator> iterator = result.iterator(); res = -1L; - while (iterator.hasNext()){ + while (iterator.hasNext()) { Map element = iterator.next(); res = (Long) element.get("count"); } - if (res<=0L) { - throw new RuntimeException("添加章节-章节"+type+"失败"); + if (res <= 0L) { + throw new RuntimeException("添加章节-章节" + type + "失败"); } return res; } else if (sta != null && sta == 3) { Long source1 = Long.parseLong(source); Long target1 = Long.parseLong(target); - String str = "MATCH (p:Know), (j:Know) WHERE p.chapterId= "+source1+" AND j.knowId= "+target1+" CREATE (p)-[r: "+type+weight+" ]->(j) return count(r) as `count`;"; + String str = "MATCH (p:Know), (j:Know) WHERE p.chapterId= " + source1 + " AND j.knowId= " + target1 + " CREATE (p)-[r: " + type + weight + " ]->(j) return count(r) as `count`;"; Collection> result = neo4jClient.query(str).fetch().all(); Iterator> iterator = result.iterator(); res = -1L; - while (iterator.hasNext()){ + while (iterator.hasNext()) { Map element = iterator.next(); res = (Long) element.get("count"); } if (res < 0) { - throw new RuntimeException("添加章节-知识点"+type+"失败"); + throw new RuntimeException("添加章节-知识点" + type + "失败"); } return res; } else if (sta != null && sta == 4) { Long source1 = Long.parseLong(source); Long target1 = Long.parseLong(target); - String str = "MATCH (p:Know), (j:Know) WHERE p.chapterId= "+source1+" AND j.knowId= "+target1+" CREATE (p)-[r: "+type+weight+" ]->(j) return count(r) as `count`;"; + String str = "MATCH (p:Know), (j:Know) WHERE p.knowId= " + source1 + " AND j.knowId= " + target1 + " CREATE (p)-[r: " + type + weight + " ]->(j) return count(r) as `count`;"; Collection> result = neo4jClient.query(str).fetch().all(); Iterator> iterator = result.iterator(); - res = -1L; - while (iterator.hasNext()){ + res = -1L; + while (iterator.hasNext()) { Map element = iterator.next(); res = (Long) element.get("count"); } if (res < 0L) { - throw new RuntimeException("添加知识点-知识点 关系"+type+"失败"); + throw new RuntimeException("添加知识点-知识点 关系" + type + "失败"); } return res; } else { @@ -492,8 +560,17 @@ public class knowServiceImpl implements KnowService { } - //todo 根据json串生成 图谱 保证事务 - private BaseResponse generateGraph(String jsonNodeCourse, String jsonNodeChapter, String jsonNodeKnow, String jsonEdges) { + + //根据json串生成 图谱 保证事务 + public BaseResponse generateGraph(String courseId1) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("course_id", courseId1); + KnowStr knowStr = knowstrMapper.selectOne(queryWrapper); + String jsonNodeCourse = knowStr.getCoursestr(); + String jsonNodeChapter = knowStr.getChapterstr(); + String jsonNodeKnow = knowStr.getKnowstr(); + String jsonEdges = knowStr.getEdgestr(); + ArrayList idLists = new ArrayList<>(); //插入图 JSONArray jsonArrayCourse = JSONUtil.parseArray(jsonNodeCourse); for (Object obj : jsonArrayCourse) { @@ -504,8 +581,9 @@ public class knowServiceImpl implements KnowService { Integer hour = jsonObject.getInt("hour"); //在图数据库中插入 Long res = knowRepository.addCourse(courseId, name, info, hour); + idLists.add(res); if (res == null) { - throw new RuntimeException("添加课程失败"); + return ResultUtils.error(ErrorCode.SYSTEM_ERROR,"添加课程失败"); } } @@ -519,8 +597,13 @@ public class knowServiceImpl implements KnowService { double hour = jsonObject.getDouble("hour"); //在图数据库中插入 Long res = knowRepository.addChapter(chapterId, name, info, hour); + idLists.add(res); if (res == null) { - throw new RuntimeException("添加章节失败"); + for (int i = 0; i < idLists.size(); i++) { + knowRepository.deleteNode(idLists.get(i)); + } + return ResultUtils.error(ErrorCode.SYSTEM_ERROR,"添加章节失败"); + } } @@ -534,8 +617,12 @@ public class knowServiceImpl implements KnowService { double hour = jsonObject.getDouble("hour"); //在图数据库中插入 Long res = knowRepository.addKnow(knowId, name, info, hour); + idLists.add(res); if (res == null) { - throw new RuntimeException("添加知识点失败"); + for (int i = 0; i < idLists.size(); i++) { + knowRepository.deleteNode(idLists.get(i)); + } + return ResultUtils.error(ErrorCode.SYSTEM_ERROR,"添加知识点失败"); } } @@ -548,243 +635,17 @@ public class knowServiceImpl implements KnowService { String type = jsonObject.getStr("type"); Integer sta = jsonObject.getInt("sta"); try { - opResult(source,target,type,sta); - }catch (Exception e){ - e.printStackTrace(); - return ResultUtils.error(ErrorCode.SYSTEM_ERROR,"添加节点关系失败"); - } - } - return ResultUtils.success("添加节点关系成功"); - } - - - @Transactional - public void addAllKnowTransation(String courseId) throws Exception { - int f; - //验证章节是否存在 - //验证知识点是否存在,避免重复添加 - //先添加节点 - //后赋值关系 - - - // 2.从课程表查出课程节点 并添加到 neo - Courses courses = coursesMapper.selectById(courseId); - Long KnowCourseId = knowRepository.addCourse(courseId, courses.getName(), courses.getDescription(), courses.getClasshours()); - - if (KnowCourseId == null) { - throw new RuntimeException("添加课程失败"); - } - // 3 从章节表查出章节节点 并添加到 neo - List chapterList = new ArrayList<>(); - List chapterListPID = chapterMapper.selectChapterPIDByCourseId(courseId); - for (int i = 0; i < chapterListPID.size(); i++) { - chapterList.add(chapterListPID.get(i)); - List chapterListSecond = chapterMapper.selectChapterChildrenOrderByNum(chapterListPID.get(i).getId()); - for (int j = 0; j < chapterListSecond.size(); j++) { - chapterList.add(chapterListSecond.get(j)); - } - } - //添加节点 - List chapterIds = new ArrayList<>(); - List chapterOneIds = new ArrayList<>(); - List chapterTwoIds = new ArrayList<>(); - for (int i = 0; i < chapterList.size(); i++) { - Chapter chapter = chapterList.get(i); - Long KnowChapterId = knowRepository.addChapter(chapter.getId(), chapter.getName(), chapter.getContent(), chapter.getTotalClassHours()); - if (chapter.getPid() == 0) { - chapterOneIds.add(KnowChapterId); - } else { - chapterTwoIds.add(KnowChapterId); - } - chapterIds.add(chapter.getId()); - if (KnowChapterId == null) { - throw new RuntimeException("添加章节失败"); - } - } - - //获取chapterId 查询知识点 返回知识点集合 - List knowIds = new ArrayList<>(); - for (int i = 0; i < chapterList.size(); i++) { - Chapter chapter = chapterList.get(i); - if (chapter.getPid() != 0) { - List knowlist = knowtmpService.queryByChapterId(chapter.getId()); - for (int j = 0; j < knowlist.size(); j++) { - Long knowId = knowRepository.addKnow(knowlist.get(j).getId(), knowlist.get(j).getName(), knowlist.get(j).getInfo(), knowlist.get(j).getHour()); - knowIds.add(knowId); - if (knowId == null) { - throw new RuntimeException("添加知识点失败"); - } - //添加知识点关系 - f = knowRepository.addContainWithKnow(knowId, chapterIds.get(i)); - if (f <= 0) { - throw new RuntimeException("添加知识点-章节失败关系失败"); - } + opResult(source, target, type, sta); + } catch (Exception e) { + for (int i = 0; i < idLists.size(); i++) { + knowRepository.deleteNode(idLists.get(i)); } + return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "添加节点关系失败"); } - - } - - for (int i = 0; i < chapterList.size(); i++) { - Chapter chapter = chapterList.get(i); - if (chapter.getPid() == 0) { - f = knowRepository.addContainWithCourse(chapter.getCourseId(), chapter.getId()); - if (f <= 0) throw new RuntimeException("添加课程-章节关系失败"); - } else { - f = knowRepository.addContainWithChapter(chapter.getId(), chapter.getPid()); - if (f <= 0) throw new RuntimeException("添加章节-章节关系失败"); - } - - } - - //添加顺序关系 - - //给章添加顺序关系 - for (int i = 0; i < chapterOneIds.size() - 1; i++) { - f = knowRepository.addOrderById(chapterOneIds.get(i), chapterOneIds.get(i + 1)); - if (f <= 0) throw new RuntimeException("添加章-章 顺序关系失败"); - } - - //给节添加顺序关系 - for (int i = 0; i < chapterTwoIds.size() - 1; i++) { - f = knowRepository.addOrderById(chapterTwoIds.get(i), chapterTwoIds.get(i + 1)); - if (f <= 0) throw new RuntimeException("添加节-节 顺序关系失败"); - } - //给知识点添加顺序关系 - for (int i = 0; i < knowIds.size() - 1; i++) { - f = knowRepository.addOrderById(knowIds.get(i), knowIds.get(i + 1)); - if (f <= 0) throw new RuntimeException("添加知识点-知识点 顺序关系失败"); - } - } - -// @Override -// public BaseResponse addKnow(KnowRequest knowRequest) { -// Know know = new Know(); -// BeanUtils.copyProperties(knowRequest,know); -// Long know1 = knowRepository.addKnow(know.getName(),know.getInfo()); -// if(know1 != null){ -// return ResultUtils.success("添加知识点成功"); -// }else{ -// return ResultUtils.error(ErrorCode.OPERATION_ERROR,"添加知识点失败"); -// } -// } - - @Override - public BaseResponse 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 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 queryKnow(Long id) { - Know know = knowRepository.queryKnow(id); - return ResultUtils.success(know); - } - - //======================== - - @Override - public BaseResponse addCourse(KnowCourseCreateRequest knowCourseCreateRequest) { - KnowCourse knowCourse = new KnowCourse(); - BeanUtils.copyProperties(knowCourseCreateRequest, knowCourse); - Long knowCourse1 = knowRepository.addCourse(knowCourse.getCourseId(), knowCourse.getName(), knowCourse.getInfo(), knowCourse.getHour()); - if (knowCourse1 != null) { - return ResultUtils.success("添加知识点成功"); - } else { - return ResultUtils.error(ErrorCode.OPERATION_ERROR, "添加知识点失败"); - } - } - - @Override - public BaseResponse 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 deleteCourse(String courseId) { - - int f = knowRepository.deleteCourse(courseId); - if (f > 0) { - return ResultUtils.success("删除知识点成功"); - } else { - return ResultUtils.error(ErrorCode.OPERATION_ERROR, "删除知识点失败"); - } - } - - @Override - public BaseResponse queryCourse(String courseId) { - KnowCourse Knowcourse = knowRepository.queryCourse(courseId); - return ResultUtils.success(Knowcourse); - } - - //========================= - - - @Override - public BaseResponse addChapter(KnowChapterCreateRequest knowChapterCreateRequest) { - KnowChapter knowChapter = new KnowChapter(); - BeanUtils.copyProperties(knowChapterCreateRequest, knowChapter); - Long f = knowRepository.addChapter(knowChapter.getChapterId(), knowChapter.getName(), knowChapter.getInfo(), knowChapter.getHour()); - if (f > 0) { - return ResultUtils.success("添加章节成功"); - } else { - return ResultUtils.error(ErrorCode.OPERATION_ERROR, "添加章节失败"); - } - } - - @Override - public BaseResponse 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, "修改知识点失败"); } + return ResultUtils.success("添加节点关系成功"); } - @Override - public BaseResponse deleteChapter(Long chapterId) { - int f = knowRepository.deleteChapter(chapterId); - if (f > 0) { - return ResultUtils.success("删除知识点成功"); - } else { - return ResultUtils.error(ErrorCode.OPERATION_ERROR, "删除知识点失败"); - } - } - - @Override - public BaseResponse queryChapter(Long chapterId) { - KnowChapter knowChapter = knowRepository.queryChapter(chapterId); - return ResultUtils.success(knowChapter); - } - - //=============== //获取课程下的所有知识点 @Override @@ -837,6 +698,8 @@ public class knowServiceImpl implements KnowService { links.setLabel("包含"); } else if ("order".equals(e.type())) { links.setLabel("顺序"); + }else if ("dependent".equals(e.type())) { + links.setLabel("依赖"); } linksList.add(links); } @@ -858,6 +721,8 @@ public class knowServiceImpl implements KnowService { links.setLabel("包含"); } else if ("order".equals(e.type())) { links.setLabel("顺序"); + }else if ("dependent".equals(e.type())) { + links.setLabel("依赖"); } linksList.add(links); } @@ -871,16 +736,20 @@ public class knowServiceImpl implements KnowService { } @Override - public BaseResponse getsecondKnowsById(Long id) { - Collection> 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(); + public BaseResponse getRelsNodesByCourseId(String courseId, List types) { + String str = "match(n:Know)-[r:"; + for (int i = 0; i < types.size(); i++) { + if (i == types.size() - 1) { + str = str + types.get(i) + "*"; + } else { + str = str + types.get(i) + "|"; + } - Map 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]); } + str = str + "]->(p:Know) where n.courseId = '" + courseId + "' return n as `n`,r as `r`,p as `p`,length(r) as `d`"; + System.out.println(str); + Collection> all = + neo4jClient.query(str).fetch().all(); Iterator> iterator = all.iterator(); Set knowList = new HashSet<>(); @@ -893,58 +762,186 @@ public class knowServiceImpl implements KnowService { Map element = iterator.next(); knowVO = new KnowVO(); Node node1 = (Node) element.get("p"); - Long group = (Long) element.get("d"); - Long id1 = node1.id(); - - String name1 = node1.get("name").asString(); - knowVO.setId(id1); - knowVO.setLabel(name1); knowVO.setColor(colorChoose.get(group)); - + if (node1 != null) { + Long id1 = node1.id(); + String name1 = node1.get("name").asString(); + knowVO.setId(id1); + knowVO.setLabel(name1); + knowList.add(knowVO); + knowVO.setColor(colorChoose.get(group)); + } 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()); - if ("contain".equals(e.type())) { - links.setLabel("包含"); - } else if ("order".equals(e.type())) { - links.setLabel("顺序"); + if (!node2.isEmpty()) { + 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()); + if ("contain".equals(e.type())) { + links.setLabel("包含"); + } else if ("order".equals(e.type())) { + links.setLabel("顺序"); + } + linksList.add(links); } - linksList.add(links); } + } + BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList, linksList); + return ResultUtils.success(baseKnowReturn); + } + @Override + public BaseResponse getRelsNodesById(Long id, List types) { + String str = "match(n:Know)-[r:"; + for (int i = 0; i < types.size(); i++) { + if (i == types.size() - 1) { + str = str + types.get(i) + "*"; + } else { + str = str + types.get(i) + "|"; + } } + str = str + "]->(p:Know) where ID(n) = " + id + " return n as `n`,r as `r`,p as `p`,length(r) as `d`"; + System.out.println(str); + Collection> all = + neo4jClient.query(str).fetch().all(); + + Iterator> iterator = all.iterator(); + Set knowList = new HashSet<>(); + Set linksList = new HashSet<>(); + KnowVO knowVO; + List node2 = new ArrayList<>(); + Links links; + int p = 0; + while (iterator.hasNext()) { + Map element = iterator.next(); + knowVO = new KnowVO(); + Node node1 = (Node) element.get("p"); + Long group = (Long) element.get("d"); + knowVO.setColor(colorChoose.get(group)); + if (node1 != null) { + Long id1 = node1.id(); + String name1 = node1.get("name").asString(); + knowVO.setId(id1); + knowVO.setLabel(name1); + knowList.add(knowVO); + knowVO.setColor(colorChoose.get(group)); + } + node2 = (List) element.get("r"); + if (!node2.isEmpty()) { + 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()); + if ("contain".equals(e.type())) { + links.setLabel("包含"); + } else if ("order".equals(e.type())) { + links.setLabel("顺序"); + } + linksList.add(links); + } + } + } BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList, linksList); return ResultUtils.success(baseKnowReturn); } - //获取课程下的所有资源 @Override - public BaseResponse> getAllResourcesByCourseId(String id) { + public BaseResponse getKnowGraphById(Long id) { + + String str = "match(n:Know)-[r*]->(p:Know) where ID(n) = " + id + " return n as `n`,r as `r`,p as `p`,length(r) as `d`"; + System.out.println(str); Collection> all = - neo4jClient.query("match(n:Know)-[r*0..]->(p:Know) where n.courseId = '" + id + "' return p as `p`").fetch().all(); + neo4jClient.query(str).fetch().all(); + Iterator> iterator = all.iterator(); - Set knowList = new HashSet<>(); - KnowVO1 knowVO; + Set knowList = new HashSet<>(); + Set linksList = new HashSet<>(); + KnowVO knowVO; + List node2 = new ArrayList<>(); + Links links; + int p = 0; while (iterator.hasNext()) { Map element = iterator.next(); - knowVO = new KnowVO1(); + knowVO = new KnowVO(); Node node1 = (Node) element.get("p"); - Long id1 = node1.id(); - String name1 = node1.get("name").asString(); + Long group = (Long) element.get("d"); + knowVO.setColor(colorChoose.get(group)); + if (node1 != null) { + Long id1 = node1.id(); + String name1 = node1.get("name").asString(); + knowVO.setId(id1); + knowVO.setLabel(name1); + knowList.add(knowVO); + knowVO.setColor(colorChoose.get(group)); + } + + node2 = (List) element.get("r"); + if (!node2.isEmpty()) { + 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()); + if ("contain".equals(e.type())) { + links.setLabel("包含"); + } else if ("order".equals(e.type())) { + links.setLabel("顺序"); + } + linksList.add(links); + } + } + } + BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList, linksList); + return ResultUtils.success(baseKnowReturn); + } + + @Override + public BaseResponse> getFontedAndBackKnows(Long id) { + //查询第一个知识点-最后一个知识点 + Know know = knowRepository.queryNodeT(id); + if (know == null) { + return ResultUtils.error(ErrorCode.PARAMS_ERROR, "知识点不存在"); + } + List knowVOList = new ArrayList<>(); + + String str = "match(n:Know)-[r:order]->(p:Know) where ID(p) =" + id + " return n"; + Collection> result = neo4jClient.query(str).fetch().all(); + Iterator> iterator = result.iterator(); + while (iterator.hasNext()) { + Map element = iterator.next(); + Node e = (Node) element.get("n"); + Long id1 = e.id(); + String name1 = e.get("name").asString(); + KnowVO knowVO = new KnowVO(); knowVO.setId(id1); knowVO.setLabel(name1); - knowList.add(knowVO); + knowVOList.add(knowVO); + } + + String str1 = "match(n:Know)-[r:order]->(p:Know) where ID(n) =" + id + " return p"; + Collection> result1 = neo4jClient.query(str1).fetch().all(); + Iterator> iterator1 = result1.iterator(); + while (iterator1.hasNext()) { + Map element = iterator1.next(); + Node e = (Node) element.get("p"); + Long id1 = e.id(); + String name1 = e.get("name").asString(); + KnowVO knowVO = new KnowVO(); + knowVO.setId(id1); + knowVO.setLabel(name1); + knowVOList.add(knowVO); } - return ResultUtils.success(knowList); - } + return ResultUtils.success(knowVOList); + } } diff --git a/src/main/java/com/teaching/backend/service/impl/knowtmp/KnowtmpServiceImpl.java b/src/main/java/com/teaching/backend/service/impl/knowtmp/KnowtmpServiceImpl.java index 968c903..9e109b8 100644 --- a/src/main/java/com/teaching/backend/service/impl/knowtmp/KnowtmpServiceImpl.java +++ b/src/main/java/com/teaching/backend/service/impl/knowtmp/KnowtmpServiceImpl.java @@ -34,6 +34,8 @@ public class KnowtmpServiceImpl implements KnowtmpService { @Autowired private KnowtmpMapper knowtmpMapper; + + @Override public BaseResponse getAllKnows(String courseId) { // 3 从章节表查出章节节点 并添加到 neo @@ -61,6 +63,10 @@ public class KnowtmpServiceImpl implements KnowtmpService { public BaseResponse update(KnowtempUpdate knowtempUpdate) { Knowtmp knowtmp = new Knowtmp(); BeanUtils.copyProperties(knowtempUpdate,knowtmp); + Knowtmp knowtmpOld = knowtmpMapper.selectById(knowtmp.getId()); + if(knowtmpOld == null){ + return ResultUtils.error(ErrorCode.OPERATION_ERROR,"数据不存在"); + } int f = knowtmpMapper.updateById(knowtmp); if(f > 0){ return ResultUtils.success("修改成功"); @@ -71,7 +77,11 @@ public class KnowtmpServiceImpl implements KnowtmpService { @Override public BaseResponse delete(Long id) { - // todo 查询 id + + Knowtmp knowtmpOld = knowtmpMapper.selectById(id); + if(knowtmpOld == null){ + return ResultUtils.error(ErrorCode.OPERATION_ERROR,"数据不存在"); + } int f = knowtmpMapper.deleteById(id); if(f > 0){ return ResultUtils.success("删除成功"); @@ -83,13 +93,19 @@ public class KnowtmpServiceImpl implements KnowtmpService { @Override public BaseResponse query(Long id) { Knowtmp knowtmp = knowtmpMapper.selectById(id); + if(knowtmp == null){ + return ResultUtils.error(ErrorCode.OPERATION_ERROR,"数据不存在"); + } return ResultUtils.success(knowtmp); } @Override - public List queryByChapterId(Long chapterId) { + public BaseResponse> queryByChapterId(Long chapterId) { List knowtmps = knowtmpMapper.queryIdByChapterId(chapterId); - return knowtmps; + if(knowtmps == null){ + return ResultUtils.error(ErrorCode.OPERATION_ERROR,"数据不存在"); + } + return ResultUtils.success(knowtmps); } @Override diff --git a/src/main/java/com/teaching/backend/service/impl/resource/ResourceGraphServiceImpl.java b/src/main/java/com/teaching/backend/service/impl/resource/ResourceGraphServiceImpl.java new file mode 100644 index 0000000..d033251 --- /dev/null +++ b/src/main/java/com/teaching/backend/service/impl/resource/ResourceGraphServiceImpl.java @@ -0,0 +1,151 @@ +package com.teaching.backend.service.impl.resource; + + +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.mapper.resource.ResourcesRepository; +import com.teaching.backend.model.dto.resource.ResourceUploadDto; +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.service.resource.ResourceGraphService; +import com.teaching.backend.service.resource.ResourceService; +import com.teaching.backend.utils.MinioUtils; +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.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Set; + + +/** + * @Author:youhang + * @Date:2024-07-26-13:58 + * @Description: + */ +@Service +public class ResourceGraphServiceImpl implements ResourceGraphService { + + @Autowired + private ResourcesRepository resourcesRepository; + + @Autowired + private KnowRepository knowRepository; + + + + @Override + public BaseResponse addResourcesByIdAndResourcesIds(Long id, List resourcesIds) { + // 查询知识点是否存在 ,资源是否存在 + int f = knowRepository.queryNode(id); + if(f <= 0){ + return ResultUtils.error(ErrorCode.PARAMS_ERROR,"知识点不存在"); + } + SetresourcesSet = resourcesRepository.queryResourcesByIds(resourcesIds); + + if(resourcesSet.size() < resourcesIds.size()){ + return ResultUtils.error(ErrorCode.PARAMS_ERROR,"资源不存在"); + } + + //查询关系是否存在 + for (int i = 0; i < resourcesIds.size(); i++) { + int count = resourcesRepository.queryExisitRel(id,resourcesIds.get(i)); + if(count <= 0){ + //添加关系 addResourcesAndKnowById + f = resourcesRepository.addResourcesAndKnowById(id,resourcesIds.get(i)); + if(f<= 0){ + return ResultUtils.error(ErrorCode.PARAMS_ERROR,"创建关系失败"); + } + } + } + + return ResultUtils.success("添加关系成功"); + } + + @Override + public BaseResponse deleteResourcesAndKnowById(Long id, List resourcesIds) { + // 查询知识点是否存在 ,资源是否存在 + int f = knowRepository.queryNode(id); + if(f <= 0){ + return ResultUtils.error(ErrorCode.PARAMS_ERROR,"知识点不存在"); + } + SetresourcesSet = resourcesRepository.queryResourcesByIds(resourcesIds); + + if(resourcesSet.size() < resourcesIds.size()){ + return ResultUtils.error(ErrorCode.PARAMS_ERROR,"资源不存在"); + } + + //查询关系是否存在 + for (int i = 0; i < resourcesIds.size(); i++) { + int count = resourcesRepository.queryExisitRel(id,resourcesIds.get(i)); + if(count <= 0){ + //添加关系 addResourcesAndKnowById + f = resourcesRepository.deleteResourcesAndKnowById(id,resourcesIds.get(i)); + if(f<= 0){ + return ResultUtils.error(ErrorCode.PARAMS_ERROR,"删除关系失败"); + } + } + } + + return ResultUtils.success("删除关系成功"); + } + + @Override + //查询课程下资源 + public BaseResponse> queryResourcesByCourseId(String courseId){ + // 判空,查询 + KnowCourse knowCourse = knowRepository.queryCourse(courseId); + if(knowCourse == null){ + return ResultUtils.error(ErrorCode.NOT_FOUND_ERROR,"课程不存在"); + } + Set resourcesSet = resourcesRepository.queryResourcesByCourseId(courseId); + return ResultUtils.success(resourcesSet); + } + @Override + //查询章节下资源 + public BaseResponse> queryResourcesByChapterId(Long chapterId){ + // 判空,查询 + KnowChapter knowChapter = knowRepository.queryChapter(chapterId); + if(knowChapter == null){ + return ResultUtils.error(ErrorCode.NOT_FOUND_ERROR,"章节不存在"); + } + SetresourcesSet ; + resourcesSet = resourcesRepository.queryResourcesByChapterId(chapterId); + return ResultUtils.success(resourcesSet); + } + + @Override + //查询二级节点下资源 + public BaseResponse> queryBesidesKnowToResources(Long knowId){ + // 判空,查询 + int i = knowRepository.queryNode(knowId); + if(i <= 0){ + return ResultUtils.error(ErrorCode.NOT_FOUND_ERROR,"知识点不存在"); + } + Set resourcesSet = resourcesRepository.queryBesidesKnowToResources(knowId); + return ResultUtils.success(resourcesSet); + } + + @Override + public BaseResponse> queryResourcesByKnowId(Long knowId) { + // 判空,查询 + int i = knowRepository.queryNode(knowId); + if(i <= 0){ + return ResultUtils.error(ErrorCode.NOT_FOUND_ERROR,"知识点不存在"); + } + Set resourcesSet = resourcesRepository.queryResourcesByKnowId(knowId); + return ResultUtils.success(resourcesSet); + } + + +} diff --git a/src/main/java/com/teaching/backend/service/impl/resource/ResourceServiceImpl.java b/src/main/java/com/teaching/backend/service/impl/resource/ResourceServiceImpl.java index a8708af..f0ad90c 100644 --- a/src/main/java/com/teaching/backend/service/impl/resource/ResourceServiceImpl.java +++ b/src/main/java/com/teaching/backend/service/impl/resource/ResourceServiceImpl.java @@ -8,9 +8,12 @@ import com.teaching.backend.common.ErrorCode; import com.teaching.backend.common.ResultUtils; import com.teaching.backend.constant.ViewContentTypeEnum; +import com.teaching.backend.mapper.know.KnowRepository; 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.know.KnowChapter; +import com.teaching.backend.model.entity.know.KnowCourse; import com.teaching.backend.model.entity.resource.Resources; import com.teaching.backend.service.resource.ResourceService; import com.teaching.backend.utils.MinioUtils; @@ -47,6 +50,10 @@ public class ResourceServiceImpl implements ResourceService { @Autowired private ResourcesRepository resourcesRepository; + @Autowired + private KnowRepository knowRepository; + + private static final Logger LOGGER = LoggerFactory.getLogger(ResourceService.class); @Autowired @@ -108,69 +115,8 @@ public class ResourceServiceImpl implements ResourceService { public ResponseEntity readFile(String filename) { return minioUtils.readFile(filename); } - @Override - public BaseResponse addResourcesAndKnowByCourseId(String courseId, List resourcesIds){ - // todo 查询课程是否存在 ,资源是否存在 - int count = resourcesRepository.addResourcesAndKnowByCourseId(courseId,resourcesIds); - if(count == resourcesIds.size()){ - return ResultUtils.success("添加关系成功"); - }else{ - return ResultUtils.error(ErrorCode.OPERATION_ERROR,"添加失败"); - } - } - @Override - public BaseResponse addResourcesAndKnowByChapterId(Long chapterId, List resourcesIds){ - // todo 查询章节是否存在 ,资源是否存在 - int count = resourcesRepository.addResourcesAndKnowByChapterId(chapterId,resourcesIds); - if(count == resourcesIds.size()){ - return ResultUtils.success("添加关系成功"); - }else{ - return ResultUtils.error(ErrorCode.OPERATION_ERROR,"添加失败"); - } - } - @Override - public BaseResponse addResourcesAndKnowById(Long id, List resourcesIds){ - // todo 查询知识点是否存在 ,资源是否存在 - int count = resourcesRepository.addResourcesAndKnowById(id,resourcesIds); - if(count == resourcesIds.size()){ - return ResultUtils.success("添加关系成功"); - }else{ - return ResultUtils.error(ErrorCode.OPERATION_ERROR,"添加失败"); - } - } - @Override - //查询课程下资源 - public BaseResponse> queryResourcesByCourseId(String courseId){ - // todo 判空,查询 - SetresourcesSet; - resourcesSet = resourcesRepository.queryResourcesByCourseId(courseId); - return ResultUtils.success(resourcesSet); - } - @Override - //查询章节下资源 - public BaseResponse> queryResourcesByChapterId(Long chapterId){ - // todo 判空,查询 - SetresourcesSet ; - resourcesSet = resourcesRepository.queryResourcesByChapterId(chapterId); - return ResultUtils.success(resourcesSet); - } - @Override - //查询二级节点下资源 - public BaseResponse> queryBesidesKnowToResources(Long KnowId){ - // todo 判空,查询 - SetresourcesSet ; - resourcesSet = resourcesRepository.queryBesidesKnowToResources(KnowId); - return ResultUtils.success(resourcesSet); - } - @Override - public BaseResponse> queryResourcesByKnowId(Long KnowId) { - // todo 判空,查询 - SetresourcesSet ; - resourcesSet = resourcesRepository.queryResourcesByKnowId(KnowId); - return ResultUtils.success(resourcesSet); - } } diff --git a/src/main/java/com/teaching/backend/service/knowtmp/KnowtmpService.java b/src/main/java/com/teaching/backend/service/knowtmp/KnowtmpService.java index 3468a16..f71223a 100644 --- a/src/main/java/com/teaching/backend/service/knowtmp/KnowtmpService.java +++ b/src/main/java/com/teaching/backend/service/knowtmp/KnowtmpService.java @@ -13,6 +13,9 @@ import java.util.List; * @Description: */ public interface KnowtmpService { + + + //查询 BaseResponse getAllKnows(String courseId); @@ -30,7 +33,7 @@ public interface KnowtmpService { BaseResponse query(Long id); //查询通过chapterId List - List queryByChapterId(Long chapterId); + BaseResponse> queryByChapterId(Long chapterId); //查询通过chapterId List List queryByChapterIdList(List chapterIdList); diff --git a/src/main/java/com/teaching/backend/service/resource/ResourceGraphService.java b/src/main/java/com/teaching/backend/service/resource/ResourceGraphService.java new file mode 100644 index 0000000..5811177 --- /dev/null +++ b/src/main/java/com/teaching/backend/service/resource/ResourceGraphService.java @@ -0,0 +1,39 @@ +package com.teaching.backend.service.resource; + + +import com.teaching.backend.common.BaseResponse; +import com.teaching.backend.model.entity.resource.Resources; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Set; + +/** + * @Author:youhang + * @Date:2024-07-26-13:55 + * @Description: + */ + +public interface ResourceGraphService { + + public BaseResponse deleteResourcesAndKnowById(@RequestParam Long id, @RequestParam List resourcesIds); + + BaseResponse addResourcesByIdAndResourcesIds(Long id, List resourcesIds); + + + //查询课程下资源 + BaseResponse> queryResourcesByCourseId(String courseId); + + //查询章节下资源 + BaseResponse> queryResourcesByChapterId(Long chapterId); + + //查询二级节点下资源 + BaseResponse> queryBesidesKnowToResources(Long knowId); + + BaseResponse> queryResourcesByKnowId(Long knowId); + + +} diff --git a/src/main/java/com/teaching/backend/service/resource/ResourceService.java b/src/main/java/com/teaching/backend/service/resource/ResourceService.java index 570a74e..25ee00d 100644 --- a/src/main/java/com/teaching/backend/service/resource/ResourceService.java +++ b/src/main/java/com/teaching/backend/service/resource/ResourceService.java @@ -7,6 +7,7 @@ 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.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -25,22 +26,6 @@ public interface ResourceService { BaseResponse delete(String filename) ; ResponseEntity readFile(String filename); - BaseResponse addResourcesAndKnowByCourseId(String courseId, List resourcesIds); - - BaseResponse addResourcesAndKnowByChapterId(Long chapterId, List resourcesIds); - - BaseResponse addResourcesAndKnowById(Long id, List resourcesIds); - - //查询课程下资源 - BaseResponse> queryResourcesByCourseId(String courseId); - - //查询章节下资源 - BaseResponse> queryResourcesByChapterId(Long chapterId); - - //查询二级节点下资源 - BaseResponse> queryBesidesKnowToResources(Long KnowId); - - BaseResponse> queryResourcesByKnowId(Long KnowId); }