package com.winhc.service.impl; import com.winhc.service.RelationService; import com.winhc.utils.CompanyUtils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.neo4j.driver.Driver; import org.neo4j.driver.Session; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author π * @Description:案件-新增关系 * @date 2021/5/17 10:03 */ @Slf4j @Service("caseRelationIncrImpl") @AllArgsConstructor public class CaseRelationIncrImpl implements RelationService { @Autowired @Qualifier("DriverV2") Driver driver; @Override public String save(List> batch_list) { if (batch_list.isEmpty()) return null; long start = System.currentTimeMillis(); Session session = driver.session(); final String cql = "\nWITH {batch_list} AS batch_list \n" + "UNWIND batch_list AS row \n" + " MERGE(s:CASE{case_id:row.start_id})\n" + " SET s.case_id = row.start_id\n" + " MERGE(m:CASE{case_id:row.end_id})\n" + " SET m.case_id = row.end_id\n" + " MERGE(s)-[r:RELATION]->(m)\n" + " SET r.connect_type=row.connect_type\n" ; // " WITH s,m\n" + // " CALL apoc.path.subgraphNodes(s, {maxLevel:-1}) YIELD node\n" + // " WITH node,s\n" + // " SET node.component_id = -id(s)\n" + // " SET node:" + CompanyUtils.getIncrPersonLabelV2("新增"); log.info("consumer size: {}, cql:{}", batch_list.size(), cql); String data = CompanyUtils.writeNeo4j(session, cql, new HashMap() {{ put("batch_list", batch_list); }}); session.close(); log.info("class:{} | save size:{} | cost:{}", CaseRelationIncrImpl.class.getSimpleName(), batch_list.size(), (System.currentTimeMillis() - start)); return data; } }