parent
3b286f4356
commit
c9d9ffecb6
10 changed files with 504 additions and 0 deletions
@ -0,0 +1,81 @@ |
||||
package com.teaching.backend.controller.KnowGraph; |
||||
|
||||
/** |
||||
* @Author:youhang |
||||
* @Date:2024-06-09-9:55 |
||||
* @Description: |
||||
*/ |
||||
import com.teaching.backend.common.BaseResponse; |
||||
import com.teaching.backend.common.ResultUtils; |
||||
import com.teaching.backend.model.dto.KnowGraph.BaseKnowReturn; |
||||
import com.teaching.backend.model.dto.KnowGraph.KnowRequest; |
||||
import com.teaching.backend.model.dto.KnowGraph.KnowUpdateRequest; |
||||
import com.teaching.backend.model.dto.KnowGraph.RelationshipKnowRequest; |
||||
import com.teaching.backend.model.entity.KnowGraph.Know; |
||||
|
||||
import com.teaching.backend.service.KnowGraph.KnowService; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import java.util.List; |
||||
|
||||
|
||||
@RestController |
||||
@RequestMapping("/know") |
||||
public class KnowController { |
||||
|
||||
private KnowService knowService; |
||||
|
||||
public KnowController(KnowService knowService) { |
||||
this.knowService = knowService; |
||||
} |
||||
|
||||
//根据 id查询所关联的所有结点
|
||||
@PostMapping ("/query/{id}") |
||||
public List<Know> queryKnowAllKnowById(@PathVariable Long id) { |
||||
return knowService.queryKnowAllKnowById(id); |
||||
} |
||||
|
||||
//添加知识点
|
||||
@PostMapping("/add") |
||||
public Know createKnow(@RequestBody KnowRequest knowRequest) { |
||||
return knowService.createKnow(knowRequest); |
||||
} |
||||
|
||||
//修改知识点
|
||||
@PostMapping ("/update") |
||||
public Know updateKnow(@RequestBody KnowUpdateRequest knowUpdateRequest) { |
||||
return knowService.updateKnow(knowUpdateRequest); |
||||
} |
||||
|
||||
|
||||
//删除知识点
|
||||
@GetMapping ("delete/{id}") |
||||
public void deleteKnow(@PathVariable Long id) { |
||||
knowService.deleteKnow(id); |
||||
} |
||||
|
||||
//添加知识点与知识点的关系 related
|
||||
@PostMapping ("/addKnowRelatedKnow") |
||||
public void addKnowRelatedKnow(@RequestBody RelationshipKnowRequest relationshipKnowRequest) { |
||||
knowService.addKnowRelatedKnow(relationshipKnowRequest); |
||||
} |
||||
|
||||
//添加知识点与知识点的关系 related
|
||||
@PostMapping ("/addKnowFatherAndSonKnow") |
||||
public void addKnowFatherAndSonKnow(@RequestBody RelationshipKnowRequest relationshipKnowRequest) { |
||||
knowService.addKnowFatherAndSonKnow(relationshipKnowRequest); |
||||
} |
||||
|
||||
@GetMapping("/all") |
||||
public BaseResponse<BaseKnowReturn> getKnowAll(@RequestParam Long id) { |
||||
BaseKnowReturn baseKnowReturn =knowService.getKnowAll(id); |
||||
return ResultUtils.success(baseKnowReturn); |
||||
} |
||||
|
||||
@GetMapping("/KnowById") |
||||
public BaseResponse<BaseKnowReturn> getKnowById(@RequestParam Long id) { |
||||
BaseKnowReturn baseKnowReturn =knowService.getKnowById(id); |
||||
return ResultUtils.success(baseKnowReturn); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,31 @@ |
||||
package com.teaching.backend.mapper.KnowGraph; |
||||
|
||||
/** |
||||
* @Author:youhang |
||||
* @Date:2024-06-09-8:59 |
||||
* @Description: |
||||
*/ |
||||
|
||||
|
||||
import com.teaching.backend.model.entity.KnowGraph.Know; |
||||
import org.springframework.data.neo4j.repository.Neo4jRepository; |
||||
import org.springframework.data.neo4j.repository.query.Query; |
||||
|
||||
import java.util.List; |
||||
|
||||
public interface KnowRepository extends Neo4jRepository<Know, Long> { |
||||
|
||||
|
||||
@Query("MATCH (p:Know), (c:Know) WHERE ID(p) = $id AND ID(c) IN $KnowIds CREATE (p)-[:related]->(c),(c)-[:related]->(p)") |
||||
void addKnowRelatedKnow(Long id, List<Long> KnowIds); |
||||
|
||||
@Query("MATCH (p:Know), (c:Know) WHERE ID(p) = $id AND ID(c) IN $KnowIds CREATE (p)-[:FatherAndSon]->(c)") |
||||
void addKnowFatherAndSonKnow(Long id, List<Long> KnowIds); |
||||
|
||||
@Query("MATCH(n)-[r:related]->(nn:Know) where ID(nn) = $id RETURN n") |
||||
List<Know> queryKnowAllKnowById(Long id); |
||||
|
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,31 @@ |
||||
package com.teaching.backend.model.dto.KnowGraph; |
||||
|
||||
/** |
||||
* @Author:youhang |
||||
* @Date:2024-07-23-17:30 |
||||
* @Description: |
||||
*/ |
||||
|
||||
|
||||
import com.teaching.backend.model.entity.KnowGraph.Links; |
||||
import com.teaching.backend.model.vo.knowGraph.KnowVO; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
import lombok.NoArgsConstructor; |
||||
|
||||
import java.util.Set; |
||||
|
||||
/** |
||||
* @Author:youhang |
||||
* @Date:2024-07-22-5:01 |
||||
* @Description: |
||||
*/ |
||||
@Data |
||||
@AllArgsConstructor |
||||
@NoArgsConstructor |
||||
public class BaseKnowReturn { |
||||
|
||||
private Set<KnowVO> knowList; |
||||
|
||||
private Set<Links>linksList; |
||||
} |
@ -0,0 +1,34 @@ |
||||
package com.teaching.backend.model.dto.KnowGraph; |
||||
|
||||
import lombok.Data; |
||||
import org.springframework.data.neo4j.core.schema.Property; |
||||
|
||||
import java.io.Serializable; |
||||
import java.util.List; |
||||
|
||||
@Data |
||||
public class KnowRequest implements Serializable { |
||||
|
||||
|
||||
/** |
||||
* 知识点名称 |
||||
*/ |
||||
private String name; |
||||
|
||||
/** |
||||
* 信息 |
||||
*/ |
||||
|
||||
private String info; |
||||
|
||||
|
||||
|
||||
/** |
||||
* 知识点所关联的资源 |
||||
*/ |
||||
@Property |
||||
private List<Integer> resourceList; |
||||
|
||||
|
||||
} |
||||
|
@ -0,0 +1,37 @@ |
||||
package com.teaching.backend.model.dto.KnowGraph; |
||||
|
||||
import lombok.Data; |
||||
import org.springframework.data.neo4j.core.schema.Property; |
||||
|
||||
import java.io.Serializable; |
||||
import java.util.List; |
||||
|
||||
@Data |
||||
public class KnowUpdateRequest implements Serializable { |
||||
|
||||
|
||||
/** |
||||
* id |
||||
*/ |
||||
private Long id; |
||||
|
||||
/** |
||||
* 知识点名称 |
||||
*/ |
||||
private String name; |
||||
|
||||
/** |
||||
* 信息 |
||||
*/ |
||||
|
||||
private String info; |
||||
|
||||
|
||||
/** |
||||
* 知识点所关联的资源 |
||||
*/ |
||||
@Property |
||||
private List<Integer> resourceList; |
||||
|
||||
} |
||||
|
@ -0,0 +1,22 @@ |
||||
package com.teaching.backend.model.dto.KnowGraph; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
import java.util.List; |
||||
|
||||
@Data |
||||
public class RelationshipKnowRequest implements Serializable { |
||||
|
||||
/** |
||||
* knowid |
||||
*/ |
||||
private Long id; |
||||
|
||||
/** |
||||
* 课程id |
||||
*/ |
||||
private List<Long> KnowIds; |
||||
|
||||
} |
||||
|
@ -0,0 +1,45 @@ |
||||
package com.teaching.backend.model.entity.KnowGraph; |
||||
|
||||
import lombok.Data; |
||||
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; |
||||
|
||||
import java.io.Serializable; |
||||
import java.util.List; |
||||
|
||||
@Node |
||||
@Data |
||||
public class Know implements Serializable { |
||||
|
||||
|
||||
/** |
||||
* id |
||||
*/ |
||||
@Id |
||||
@GeneratedValue |
||||
private Long id; |
||||
|
||||
|
||||
/** |
||||
* 知识点名称 |
||||
*/ |
||||
@Property |
||||
private String name; |
||||
|
||||
/** |
||||
* 信息 |
||||
*/ |
||||
@Property |
||||
private String info; |
||||
|
||||
|
||||
/** |
||||
* 知识点所关联的资源 |
||||
*/ |
||||
@Property |
||||
private List<Integer> resourceList; |
||||
|
||||
} |
||||
|
@ -0,0 +1,32 @@ |
||||
package com.teaching.backend.model.entity.KnowGraph; |
||||
|
||||
import lombok.Data; |
||||
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 |
||||
@Node |
||||
public class Links { |
||||
|
||||
@Id |
||||
@GeneratedValue |
||||
private Long id; |
||||
|
||||
@Property |
||||
private Long source; |
||||
|
||||
@Property |
||||
private Long target; |
||||
|
||||
@Property |
||||
private String label; |
||||
|
||||
|
||||
} |
@ -0,0 +1,36 @@ |
||||
package com.teaching.backend.model.vo.knowGraph; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
import java.util.List; |
||||
|
||||
|
||||
@Data |
||||
public class KnowVO implements Serializable { |
||||
|
||||
|
||||
/** |
||||
* id |
||||
*/ |
||||
private Long id; |
||||
|
||||
|
||||
/** |
||||
* 知识点名称 |
||||
*/ |
||||
private String label; |
||||
|
||||
/** |
||||
* 信息 |
||||
*/ |
||||
private Long group; |
||||
|
||||
|
||||
/** |
||||
* 知识点所关联的资源 |
||||
*/ |
||||
private List<Integer> resourceList; |
||||
|
||||
} |
||||
|
@ -0,0 +1,155 @@ |
||||
package com.teaching.backend.service.KnowGraph; |
||||
|
||||
import com.teaching.backend.mapper.KnowGraph.KnowRepository; |
||||
import com.teaching.backend.model.dto.KnowGraph.BaseKnowReturn; |
||||
import com.teaching.backend.model.dto.KnowGraph.KnowRequest; |
||||
import com.teaching.backend.model.dto.KnowGraph.KnowUpdateRequest; |
||||
import com.teaching.backend.model.dto.KnowGraph.RelationshipKnowRequest; |
||||
import com.teaching.backend.model.entity.KnowGraph.Know; |
||||
import com.teaching.backend.model.entity.KnowGraph.Links; |
||||
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.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<Know> queryKnowAllKnowById(Long id) { |
||||
return knowRepository.queryKnowAllKnowById(id); |
||||
} |
||||
|
||||
|
||||
public Know createKnow(KnowRequest knowRequest ) { |
||||
Know know = new Know(); |
||||
BeanUtils.copyProperties(knowRequest,know); |
||||
return knowRepository.save(know); |
||||
} |
||||
|
||||
|
||||
public void deleteKnow(Long id) { |
||||
knowRepository.deleteById(id); |
||||
} |
||||
|
||||
public Know updateKnow(KnowUpdateRequest knowUpdateRequest ) { |
||||
Know know = new Know(); |
||||
know = knowRepository.findById(knowUpdateRequest.getId()).orElseThrow(() -> new RuntimeException("知识点 not found")); |
||||
BeanUtils.copyProperties(knowUpdateRequest,know); |
||||
return knowRepository.save(know); |
||||
} |
||||
|
||||
|
||||
public void addKnowRelatedKnow( RelationshipKnowRequest relationshipKnowRequest) { |
||||
knowRepository.addKnowRelatedKnow(relationshipKnowRequest.getId(),relationshipKnowRequest.getKnowIds()); |
||||
} |
||||
public void addKnowFatherAndSonKnow( RelationshipKnowRequest relationshipKnowRequest) { |
||||
knowRepository.addKnowFatherAndSonKnow(relationshipKnowRequest.getId(),relationshipKnowRequest.getKnowIds()); |
||||
} |
||||
|
||||
|
||||
public BaseKnowReturn getKnowAll(Long id) { |
||||
Collection<Map<String, Object>> all = |
||||
neo4jClient.query( "match(n:Know)-[r*0..]->(p:Know) where ID(n) = "+id+" return n as `n`,r as `r`,p as `p`,length(r) as `d`").fetch().all(); |
||||
|
||||
Iterator<Map<String, Object>> iterator = all.iterator(); |
||||
Set<KnowVO> knowList = new HashSet<>(); |
||||
Set<Links>linksList = new HashSet<>(); |
||||
KnowVO knowVO; |
||||
List node2 = new ArrayList<>(); |
||||
Links links; |
||||
int p = 0; |
||||
while (iterator.hasNext()) { |
||||
Map<String, Object> element = iterator.next(); |
||||
Long group = (Long) element.get("d"); |
||||
knowVO = new KnowVO(); |
||||
Node node1 = (Node) element.get("p"); |
||||
Long id1 = node1.id(); |
||||
String name1 = node1.get("name").asString(); |
||||
// String info1 = node1.get("info").asString();
|
||||
knowVO.setId(id1); |
||||
knowVO.setLabel(name1); |
||||
knowVO.setGroup(group); |
||||
knowList.add(knowVO); |
||||
|
||||
node2 = (List) element.get("r"); |
||||
for (int i = 0; i < node2.size(); i++) { |
||||
InternalRelationship e = (InternalRelationship) node2.get(i); |
||||
links = new Links(); |
||||
links.setId(e.id()); |
||||
links.setSource(e.startNodeId()); |
||||
links.setTarget(e.endNodeId()); |
||||
links.setLabel(e.type()); |
||||
linksList.add(links); |
||||
} |
||||
|
||||
|
||||
} |
||||
BaseKnowReturn baseKnowReturn = new BaseKnowReturn(knowList,linksList); |
||||
System.out.println(baseKnowReturn); |
||||
return baseKnowReturn; |
||||
} |
||||
|
||||
public BaseKnowReturn getKnowById(Long id) { |
||||
Collection<Map<String, Object>> all = |
||||
neo4jClient.query( "match(n:Know)-[r*0..2]->(p:Know) where ID(n) = "+id+" return n as `n`,r as `r`,p as `p`,length(r) as `d`").fetch().all(); |
||||
|
||||
Iterator<Map<String, Object>> iterator = all.iterator(); |
||||
Set<KnowVO> knowList = new HashSet<>(); |
||||
Set<Links>linksList = new HashSet<>(); |
||||
KnowVO knowVO; |
||||
List node2 = new ArrayList<>(); |
||||
Links links; |
||||
int p = 0; |
||||
while (iterator.hasNext()) { |
||||
Map<String, Object> element = iterator.next(); |
||||
|
||||
Long group = (Long) element.get("d"); |
||||
knowVO = new KnowVO(); |
||||
Node node1 = (Node) element.get("p"); |
||||
Long id1 = node1.id(); |
||||
String name1 = node1.get("name").asString(); |
||||
// String info1 = node1.get("info").asString();
|
||||
knowVO.setId(id1); |
||||
knowVO.setLabel(name1); |
||||
knowVO.setGroup(group); |
||||
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; |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue