package cn.zyzpp.repository.medical.node; import cn.zyzpp.entity.medical.Medical; import cn.zyzpp.entity.nodes.BotNode; import cn.zyzpp.entity.nodes.BotRelation; import cn.zyzpp.repository.medical.MedicalRepository; import cn.zyzpp.repository.medical.MsymptomRepository; import cn.zyzpp.repository.nodes.BotRelationRepository; import cn.zyzpp.repository.nodes.BotRepository; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.test.context.junit4.SpringRunner; import java.util.ArrayList; import java.util.List; /** * Create by [email protected] 2018/9/1/001 12:42 */ @RunWith(SpringRunner.class) @SpringBootTest public class BotNodeUpdata{ private Logger logger = LoggerFactory.getLogger(getClass()); //neo4j @Autowired BotRepository botRepository; @Autowired BotRelationRepository botRelationRepository; //mysql @Autowired MedicalRepository medicalRepository; @Autowired MsymptomRepository msymptomRepository; //关系 final String BRING = "bring"; @Test public void test() { int size = 1000;//每页1000条 Sort sort = new Sort(Sort.Direction.ASC, "id"); Pageable pageable = new PageRequest(0, size, sort); Page<Medical> medicalPage = getMedicals(pageable); //如果还有下一页 while (medicalPage.hasNext()) { medicalPage = getMedicals(pageable = pageable.next()); } logger.info("操作完成"); } private Page<Medical> getMedicals(Pageable pageable) { //先从数据库获取数据 Page<Medical> medicalPage = medicalRepository.findAll(pageable); List<Medical> content = medicalPage.getContent(); //遍历数据 for (Medical medical : content) { List<String> symptomList = medical.getSymptom_list(); //从neo4j数据库获取数据 List<BotRelation> botRelationList = botRelationRepository.findAllByMedical(medical.getName()); List<String> botString = new ArrayList<>();//备份症状集合 for (BotRelation botRelation: botRelationList){ botString.add(botRelation.getEndNode().getName()); } for (String symptom : symptomList){ //如果不存在该关系的话 if (!botString.contains(symptom)){ //看下数据库有没有节点 BotNode bot = botRepository.findAllByName(symptom); if (bot!=null){ BotNode node ; if (botRelationList.isEmpty()){ node = botRepository.findAllByName(medical.getName()); }else { node = botRelationList.get(0).getStartNode(); } //有的话连一下 BotRelation botRelation = new BotRelation(node,bot,BRING); botRelationRepository.save(botRelation); logger.info("成功更新:"+ node.getName()+" "+bot.getName()); } } } } return medicalPage; } }