|
|
@@ -66,6 +66,93 @@ public class PanelInstanceServiceImpl extends BaseService<PanelInstance> impleme
|
|
|
return panelInstanceDao.update(panelInstance);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public int updatePart(@NotEmpty("json") String json) throws IllegalArgumentException, OperationException {
|
|
|
+ return update(json);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> parseData(@NotEmpty("code") String code, String kanbanCode) {
|
|
|
+ PanelInstance panelInstance = panelInstanceDao.checkExist(code);
|
|
|
+ Panel panel = panelDao.checkExist(panelInstance.getPanelCode());
|
|
|
+ List<PanelInstance.RelatedKanban> relatedKanbans = panelInstance.getRelatedKanbans();
|
|
|
+ if (CollectionUtils.isEmpty(relatedKanbans)) {
|
|
|
+ throw new IllegalStateException("面板下没有看板");
|
|
|
+ }
|
|
|
+ // 只保留已启用的看板
|
|
|
+ List<String> enabledKanbanCodes = new ArrayList<>();
|
|
|
+ for (PanelInstance.RelatedKanban relatedKanban : relatedKanbans) {
|
|
|
+ if (relatedKanban.getEnabled() != null && relatedKanban.getEnabled()) {
|
|
|
+ enabledKanbanCodes.add(relatedKanban.getCode());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果指定了看板,则解析该看板,否则解析该面板下的第一个看板
|
|
|
+ if (!StringUtils.isEmpty(kanbanCode)) {
|
|
|
+ if (!enabledKanbanCodes.contains(kanbanCode)) {
|
|
|
+ throw new IllegalArgumentException("看板不存在或未启用:" + kanbanCode);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ kanbanCode = enabledKanbanCodes.get(0);
|
|
|
+ }
|
|
|
+ Kanban kanban = kanbanDao.checkExist(kanbanCode);
|
|
|
+ BaseDao.checkFields(kanban);
|
|
|
+ String content = kanban.getContent();
|
|
|
+ String title = kanban.getTitle();
|
|
|
+ if (StringUtils.isEmpty(content)) {
|
|
|
+ throw new IllegalStateException("看板内容为空:" + kanbanCode);
|
|
|
+ }
|
|
|
+ List<Parameter> parameters = panelInstance.fromParameters();
|
|
|
+ // 解析看板
|
|
|
+ String kanbanContent;
|
|
|
+ try {
|
|
|
+ NewbieJdbcSupport jdbc = dataSourceManager.getJdbc(panel.getDataSourceCode());
|
|
|
+ kanbanContent = kanbanParser.parseXml(content, title, parameters, jdbc);
|
|
|
+ } catch (DocumentException e) {
|
|
|
+ throw new IllegalStateException("xml 解析出错", e);
|
|
|
+ } catch (TransformerException e) {
|
|
|
+ throw new IllegalStateException("xml 映射出错", e);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new IllegalStateException("xml 转换出错", e);
|
|
|
+ } catch (SQLException e) {
|
|
|
+ throw new IllegalStateException("SQL 查询错误", e);
|
|
|
+ }
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ Map<String, Object> instance = new HashMap<>();
|
|
|
+ instance.put("parameters", parameters);
|
|
|
+ instance.put("enabledKanbanCodes", enabledKanbanCodes);
|
|
|
+ instance.put("display", panel.getDisplay());
|
|
|
+ instance.put("switchFrequency", panelInstance.getSwitchFrequency());
|
|
|
+ instance.put("refreshFrequency", panelInstance.getRefreshFrequency());
|
|
|
+ result.put("instance", instance);
|
|
|
+ List<JSONObject> data = new ArrayList<>();
|
|
|
+ data.add(JSONObject.parseObject(kanbanContent));
|
|
|
+ result.put("data", data);
|
|
|
+ // TODO 多个看板返回的json
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PanelInstance getByPanelCode(@NotEmpty("panelCode") String panelCode) throws OperationException {
|
|
|
+ Panel panel = panelDao.checkExist(panelCode);
|
|
|
+ PanelInstance panelInstance = panelInstanceDao.findByPanelCode(panelCode);
|
|
|
+ if (panelInstance == null || panel.getVersion() > panelInstance.getPanelVersion()) {
|
|
|
+ // 如果面板有更新,先删除旧的实例
|
|
|
+ if (panelInstance != null) {
|
|
|
+ deleteOne(panelInstance.getCode());
|
|
|
+ }
|
|
|
+ panelInstance = generateInstance(panelCode);
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ NewbieJdbcSupport jdbc = dataSourceManager.getJdbc(panel.getDataSourceCode());
|
|
|
+ List<Parameter> parameters = panelInstance.fromParameters();
|
|
|
+ parseSQLParameters(parameters, jdbc);
|
|
|
+ panelInstance.toParameters(parameters);
|
|
|
+ } catch (SQLException e) {
|
|
|
+ throw new IllegalStateException("参数解析错误", e);
|
|
|
+ }
|
|
|
+ return panelInstance;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 检查参数是否正确填写(没有遗漏参数、每个参数都有值并且类型匹配)
|
|
|
*
|
|
|
@@ -106,26 +193,6 @@ public class PanelInstanceServiceImpl extends BaseService<PanelInstance> impleme
|
|
|
return parameters;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取 sql 执行结果
|
|
|
- *
|
|
|
- * @param jdbc jdbc
|
|
|
- * @param sql sql 查询语句
|
|
|
- * @return 执行结果
|
|
|
- */
|
|
|
- private List<Object> getValue(@NotEmpty("jdbc") NewbieJdbcSupport jdbc, @NotEmpty("sql") String sql) {
|
|
|
- List<Map<String, Object>> listMap = jdbc.listMap(sql);
|
|
|
- Map<String, List<Object>> map = kanbanParser.convert(listMap);
|
|
|
- Set<String> keySet = map.keySet();
|
|
|
- if (CollectionUtils.isEmpty(map)) {
|
|
|
- return new ArrayList<>();
|
|
|
- }
|
|
|
- if (keySet.size() > 1) {
|
|
|
- logger.error("参数解析结果不止一列:" + map);
|
|
|
- }
|
|
|
- return map.get(keySet.iterator().next());
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 重置 SQL 类型的参数
|
|
|
*
|
|
|
@@ -190,93 +257,6 @@ public class PanelInstanceServiceImpl extends BaseService<PanelInstance> impleme
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public int updatePart(@NotEmpty("json") String json) throws IllegalArgumentException, OperationException {
|
|
|
- return update(json);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public Map<String, Object> parseData(@NotEmpty("code") String code, String kanbanCode) {
|
|
|
- PanelInstance panelInstance = panelInstanceDao.checkExist(code);
|
|
|
- Panel panel = panelDao.checkExist(panelInstance.getPanelCode());
|
|
|
- List<PanelInstance.RelatedKanban> relatedKanbans = panelInstance.getRelatedKanbans();
|
|
|
- if (CollectionUtils.isEmpty(relatedKanbans)) {
|
|
|
- throw new IllegalStateException("面板下没有看板");
|
|
|
- }
|
|
|
- // 只保留已启用的看板
|
|
|
- List<String> enabledKanbanCodes = new ArrayList<>();
|
|
|
- for (PanelInstance.RelatedKanban relatedKanban : relatedKanbans) {
|
|
|
- if (relatedKanban.getEnabled() != null && relatedKanban.getEnabled()) {
|
|
|
- enabledKanbanCodes.add(relatedKanban.getCode());
|
|
|
- }
|
|
|
- }
|
|
|
- // 如果指定了看板,则解析该看板,否则解析该面板下的第一个看板
|
|
|
- if (!StringUtils.isEmpty(kanbanCode)) {
|
|
|
- if (!enabledKanbanCodes.contains(kanbanCode)) {
|
|
|
- throw new IllegalArgumentException("看板不存在或未启用:" + kanbanCode);
|
|
|
- }
|
|
|
- } else {
|
|
|
- kanbanCode = enabledKanbanCodes.get(0);
|
|
|
- }
|
|
|
- Kanban kanban = kanbanDao.checkExist(kanbanCode);
|
|
|
- BaseDao.checkFields(kanban);
|
|
|
- String content = kanban.getContent();
|
|
|
- String title = kanban.getTitle();
|
|
|
- if (StringUtils.isEmpty(content)) {
|
|
|
- throw new IllegalStateException("看板内容为空:" + kanbanCode);
|
|
|
- }
|
|
|
- List<Parameter> parameters = panelInstance.fromParameters();
|
|
|
- // 解析看板
|
|
|
- String kanbanContent;
|
|
|
- try {
|
|
|
- NewbieJdbcSupport jdbc = dataSourceManager.getJdbc(panel.getDataSourceCode());
|
|
|
- kanbanContent = kanbanParser.parseXml(content, title, parameters, jdbc);
|
|
|
- } catch (DocumentException e) {
|
|
|
- throw new IllegalStateException("xml 解析出错", e);
|
|
|
- } catch (TransformerException e) {
|
|
|
- throw new IllegalStateException("xml 映射出错", e);
|
|
|
- } catch (IOException e) {
|
|
|
- throw new IllegalStateException("xml 转换出错", e);
|
|
|
- } catch (SQLException e) {
|
|
|
- throw new IllegalStateException("SQL 查询错误", e);
|
|
|
- }
|
|
|
- Map<String, Object> result = new HashMap<>();
|
|
|
- Map<String, Object> instance = new HashMap<>();
|
|
|
- instance.put("parameters", parameters);
|
|
|
- instance.put("enabledKanbanCodes", enabledKanbanCodes);
|
|
|
- instance.put("display", panel.getDisplay());
|
|
|
- instance.put("switchFrequency", panelInstance.getSwitchFrequency());
|
|
|
- instance.put("refreshFrequency", panelInstance.getRefreshFrequency());
|
|
|
- result.put("instance", instance);
|
|
|
- List<JSONObject> data = new ArrayList<>();
|
|
|
- data.add(JSONObject.parseObject(kanbanContent));
|
|
|
- result.put("data", data);
|
|
|
- // TODO 多个看板返回的json
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public PanelInstance getByPanelCode(@NotEmpty("panelCode") String panelCode) throws OperationException {
|
|
|
- Panel panel = panelDao.checkExist(panelCode);
|
|
|
- PanelInstance panelInstance = panelInstanceDao.findByPanelCode(panelCode);
|
|
|
- if (panelInstance == null || panel.getVersion() > panelInstance.getPanelVersion()) {
|
|
|
- // 如果面板有更新,先删除旧的实例
|
|
|
- if (panelInstance != null) {
|
|
|
- deleteOne(panelInstance.getCode());
|
|
|
- }
|
|
|
- panelInstance = generateInstance(panelCode);
|
|
|
- }
|
|
|
- try {
|
|
|
- NewbieJdbcSupport jdbc = dataSourceManager.getJdbc(panel.getDataSourceCode());
|
|
|
- List<Parameter> parameters = panelInstance.fromParameters();
|
|
|
- parseSQLParameters(parameters, jdbc);
|
|
|
- panelInstance.toParameters(parameters);
|
|
|
- } catch (SQLException e) {
|
|
|
- throw new IllegalStateException("参数解析错误", e);
|
|
|
- }
|
|
|
- return panelInstance;
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 解析 SQL 类型的参数
|
|
|
*
|
|
|
@@ -308,6 +288,26 @@ public class PanelInstanceServiceImpl extends BaseService<PanelInstance> impleme
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取 sql 执行结果
|
|
|
+ *
|
|
|
+ * @param jdbc jdbc
|
|
|
+ * @param sql sql 查询语句
|
|
|
+ * @return 执行结果
|
|
|
+ */
|
|
|
+ private List<Object> getValue(@NotEmpty("jdbc") NewbieJdbcSupport jdbc, @NotEmpty("sql") String sql) {
|
|
|
+ List<Map<String, Object>> listMap = jdbc.listMap(sql);
|
|
|
+ Map<String, List<Object>> map = kanbanParser.convert(listMap);
|
|
|
+ Set<String> keySet = map.keySet();
|
|
|
+ if (CollectionUtils.isEmpty(map)) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ if (keySet.size() > 1) {
|
|
|
+ logger.error("参数解析结果不止一列:" + map);
|
|
|
+ }
|
|
|
+ return map.get(keySet.iterator().next());
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据用户和面板,删除相应的实例
|
|
|
*
|