PersonMergeImpl.java 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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.stereotype.Service;
  10. import java.util.HashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13. /**
  14. * @author π
  15. * @Description:股东关系 人->公司
  16. * @date 2021/1/11 10:03
  17. */
  18. @Slf4j
  19. @Service("personMergeImpl")
  20. @AllArgsConstructor
  21. public class PersonMergeImpl implements RelationService {
  22. private final Driver driver;
  23. @Override
  24. public String save(List<Map<String, Object>> batch_list) {
  25. if (batch_list.isEmpty()) return null;
  26. long start = System.currentTimeMillis();
  27. Session session = driver.session();
  28. final String cql =
  29. "\nWITH {batch_list} AS batch_list \n" +
  30. "UNWIND batch_list AS row \n" +
  31. "MATCH (m:个人{person_id:row.merge_human_pid})\n" +
  32. "MATCH (n:个人{person_id:row.deleted_human_pid})-[r]-(x:企业)\n" +
  33. "with m,n,r,x\n" +
  34. "CALL apoc.merge.relationship(m, TYPE(r), properties(r),{}, x,{}) YIELD rel\n" +
  35. "SET m:" + CompanyUtils.getIncrPersonLabel("新增") + "\n" +
  36. "SET n:" + CompanyUtils.getIncrPersonLabel("删除") + "\n" +
  37. "DELETE r";
  38. log.info("consumer size: {}, cql:{}", batch_list.size(), cql);
  39. String data = CompanyUtils.writeNeo4j(session, cql, new HashMap<String, Object>() {{
  40. put("batch_list", batch_list);
  41. }});
  42. session.close();
  43. log.info("class:{} | save size:{} | cost:{}", PersonMergeImpl.class.getSimpleName(), batch_list.size(), (System.currentTimeMillis() - start));
  44. return data;
  45. }
  46. }