HolderRelationV1ServiceImpl.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package com.winhc.service.impl;
  2. import com.winhc.common.enums.CompanyEnum;
  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.*;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.beans.factory.annotation.Qualifier;
  10. import org.springframework.stereotype.Service;
  11. import java.util.HashMap;
  12. import java.util.List;
  13. import java.util.Map;
  14. /**
  15. * @author π
  16. * @Description:股东关系 人->公司
  17. * @date 2021/1/11 10:03
  18. */
  19. @Slf4j
  20. @Service("holderRelationV1ServiceImpl")
  21. @AllArgsConstructor
  22. public class HolderRelationV1ServiceImpl implements RelationService {
  23. @Autowired
  24. @Qualifier("DriverV1")
  25. Driver driver;
  26. @Override
  27. public String save(List<Map<String, Object>> batch_list) {
  28. if (batch_list.isEmpty()) return null;
  29. long start = System.currentTimeMillis();
  30. Session session = driver.session();
  31. final String cql = "WITH {batch_list} AS batch_list \n" +
  32. "UNWIND batch_list AS row \n" +
  33. "MERGE(s:" + CompanyEnum.Lable.PERSON.code + "{person_id:row.start_id}) \n" +
  34. "SET s.name=row.start_name, s.person_id=row.start_id \n" +
  35. "SET s:" + CompanyUtils.getIncrPersonLabel() + " \n" +
  36. "MERGE(e:" + CompanyEnum.Lable.COMPANY.code + "{company_id:row.end_id}) \n" +
  37. "SET e.name=row.end_name, e.company_id=row.end_id \n" +
  38. "WITH s,e,row \n" +
  39. "MERGE(s)-[r:" + CompanyEnum.Lable.投资.code + "]->(e) \n" +
  40. "SET r.percent=row.percent, r.deleted=row.deleted \n";
  41. log.info("consumer size: {}, cql:{}", batch_list.size(), cql);
  42. String data = CompanyUtils.writeNeo4j(session, cql, new HashMap<String, Object>() {{
  43. put("batch_list", batch_list);
  44. }});
  45. session.close();
  46. log.info("class:{} | save size:{} | cost:{}", HolderRelationV1ServiceImpl.class.getSimpleName(), batch_list.size(), (System.currentTimeMillis() - start));
  47. return data;
  48. }
  49. }