java110 пре 5 година
родитељ
комит
d8d69911bf

+ 1 - 4
java110-bean/src/main/java/com/java110/dto/order/OrderDto.java

@@ -6,10 +6,7 @@ import java.io.Serializable;
 
 public class OrderDto extends PageDto implements Serializable {
 
-    public static final String APP_ID = "APP-ID";
-    public static final String TRANSACTION_ID = "TRANSACTION-ID";
-    public static final String REQUEST_TIME = "REQUEST-TIME";
-    public static final String USER_ID = "USER-ID";
+
 
     public static final String O_ID = "O-ID";
 

+ 12 - 10
java110-core/src/main/java/com/java110/core/aop/Java110TransactionalAop.java

@@ -1,14 +1,14 @@
 package com.java110.core.aop;
 
 import com.java110.core.factory.Java110TransactionalFactory;
+import com.java110.dto.BusinessDto;
 import com.java110.dto.order.OrderDto;
+import com.java110.utils.constant.CommonConstant;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
@@ -51,19 +51,19 @@ public class Java110TransactionalAop {
         while (headerNames.hasMoreElements()) {
             String key = (String) headerNames.nextElement();
             String value = request.getHeader(key);
-            if (OrderDto.APP_ID.equals(key.toUpperCase())) {
+            if (CommonConstant.APP_ID.equals(key)) {
                 orderDto.setAppId(value);
             }
-            if (OrderDto.TRANSACTION_ID.equals(key.toUpperCase())) {
+            if (CommonConstant.TRANSACTION_ID.equals(key)) {
                 orderDto.setExtTransactionId(value);
             }
-            if (OrderDto.REQUEST_TIME.equals(key.toUpperCase())) {
+            if (CommonConstant.REQUEST_TIME.equals(key)) {
                 orderDto.setRequestTime(value);
             }
-            if (OrderDto.O_ID.equals(key.toUpperCase())) {
+            if (OrderDto.O_ID.equals(key)) {
                 orderDto.setoId(value);
             }
-            if (OrderDto.USER_ID.equals(key.toUpperCase())) {
+            if (CommonConstant.USER_ID.equals(key)) {
                 orderDto.setUserId(value);
             }
         }
@@ -95,9 +95,10 @@ public class Java110TransactionalAop {
 
     //环绕通知,环绕增强,相当于MethodInterceptor
     @Around("dataProcess()")
-    public Object around(ProceedingJoinPoint pjp) {
+    public Object around(ProceedingJoinPoint pjp) throws Throwable {
+        Object o = null;
         try {
-            Object o = pjp.proceed();
+            o = pjp.proceed();
             //观察者不做处理
             if (Java110TransactionalFactory.ROLE_OBSERVER.equals(Java110TransactionalFactory.getServiceRole())) {
                 return o;
@@ -109,7 +110,8 @@ public class Java110TransactionalAop {
             logger.error("执行方法异常", e);
             //回退事务
             Java110TransactionalFactory.fallbackOId();
-            return new ResponseEntity("内部异常" + e.getLocalizedMessage(), HttpStatus.BAD_REQUEST);
+            //return new BusinessDto(BusinessDto.CODE_ERROR, "内部异常" + e.getLocalizedMessage());
+            throw e;
         }
     }
 }

+ 14 - 0
java110-core/src/main/java/com/java110/core/context/ApiDataFlow.java

@@ -1,6 +1,7 @@
 package com.java110.core.context;
 
 import com.alibaba.fastjson.JSONObject;
+import com.java110.dto.order.OrderDto;
 import com.java110.utils.constant.CommonConstant;
 import com.java110.entity.center.AppRoute;
 import org.springframework.http.ResponseEntity;
@@ -131,6 +132,19 @@ public class ApiDataFlow extends AbstractDataFlowContext {
             this.setRequestTime(headerAll.get(CommonConstant.HTTP_REQ_TIME));
             this.setUserId(headerAll.get(CommonConstant.HTTP_USER_ID));
 
+            if (headerAll.containsKey(CommonConstant.APP_ID)) {
+                this.setAppId(headerAll.get(CommonConstant.APP_ID));
+            }
+            if (headerAll.containsKey(CommonConstant.TRANSACTION_ID)) {
+                this.setTransactionId(headerAll.get(CommonConstant.TRANSACTION_ID));
+            }
+            if (headerAll.containsKey(CommonConstant.REQUEST_TIME)) {
+                this.setRequestTime(headerAll.get(CommonConstant.REQUEST_TIME));
+            }
+            if (headerAll.containsKey(CommonConstant.USER_ID)) {
+                this.setUserId(headerAll.get(CommonConstant.USER_ID));
+            }
+
             if (headerAll != null){
                 this.requestHeaders.putAll(headerAll);
                 this.requestCurrentHeaders.putAll(headerAll);

+ 5 - 0
java110-core/src/main/java/com/java110/core/event/service/api/ServiceDataFlowEventPublishing.java

@@ -88,6 +88,11 @@ public class ServiceDataFlowEventPublishing extends LoggerEngine {
                     && ServiceCodeConstant.SERVICE_CODE_DO_SERVICE_TRANSFER.equals(serviceCode)) {
                 dataFlowListeners.add(listener);
             }
+            //特殊处理 透传类接口
+            if (ServiceCodeConstant.SERVICE_CODE_SYSTEM_TRANSFER.equals(listener.getServiceCode())
+                    && ServiceCodeConstant.SERVICE_CODE_SYSTEM_TRANSFER.equals(serviceCode)) {
+                dataFlowListeners.add(listener);
+            }
         }
 
         //这里排序

+ 1 - 0
java110-interface/src/main/java/com/java110/intf/community/repair/IAppraiseRepairService.java

@@ -6,6 +6,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
 
 /**
  * 保存评价接口类

+ 4 - 0
java110-utils/src/main/java/com/java110/utils/constant/CommonConstant.java

@@ -135,6 +135,10 @@ public class CommonConstant {
     public final static String INSTANCE_N = "N";
 
 
+    public static final String APP_ID = "app-id";
+    public static final String TRANSACTION_ID = "transaction-id";
+    public static final String REQUEST_TIME = "request-time";
+    public static final String USER_ID = "user-id";
 
     public final static String HTTP_SERVICE_API = "API";
     public final static String HTTP_SERVICE = "SERVICE";

+ 15 - 0
java110-utils/src/main/java/com/java110/utils/util/StringUtil.java

@@ -452,6 +452,21 @@ public class StringUtil {
         return str == null || "".equals(str);
     }
 
+    /**
+     * 校验是否为JSON
+     *
+     * @param msg
+     * @return
+     */
+    public static Boolean isJsonObject(String msg) {
+        try {
+            JSONObject.parseObject(msg);
+        } catch (Exception e) {
+            return false;
+        }
+        return true;
+    }
+
     /**
      * 获取指定长度(按字节长度获取)的字符串,中文算2个字节长度,兼容oracle的 varchar2长度计算方式
      *

+ 12 - 3
service-api/src/main/java/com/java110/api/listener/system/TransferListener.java

@@ -57,14 +57,23 @@ public class TransferListener extends AbstractServiceApiListener {
             if (CommonConstant.HTTP_METHOD_GET.equals(service.getMethod())) {
                 responseEntity = restTemplate.exchange(requestUrl, HttpMethod.GET, httpEntity, String.class);
             } else if (CommonConstant.HTTP_METHOD_PUT.equals(service.getMethod())) {
-                responseEntity = restTemplate.exchange(service.getUrl(), HttpMethod.PUT, httpEntity, String.class);
+                responseEntity = restTemplate.exchange(requestUrl, HttpMethod.PUT, httpEntity, String.class);
             } else if (CommonConstant.HTTP_METHOD_DELETE.equals(service.getMethod())) {
                 responseEntity = restTemplate.exchange(requestUrl, HttpMethod.DELETE, httpEntity, String.class);
             } else {
-                responseEntity = restTemplate.exchange(service.getUrl(), HttpMethod.POST, httpEntity, String.class);
+                responseEntity = restTemplate.exchange(requestUrl, HttpMethod.POST, httpEntity, String.class);
             }
         } catch (HttpStatusCodeException e) { //这里spring 框架 在4XX 或 5XX 时抛出 HttpServerErrorException 异常,需要重新封装一下
-            responseEntity = new ResponseEntity<String>(e.getResponseBodyAsString(), e.getStatusCode());
+            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);