andy 1 年間 前
コミット
bbd8ba7d76

+ 1 - 1
src/main/java/com/scbfkj/uni/library/DataFormatUtil.java

@@ -103,7 +103,7 @@ public final class DataFormatUtil {
         return LocalDateTime.parse(dateTimeStr);
     }
 
-    public static List<?> toList(Object value) {
+    public static List<Object> toList(Object value) {
         if (Objects.isNull(value)) return null;
         ArrayList<Object> result = new ArrayList<>();
         if (value instanceof Iterable<?> iterable) {

+ 59 - 35
src/main/java/com/scbfkj/uni/library/script/JsScriptEngineUtil.java

@@ -1,5 +1,6 @@
 package com.scbfkj.uni.library.script;
 
+import com.scbfkj.uni.library.DataFormatUtil;
 import com.scbfkj.uni.library.UniReturnUtil;
 import org.apache.commons.pool2.BaseKeyedPooledObjectFactory;
 import org.apache.commons.pool2.KeyedObjectPool;
@@ -14,6 +15,7 @@ import org.graalvm.polyglot.Value;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.util.ArrayList;
 import java.util.Map;
 import java.util.Objects;
 
@@ -51,41 +53,8 @@ public final class JsScriptEngineUtil {
             function = scriptPool.borrowObject(script);
             if (function.canExecute()) {
                 Value result = function.execute(args);
-                if (result.isString()) {
-                    return UniReturnUtil.success(result.asString());
-                } else if (result.isBoolean()) {
-                    return UniReturnUtil.success(result.asBoolean());
-                } else if (result.isNumber()) {
-                    if (result.fitsInShort()) {
-                        return UniReturnUtil.success(result.asShort());
-                    }
-                    if (result.fitsInInt()) {
-                        return UniReturnUtil.success(result.asInt());
-                    }
-                    if (result.fitsInLong()) {
-                        return UniReturnUtil.success(result.asLong());
-                    }
-                    if (result.fitsInFloat()) {
-                        return UniReturnUtil.success(result.asFloat());
-                    }
-                    if (result.fitsInDouble()) {
-                        return UniReturnUtil.success(result.asDouble());
-                    }
-                    if (result.fitsInBigInteger()) {
-                        return UniReturnUtil.success(result.asBigInteger());
-                    }
-                    if (result.fitsInByte()) {
-                        return UniReturnUtil.success(result.asByte());
-                    }
-                } else if (result.isInstant()) {
-                    Instant instant = result.asInstant();
-                    return UniReturnUtil.success(LocalDateTime.now(ZoneId.from(instant)));
-                } else if (result.isNull()) {
-                    return UniReturnUtil.success(null);
-                } else if (result.isHostObject()) {
-                    return UniReturnUtil.success(result.asHostObject());
-                }
-                return UniReturnUtil.success(toString(result));
+
+                return UniReturnUtil.success(toHostObject(result));
             } else {
                 return UniReturnUtil.success(toString(function));
             }
@@ -99,6 +68,61 @@ public final class JsScriptEngineUtil {
         }
     }
 
+    public static Object toHostObject(Value result) throws Exception {
+        if (result.isString()) {
+            return result.asString();
+        } else if (result.isBoolean()) {
+            return result.asBoolean();
+        } else if (result.isNumber()) {
+            if (result.fitsInShort()) {
+                return result.asShort();
+            }
+            if (result.fitsInInt()) {
+                return result.asInt();
+            }
+            if (result.fitsInLong()) {
+                return result.asLong();
+            }
+            if (result.fitsInFloat()) {
+                return result.asFloat();
+            }
+            if (result.fitsInDouble()) {
+                return result.asDouble();
+            }
+            if (result.fitsInBigInteger()) {
+                return result.asBigInteger();
+            }
+            if (result.fitsInByte()) {
+                return result.asByte();
+            }
+        } else if (result.isInstant()) {
+            Instant instant = result.asInstant();
+            return LocalDateTime.now(ZoneId.from(instant));
+        } else if (result.isNull()) {
+            return null;
+        } else if (result.isHostObject()) {
+            return result.asHostObject();
+        } else if (result.hasIterator()) {
+            ArrayList<Object> objects = new ArrayList<>();
+            Value iterator = result.getIterator();
+
+            while (iterator.hasIteratorNextElement()) {
+                Value next = iterator.getIteratorNextElement();
+                objects.add(toHostObject(next));
+            }
+            return objects;
+        }
+        try {
+            return result.as(Map.class);
+        } catch (Exception e) {
+            try {
+                return result.as(Object.class);
+            } catch (Exception e2) {
+                return DataFormatUtil.toString(result);
+            }
+        }
+    }
+
     private static String toString(Value value) throws Exception {
         Value function = scriptPool.borrowObject(TO_STRING_SCRIPT);
         try {

+ 2 - 1
src/main/java/com/scbfkj/uni/service/DataProcessService.java

@@ -67,6 +67,7 @@ public class DataProcessService {
             } else {
                 lifecycleid = lifecycleidOpt.get();
             }
+            HashMap<String, Object> source = new HashMap<>();
             for (Map<String, Object> algorithmLibrary : algorithmLibraries) {
 
                 Map<String, Object> algorithmResult = null;
@@ -82,7 +83,6 @@ public class DataProcessService {
 //                记录生命周期ID
                 data.put("lifecycleid", lifecycleid);
                 data.put("algorithmlibraryid", algorithmlibraryid);
-                HashMap<String, Object> source = new HashMap<>();
                 source.put("args", resource);
                 source.put("algorithm", algorithmLibrary);
                 if (Objects.nonNull(preConditions)) {
@@ -108,6 +108,7 @@ public class DataProcessService {
                     if (Objects.equals("2", preCode)) {
                         break;
                     } else if (Objects.equals("1", preCode)) {
+                        resource.add(null);
                         continue;
                     } else if (!Objects.equals("0", preCode)) {
                         continue;