|
|
@@ -1,6 +1,6 @@
|
|
|
package com.seeckg.knowledgegraph_backend.service;
|
|
|
|
|
|
-import java.util.Objects;
|
|
|
+import java.util.*;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
@@ -8,13 +8,11 @@ import com.seeckg.knowledgegraph_backend.convert.KnowledgeConvert;
|
|
|
import com.seeckg.knowledgegraph_backend.dao.KnowledgeDao;
|
|
|
import com.seeckg.knowledgegraph_backend.enums.ReturnCode;
|
|
|
import com.seeckg.knowledgegraph_backend.enums.UserRole;
|
|
|
-import com.seeckg.knowledgegraph_backend.pojo.CourseVO;
|
|
|
-import com.seeckg.knowledgegraph_backend.pojo.Knowledge;
|
|
|
-import com.seeckg.knowledgegraph_backend.pojo.KnowledgeVO;
|
|
|
-import com.seeckg.knowledgegraph_backend.pojo.Response;
|
|
|
-import com.seeckg.knowledgegraph_backend.pojo.UserVO;
|
|
|
+import com.seeckg.knowledgegraph_backend.enums.knowledgeType;
|
|
|
+import com.seeckg.knowledgegraph_backend.pojo.*;
|
|
|
import com.seeckg.knowledgegraph_backend.remote.SeeCoderRemoteService;
|
|
|
|
|
|
+import com.seeckg.knowledgegraph_backend.util.GetKGReturnFormat;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
@@ -47,6 +45,7 @@ public class KnowledgeService {
|
|
|
return Response.buildFailed(ReturnCode.INVALID_USER.getCode(), ReturnCode.INVALID_USER.getDesc());
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
Knowledge knowledge = KnowledgeConvert.convert(knowledgeVO);
|
|
|
knowledgeDao.save(knowledge);
|
|
|
return Response.buildSuccess();
|
|
|
@@ -82,6 +81,7 @@ public class KnowledgeService {
|
|
|
log.error("[KnowledgeService.addKnowledge] 查无该知识点 knowledgeVO = {}", knowledgeVO);
|
|
|
return Response.buildFailed(ReturnCode.PARAM_ERROR.getCode(), "知识点信息错误,查无该知识点");
|
|
|
}
|
|
|
+
|
|
|
Knowledge knowledgeNew = KnowledgeConvert.convert(knowledgeVO);
|
|
|
knowledgeDao.save(knowledgeNew);
|
|
|
return Response.buildSuccess();
|
|
|
@@ -128,4 +128,120 @@ public class KnowledgeService {
|
|
|
return knowledgeDao.findByName(name);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 添加关系
|
|
|
+ */
|
|
|
+ public Response addRelationship(long startKnowledgeId, long endKnowledgeId, knowledgeType type ,long userId) {
|
|
|
+ UserVO userVO = seeCoderRemoteService.getUserById(userId);
|
|
|
+ // 垂直权限校验
|
|
|
+ if (!userVO.getRole().equals(UserRole.TEACHER)) {
|
|
|
+ log.error("[KnowledgeService.addRelationship] 用户无权限 knowledgeId = {} and {} ,userVO = {}", startKnowledgeId, endKnowledgeId,userVO);
|
|
|
+ return Response.buildFailed(ReturnCode.INVALID_USER.getCode(), ReturnCode.INVALID_USER.getDesc());
|
|
|
+ }
|
|
|
+
|
|
|
+ Knowledge knowledgeStart = knowledgeDao.findById(startKnowledgeId).orElse(null);
|
|
|
+ if (Objects.isNull(knowledgeStart)){
|
|
|
+ log.error("[KnowledgeService.addRelationship] 查无该知识点 knowledgeId = {}", startKnowledgeId );
|
|
|
+ return Response.buildFailed(ReturnCode.PARAM_ERROR.getCode(), "知识点信息错误,查无该知识点");
|
|
|
+ }
|
|
|
+ Knowledge knowledgeEnd = knowledgeDao.findById(endKnowledgeId).orElse(null);
|
|
|
+ if (Objects.isNull(knowledgeEnd)){
|
|
|
+ log.error("[KnowledgeService.addRelationship] 查无该知识点 knowledgeId = {}", endKnowledgeId );
|
|
|
+ return Response.buildFailed(ReturnCode.PARAM_ERROR.getCode(), "知识点信息错误,查无该知识点");
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ if(type==knowledgeType.DEFINE){
|
|
|
+ knowledgeStart.defineRelationship(knowledgeEnd);
|
|
|
+ }else if (type==knowledgeType.SIMILAR){
|
|
|
+ knowledgeStart.similarRelationship(knowledgeEnd);
|
|
|
+ }else {
|
|
|
+ knowledgeStart.subRelationship(knowledgeEnd);
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ return Response.buildFailed(ReturnCode.SERVER_ERROR.getCode(), e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ return Response.buildSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public Response deleteRelationship(long startKnowledgeId, long endKnowledgeId, knowledgeType type ,long userId){
|
|
|
+ UserVO userVO = seeCoderRemoteService.getUserById(userId);
|
|
|
+ if (!userVO.getRole().equals(UserRole.TEACHER)) {
|
|
|
+ log.error("[KnowledgeService.deleteRelationship] 用户无权限 knowledgeId = {} and {} ,userVO = {}", startKnowledgeId, endKnowledgeId,userVO);
|
|
|
+ return Response.buildFailed(ReturnCode.INVALID_USER.getCode(), ReturnCode.INVALID_USER.getDesc());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Knowledge knowledgeStart = knowledgeDao.findById(startKnowledgeId).orElse(null);
|
|
|
+ if (Objects.isNull(knowledgeStart)){
|
|
|
+ log.error("[KnowledgeService.deleteRelationship] 查无该知识点 knowledgeId = {}", startKnowledgeId );
|
|
|
+ return Response.buildFailed(ReturnCode.PARAM_ERROR.getCode(), "知识点信息错误,查无该知识点");
|
|
|
+ }
|
|
|
+
|
|
|
+ Knowledge knowledgeEnd = knowledgeDao.findById(endKnowledgeId).orElse(null);
|
|
|
+ if (Objects.isNull(knowledgeEnd)){
|
|
|
+ log.error("[KnowledgeService.deleteRelationship] 查无该知识点 knowledgeId = {}", endKnowledgeId );
|
|
|
+ return Response.buildFailed(ReturnCode.PARAM_ERROR.getCode(), "知识点信息错误,查无该知识点");
|
|
|
+ }
|
|
|
+
|
|
|
+ try{
|
|
|
+ if(type==knowledgeType.SIMILAR){
|
|
|
+ Set<Knowledge> similar=knowledgeStart.getSimilar();
|
|
|
+ if(similar.contains(knowledgeEnd)){
|
|
|
+ //正常运行
|
|
|
+ similar.remove(knowledgeEnd);
|
|
|
+ }else{
|
|
|
+ return Response.buildFailed(ReturnCode.PARAM_ERROR.getCode(), "关系不存在!");
|
|
|
+ }
|
|
|
+ }else if(type==knowledgeType.DEFINE){
|
|
|
+ Set<Knowledge> define=knowledgeStart.getDefine();
|
|
|
+ if(define.contains(knowledgeEnd)){
|
|
|
+ define.remove(knowledgeEnd);
|
|
|
+ }else {
|
|
|
+ return Response.buildFailed(ReturnCode.PARAM_ERROR.getCode(),"关系不存在!" );
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ Set<Knowledge> sub=knowledgeStart.getSub();
|
|
|
+ if(sub.contains(knowledgeEnd)){
|
|
|
+ sub.remove(knowledgeEnd);
|
|
|
+ }else {
|
|
|
+ return Response.buildFailed(ReturnCode.PARAM_ERROR.getCode(), "关系不存在!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ return Response.buildFailed(ReturnCode.SERVER_ERROR.getCode(), e.getMessage());
|
|
|
+ }
|
|
|
+ return Response.buildSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取图谱所有节点和边
|
|
|
+ * 返回的数据格式是{list:nodes,list:edges}
|
|
|
+ * @return 包含上述数据的Response
|
|
|
+ */
|
|
|
+ public Response getAllNodesAndEdges(){
|
|
|
+ List<Knowledge> allNodes=knowledgeDao.findAll();
|
|
|
+ List<Relationship> relationList=new ArrayList<>();
|
|
|
+ for(int i=0;i<allNodes.size();i++){
|
|
|
+ Set<Knowledge> define=allNodes.get(i).getDefine();
|
|
|
+ for(Knowledge knowledge:define){
|
|
|
+ relationList.add(new Relationship(i,allNodes.indexOf(knowledge),"define"));
|
|
|
+ }
|
|
|
+ Set<Knowledge> similar=allNodes.get(i).getSimilar();
|
|
|
+ for(Knowledge knowledge:similar){
|
|
|
+ relationList.add(new Relationship(i,allNodes.indexOf(knowledge),"similar"));
|
|
|
+ }
|
|
|
+
|
|
|
+ Set<Knowledge> sub=allNodes.get(i).getSub();
|
|
|
+ for (Knowledge knowledge:sub){
|
|
|
+ relationList.add(new Relationship(i,allNodes.indexOf(knowledge),"sub"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ GetKGReturnFormat getKGReturnFormat=new GetKGReturnFormat(allNodes,relationList);
|
|
|
+ return Response.buildSuccess(getKGReturnFormat);
|
|
|
+ }
|
|
|
+
|
|
|
}
|