package com.teaching.backend.service.KnowGraph; 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.model.dto.KnowGraph.*; 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.chapter.Chapter; import com.teaching.backend.model.entity.courses.Courses; import com.teaching.backend.model.vo.knowGraph.KnowVO; import org.neo4j.driver.internal.InternalRelationship; import org.neo4j.driver.types.Node; import org.springframework.beans.BeanUtils; import org.springframework.data.neo4j.core.Neo4jClient; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.*; /** * @Author:youhang * @Date:2024-07-21-14:46 * @Description: */ @Service public class KnowService { private KnowRepository knowRepository; @Resource private Neo4jClient neo4jClient; public KnowService(KnowRepository knowRepository) { this.knowRepository = knowRepository; } public List queryKnowAllKnowById(Long id) { return knowRepository.queryKnowAllKnowById(id); } public BaseResponse 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 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 deleteKnow(Long id) { Boolean f = knowRepository.deleteKnow(id); if(f)return ResultUtils.success("删除成功"); return ResultUtils.error(ErrorCode.DELETE_FAILED); } public BaseResponse 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 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 createKnowChapter(Chapter chapter) { return ResultUtils.success(knowRepository.createKnowChapter(chapter.getId(), chapter.getName(), chapter.getContent())); } public BaseResponse updateKnowChapter(Chapter chapter) { return ResultUtils.success(knowRepository.createKnowChapter(chapter.getId(), chapter.getName(), chapter.getContent())); } public BaseResponse deleteKnowChapter(String chapterId) { boolean f = knowRepository.deleteKnowChapter(chapterId); if(f)return ResultUtils.success("删除成功"); return ResultUtils.error(ErrorCode.DELETE_FAILED); } public Set queryByChapterId(String chapterId){ Set knows = knowRepository.queryByChapterId(chapterId); return knows; } public BaseResponse 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 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> 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(); MapcolorChoose = 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<>(); SetlinksList = 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()); 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> 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(); MapcolorChoose = 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<>(); SetlinksList = 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()); links.setLabel(e.type()); linksList.add(links); } } BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList,linksList); System.out.println(baseKnowReturn); return baseKnowReturn; } }