123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515 |
- package com.yihu.hos.crawler.service;
- import com.fasterxml.jackson.databind.JsonNode;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.node.ArrayNode;
- import com.fasterxml.jackson.databind.node.ObjectNode;
- import com.yihu.hos.core.datatype.StringUtil;
- import com.yihu.hos.crawler.dao.CrawlerDatasetDao;
- import com.yihu.hos.crawler.dao.CrawlerFlowDao;
- import com.yihu.hos.crawler.dao.CrawlerFlowHeadDao;
- import com.yihu.hos.crawler.model.flow.CrawlerDataSetModel;
- import com.yihu.hos.crawler.model.flow.CrawlerFlowHeadModel;
- import com.yihu.hos.crawler.model.flow.CrawlerFlowModel;
- import com.yihu.hos.crawler.model.flow.resultModel.*;
- import com.yihu.hos.datacollect.model.DtoJobDataset;
- import com.yihu.hos.standard.model.adapter.AdapterDatasetModel;
- import com.yihu.hos.standard.model.adapter.AdapterMetadataModel;
- import com.yihu.hos.standard.model.adapter.AdapterSchemeVersionModel;
- import com.yihu.hos.standard.model.adapter.resultModel.AdapterSchemeResultModel;
- import com.yihu.hos.standard.model.adapter.resultModel.AdapterSchemeVersionResultDetailModel;
- import com.yihu.hos.standard.service.adapter.AdapterDatasetService;
- import com.yihu.hos.standard.service.adapter.AdapterMetadataService;
- import com.yihu.hos.standard.service.adapter.AdapterSchemeService;
- import com.yihu.hos.standard.service.adapter.AdapterSchemeVersionService;
- import com.yihu.hos.standard.service.bo.AdapterVersion;
- import com.yihu.hos.web.framework.constrant.SqlConstants;
- import com.yihu.hos.web.framework.model.ActionResult;
- import com.yihu.hos.web.framework.model.DetailModelResult;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.io.IOException;
- import java.util.*;
- @Transactional
- @Service("CrawlerService")
- public class CrawlerService {
- public static final String BEAN_ID = "CrawlerService";
- @Resource(name = AdapterSchemeVersionService.BEAN_ID)
- private AdapterSchemeVersionService adapterSchemeVersionService;
- @Resource(name = AdapterDatasetService.BEAN_ID)
- private AdapterDatasetService adapterDatasetService;
- @Resource(name = CrawlerDatasetDao.BEAN_ID)
- private CrawlerDatasetDao crawlerDatasetDao;
- @Resource(name = CrawlerFlowDao.BEAN_ID)
- private CrawlerFlowDao crawlerFlowDao;
- @Resource(name = CrawlerFlowHeadDao.BEAN_ID)
- private CrawlerFlowHeadDao crawlerFlowHeadDao;
- @Resource(name = AdapterMetadataService.BEAN_ID)
- private AdapterMetadataService adapterMetadataService;
- private static Map<Integer, List<FlowLines>> lineCache = new HashMap<>();
- @Resource(name = AdapterSchemeService.BEAN_ID)
- private AdapterSchemeService adapterSchemeService;
- @Autowired
- private ObjectMapper objectMapper;
- public static Map<Integer, List<FlowLines>> getLineCache() {
- return lineCache;
- }
- /**
- * 保存编排映射关系
- *
- * @param version 适配方案版本
- * @param json 映射数据
- * @return
- * @throws Exception
- */
- public ActionResult saveDataSetRelation(String version, String json) throws Exception {
- ObjectNode root = objectMapper.readValue(json,ObjectNode.class);
- ArrayNode jsonList = (ArrayNode) root.get("lines");
- ArrayNode entrances = (ArrayNode) root.get("entrances");
- AdapterSchemeVersionModel versionModel = (AdapterSchemeVersionModel) adapterSchemeVersionService.get(Integer.valueOf(version));
- if (jsonList != null && jsonList.size() > 0) {
- // 删除旧关联关系
- crawlerFlowDao.deleteCrawlerFlowList(versionModel.getId());
- for (JsonNode obj : jsonList) {
- String from = obj.get("from").toString();
- String to = obj.get("to").toString();
- String fromPort = obj.get("fromPort").toString();
- String toPort = obj.get("toPort").toString();
- // 保存编排关系
- CrawlerFlowModel crawlerFlow = new CrawlerFlowModel();
- crawlerFlow.setDatasetCode(to);
- crawlerFlow.setInputDatasetCode(from);
- crawlerFlow.setMetadataCode(toPort);
- crawlerFlow.setInputMetadataCode(fromPort);
- crawlerFlow.setSchemeVersionId(versionModel.getId());
- crawlerFlowDao.saveEntity(crawlerFlow);
- }
- // 删除编排头部信息
- crawlerFlowHeadDao.deleteCrawlerFlowHeadList(versionModel.getId());
- for (JsonNode obj : entrances) {
- String dataSet = obj.get("dataSet").toString();
- String meta = obj.get("meta").toString();
- // 保存入口数据集
- CrawlerFlowHeadModel headModel = new CrawlerFlowHeadModel();
- headModel.setSchemeVersionId(versionModel.getId());
- headModel.setDatasetCode(dataSet);
- headModel.setMetadataCode(meta);
- crawlerFlowHeadDao.saveEntity(headModel);
- }
- }
- return new ActionResult(true, "保存成功!");
- }
- /**
- * 获取任务编排数据集列表
- *
- * @param schemeVersionId
- * @return
- * @throws Exception
- */
- public DetailModelResult getSchemeDataset(Integer schemeVersionId, String datasetName) throws Exception {
- AdapterSchemeVersionModel versionModel = (AdapterSchemeVersionModel) adapterSchemeVersionService.get(schemeVersionId);
- //获取适配数据集总和
- Map<String, Object> map = new HashMap<String, Object>();
- String condition = null;
- if (datasetName != null && !"".equals(datasetName)) {
- map.put("name", datasetName);
- condition = objectMapper.writeValueAsString(condition);
- }
- List<AdapterDatasetModel> adapterDatasetModelList = adapterDatasetService.getDatasetList(AdapterDatasetModel.class, versionModel.getVersion(), condition, null, null, null);
- // 筛选掉 未适配数据
- List<AdapterDatasetModel> nAdapterDataSetModelList = new ArrayList<>();
- for (AdapterDatasetModel datasetModel : adapterDatasetModelList) {
- if (datasetModel.getAdapterDatasetId() != null && datasetModel.getAdapterDatasetName() != null && datasetModel.getAdapterDatasetCode() != null) {
- nAdapterDataSetModelList.add(datasetModel);
- }
- }
- //获取编排数据集
- List<CrawlerDataSetModel> crawlerDataset = crawlerDatasetDao.getCrawlerDatasetList(versionModel.getId());
- DetailModelResult re = new DetailModelResult();
- List<CrawlerDatasetResultDetailModel> list = new ArrayList<>();
- for (AdapterDatasetModel datasetModel : nAdapterDataSetModelList) {
- if (!StringUtil.isStrEmpty(datasetModel.getAdapterDatasetCode())) {
- List<AdapterMetadataModel> metadatas = adapterMetadataService.getAdapterMetadataByDataset(versionModel.getVersion(), datasetModel.getStdDatasetId());
- if (metadatas != null && metadatas.size() > 0) {
- CrawlerDatasetResultDetailModel obj = new CrawlerDatasetResultDetailModel();
- obj.setSchemeVersionId(schemeVersionId);
- obj.setDatasetId(datasetModel.getStdDatasetId());
- obj.setDatasetCode(datasetModel.getStdDatasetCode());
- obj.setDatasetName(datasetModel.getStdDatasetName());
- obj.setSchemeId(datasetModel.getSchemeId());
- if (crawlerDataset != null && crawlerDataset.size() > 0) {
- for (CrawlerDataSetModel cDataSet : crawlerDataset) {
- if (cDataSet.getDatasetId().equals(datasetModel.getStdDatasetId())) {
- obj.setSchemeVersionId(cDataSet.getSchemeVersionId());
- obj.setChecked("1");
- break;
- }
- }
- }
- list.add(obj);
- }
- }
- }
- re.setDetailModelList(list);
- return re;
- }
- /**
- * 保存任务编排数据
- *
- * @param json
- * @param rows
- * @param page @return
- * @throws Exception
- */
- public void saveJobData(String json, Integer rows, Integer page) throws Exception {
- ArrayNode jsonList = objectMapper.readValue(json,ArrayNode.class);
- //清空当页数据
- deleteCurrentPage(rows, page);
- for (JsonNode obj : jsonList) {
- if (obj.has("schemeId") && obj.has("versionId")) {
- String schemeId = obj.get("schemeId").toString();
- String versionId = obj.get("versionId").toString();
- AdapterSchemeVersionModel versionModel = (AdapterSchemeVersionModel) adapterSchemeVersionService.get(Integer.valueOf(versionId));
- if (versionModel != null) {
- AdapterVersion adapterVersion = new AdapterVersion(versionModel.getVersion());
- //删除已存在的数据集
- crawlerDatasetDao.deleteCrawlerDatasetList(versionModel.getId());
- List<AdapterDatasetModel> adapterDatasetModelList;
- //根据id字符串获取编排数据集
- if (obj.has("dataSets")) {
- List<Integer> newDatasetIdList = new ArrayList<>();
- String dataSetStr = obj.get("dataSets").toString();
- if (StringUtils.isNotBlank(dataSetStr)) {
- String[] IdList = dataSetStr.split(",");
- for (String aIdList : IdList) {
- if (!Objects.equals(aIdList, "")) {
- Integer DaSetId = Integer.valueOf(aIdList);
- newDatasetIdList.add(DaSetId);
- }
- }
- }
- adapterDatasetModelList = adapterDatasetService.getListByAdapterDatasetIdList(adapterVersion, newDatasetIdList);
- for (AdapterDatasetModel model : adapterDatasetModelList) {
- CrawlerDataSetModel dataSetModel = new CrawlerDataSetModel();
- dataSetModel.setSchemeId(Integer.valueOf(schemeId));
- dataSetModel.setSchemeVersionId(versionModel.getId());
- dataSetModel.setDatasetId(model.getStdDatasetId());
- dataSetModel.setDatasetCode(model.getStdDatasetCode());
- dataSetModel.setDatasetName(model.getStdDatasetName());
- crawlerDatasetDao.saveEntity(dataSetModel);
- }
- }
- //如果保存传入编排映射关系,进行保存操作
- if (obj.has("relation") && !Objects.equals(obj.get("relation").toString(), "")) {
- saveDataSetRelation(versionId, obj.get("relation").toString());
- }
- }
- }
- }
- }
- public List<FlowEntrance> getFlowEntrances(Integer schemeVersionId) {
- List<FlowEntrance> entrances = new ArrayList<>();
- List<CrawlerFlowHeadModel> modelList = crawlerFlowHeadDao.getCrawlerFlowHeadList(schemeVersionId);
- for (CrawlerFlowHeadModel headModel : modelList) {
- FlowEntrance entrance = new FlowEntrance();
- entrance.setDataSet(headModel.getDatasetCode());
- entrance.setMeta(headModel.getMetadataCode());
- entrances.add(entrance);
- }
- return entrances;
- }
- public List<FlowLines> getFlowLines(Integer schemeVersionId) {
- List<FlowLines> lines = new ArrayList<>();
- List<CrawlerFlowModel> modelList = crawlerFlowDao.getCrawlerFlowList(schemeVersionId);
- for (CrawlerFlowModel model : modelList) {
- FlowLines line = new FlowLines();
- line.setFrom(model.getInputDatasetCode());
- line.setFromPort(model.getInputMetadataCode());
- line.setTo(model.getDatasetCode());
- line.setToPort(model.getMetadataCode());
- lines.add(line);
- }
- return lines;
- }
- /**
- * 删除编排数据
- *
- * @param version
- */
- @Transactional
- public String deleteJobData(String version) {
- try {
- AdapterSchemeVersionModel versionModel = (AdapterSchemeVersionModel) adapterSchemeVersionService.get(Integer.valueOf(version));
- if (versionModel == null || versionModel.getId() == null) {
- return "删除失败";
- }
- //删除对应表记录
- crawlerDatasetDao.deleteCrawlerDatasetList(versionModel.getId());
- crawlerFlowHeadDao.deleteCrawlerFlowHeadList(versionModel.getId());
- crawlerFlowDao.deleteCrawlerFlowList(versionModel.getId());
- } catch (Exception e) {
- e.printStackTrace();
- return "删除失败";
- }
- return SqlConstants.EMPTY;
- }
- /**
- * 数据集列表
- *
- * @param limit rows
- * @param offset page
- * @return
- */
- public DetailModelResult getDataSetResult(Integer limit, Integer offset) {
- try {
- StringBuffer stringBuffer = new StringBuffer();
- String sql = "SELECT 1 as status, a.scheme_id, a.scheme_version_id, GROUP_CONCAT(a.dataset_id SEPARATOR ',') AS datasetId, GROUP_CONCAT(a.dataset_name SEPARATOR ',') AS datasetName" +
- " FROM crawler_dataset a " +
- " GROUP BY a.scheme_id, a.scheme_version_id ";
- stringBuffer.append(sql);
- if (limit != null && offset != null) {
- if (limit > 0 && offset > 0) {
- stringBuffer.append(" LIMIT " + (offset - 1) * limit + "," + limit);
- }
- }
- stringBuffer.append(" ;");
- Integer total = crawlerDatasetDao.getTotalRows();
- List<Map<String, Object>> list = crawlerDatasetDao.queryListBySql(stringBuffer.toString());
- DetailModelResult detailModelResult = DetailModelResult.success("获取数据集成功");
- detailModelResult.setDetailModelList(list);
- detailModelResult.setTotalCount(total);
- return detailModelResult;
- } catch (Exception e) {
- e.printStackTrace();
- return DetailModelResult.error("获取数据集失败");
- }
- }
- /**
- * 获取编排已选择的适配数据集
- *
- * @param schemeVersionId
- * @param datasetIdStr
- * @return
- * @throws Exception
- */
- public List<MappingDataset> getSchemeDatasetByChecked(Integer schemeVersionId, String datasetIdStr) throws Exception {
- AdapterSchemeVersionModel versionModel = (AdapterSchemeVersionModel) adapterSchemeVersionService.get(schemeVersionId);
- //获取适配数据集总和
- AdapterVersion adapterVersion = new AdapterVersion(versionModel.getVersion());
- List<AdapterDatasetModel> adapterDatasetModelList = new ArrayList<>();
- if (datasetIdStr != null && !"".equals(datasetIdStr)) {
- String[] datasetIdList = datasetIdStr.split(",");
- List<Integer> newDatasetIdList = new ArrayList<>();
- for (String datasetId : datasetIdList) {
- if (!StringUtil.isStrEmpty(datasetId)) {
- Integer newDatasetId = Integer.parseInt(datasetId);
- newDatasetIdList.add(newDatasetId);
- }
- }
- adapterDatasetModelList = adapterDatasetService.getListByAdapterDatasetIdList(adapterVersion, newDatasetIdList);
- } else {
- adapterDatasetModelList = adapterDatasetService.getDatasetList(AdapterDatasetModel.class, versionModel.getVersion(), null, null, null, null);
- }
- //获取编排数据集
- List<CrawlerDataSetModel> crawlerDataset = crawlerDatasetDao.getCrawlerDatasetList(versionModel.getId());
- List<MappingDataset> list = new ArrayList<>();
- for (AdapterDatasetModel datasetModel : adapterDatasetModelList) {
- // if (crawlerDataset != null && crawlerDataset.size() > 0) {
- MappingDataset obj = new MappingDataset();
- // for (CrawlerDataSetModel cDataSet : crawlerDataset) {
- if (!StringUtil.isStrEmpty(datasetModel.getAdapterDatasetCode())) {
- List<MappingMetadata> metadatas = getMappingMetaDatasByDataset(versionModel.getVersion(), datasetModel.getStdDatasetId());
- obj.setId(datasetModel.getStdDatasetId());
- obj.setCode(datasetModel.getStdDatasetCode());
- obj.setName(datasetModel.getStdDatasetName());
- obj.setData(metadatas);
- // break;
- }
- // }
- list.add(obj);
- // }
- }
- return list;
- }
- /**
- * 返回前端映射数据元信息
- *
- * @param adapterVersion 适配版本号
- * @param dataSetId 适配数据集ID
- * @return
- */
- public List<MappingMetadata> getMappingMetaDatasByDataset(String adapterVersion, Integer dataSetId) {
- List<AdapterMetadataModel> adapterMetadataModels = adapterMetadataService.getAdapterMetadataByDataset(adapterVersion, dataSetId);
- AdapterDatasetModel adapterDatasetModel = adapterMetadataService.getAdapterDataset(adapterVersion, dataSetId);
- List<MappingMetadata> resultList = new ArrayList<>();
- if (adapterMetadataModels != null && adapterMetadataModels.size() > 0) {
- for (AdapterMetadataModel metadataModel : adapterMetadataModels) {
- if (!StringUtil.isStrEmpty(metadataModel.getAdapterMetadataCode())) {
- MappingMetadata metadata = new MappingMetadata();
- metadata.setId(metadataModel.getAdapterMetadataId());
- metadata.setCode(adapterDatasetModel.getAdapterDatasetCode() + "-" + metadataModel.getAdapterMetadataCode());
- metadata.setName(metadataModel.getAdapterMetadataName());
- resultList.add(metadata);
- }
- }
- }
- return resultList;
- }
- /**
- * 获取适配方案映射数据
- *
- * @param schemeVersionId
- * @param datasetIdStr
- * @return
- */
- public String getRelations(Integer schemeVersionId, String datasetIdStr, String lineStr) {
- ObjectNode jsonObject = objectMapper.createObjectNode();
- try {
- List<MappingDataset> datasets = getSchemeDatasetByChecked(schemeVersionId, datasetIdStr);
- List<FlowLines> lines = getFlowLines(schemeVersionId);
- if (StringUtil.isEmpty(lineStr)) {
- lines = getFlowLines(schemeVersionId);
- } else {
- lines = lineCache.get(schemeVersionId);
- }
- jsonObject.set("tables", objectMapper.valueToTree(datasets));
- jsonObject.set("rels", objectMapper.valueToTree(lines));
- } catch (Exception e) {
- e.printStackTrace();
- }
- return jsonObject.toString();
- }
- public void setLinesCache(Integer schemeVersionId, String lines) throws IOException {
- ObjectNode rootNode = objectMapper.readValue(lines, ObjectNode.class);
- String lineJson = rootNode.get("lines").toString();
- List<FlowLines> line = objectMapper.readValue(lineJson, List.class);
- lineCache.put(schemeVersionId, line);
- }
- public void deleteCurrentPage(Integer rows, Integer page) {
- DetailModelResult currentResut = getDataSetResult(rows, page);
- List<Map<String, Object>> list = currentResut.getDetailModelList();
- for (Map<String, Object> map : list) {
- String version = String.valueOf(map.get("scheme_version_id"));
- deleteJobData(version);
- }
- }
- public DetailModelResult getDataSetSavedResult(Integer version) {
- try {
- DetailModelResult checkedSchemeLs = getDataSetResult(null, null);
- List<Map<String, Object>> list = checkedSchemeLs.getDetailModelList();
- for (Map<String, Object> objectMap : list) {
- String versionID = objectMap.get("scheme_version_id").toString();
- if (versionID.equals(version.toString())) {
- String datasetIdStr = objectMap.get("dataSetId").toString();
- List<MappingDataset> datasetList = getSchemeDatasetByChecked(version, datasetIdStr);
- List<DtoJobDataset> rsJobDatasetList = new ArrayList<>();
- for (MappingDataset dataset : datasetList) {
- DtoJobDataset rsJobDataset = new DtoJobDataset();
- rsJobDataset.setJobDatasetId(dataset.getId().toString());
- rsJobDataset.setJobDatasetName(dataset.getName());
- rsJobDataset.setJobDatasetCode(dataset.getCode());
- rsJobDatasetList.add(rsJobDataset);
- }
- DetailModelResult result = new DetailModelResult();
- result.setDetailModelList(rsJobDatasetList);
- return result;
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- return DetailModelResult.error("获取已存任务编排数据集错误");
- }
- return DetailModelResult.error("获取已存任务编排数据集错误");
- }
- public DetailModelResult getSchemeSavedResult() {
- DetailModelResult allScheme = adapterSchemeService.getAdapterSchemeResultModelList();
- List<AdapterSchemeResultModel> allSchemeLs = allScheme.getDetailModelList();
- if (allSchemeLs != null && allSchemeLs.size() > 0) {
- DetailModelResult checkedSchemeLs = getDataSetResult(null, null);
- List<Map<String, Object>> list = checkedSchemeLs.getDetailModelList();
- Set<String> schemeIdSets = new HashSet<>();
- Set<String> versionSets = new HashSet<>();
- DetailModelResult result = new DetailModelResult();
- List<AdapterSchemeVersionResultDetailModel> versionModelList = new ArrayList<>();
- if (list != null && list.size() > 0) {
- for (Map<String, Object> objectMap : list) {
- if (objectMap.get("scheme_id") != null && objectMap.get("scheme_version_id") != null) {
- schemeIdSets.add(objectMap.get("scheme_id").toString());
- versionSets.add(objectMap.get("scheme_version_id").toString());
- }
- }
- if (schemeIdSets.size() > 0 && versionSets.size() > 0) {
- for (AdapterSchemeResultModel schemeL : allSchemeLs) {
- String schemeID = schemeL.getSchemeId().toString();
- if (schemeIdSets.contains(schemeID)) {
- String name = schemeL.getName();
- List<AdapterSchemeVersionModel> versionModels = schemeL.getVersionList();
- for (AdapterSchemeVersionModel versionModel : versionModels) {
- String versionID = versionModel.getId().toString();
- if (versionSets.contains(versionID)) {
- AdapterSchemeVersionResultDetailModel model = new AdapterSchemeVersionResultDetailModel();
- model.setSchemeName(name);
- model.setId(versionModel.getId());
- model.setName(versionModel.getName());
- model.setSchemeId(versionModel.getSchemeId());
- model.setBaseVersion(versionModel.getBaseVersion());
- model.setPath(versionModel.getPath());
- model.setPublishStatus(versionModel.getPublishStatus());
- model.setPublishTime(versionModel.getPublishTime());
- model.setPublishUser(versionModel.getPublishUser());
- model.setVersion(versionModel.getVersion());
- versionModelList.add(model);
- }
- }
- }
- }
- result.setDetailModelList(versionModelList);
- return result;
- }
- }
- }
- return DetailModelResult.error("获取已编排任务适配方案失败!");
- }
- }
|