|
|
@@ -78,7 +78,11 @@ public class PanelInstanceServiceImpl extends BaseService<PanelInstance> impleme
|
|
|
parameter.mayInitValue();
|
|
|
}
|
|
|
}
|
|
|
- compare(parameters, generateParameters(panelInstance));
|
|
|
+ List<Parameter> references = generateParameters(panelInstance, false);
|
|
|
+ // 重置 SQL 类型的参数(其值是解析出来的,不进行保存)
|
|
|
+ resetSQLParameter(parameters, references);
|
|
|
+ panelInstance.toParameters(parameters);
|
|
|
+ compare(parameters, references);
|
|
|
} catch (ClassNotFoundException | IOException | InstantiationException | IllegalAccessException e) {
|
|
|
throw new IllegalStateException("深克隆对象时失败", e);
|
|
|
}
|
|
|
@@ -87,21 +91,81 @@ public class PanelInstanceServiceImpl extends BaseService<PanelInstance> impleme
|
|
|
/**
|
|
|
* 根据关联的面板,为面板实例生成参数
|
|
|
*
|
|
|
- * @param panelInstance 面板实例
|
|
|
+ * @param panelInstance 面板实例
|
|
|
+ * @param parseSQLParameter 是否解析 SQL 类型的参数
|
|
|
* @return 生成的参数
|
|
|
*/
|
|
|
- private List<Parameter> generateParameters(@NotEmpty("panelInstance") PanelInstance panelInstance) {
|
|
|
+ private List<Parameter> generateParameters(@NotEmpty("panelInstance") PanelInstance panelInstance, boolean parseSQLParameter) {
|
|
|
String panelCode = userPanelRelationDao.checkExist(panelInstance.getUserPanelRelationCode()).getPanelCode();
|
|
|
+ Panel panel = panelDao.checkExist(panelCode);
|
|
|
+ String dataSourceCode = panel.getDataSourceCode();
|
|
|
List<Parameter> parameters = parameterService.getByPanelCode(panelCode);
|
|
|
if (CollectionUtils.isEmpty(parameters)) {
|
|
|
return null;
|
|
|
}
|
|
|
for (Parameter parameter : parameters) {
|
|
|
parameter.mayInitValue();
|
|
|
+ // 如果是 SQL 类型,需要解析参数
|
|
|
+ if (parameter.getType() == Type.SQL && parseSQLParameter) {
|
|
|
+ try {
|
|
|
+ NewbieJdbcSupport jdbc = dataSourceManager.getJdbc(dataSourceCode);
|
|
|
+ parameter.setValue(getValue(jdbc, String.valueOf(parameter.getValue())));
|
|
|
+ // 并且需要解析 optionalValues 里可选择的值
|
|
|
+ List<Object> optionalValues = parameter.getOptionalValues();
|
|
|
+ if (!CollectionUtils.isEmpty(optionalValues)) {
|
|
|
+ for (int i = 0; i < optionalValues.size(); i++) {
|
|
|
+ Object optionValue = optionalValues.get(i);
|
|
|
+ optionalValues.set(i, getValue(jdbc, String.valueOf(optionValue)));
|
|
|
+ }
|
|
|
+ parameter.setOptionalValues(optionalValues);
|
|
|
+ }
|
|
|
+ } catch (SQLException e) {
|
|
|
+ throw new IllegalStateException("参数解析错误", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
return parameters;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取 sql 执行结果
|
|
|
+ *
|
|
|
+ * @param jdbc jdbc
|
|
|
+ * @param sql sql 查询语句
|
|
|
+ * @return json 格式的结果
|
|
|
+ */
|
|
|
+ private String getValue(@NotEmpty("jdbc") NewbieJdbcSupport jdbc, @NotEmpty("sql") String sql) {
|
|
|
+ List<Map<String, Object>> listMap = jdbc.listMap(sql);
|
|
|
+ if (listMap == null) {
|
|
|
+ listMap = new ArrayList<>();
|
|
|
+ }
|
|
|
+ return JSONObject.toJSONString(listMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 重置 SQL 类型的参数
|
|
|
+ *
|
|
|
+ * @param parameters 需要重置的对象
|
|
|
+ * @param references 参照对象
|
|
|
+ */
|
|
|
+ private void resetSQLParameter(List<Parameter> parameters, List<Parameter> references) {
|
|
|
+ int parametersSize = parameters == null ? 0 : parameters.size() - 1;
|
|
|
+ for (int i = parametersSize; i >= 0; i--) {
|
|
|
+ Parameter parameter = parameters.get(i);
|
|
|
+ // 只重置 SQL 类型
|
|
|
+ if (parameter.getType() != Type.SQL) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 获取 code 相同的参数,用于重置
|
|
|
+ for (int j = references == null ? 0 : references.size() - 1; j >= 0; j--) {
|
|
|
+ Parameter reference = references.get(j);
|
|
|
+ if (Objects.equals(parameter.getCode(), reference.getCode())) {
|
|
|
+ parameter.setOptionalValues(reference.getOptionalValues());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 比较参数数量、名称等是否一致
|
|
|
*
|
|
|
@@ -228,6 +292,7 @@ public class PanelInstanceServiceImpl extends BaseService<PanelInstance> impleme
|
|
|
}
|
|
|
panelInstance = generateInstance(userPanelRelation);
|
|
|
}
|
|
|
+ panelInstance.toParameters(generateParameters(panelInstance, true));
|
|
|
return panelInstance;
|
|
|
}
|
|
|
|
|
|
@@ -244,7 +309,7 @@ public class PanelInstanceServiceImpl extends BaseService<PanelInstance> impleme
|
|
|
panelInstance.setUserPanelRelationCode(userPanelRelation.getCode());
|
|
|
panelInstance.setPanelVersion(panel.getVersion());
|
|
|
initSwitchFrequence(panelInstance);
|
|
|
- panelInstance.toParameters(generateParameters(panelInstance));
|
|
|
+ panelInstance.toParameters(generateParameters(panelInstance, false));
|
|
|
List<Kanban> kanbans = kanbanDao.findByPanelCode(panelCode);
|
|
|
if (CollectionUtils.isEmpty(kanbans)) {
|
|
|
throw new IllegalStateException("面板 '" + panel.getName() + "' 未关联看板,请联系管理员");
|