java110
2020-07-08 d8d69911bfc7cbc1b86834aa6fb5ddbba2801b2b
优化事务处理完成
8个文件已修改
81 ■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/order/OrderDto.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/aop/Java110TransactionalAop.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/context/ApiDataFlow.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/event/service/api/ServiceDataFlowEventPublishing.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/community/repair/IAppraiseRepairService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/constant/CommonConstant.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/util/StringUtil.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/listener/system/TransferListener.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/order/OrderDto.java
@@ -6,10 +6,7 @@
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";
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 @@
        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 @@
    //环绕通知,环绕增强,相当于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 @@
            logger.error("执行方法异常", e);
            //回退事务
            Java110TransactionalFactory.fallbackOId();
            return new ResponseEntity("内部异常" + e.getLocalizedMessage(), HttpStatus.BAD_REQUEST);
            //return new BusinessDto(BusinessDto.CODE_ERROR, "内部异常" + e.getLocalizedMessage());
            throw e;
        }
    }
}
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 @@
            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);
java110-core/src/main/java/com/java110/core/event/service/api/ServiceDataFlowEventPublishing.java
@@ -88,6 +88,11 @@
                    && 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);
            }
        }
        //这里排序
java110-interface/src/main/java/com/java110/intf/community/repair/IAppraiseRepairService.java
@@ -6,6 +6,7 @@
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;
/**
 * 保存评价接口类
java110-utils/src/main/java/com/java110/utils/constant/CommonConstant.java
@@ -135,6 +135,10 @@
    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";
java110-utils/src/main/java/com/java110/utils/util/StringUtil.java
@@ -453,6 +453,21 @@
    }
    /**
     * 校验是否为JSON
     *
     * @param msg
     * @return
     */
    public static Boolean isJsonObject(String msg) {
        try {
            JSONObject.parseObject(msg);
        } catch (Exception e) {
            return false;
        }
        return true;
    }
    /**
     * 获取指定长度(按字节长度获取)的字符串,中文算2个字节长度,兼容oracle的 varchar2长度计算方式
     *
     * @param src    源字符串
service-api/src/main/java/com/java110/api/listener/system/TransferListener.java
@@ -57,14 +57,23 @@
            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);