package com.guozhi.bloodanalysis.service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.guozhi.bloodanalysis.entity.DataLineageInfo; import com.guozhi.bloodanalysis.mapper.DataLineageInfoMapper; import com.guozhi.bloodanalysis.mapper.MetaBloodAnalysisMapper; import com.guozhi.bloodanalysis.parser.SqlParser; import com.guozhi.bloodanalysis.utils.RedisUtils; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class BloodAnalysisService { @Autowired DataLineageInfoMapper dataLineageInfoMapper; @Autowired ApplicationContext applicationContext; @Value("${blood-analysis.pageNum}") Integer pageNum; @Value("${blood-analysis.pageSize}") Integer pageSize; @Value("${databaseUrl}") String databaseUrl; @Autowired MetaBloodAnalysisMapper mapper; @Autowired RedisUtils redisUtils; // @Autowired // HttpServletRequest request; @Async public void analysis(String dashUserName,String dashPassword) { redisUtils.set("startBloodAnalysis",true); try (CloseableHttpClient httpClient = HttpClients.createDefault()) { // 1. 创建 POST 请求 HttpGet get = new HttpGet(databaseUrl); // 2. 设置请求头(可选) get.setHeader("Content-Type", "application/json"); get.setHeader("dashUserName",dashUserName); get.setHeader("dashPassword",dashPassword); // 4. 执行请求 try (CloseableHttpResponse response = httpClient.execute(get)) { // 5. 获取响应 HttpEntity entity = response.getEntity(); if (entity != null) { String responseStr = EntityUtils.toString(entity); JSONObject obj = JSON.parseObject(responseStr); JSONObject data = obj.getJSONObject("data"); JSONArray totalList = data.getJSONArray("totalList"); List> list = new ArrayList<>(); if (totalList !=null && totalList.size()>0){ for (int i = 0; i < totalList.size(); i++) { JSONObject database = totalList.getJSONObject(i); Map map = new HashMap<>(); map.put(database.getInteger("id"),database.getString("type")); list.add(map); } mapper.deleteAllBloodData(); parse(pageNum,pageSize,list); } } } } catch (Exception e) { e.printStackTrace(); } finally { redisUtils.set("startBloodAnalysis",false); } } public void parse(Integer pageNum, Integer pageSize, List> databaseList) throws Exception { PageHelper.startPage(pageNum,pageSize); List list = dataLineageInfoMapper.search(); if (list != null && list.size()>0){ //访问dolphinscheduler接口,获取数据库名称以及对应的类型列表 for (DataLineageInfo dataLineageInfo : list) { SqlParser sqlParser = applicationContext.getBean(SqlParser.class); sqlParser.parse(dataLineageInfo,databaseList); } } if (list != null && list.size() == pageSize){ parse(pageNum+1,pageSize,databaseList); } } }