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);
}
}
}