Pārlūkot izejas kodu

查看看板实例时就解析公共参数;不递归解析公共参数

sunyj 8 gadi atpakaļ
vecāks
revīzija
0d2ee5b25b

+ 6 - 1
kanban-console/src/main/java/com/uas/kanban/model/GlobalParameter.java

@@ -1,5 +1,6 @@
 package com.uas.kanban.model;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -192,7 +193,11 @@ public class GlobalParameter extends BaseEntity {
             return;
         }
         if((inputMode == InputMode.Radio || inputMode == InputMode.DropDownBox) && optionalValues != null){
-            value = optionalValues.get(defaultOptionalValueIndex == null ? 0 : defaultOptionalValueIndex - 1);
+            try {
+                value = ObjectUtils.clone(optionalValues.get(defaultOptionalValueIndex == null ? 0 : defaultOptionalValueIndex - 1));
+            } catch (IOException | ClassNotFoundException e) {
+                throw new IllegalStateException("初始化公共参数出错", e);
+            }
         }
     }
 

+ 15 - 5
kanban-console/src/main/java/com/uas/kanban/service/impl/KanbanInstanceServiceImpl.java

@@ -13,6 +13,7 @@ import java.util.Set;
 
 import javax.xml.transform.TransformerException;
 
+import com.uas.kanban.model.*;
 import org.dom4j.DocumentException;
 import org.mongodb.morphia.query.Query;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,11 +27,6 @@ import com.uas.kanban.dao.KanbanDao;
 import com.uas.kanban.dao.KanbanInstanceDao;
 import com.uas.kanban.dao.TemplateDao;
 import com.uas.kanban.exception.OperationException;
-import com.uas.kanban.model.GlobalParameter;
-import com.uas.kanban.model.Kanban;
-import com.uas.kanban.model.KanbanInstance;
-import com.uas.kanban.model.Template;
-import com.uas.kanban.model.TemplateParameter;
 import com.uas.kanban.service.KanbanInstanceService;
 import com.uas.kanban.support.DataSourceManager;
 import com.uas.kanban.support.TemplateParser;
@@ -260,6 +256,20 @@ public class KanbanInstanceServiceImpl extends BaseService<KanbanInstance> imple
 					if (!globalParameterCodeSet.contains(globalParameterCode)) {
 						globalParameterCodeSet.add(globalParameterCode);
 						GlobalParameter globalParameter = checkGlobalParameter(globalParameterCode);
+						globalParameter.mayInitValue();
+                        // 如果是 SQL 类型,需要解析公共参数
+                        if(globalParameter.getType() == Type.SQL){
+                            try {
+                                NewbieJdbcSupport jdbc = dataSourceManager.getJdbc(template.getDataSourceCode());
+                                List<Map<String, Object>> listMap = jdbc.listMap(String.valueOf(globalParameter.getValue()));
+                                if(listMap == null){
+                                    listMap = new ArrayList<>();
+                                }
+                                globalParameter.setValue(JSONObject.toJSONString(listMap));
+                            } catch (SQLException e) {
+                                throw new IllegalStateException("公共参数解析错误", e);
+                            }
+                        }
 						globalParameters.add(globalParameter);
 					}
 				}

+ 2 - 1
kanban-console/src/main/java/com/uas/kanban/support/TemplateParser.java

@@ -94,7 +94,8 @@ public class TemplateParser {
 			// 如果公共参数值为 {@link Type#SQL} ,需要取得查询结果
 			if(globalParameter.getType()== Type.SQL){
 				String stringValue=(String)value;
-				stringValue=replaceParameters(stringValue,globalParameters,true,jdbc);
+				// 不递归替换公共参数
+				// stringValue=replaceParameters(stringValue,globalParameters,true,jdbc);
 				checkCount(jdbc.getDataSource().getConnection(), stringValue);
 				Map<String, Object> data = jdbc.findMap(stringValue);
 				if (CollectionUtils.isEmpty(data)) {