Przeglądaj źródła

spring boot版开发

java110 3 lat temu
rodzic
commit
25312dc6be

+ 0 - 337
springboot/src/main/java/com/java110/boot/rest/RestApi.java

@@ -1,337 +0,0 @@
-package com.java110.boot.rest;
-
-import com.alibaba.fastjson.JSONObject;
-import com.java110.boot.smo.IApiServiceSMO;
-import com.java110.core.base.controller.BaseController;
-import com.java110.core.log.LoggerFactory;
-import com.java110.intf.user.IUserInnerServiceSMO;
-import com.java110.utils.constant.CommonConstant;
-import com.java110.vo.ResultVo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * rest api
- * Created by wuxw on 2018/10/16.
- */
-@RestController
-@RequestMapping(path = "/api")
-@Api(value = "对外统一提供服务接口服务")
-public class RestApi extends BaseController {
-
-    private static Logger logger = LoggerFactory.getLogger(RestApi.class);
-    private static final String VERSION = "version";
-    private static final String VERSION_2 = "2.0";
-    @Autowired
-    private IApiServiceSMO apiServiceSMOImpl;
-
-    @Autowired
-    private IUserInnerServiceSMO userInnerServiceSMOImpl;
-
-
-    /**
-     * 健康检查 服务
-     *
-     * @return
-     */
-    @RequestMapping(path = "/health", method = RequestMethod.GET)
-    @ApiOperation(value = "服务健康检查", notes = "test: 返回 2XX 表示服务正常")
-    public String health() {
-        return "";
-    }
-
-    /**
-     * 健康检查 服务
-     *
-     * @return
-     */
-    @RequestMapping(path = "/checkUserServiceVersion", method = RequestMethod.GET)
-    @ApiOperation(value = "检查用服务版本", notes = "test: 返回 2XX 表示服务正常")
-    public String checkUserServiceVersion() {
-        return userInnerServiceSMOImpl.getUserServiceVersion("test");
-    }
-
-
-    /**
-     * 资源请求 post方式
-     *
-     * @param service  请求接口方式
-     * @param postInfo post内容
-     * @param request  请求对象 查询头信息 url等信息
-     * @return http status 200 成功 其他失败
-     */
-    @RequestMapping(path = "/{service:.+}", method = RequestMethod.POST)
-    @ApiOperation(value = "资源post请求", notes = "test: 返回 2XX 表示服务正常")
-    @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
-    public ResponseEntity<String> servicePost(@PathVariable String service,
-                                              @RequestBody String postInfo,
-                                              HttpServletRequest request) {
-        ResponseEntity<String> responseEntity = null;
-        Map<String, String> headers = new HashMap<String, String>();
-        try {
-
-            this.getRequestInfo(request, headers);
-            headers.put(CommonConstant.HTTP_SERVICE, service);
-            headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_POST);
-            logger.debug("api:{} 请求报文为:{},header信息为:{}", service, postInfo, headers);
-            responseEntity = apiServiceSMOImpl.service(postInfo, headers);
-        } catch (Throwable e) {
-            logger.error("请求post 方法[" + service + "]失败:" + postInfo, e);
-            responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
-        }
-        logger.debug("api:{} 返回信息为:{}", service, responseEntity);
-        if (responseEntity.getStatusCode() == HttpStatus.OK) {
-            return responseEntity;
-        }
-        //当 接口版本号为2.0时 返回错误处理
-        if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
-            return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
-        }
-        return responseEntity;
-    }
-
-    /**
-     * 资源请求 get方式
-     *
-     * @param service 请求接口方式
-     * @param request 请求对象 查询头信息 url等信息
-     * @return http status 200 成功 其他失败
-     */
-
-    @RequestMapping(path = "/{service:.+}", method = RequestMethod.GET)
-    @ApiOperation(value = "资源get请求", notes = "test: 返回 2XX 表示服务正常")
-    @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
-    public ResponseEntity<String> serviceGet(@PathVariable String service,
-                                             HttpServletRequest request) {
-        ResponseEntity<String> responseEntity = null;
-        Map<String, String> headers = new HashMap<String, String>();
-        try {
-            this.getRequestInfo(request, headers);
-            headers.put(CommonConstant.HTTP_SERVICE, service);
-            headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_GET);
-            logger.debug("api:{} 请求报文为:{},header信息为:{}", service, headers);
-            responseEntity = apiServiceSMOImpl.service(JSONObject.toJSONString(getParameterStringMap(request)), headers);
-        } catch (Throwable e) {
-            logger.error("请求get 方法[" + service + "]失败:", e);
-            responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
-        }
-        logger.debug("api:{} 返回信息为:{}", service, responseEntity);
-
-        if (responseEntity.getStatusCode() == HttpStatus.OK) {
-            return responseEntity;
-        }
-        //当 接口版本号为2.0时 返回错误处理
-        if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
-            return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
-        }
-
-        return responseEntity;
-    }
-
-    /**
-     * 资源请求 put方式
-     *
-     * @param service  请求接口方式
-     * @param postInfo 修改内容
-     * @param request  请求对象 查询头信息 url等信息
-     * @return http status 200 成功 其他失败
-     */
-
-    @RequestMapping(path = "/{service:.+}", method = RequestMethod.PUT)
-    @ApiOperation(value = "资源put请求", notes = "test: 返回 2XX 表示服务正常")
-    @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
-    public ResponseEntity<String> servicePut(@PathVariable String service,
-                                             @RequestBody String postInfo,
-                                             HttpServletRequest request) {
-        ResponseEntity<String> responseEntity = null;
-        Map<String, String> headers = new HashMap<String, String>();
-        try {
-
-            this.getRequestInfo(request, headers);
-            headers.put(CommonConstant.HTTP_SERVICE, service);
-            headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_PUT);
-            logger.debug("api:{} 请求报文为:{},header信息为:{}", service, postInfo, headers);
-            responseEntity = apiServiceSMOImpl.service(postInfo, headers);
-        } catch (Throwable e) {
-            logger.error("请求put 方法[" + service + "]失败:", e);
-            responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
-        }
-        logger.debug("api:{} 返回信息为:{}", service, responseEntity);
-        if (responseEntity.getStatusCode() == HttpStatus.OK) {
-            return responseEntity;
-        }
-        //当 接口版本号为2.0时 返回错误处理
-        if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
-            return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
-        }
-
-        return responseEntity;
-    }
-
-    /**
-     * 资源请求 delete方式
-     *
-     * @param service 请求接口方式
-     * @param request 请求对象 查询头信息 url等信息
-     * @return http status 200 成功 其他失败
-     */
-
-    @RequestMapping(path = "/{service:.+}", method = RequestMethod.DELETE)
-    @ApiOperation(value = "资源delete请求", notes = "test: 返回 2XX 表示服务正常")
-    @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
-    public ResponseEntity<String> serviceDelete(@PathVariable String service,
-                                                HttpServletRequest request) {
-        ResponseEntity<String> responseEntity = null;
-        Map<String, String> headers = new HashMap<String, String>();
-        try {
-
-            this.getRequestInfo(request, headers);
-            headers.put(CommonConstant.HTTP_SERVICE, service);
-            headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_DELETE);
-            logger.debug("api:{} 请求报文为:{},header信息为:{}", service, "", headers);
-
-            responseEntity = apiServiceSMOImpl.service(JSONObject.toJSONString(getParameterStringMap(request)), headers);
-        } catch (Throwable e) {
-            logger.error("请求delete 方法[" + service + "]失败:", e);
-            responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
-        }
-
-        logger.debug("api:{} 返回信息为:{}", service, responseEntity);
-        if (responseEntity.getStatusCode() == HttpStatus.OK) {
-            return responseEntity;
-        }
-        //当 接口版本号为2.0时 返回错误处理
-        if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
-            return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
-        }
-        return responseEntity;
-    }
-
-
-    /**
-     * 获取请求信息
-     *
-     * @param request
-     * @param headers
-     * @throws RuntimeException
-     */
-    private void getRequestInfo(HttpServletRequest request, Map headers) throws Exception {
-        try {
-            super.initHeadParam(request, headers);
-            super.initUrlParam(request, headers);
-        } catch (Exception e) {
-            logger.error("加载头信息失败", e);
-            throw e;
-        }
-    }
-
-
-    /**
-     * 资源请求 post方式
-     *
-     * @param resource 请求接口方式
-     * @param postInfo post内容
-     * @param request  请求对象 查询头信息 url等信息
-     * @return http status 200 成功 其他失败
-     */
-    @RequestMapping(path = "/{resource}/{action}", method = RequestMethod.POST)
-    @ApiOperation(value = "资源post请求", notes = "test: 返回 2XX 表示服务正常")
-    @ApiImplicitParam(paramType = "query", name = "subServicePost", value = "用户编号", required = true, dataType = "String")
-    public ResponseEntity<String> subServicePost(
-            @PathVariable String resource,
-            @PathVariable String action,
-            @RequestBody String postInfo,
-            HttpServletRequest request) {
-        ResponseEntity<String> responseEntity = null;
-        Map<String, String> headers = new HashMap<String, String>();
-        try {
-            this.getRequestInfo(request, headers);
-            headers.put(CommonConstant.HTTP_SERVICE, "/" + resource + "/" + action);
-            headers.put(CommonConstant.HTTP_RESOURCE, resource);
-            headers.put(CommonConstant.HTTP_ACTION, action);
-            headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_POST);
-            logger.debug("api:{} 请求报文为:{},header信息为:{}", action, postInfo, headers);
-            responseEntity = apiServiceSMOImpl.service(postInfo, headers);
-        } catch (Throwable e) {
-            logger.error("请求post 方法[" + action + "]失败:" + postInfo, e);
-            responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
-        }
-        logger.debug("api:{} 返回信息为:{}", action, responseEntity);
-        if (responseEntity.getStatusCode() == HttpStatus.OK) {
-            return responseEntity;
-        }
-        //当 接口版本号为2.0时 返回错误处理
-        if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
-            return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
-        }
-        return responseEntity;
-    }
-
-    /**
-     * 资源请求 get方式
-     *
-     * @param request 请求对象 查询头信息 url等信息
-     * @return http status 200 成功 其他失败
-     */
-
-    @RequestMapping(path = "/{resource}/{action}", method = RequestMethod.GET)
-    @ApiOperation(value = "资源get请求", notes = "test: 返回 2XX 表示服务正常")
-    @ApiImplicitParam(paramType = "query", name = "subServiceGet", value = "用户编号", required = true, dataType = "String")
-    public ResponseEntity<String> subServiceGet(
-            @PathVariable String resource,
-            @PathVariable String action,
-            HttpServletRequest request) {
-        ResponseEntity<String> responseEntity = null;
-        Map<String, String> headers = new HashMap<String, String>();
-        try {
-            this.getRequestInfo(request, headers);
-            headers.put(CommonConstant.HTTP_SERVICE, "/" + resource + "/" + action);
-            headers.put(CommonConstant.HTTP_RESOURCE, resource);
-            headers.put(CommonConstant.HTTP_ACTION, action);
-            headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_GET);
-            logger.debug("api:{} 请求报文为:{},header信息为:{}", "", headers);
-            responseEntity = apiServiceSMOImpl.service(JSONObject.toJSONString(getParameterStringMap(request)), headers);
-        } catch (Throwable e) {
-            logger.error("请求get 方法[" + action + "]失败:", e);
-            responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
-        }
-        logger.debug("api:{} 返回信息为:{}", action, responseEntity);
-
-        if (responseEntity.getStatusCode() == HttpStatus.OK) {
-            return responseEntity;
-        }
-        //当 接口版本号为2.0时 返回错误处理
-        if (headers.containsKey(VERSION) && VERSION_2.equals(headers.get(VERSION))) {
-            return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, responseEntity.getBody());
-        }
-
-        return responseEntity;
-    }
-
-
-    public IApiServiceSMO getApiServiceSMOImpl() {
-        return apiServiceSMOImpl;
-    }
-
-    public void setApiServiceSMOImpl(IApiServiceSMO apiServiceSMOImpl) {
-        this.apiServiceSMOImpl = apiServiceSMOImpl;
-    }
-
-    public IUserInnerServiceSMO getUserInnerServiceSMOImpl() {
-        return userInnerServiceSMOImpl;
-    }
-
-    public void setUserInnerServiceSMOImpl(IUserInnerServiceSMO userInnerServiceSMOImpl) {
-        this.userInnerServiceSMOImpl = userInnerServiceSMOImpl;
-    }
-}

+ 156 - 4
springboot/src/main/java/com/java110/boot/smo/impl/ApiServiceSMOImpl.java

@@ -2,6 +2,7 @@ package com.java110.boot.smo.impl;
 
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.aliyuncs.utils.StringUtils;
 import com.java110.boot.smo.IApiServiceSMO;
 import com.java110.boot.smo.IApiServiceSMO;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.context.ApiDataFlow;
 import com.java110.core.context.ApiDataFlow;
@@ -13,6 +14,7 @@ import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.core.log.LoggerFactory;
 import com.java110.core.log.LoggerFactory;
 import com.java110.core.smo.ISaveTransactionLogSMO;
 import com.java110.core.smo.ISaveTransactionLogSMO;
 import com.java110.core.trace.Java110TraceLog;
 import com.java110.core.trace.Java110TraceLog;
+import com.java110.dto.order.OrderDto;
 import com.java110.entity.center.AppRoute;
 import com.java110.entity.center.AppRoute;
 import com.java110.entity.center.AppService;
 import com.java110.entity.center.AppService;
 import com.java110.entity.center.DataFlowLinksCost;
 import com.java110.entity.center.DataFlowLinksCost;
@@ -29,9 +31,9 @@ import com.java110.vo.ResultVo;
 import org.apache.commons.lang3.math.NumberUtils;
 import org.apache.commons.lang3.math.NumberUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.web.client.HttpStatusCodeException;
 
 
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
@@ -385,7 +387,8 @@ public class ApiServiceSMOImpl extends LoggerEngine implements IApiServiceSMO {
                 throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR,
                 throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR,
                         "服务【" + appService.getServiceCode() + "】调用方式不对请检查,当前请求方式为:" + httpMethod);
                         "服务【" + appService.getServiceCode() + "】调用方式不对请检查,当前请求方式为:" + httpMethod);
             }
             }
-            dataFlow.setApiCurrentService(ServiceCodeConstant.SERVICE_CODE_SYSTEM_TRANSFER);
+            doTransfer(appService,dataFlow,dataFlow.getReqJson());
+            return;
         } else if ("CMD".equals(appService.getIsInstance())) {
         } else if ("CMD".equals(appService.getIsInstance())) {
             //如果是透传类 请求方式必须与接口提供方调用方式一致
             //如果是透传类 请求方式必须与接口提供方调用方式一致
             String httpMethod = dataFlow.getRequestCurrentHeaders().get(CommonConstant.HTTP_METHOD);
             String httpMethod = dataFlow.getRequestCurrentHeaders().get(CommonConstant.HTTP_METHOD);
@@ -393,7 +396,8 @@ public class ApiServiceSMOImpl extends LoggerEngine implements IApiServiceSMO {
                 throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR,
                 throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR,
                         "服务【" + appService.getServiceCode() + "】调用方式不对请检查,当前请求方式为:" + httpMethod);
                         "服务【" + appService.getServiceCode() + "】调用方式不对请检查,当前请求方式为:" + httpMethod);
             }
             }
-            dataFlow.setApiCurrentService(ServiceCodeConstant.SERVICE_CODE_SYSTEM_CMD);
+            dealCmd(appService,dataFlow,dataFlow.getReqJson());
+            return ;
         } else {
         } else {
             dataFlow.setApiCurrentService(dataFlow.getRequestHeaders().get(CommonConstant.HTTP_SERVICE));
             dataFlow.setApiCurrentService(dataFlow.getRequestHeaders().get(CommonConstant.HTTP_SERVICE));
         }
         }
@@ -401,6 +405,154 @@ public class ApiServiceSMOImpl extends LoggerEngine implements IApiServiceSMO {
         DataFlowFactory.addCostTime(dataFlow, "invokeBusinessSystem", "调用下游系统耗时", startDate);
         DataFlowFactory.addCostTime(dataFlow, "invokeBusinessSystem", "调用下游系统耗时", startDate);
     }
     }
 
 
+    private void doTransfer(AppService appService, ApiDataFlow dataFlow, JSONObject reqJson) {
+
+        Map<String, String> reqHeader = dataFlow.getRequestCurrentHeaders();
+        HttpHeaders header = new HttpHeaders();
+        for (String key : dataFlow.getRequestCurrentHeaders().keySet()) {
+            header.add(key, reqHeader.get(key));
+        }
+        HttpEntity<String> httpEntity = new HttpEntity<String>(reqJson.toJSONString(), header);
+        String orgRequestUrl = dataFlow.getRequestHeaders().get("REQUEST_URL");
+
+        //String serviceCode = "/" + reqHeader.get(CommonConstant.HTTP_RESOURCE) + "/" + reqHeader.get(CommonConstant.HTTP_ACTION);
+        String serviceCode = appService.getServiceCode();
+        serviceCode = serviceCode.startsWith("/") ? serviceCode : ("/" + serviceCode);
+
+        String requestUrl = "http://127.0.0.1:8008" + serviceCode;
+
+        ResponseEntity responseEntity = null;
+        if (!StringUtil.isNullOrNone(orgRequestUrl)) {
+            String param = orgRequestUrl.contains("?") ? orgRequestUrl.substring(orgRequestUrl.indexOf("?") + 1, orgRequestUrl.length()) : "";
+            requestUrl += ("?" + param);
+        }
+        try {
+            if (CommonConstant.HTTP_METHOD_GET.equals(appService.getMethod())) {
+                responseEntity = outRestTemplate.exchange(requestUrl, HttpMethod.GET, httpEntity, String.class);
+            } else if (CommonConstant.HTTP_METHOD_PUT.equals(appService.getMethod())) {
+                responseEntity = outRestTemplate.exchange(requestUrl, HttpMethod.PUT, httpEntity, String.class);
+            } else if (CommonConstant.HTTP_METHOD_DELETE.equals(appService.getMethod())) {
+                responseEntity = outRestTemplate.exchange(requestUrl, HttpMethod.DELETE, httpEntity, String.class);
+            } else {
+                responseEntity = outRestTemplate.exchange(requestUrl, HttpMethod.POST, httpEntity, String.class);
+            }
+            HttpHeaders headers = responseEntity.getHeaders();
+            String oId = "-1";
+            if (headers.containsKey(OrderDto.O_ID)) {
+                oId = headers.get(OrderDto.O_ID).get(0);
+            }
+
+            //进入databus
+            if (!CommonConstant.HTTP_METHOD_GET.equals(appService.getMethod())) {
+
+               // dealDatabus(serviceCode, reqJson, oId);
+            }
+
+
+        } catch (HttpStatusCodeException e) { //这里spring 框架 在4XX 或 5XX 时抛出 HttpServerErrorException 异常,需要重新封装一下
+            logger.error("请求下游服务【" + requestUrl + "】异常,参数为" + httpEntity + e.getResponseBodyAsString(), e);
+            String body = e.getResponseBodyAsString();
+
+            if (StringUtil.isJsonObject(body)) {
+                JSONObject bodyObj = JSONObject.parseObject(body);
+                if (bodyObj.containsKey("message") && !StringUtil.isEmpty(bodyObj.getString("message"))) {
+                    body = bodyObj.getString("message");
+                }
+            }
+            responseEntity = new ResponseEntity<String>(body, e.getStatusCode());
+        }
+
+        logger.debug("API 服务调用下游服务请求:{},返回为:{}", httpEntity, responseEntity);
+
+        if (responseEntity.getStatusCode() != HttpStatus.OK) {
+            responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_ERROR, String.valueOf(responseEntity.getBody()));
+            dataFlow.setResponseEntity(responseEntity);
+
+            return;
+        }
+        if (StringUtils.isEmpty(responseEntity.getBody() + "")) {
+            responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "处理失败");
+            dataFlow.setResponseEntity(responseEntity);
+            return;
+        }
+        JSONObject resParam = JSONObject.parseObject(responseEntity.getBody() + "");
+        if (resParam.containsKey("code") && resParam.containsKey("msg")) { // 说明微服务返回的是 resultVo 对象直接返回就可以
+            dataFlow.setResponseEntity(responseEntity);
+            return;
+        }
+        responseEntity = ResultVo.createResponseEntity(resParam);
+        dataFlow.setResponseEntity(responseEntity);
+    }
+
+    private void dealCmd(AppService appService,ApiDataFlow dataFlow,JSONObject reqJson) {
+        Map<String, String> reqHeader = dataFlow.getRequestCurrentHeaders();
+        HttpHeaders header = new HttpHeaders();
+        for (String key : dataFlow.getRequestCurrentHeaders().keySet()) {
+            header.add(key, reqHeader.get(key));
+        }
+        if (reqHeader.containsKey(CommonConstant.USER_ID)
+                && (!reqJson.containsKey("userId") || StringUtil.isEmpty(reqJson.getString("userId")))) {
+            reqJson.put("userId", reqHeader.get(CommonConstant.USER_ID));
+        }
+        if (reqHeader.containsKey(CommonConstant.USER_ID)
+                && (!reqJson.containsKey("loginUserId") || StringUtil.isEmpty(reqJson.getString("loginUserId")))) {
+            reqJson.put("loginUserId", reqHeader.get(CommonConstant.LOGIN_U_ID));
+        }
+        if (reqHeader.containsKey(CommonConstant.STORE_ID)
+                && (!reqJson.containsKey("storeId") || StringUtil.isEmpty(reqJson.getString("storeId")))) {
+            reqJson.put("storeId", reqHeader.get(CommonConstant.STORE_ID));
+        }
+        HttpEntity<String> httpEntity = new HttpEntity<String>(reqJson.toJSONString(), header);
+        String orgRequestUrl = dataFlow.getRequestHeaders().get("REQUEST_URL");
+
+        String serviceCode = appService.getServiceCode();
+
+        serviceCode = serviceCode.startsWith("/") ? serviceCode : ("/" + serviceCode);
+
+        String requestUrl =   "http://127.0.0.1:8008/cmd" + serviceCode;
+        //
+        ResponseEntity responseEntity = null;
+        if (!StringUtil.isNullOrNone(orgRequestUrl)) {
+            String param = orgRequestUrl.contains("?") ? orgRequestUrl.substring(orgRequestUrl.indexOf("?") + 1, orgRequestUrl.length()) : "";
+            requestUrl += ("?" + param);
+        }
+        try {
+            responseEntity = outRestTemplate.exchange(requestUrl, HttpMethod.POST, httpEntity, String.class);
+            HttpHeaders headers = responseEntity.getHeaders();
+            String oId = "-1";
+            if (headers.containsKey(OrderDto.O_ID)) {
+                oId = headers.get(OrderDto.O_ID).get(0);
+            }
+
+        } catch (HttpStatusCodeException e) { //这里spring 框架 在4XX 或 5XX 时抛出 HttpServerErrorException 异常,需要重新封装一下
+            logger.error("请求下游服务【" + requestUrl + "】异常,参数为" + httpEntity + e.getResponseBodyAsString(), e);
+            String body = e.getResponseBodyAsString();
+
+            if (StringUtil.isJsonObject(body)) {
+                JSONObject bodyObj = JSONObject.parseObject(body);
+                if (bodyObj.containsKey("message") && !StringUtil.isEmpty(bodyObj.getString("message"))) {
+                    body = bodyObj.getString("message");
+                }
+            }
+            responseEntity = new ResponseEntity<String>(body, e.getStatusCode());
+        }
+
+        logger.debug("API 服务调用下游服务请求:{},返回为:{}", httpEntity, responseEntity);
+
+        if (responseEntity.getStatusCode() != HttpStatus.OK) {
+            responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_ERROR, String.valueOf(responseEntity.getBody()));
+            dataFlow.setResponseEntity(responseEntity);
+
+            return;
+        }
+        if (StringUtils.isEmpty(responseEntity.getBody() + "")) {
+            responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "处理失败");
+            dataFlow.setResponseEntity(responseEntity);
+            return;
+        }
+        dataFlow.setResponseEntity(responseEntity);
+    }
+
 
 
     /**
     /**
      * 保存日志信息
      * 保存日志信息