package net.tccn.service; import net.tccn.base.JBean; import net.tccn.base.Kv; import net.tccn.base.MetaKit; import net.tccn.dbq.Field; import net.tccn.dbq.jdbc.api.DbAccount; import net.tccn.meta.MetaLink; import net.tccn.meta.MetaService; import net.tccn.meta.MetaTable; import net.tccn.plat.SysPlat; import org.redkale.net.http.RestMapping; import org.redkale.net.http.RestParam; import org.redkale.net.http.RestService; import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.stream.Collectors; /** * @author: liangxianyou at 2018/10/17 16:59. */ @RestService(name = "meta", automapping = true, comment = "元数据服务") public class MetadataService extends BaseService { //arango @Resource private QtaskService qtaskService; public MetaTable findMetaTable(String name, String token) { return getT("meta_cols_" + name + token, MetaTable.class, () -> { SysPlat sysPlat = qtaskService.getSysPlat(token); if (sysPlat == null) { logger.log(Level.INFO, "平台信息未知"); throw new IllegalArgumentException("平台信息未知"); } return MetaKit.getMetaTables() .stream() .filter(x -> { //fixme: 平台过滤 return x.getName().equals(name); }) .findAny() .get(); }); } @RestMapping(name = "list_cfg", auth = false, comment = "内容列表配置") public JBean listCfg(String key, @RestParam(name = "platToken") String token) { JBean jBean = JBean.by(0, ""); MetaService metaService = MetaKit.getMetaService(key); fixme: jBean.set(0, "", MetaKit.builderCfg.apply(metaService)); return jBean; } @RestMapping(name = "cfg", auth = false, comment = " 功能配置") public JBean cfg(String name, @RestParam(name = "platToken") String token) { JBean jBean = JBean.by(0, ""); jBean.set(0, "", MetaKit.cfg(name)); return jBean; } //----------- 数据平台 --------------- @RestMapping(name = "db_plat_list", comment = "数据平台") public List dbPlatList() { return MetaKit.getDbPlats(); } //----------- 元数据管理 --------------- @RestMapping(name = "tablelist", comment = "table列表") public JBean tableList(@RestParam(name = "platToken") String token, String catalog, String dbPlatId, String name) { JBean jBean = new JBean(); List list = MetaKit.getMetaTables().stream().filter(x -> (isEmpty.test(catalog) || catalog.equals(x.getCatalog())) && (isEmpty.test(dbPlatId) || dbPlatId.equals(x.getDbPlatId())) && (isEmpty.test(name) || x.getName().contains(name)) && (isEmpty.test(token) || x.getSysPlatId().equals(platId(token))) ).map(x -> Kv.of("name", x.getName()) .set("comment", x.getComment()) .set("catalog", x.getCatalog()) .set("alias", x.getAlias()) .set("dbPlatId", x.getDbPlatId()) .set("linkCount", MetaKit.getMetaLinks().stream().filter(link -> { // 关联表数量 String[] tables = link.getTables(); return x.getAlias().equals(tables[0]) || x.getAlias().equals(tables[1]); }).count()) ).collect(Collectors.toList()); jBean.setBody(list); return jBean; } @RestMapping(name = "service_list", comment = "业务列表") public JBean serviceList(@RestParam(name = "platToken") String token) { JBean jBean = new JBean(); List list = MetaKit.getMetaServices(); jBean.setBody(list); return jBean; } @RestMapping(name = "tableinfo", comment = "table详情") public JBean tableInfo(@RestParam(name = "platToken") String token, String name, String alias) { JBean jBean = new JBean(); MetaTable metaTable = null; if (!isEmpty.test(name)) { metaTable = findMetaTable(name, token); } if (metaTable == null && !isEmpty.test(alias)) { metaTable = MetaKit.getMetaTableByAlias(alias); } return jBean.setBody(metaTable); } @RestMapping(name = "service_save", comment = "service信息保存") public JBean serviceSave(@RestParam(name = "platToken") String token, @RestParam(name = "service") String serviceBean) { JBean jBean = new JBean(); MetaService service = gson.fromJson(serviceBean, MetaService.class); do { // 标识码非空校验 if (isEmpty.test(service.getTable())) { jBean.set(-1, "请选择业务主表"); break; } // 标识码非空校验 if (isEmpty.test(service.getName())) { jBean.set(-1, "业务标识码无效"); break; } // 标识码重复校验 MetaService metaService = MetaKit.getMetaService(service.getName()); if (metaService != null && !metaService.getKey().equals(service.getKey())) { jBean.set(-1, "业务标识码被占用,修改业务标识码重试"); break; } if (service.getKey() != null) { service.update(); } else { service.save(); } MetaKit.reload(MetaService.class); } while (false); return jBean; } @RestMapping(name = "service_info", comment = "service基本信息") public JBean serviceInfo(@RestParam(name = "platToken") String token, String name) { MetaService metaService = MetaKit.getMetaService(name); return JBean.by(0, "", metaService); } @RestMapping(name = "service_detail", comment = "service详情") public JBean serviceDetail(@RestParam(name = "platToken") String token, String name) { MetaService metaService = MetaKit.getMetaService(name); Kv detail = MetaKit.buildeDetail(metaService); return JBean.by(0, "", detail); } //修改item的排序 @RestMapping(name = "itemsort", comment = "字段排序") public String[] itemSortSave(String serviceKey , String[] items, @RestParam(name = "platToken") String token) { MetaTable metaTable = findMetaTable(serviceKey, token); MetaKit.sortItem.apply(metaTable, items); metaTable.update(); return items; } @RestMapping(name = "itemupdate", comment = "字段修改") public List itemUpdate(String serviceKey , List items, @RestParam(name = "platToken") String token) { MetaTable metaTable = findMetaTable(serviceKey, token); MetaKit.itemUpdate.apply(metaTable, items); metaTable.update(); return items; } @RestMapping(name = "showsort", comment = "展示字段修改") public List showSort(String serviceKey , List items, @RestParam(name = "platToken") String token) { if (items == null || items.size() == 0) return null; MetaService metaService = MetaKit.getMetaService(serviceKey); metaService.setShows(items); metaService.update(); return items; } @RestMapping(name = "exportsort", comment = "导出字段排序保存") public List exportSort(String serviceKey , List items, @RestParam(name = "platToken") String token) { if (items == null || items.size() == 0) return null; MetaService metaService = MetaKit.getMetaService(serviceKey); metaService.setExports(items); metaService.update(); return items; } @RestMapping(name = "importsort", comment = "导入字段保存") public List importSort(String serviceKey , List items, @RestParam(name = "platToken") String token) { if (isEmpty.test(items)) return null; MetaTable metaTable = findMetaTable(serviceKey, token); //fixme: metaTable.setImports(items); metaTable.update(); return items; } @RestMapping(name = "dbplatupdate", comment = "数据平台修改") public JBean dbPlatUpdate(MetaTable metaTable, @RestParam(name = "platToken") String token) { MetaTable _metaTable = MetaKit.getMetaTableByKey(metaTable.getKey()); _metaTable.setComment(metaTable.getComment()); _metaTable.setCatalog(metaTable.getCatalog()); _metaTable.setDbPlatId(metaTable.getDbPlatId()); _metaTable.setCatalog(metaTable.getCatalog()); _metaTable.update(); return JBean.by(0, ""); } @RestMapping(name = "filter_update", comment = "查询配置修改") public JBean filterUpdate(@RestParam(name = "serviceKey") String serviceKey, @RestParam(name = "filters") String filters, @RestParam(name = "platToken") String token) { List _filters = gson.fromJson(filters, List.class); MetaService metaService = MetaKit.getMetaService(serviceKey); metaService.setFilters(_filters); metaService.update(); return JBean.by(0, ""); } @RestMapping(name = "table_link_list", comment = "实体表,包含link信息的列表,(metalink 管理页面使用)") public JBean tableLinkList(@RestParam(name = "platToken") String token) { JBean jBean = new JBean(); List list = MetaKit.getMetaTables().stream().filter(x -> (isEmpty.test(token) || x.getSysPlatId().equals(platId(token))) ).map(x -> { Kv kv = Kv.of("name", x.getName()) .set("comment", x.getComment()) .set("alias", x.getAlias()) .set("linkCount", 0); //关联表数量 long count = MetaKit.getMetaLinks().stream().filter(link -> { String[] tables = link.getTables(); return x.getAlias().equals(tables[0]) || x.getAlias().equals(tables[1]); }).count(); kv.set("linkCount", count); return kv; }).collect(Collectors.toList()); return jBean.setBody(list); } @RestMapping(name = "link_info_list", comment = "关联信息") public JBean linkInfo(String alias) { JBean jBean = new JBean(); //MetaTable metaTable = MetaKit.getMetaTableByAlias(alias); List list = MetaKit.getMetaLinks().stream().filter(x -> x.getTables()[0].equals(alias) || x.getTables()[1].equals(alias) ).map(x -> { MetaTable linkTable = MetaKit.getMetaTableByAlias(x.getTables()[0].equals(alias) ? x.getTables()[1] : x.getTables()[0]); Kv kv = Kv.of("name", linkTable.getName()) .set("alias", linkTable.getAlias()) .set("comment", linkTable.getComment()) .set("linkSize", x.getLink().size()) .set("link", x.getLink()); return kv; }).collect(Collectors.toList()); return jBean.setBody(list); } @RestMapping(name = "link_list", comment = "实体关系列表") public JBean linkList(String alias) { JBean jBean = new JBean(); List links = MetaKit.getMetaLinks(); if (!isEmpty.test(alias)) { links = links.stream() .filter(x -> x.getTables()[0].equals(alias) || x.getTables()[1].equals(alias)) .collect(Collectors.toList()); } return jBean.setBody(links); } @RestMapping(name = "link_save", comment = "实体关系列表") public JBean linkSave(MetaLink link, @RestParam(name = "platToken") String token) { if (link.getKey() != null) { link.find(String.format("UPDATE '%s' WITH { link:null } IN MetaLink", link.getKey()), Map.class); //避免删除属性无效 link.update(); } else { link.save(); } MetaKit.reload(MetaLink.class); return JBean.OK; } @RestMapping(name = "plat_list", comment = "平台列表") public JBean platList() { JBean jBean = new JBean(); List plats = SysPlat.dao.find(); jBean.setBody(plats); return jBean; } }