package com.celnet.datadump.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.celnet.datadump.entity.DataField; import com.celnet.datadump.mapper.DataFieldMapper; import com.celnet.datadump.service.DataFieldService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; /** *

* api字段 服务实现类 *

* * @author Red * @since 2022-12-20 */ @Service public class DataFieldServiceImpl extends ServiceImpl implements DataFieldService { @Override public Boolean hasDeleted(String api) { QueryWrapper qw = new QueryWrapper<>(); qw.eq("api", api) .eq("field", "IsDeleted") .select("id"); DataField one = getOne(qw); return one != null; } @Override public void tableRelation(){ QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.lambda().isNotNull(DataField::getReferenceTo). ne(DataField::getReferenceTo,""). ne(DataField::getReferenceTo,"data_picklist"). ne(DataField::getReferenceTo,"RecordType"); List list = list(queryWrapper); int[][] connections = new int[list.size()][list.size()]; List owner = new ArrayList<>(); for (int i=0;i list) { int n = connections.length; int[] levels = new int[n]; levels[0] = 0; boolean[] visited = new boolean[n]; Stack stack = new Stack<>(); stack.push(0); // 假设以0号表作为根节点 visited[0] = true; // 标记根节点已访问过 while (!stack.isEmpty()) { int curr = stack.peek(); boolean foundUnvisitedNeighbor = false; for (int i = 0; i < n; i++) { if (connections[curr][i] == 1 && !visited[i]) { foundUnvisitedNeighbor = true; stack.push(i); visited[i] = true; // 标记已访问 levels[i] = levels[curr] + 1; break; } } if (!foundUnvisitedNeighbor) { stack.pop(); } } Map map = new HashMap<>(); // 输出每张表所处的层数 for (int i = 0; i < n; i++) { String api = list.get(i).getApi(); Integer l = levels[i]; if (map.get(api) != null){ if (map.get(api)< l){ map.put(api, l); } }else { map.put(api, l); } } for (String entry : map.keySet()) { Integer mapValue = map.get(entry); System.out.println("表"+entry + "的层级是:" + mapValue); } } }