From f39cd4d82c3952f8587ebff9a7e8ede73b46bcda Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期四, 30 五月 2019 00:40:32 +0800
Subject: [PATCH] Merge branch 'master' of https://github.com/java110/MicroCommunity

---
 java110-event/src/main/java/com/java110/event/center/DataFlowEventPublishing.java |  177 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 130 insertions(+), 47 deletions(-)

diff --git a/java110-event/src/main/java/com/java110/event/center/DataFlowEventPublishing.java b/java110-event/src/main/java/com/java110/event/center/DataFlowEventPublishing.java
index f3f3c82..c5f6df2 100644
--- a/java110-event/src/main/java/com/java110/event/center/DataFlowEventPublishing.java
+++ b/java110-event/src/main/java/com/java110/event/center/DataFlowEventPublishing.java
@@ -1,13 +1,16 @@
 package com.java110.event.center;
 
+import com.alibaba.fastjson.JSONObject;
 import com.java110.common.constant.CommonConstant;
-import com.java110.common.constant.ResponseConstant;
 import com.java110.common.exception.BusinessException;
+import com.java110.common.factory.ApplicationContextFactory;
 import com.java110.common.log.LoggerEngine;
 import com.java110.common.util.Assert;
-import com.java110.core.context.DataFlow;
+import com.java110.core.context.IOrderDataFlowContext;
+import com.java110.entity.order.Business;
+import com.java110.event.center.event.*;
+import com.java110.event.center.listener.DataFlowListener;
 
-import java.lang.reflect.Constructor;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
@@ -31,12 +34,12 @@
     /**
      * 淇濆瓨渚﹀惉瀹炰緥淇℃伅锛屼竴鑸惎鍔ㄦ椂鍔犺浇
      */
-    private final static List<DataFlowListener<?>> listeners = new ArrayList<DataFlowListener<?>>();
+    private final static List<String> listeners = new ArrayList<String>();
 
     /**
      * 淇濆瓨浜嬩欢瀹炰緥淇℃伅锛屼竴鑸惎鍔ㄦ椂鍔犺浇
      */
-    private final static Map<String,Class<DataFlowEvent>> events = new HashMap<String,Class<DataFlowEvent>>();
+   /* private final static Map<String,Class<DataFlowEvent>> events = new HashMap<String,Class<DataFlowEvent>>();*/
 
     /**
      * 鏍规嵁 浜嬩欢绫诲瀷鏌ヨ渚﹀惉
@@ -51,15 +54,25 @@
      * 娣诲姞 渚﹀惉锛岃繖涓彧鏈夊惎鍔ㄦ椂锛屽崟绾跨▼ 澶勭悊锛屾墍浠ユ槸绾跨▼瀹夊叏鐨�
      * @param listener
      */
-    public static void addListenner(DataFlowListener<?> listener){
+    /*public static void addListener(DataFlowListener<?> listener){
         listeners.add(listener);
+    }*/
+
+    /**
+     * 娉ㄨВ娉ㄥ唽渚﹀惉
+     * @param listenerBeanName
+     */
+    public static void addListener(String listenerBeanName){
+        //灏� listener 鏀惧叆 AppEventPublishing 涓柟渚垮悗鏈熸搷浣�
+        //娉ㄥ唽渚﹀惉
+        listeners.add(listenerBeanName);
     }
 
     /**
      * 鑾峰彇渚﹀惉锛堝叏閮ㄤ睛鍚級
      * @return
      */
-    public static List<DataFlowListener<?>> getListeners(){
+    private static List<String> getListeners(){
         return listeners;
     }
 
@@ -69,9 +82,9 @@
      * @since 1.8
      * @return
      */
-    public static List<DataFlowListener<?>> getListeners(String interfaceClassName){
+    private static List<DataFlowListener<?>> getListeners(String interfaceClassName){
 
-        Assert.isNull(interfaceClassName,"鑾峰彇闇�瑕佸彂甯冪殑浜嬩欢澶勭悊渚﹀惉鏃讹紝浼犻�掍簨浠朵负绌猴紝璇锋鏌�");
+        Assert.hasLength(interfaceClassName,"鑾峰彇闇�瑕佸彂甯冪殑浜嬩欢澶勭悊渚﹀惉鏃讹紝浼犻�掍簨浠朵负绌猴紝璇锋鏌�");
 
         //鍏堜粠缂撳瓨涓幏鍙栵紝涓轰簡鎻愬崌鏁堢巼
         if(cacheListenersMap.containsKey(interfaceClassName)){
@@ -79,7 +92,9 @@
         }
 
         List<DataFlowListener<?>> dataFlowListeners = new ArrayList<DataFlowListener<?>>();
-        for(DataFlowListener<?> listener : getListeners()){
+
+        for(String listenerBeanName : getListeners()){
+            DataFlowListener<?> listener = ApplicationContextFactory.getBean(listenerBeanName,DataFlowListener.class);
             Type[] types =  listener.getClass().getGenericInterfaces();
             for (Type type : types) {
                 if (type instanceof ParameterizedType) {
@@ -104,9 +119,9 @@
     /**
      * 娉ㄥ唽浜嬩欢
      */
-    public static void addEvent(String serviceCode ,Class<DataFlowEvent> event) {
+    /*public static void addEvent(String serviceCode ,Class<DataFlowEvent> event) {
         events.put(serviceCode,event);
-    }
+    }*/
 
     /**
      * 鑾峰彇浜嬩欢
@@ -114,57 +129,33 @@
      * @return
      * @throws Exception
      */
-    public static Class<DataFlowEvent> getEvent(String serviceCode) throws BusinessException{
+    /*public static Class<DataFlowEvent> getEvent(String serviceCode) throws BusinessException{
         Class<DataFlowEvent> targetEvent = events.get(serviceCode);
         //Assert.notNull(targetEvent,"鏀规湇鍔℃湭娉ㄥ唽璇ヤ簨浠禰serviceCode = "+serviceCode+"]锛岀郴缁熺洰鍓嶄笉鏀寔!");
         return targetEvent;
-    }
+    }*/
 
 
     /**
      * 鍙戝竷浜嬩欢
-     * @param serviceCode
-     * @param dataFlow
+     * @param event 浜嬩欢
      */
-    public static void multicastEvent(String serviceCode,DataFlow dataFlow) throws BusinessException{
+   /* public static void multicastEvent(String serviceCode,DataFlow dataFlow) throws BusinessException{
         multicastEvent(serviceCode,dataFlow,null);
+    }*/
+
+    private static void multicastEvent(final DataFlowEvent event) throws BusinessException{
+        multicastEvent(event,"S");
     }
-
-    /**
-     * 鍙戝竷浜嬩欢
-     * @param serviceCode
-     * @param dataFlow 杩欎釜璁㈠崟淇℃伅锛屼互渚夸簬 渚﹀惉閭h竟闇�瑕佺敤
-     */
-    public static void multicastEvent(String serviceCode,DataFlow dataFlow,String asyn) throws  BusinessException{
-        try {
-            Class<DataFlowEvent> dataFlowEventClass = getEvent(serviceCode);
-
-            if(dataFlowEventClass == null){
-                return ;
-            }
-
-            Class[] parameterTypes = {Object.class, DataFlow.class};
-
-            Constructor constructor = dataFlowEventClass.getClass().getConstructor(parameterTypes);
-            Object[] parameters = {null, dataFlow};
-            DataFlowEvent targetDataFlowEvent = (DataFlowEvent) constructor.newInstance(parameters);
-            multicastEvent(targetDataFlowEvent, asyn);
-        }catch (Exception e){
-            throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR,"鍙戝竷渚﹀惉澶辫触锛屽け璐ュ師鍥犱负锛�"+e);
-        }
-
-    }
-
-
-
 
     /**
      * 鍙戝竷浜嬩欢
      * @param event
      * @param asyn A 琛ㄧず寮傛澶勭悊
      */
-    public static void multicastEvent(final DataFlowEvent event, String asyn) {
-        for (final DataFlowListener<?> listener : getListeners(event.getClass().getName())) {
+    private static void multicastEvent(final DataFlowEvent event, String asyn) {
+
+            for (final DataFlowListener<?> listener :  getListeners(event.getClass().getName())) {
 
             if(CommonConstant.PROCESS_ORDER_ASYNCHRONOUS.equals(asyn)){ //寮傛澶勭悊
 
@@ -208,4 +199,96 @@
             throw new RuntimeException("鍙戝竷渚﹀惉澶辫触,"+listener+ event + e);
         }
     }
+
+
+    /***********************************************鍙戝竷渚﹀惉 寮�濮�***************************************************************/
+    /**
+     * 鍙戝竷鎺ュ彈璇锋眰浜嬩欢
+     * @param requestData
+     * @param headers
+     */
+    public static void receiveRequest(String requestData,Map<String,String> headers){
+        multicastEvent(new ReceiveRequestEvent("",null,requestData,headers));
+    }
+
+    /**
+     * 鍙戝竷棰勬牎楠屼睛鍚�
+     * @param requestData
+     * @param headers
+     */
+    public static void preValidateData(String requestData,Map<String,String> headers){
+        multicastEvent(new DataPreValidateEvent("",null,requestData,headers));
+    }
+
+    /**
+     * 鍒濆鍖� DataFlow 瀵硅薄瀹屾垚
+     * @param dataFlow 鏁版嵁娴佸璞�
+     */
+    public static void initDataFlowComplete(IOrderDataFlowContext dataFlow){
+        multicastEvent(new DataFlowInitCompleteEvent("",dataFlow));
+    }
+
+    /**
+     * 瑙勫垯鏍¢獙瀹屾垚浜嬩欢
+     * @param dataFlow 鏁版嵁娴佸璞�
+     */
+    public static void ruleValidateComplete(IOrderDataFlowContext dataFlow){
+        multicastEvent(new RuleValidateCompleteEvent("",dataFlow));
+    }
+
+    /**
+     * 鍔犺浇閰嶇疆鏂囦欢瀹屾垚
+     * @param dataFlow 鏁版嵁娴佸璞�
+     */
+    public static void loadConfigDataComplete(IOrderDataFlowContext dataFlow){
+        multicastEvent(new LoadConfigDataCompleteEvent("",dataFlow));
+    }
+
+
+    /**
+     * 璋冪敤涓氬姟绯荤粺浜嬩欢
+     * @param dataFlow 鏁版嵁娴�
+     */
+    public static void invokeBusinessSystem(IOrderDataFlowContext dataFlow){
+        multicastEvent(new InvokeBusinessSystemEvent("",dataFlow));
+    }
+
+
+    /**
+     * 璋冪敤涓氬姟绯荤粺鎴愬姛鍚庝簨浠�
+     * @param dataFlow
+     * @param business 鎴愬姛鐨勪簨浠朵笟鍔℃暟鎹皝瑁呭璞�
+     */
+    public static void invokeBusinessBSuccess(IOrderDataFlowContext dataFlow, Business business, JSONObject businessResponseData){
+        multicastEvent(new InvokeBusinessBSuccessEvent("",dataFlow,business,businessResponseData));
+    }
+
+    /**
+     * 璋冪敤涓氬姟绯荤粺鎴愬姛鍚庝簨浠�
+     * @param dataFlow
+     * @param business 鎴愬姛鐨勪簨浠朵笟鍔℃暟鎹皝瑁呭璞�
+     */
+    public static void invokeBusinessBSuccess(IOrderDataFlowContext dataFlow, Business business){
+        multicastEvent(new InvokeBusinessBSuccessEvent("",dataFlow,business));
+    }
+
+    /**
+     * 璋冪敤涓氬姟绯荤粺鎴愬姛鍚庝簨浠�
+     * @param dataFlow
+     * @param business 鎴愬姛鐨勪簨浠朵笟鍔℃暟鎹皝瑁呭璞�
+     */
+    public static void invokeBusinessISuccess(IOrderDataFlowContext dataFlow, Business business){
+        multicastEvent(new InvokeBusinessISuccessEvent("",dataFlow,business));
+    }
+
+
+    /**
+     * 鏁版嵁杩斿洖浜嬩欢
+     * @param dataFlow 鏁版嵁娴�
+     */
+    public static void dataResponse(IOrderDataFlowContext dataFlow,String responseData,Map<String,String> headers){
+        multicastEvent(new DataResponseEvent("",dataFlow,responseData,headers));
+    }
+
+    /***********************************************鍙戝竷渚﹀惉 缁撴潫***************************************************************/
 }

--
Gitblit v1.8.0