yingp 8 лет назад
Родитель
Сommit
731fbc603f

+ 24 - 0
src/main/java/com/uas/erp/schedular/database/Executable.java

@@ -15,6 +15,8 @@ public class Executable {
     private Object[] args;
     // 是否查询
     private boolean isQuery;
+    // 是否call procedure
+    private boolean isCall;
     // 返回字段
     private String[] returnFields;
 
@@ -58,6 +60,14 @@ public class Executable {
         this.returnFields = returnFields;
     }
 
+    public boolean isCall() {
+        return isCall;
+    }
+
+    public void setCall(boolean call) {
+        isCall = call;
+    }
+
     public Executable() {
         this.qualifier = ContextHolder.getMaster().getMa_user().toUpperCase();
     }
@@ -76,6 +86,20 @@ public class Executable {
         return executable;
     }
 
+    public static Executable call(String exec, Object[] args) {
+        Executable executable = new Executable();
+        executable.setCall(true);
+        executable.setArgs(args);
+        executable.setExecs(new String[]{ exec });
+        return executable;
+    }
+
+    public static Executable call(String exec, String[] returnFields, Object[] args) {
+        Executable executable = call(exec, args);
+        executable.setReturnFields(returnFields);
+        return executable;
+    }
+
     public static Executable execute(String exec, Object[] args) {
         Executable executable = new Executable();
         executable.setArgs(args);

+ 27 - 1
src/main/java/com/uas/erp/schedular/database/RestJdbcTemplate.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.TypeReference;
 import com.uas.erp.schedular.service.SettingService;
 import com.uas.erp.schedular.util.BeanUtil;
+import com.uas.erp.schedular.util.CollectionUtil;
 import com.uas.erp.schedular.web.ResultListWrap;
 import com.uas.erp.schedular.web.ResultWrap;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -209,7 +210,10 @@ public class RestJdbcTemplate {
      * @return
      */
     public String generateCode(String sequenceName, int type) {
-        return getString("{call Sp_GetMaxNumber(?,?)}", sequenceName, type);
+        Map<String, Object> data = callForMap("{call Sp_GetMaxNumber(?,?,?)}", new Object[]{sequenceName, type},
+                new String[]{"code"});
+        Object code = null == data ? null : data.get("code");
+        return null == code ? null : code.toString();
     }
 
     /**
@@ -242,4 +246,26 @@ public class RestJdbcTemplate {
         return null;
     }
 
+    /**
+     * call procedure
+     * @param exec call语句
+     * @param args in参数
+     * @param outParams out参数
+     * @return
+     */
+    public Map<String, Object> callForMap(String exec, Object[] args, String[] outParams){
+        HttpEntity request = new HttpEntity<Executable>(Executable.call(exec, outParams, args));
+        ParameterizedTypeReference<ResultWrap<List<Map<String, Object>>>> responseType = new ParameterizedTypeReference<ResultWrap<List<Map<String, Object>>>>(){};
+        ResponseEntity<ResultWrap<List<Map<String, Object>>>> response = restTemplate.exchange(getUrl() + "/v1/exec", HttpMethod.POST, request, responseType);
+        ResultWrap<List<Map<String, Object>>> result = response.getBody();
+        if (result.isSuccess()) {
+            List<Map<String, Object>> list = result.getContent();
+            if (!CollectionUtils.isEmpty(list)) {
+                return list.get(0);
+            }
+            return null;
+        }
+        throw new RuntimeException(result.getMessage());
+    }
+
 }