diff --git a/im-app/im-app-web/src/main/java/com/ibiz/web/ht/service/IMService.java b/im-app/im-app-web/src/main/java/com/ibiz/web/ht/service/IMService.java
index c085d89babaee0935697ebd7f75269db945284e5..59c7cd66aad5a6a086905c69ce5a6089799fab7c 100644
--- a/im-app/im-app-web/src/main/java/com/ibiz/web/ht/service/IMService.java
+++ b/im-app/im-app-web/src/main/java/com/ibiz/web/ht/service/IMService.java
@@ -1,13 +1,24 @@
 
 package com.ibiz.web.ht.service;
 
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.ibiz.web.ps.domain.PS;
 import com.ibiz.web.ps.service.PSService;
+import org.apache.commons.codec.binary.Base64;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.stereotype.Service;
 
 import feign.Client;
@@ -34,6 +45,9 @@ import com.ibiz.util.config.UniWFClientProperties;
 import com.ibiz.util.feign.UniWFFeignClient;
 import com.ibiz.util.config.SysInfoProperties;
 import com.ibiz.util.domain.*;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
 
 @Service
 public class IMService {
@@ -196,8 +210,7 @@ public class IMService {
         }
         PSDEWF psdewf = psdewfs.getContent().get(0);
 
-        // PS
-        PS ps = new PS();
+
 
         // 涓氬姟鐘舵€�
         String status = null;
@@ -223,16 +236,84 @@ public class IMService {
         // 淇濆瓨涓氬姟鏁版嵁
         this.update(im_id, im);
 
-        if ("finish".equals(type)) {
+        // FOR TEST ADD gotostep
+        if ("finish".equals(type) || "gotostep".equals(type)) {
+            // PS
+            PS ps = new PS();
             ps.setPSId(im.getIMId());
             ps = psService.get(ps.getPSId());
             if (ps != null) {
                 ps.setImstate("30");
-                psService.update(ps.getPSId(), ps);
+//                psService.update(ps.getPSId(), ps);
+            }
+            if (data.getString("callbackdata") != null) {
+                JSONArray callbackdata = JSONObject.parseArray(data.getString("callbackdata"));
+                if (callbackdata.size() > 0) {
+                    for (int i =0; i < callbackdata.size(); i++) {
+                        JSONObject jo = callbackdata.getJSONObject(i);
+                        HttpMethod httpMethod = HttpMethod.valueOf(jo.getString("method"));
+                        String url = jo.getString("url");
+                        JSONObject params = null;
+                        if (jo.getBoolean("containspk")) {
+                            String replaceStr = url.substring(url.indexOf("{"), url.indexOf("}") + 1);
+                            replaceStr = "\\" + replaceStr;
+                            replaceStr = replaceStr.substring(0, replaceStr.length() - 1) + "\\}";
+                            url = url.replaceAll(replaceStr, im.getIMId());
+                        }
+                        if (jo.getBoolean("containset")) {
+                            params = (JSONObject) JSONObject.toJSON(ps);
+                        }
+                        doRestRequest(url, httpMethod, getHeader(), params);
+                    }
+                }
             }
         }
 
         data.put("rst", "1");
         return data;
     }
+
+    public JSONObject getHeader(){
+        JSONObject header = new JSONObject();
+        header.put("Content-Type","application/json");
+//        String token= null;
+//        try {
+//            Base64 base64 = new Base64();
+//            token = base64.encodeToString((username+":"+password).getBytes("UTF-8"));
+//        } catch (UnsupportedEncodingException e) {
+//            e.printStackTrace();
+//        }
+//        header.put("Authorization","Basic "+ token);
+        return header;
+    }
+
+    private String doRestRequest(String url, HttpMethod method, JSONObject headerMap, JSONObject paramMap){
+        RestTemplate restTemplate = getRestTemplate();
+        HttpHeaders headers = new HttpHeaders();
+        if(headerMap!=null){
+            for(String key : headerMap.keySet()){
+                headers.add(key,headerMap.getString(key));
+            }
+        }
+        MultiValueMap<String,String> params = new LinkedMultiValueMap<String,String>();
+        HttpEntity<String> entity;
+        if(paramMap!=null){
+            entity = new HttpEntity<>(paramMap.toString(), headers);
+        }else{
+            entity = new HttpEntity<>(null, headers);
+        }
+        ResponseEntity<String> responseEntity = restTemplate.exchange(url, method, entity, String.class);
+        return responseEntity.getBody();
+    }
+
+    private RestTemplate getRestTemplate(){
+        RestTemplate restTemplate = new RestTemplate();
+        for (HttpMessageConverter<?> httpMessageConverter : restTemplate.getMessageConverters()) {
+            if (httpMessageConverter instanceof StringHttpMessageConverter) {
+                ((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName("UTF-8"));
+                break;
+            }
+        }
+        return restTemplate;
+    }
 }