From e1a849e9ce29901db9b418cb1f6e9af8e857105f Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期六, 13 四月 2019 17:52:31 +0800
Subject: [PATCH] 整理文档

---
 java110-event/src/main/java/com/java110/event/service/api/ServiceDataFlowEventPublishing.java |   34 +++++++++++++++++++++++++++-------
 1 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/java110-event/src/main/java/com/java110/event/service/api/ServiceDataFlowEventPublishing.java b/java110-event/src/main/java/com/java110/event/service/api/ServiceDataFlowEventPublishing.java
index 36d2d3d..6c29fc7 100644
--- a/java110-event/src/main/java/com/java110/event/service/api/ServiceDataFlowEventPublishing.java
+++ b/java110-event/src/main/java/com/java110/event/service/api/ServiceDataFlowEventPublishing.java
@@ -2,7 +2,9 @@
 
 import com.java110.common.constant.CommonConstant;
 import com.java110.common.constant.ResponseConstant;
+import com.java110.common.constant.ServiceCodeConstant;
 import com.java110.common.exception.BusinessException;
+import com.java110.common.exception.ListenerExecuteException;
 import com.java110.common.factory.ApplicationContextFactory;
 import com.java110.common.log.LoggerEngine;
 import com.java110.common.util.Assert;
@@ -11,6 +13,7 @@
 import com.java110.event.center.DataFlowListenerOrderComparator;
 import com.java110.event.service.BusinessServiceDataFlowEvent;
 import com.java110.event.service.BusinessServiceDataFlowListener;
+import org.springframework.http.HttpMethod;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -62,19 +65,26 @@
      * @since 1.8
      * @return
      */
-    public static List<ServiceDataFlowListener> getListeners(String serviceCode){
+    public static List<ServiceDataFlowListener> getListeners(String serviceCode,String httpMethod){
 
         Assert.hasLength(serviceCode,"鑾峰彇闇�瑕佸彂甯冪殑浜嬩欢澶勭悊渚﹀惉鏃讹紝浼犻�掍簨浠朵负绌猴紝璇锋鏌�");
 
+        String needCachedServiceCode = serviceCode+httpMethod;
         //鍏堜粠缂撳瓨涓幏鍙栵紝涓轰簡鎻愬崌鏁堢巼
-        if(cacheListenersMap.containsKey(serviceCode)){
-            return cacheListenersMap.get(serviceCode);
+        if(cacheListenersMap.containsKey(needCachedServiceCode)){
+            return cacheListenersMap.get(needCachedServiceCode);
         }
 
         List<ServiceDataFlowListener> dataFlowListeners = new ArrayList<ServiceDataFlowListener>();
         for(String listenerBeanName : getListeners()){
             ServiceDataFlowListener listener = ApplicationContextFactory.getBean(listenerBeanName,ServiceDataFlowListener.class);
-            if(serviceCode.equals(listener.getServiceCode())){
+            if(serviceCode.equals(listener.getServiceCode())
+                    && listener.getHttpMethod() == HttpMethod.valueOf(httpMethod)){
+                dataFlowListeners.add(listener);
+            }
+            //鐗规畩澶勭悊 閫忎紶绫绘帴鍙�
+            if(ServiceCodeConstant.SERVICE_CODE_DO_SERVICE_TRANSFER.equals(listener.getServiceCode())
+                    && ServiceCodeConstant.SERVICE_CODE_DO_SERVICE_TRANSFER.equals(serviceCode)){
                 dataFlowListeners.add(listener);
             }
         }
@@ -83,7 +93,7 @@
         DataFlowListenerOrderComparator.sort(dataFlowListeners);
 
         //灏嗘暟鎹斁鍏ョ紦瀛樹腑
-        cacheListenersMap.put(serviceCode,dataFlowListeners);
+        cacheListenersMap.put(needCachedServiceCode,dataFlowListeners);
         return dataFlowListeners;
     }
 
@@ -118,7 +128,8 @@
 
             multicastEvent(serviceCode,targetDataFlowEvent, asyn);
         }catch (Exception e){
-            throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR,"鍙戝竷渚﹀惉澶辫触锛屽け璐ュ師鍥犱负锛�"+e);
+            logger.error("鍙戝竷渚﹀惉澶辫触锛屽け璐ュ師鍥犱负锛�",e);
+            throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR,"鍙戝竷渚﹀惉澶辫触锛屽け璐ュ師鍥犱负锛�"+e.getMessage());
         }
 
     }
@@ -130,7 +141,14 @@
      * @param asyn A 琛ㄧず寮傛澶勭悊
      */
     public static void multicastEvent(String serviceCode,final ServiceDataFlowEvent event, String asyn) {
-        for (final ServiceDataFlowListener listener : getListeners(serviceCode)) {
+        String httpMethod = event.getDataFlowContext().getRequestCurrentHeaders().get(CommonConstant.HTTP_METHOD);
+        List<ServiceDataFlowListener> listeners = getListeners(serviceCode,httpMethod);
+        //杩欓噷鍒ゆ柇 serviceCode + httpMethod 鐨勪睛鍚紝濡傛灉娌℃湁娉ㄥ唽鐩存帴鎶ラ敊銆�
+        if(listeners == null || listeners.size() == 0){
+            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR,
+                    "鏈嶅姟銆�" + serviceCode + "銆戣皟鐢ㄦ柟寮忋��"+httpMethod+"銆戝綋鍓嶄笉鏀寔");
+        }
+        for (final ServiceDataFlowListener listener : listeners) {
 
             if(CommonConstant.PROCESS_ORDER_ASYNCHRONOUS.equals(asyn)){ //寮傛澶勭悊
 
@@ -150,6 +168,8 @@
         }
     }
 
+
+
     /**
      * Return the current task executor for this multicaster.
      */

--
Gitblit v1.8.0