PersonMergeImpl.java 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package com.winhc.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.winhc.service.RelationService;
  4. import com.winhc.utils.CompanyUtils;
  5. import lombok.AllArgsConstructor;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.neo4j.driver.Driver;
  8. import org.neo4j.driver.Session;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.beans.factory.annotation.Qualifier;
  11. import org.springframework.stereotype.Service;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. /**
  16. * @author π
  17. * @Description:股东关系 人->公司
  18. * @date 2021/1/11 10:03
  19. */
  20. @Slf4j
  21. @Service("personMergeImpl")
  22. @AllArgsConstructor
  23. public class PersonMergeImpl implements RelationService {
  24. @Autowired
  25. @Qualifier("DriverV1")
  26. Driver driver;
  27. @Override
  28. public String save(List<Map<String, Object>> batch_list) {
  29. if (batch_list.isEmpty()) return null;
  30. long start = System.currentTimeMillis();
  31. Session session = driver.session();
  32. final String cql =
  33. "\nWITH {batch_list} AS batch_list \n" +
  34. "UNWIND batch_list AS row \n" +
  35. "MATCH (m:个人{person_id:row.merge_human_pid})\n" +
  36. "MATCH (n:个人{person_id:row.deleted_human_pid})-[r]-(x:企业)\n" +
  37. "with m,n,r,x\n" +
  38. "CALL apoc.merge.relationship(m, TYPE(r), properties(r),{}, x,{}) YIELD rel\n" +
  39. "SET m:" + CompanyUtils.getIncrPersonLabel("新增") + "\n" +
  40. "SET n:" + CompanyUtils.getIncrPersonLabel("删除") + "\n" +
  41. "DELETE r";
  42. log.info("consumer size: {}, cql:{}", batch_list.size(), cql);
  43. String data = CompanyUtils.writeNeo4j(session, cql, new HashMap<String, Object>() {{
  44. put("batch_list", batch_list);
  45. }});
  46. session.close();
  47. log.info("class:{} | save size:{} | cost:{}", PersonMergeImpl.class.getSimpleName(), batch_list.size(), (System.currentTimeMillis() - start));
  48. return data;
  49. }
  50. }