Sfoglia il codice sorgente

日志保存 和 调用链开发

wuxw7 7 anni fa
parent
commit
28441b3922
51 ha cambiato i file con 844 aggiunte e 1639 eliminazioni
  1. 6 0
      CenterService/pom.xml
  2. 19 9
      CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java
  3. 0 0
      LogService/README.md
  4. 0 0
      LogService/orderDispatch.png
  5. 4 9
      OrderService/pom.xml
  6. 34 0
      LogService/src/main/java/com/java110/log/LogServiceApplicationStart.java
  7. 23 0
      LogService/src/main/java/com/java110/log/dao/impl/LogServiceDaoImpl.java
  8. 20 0
      LogService/src/main/java/com/java110/log/dao/logServiceDao.java
  9. 16 0
      LogService/src/main/java/com/java110/log/kafka/LogServiceBean.java
  10. 87 0
      LogService/src/main/java/com/java110/log/kafka/LogServiceKafka.java
  11. 15 0
      LogService/src/main/java/com/java110/log/smo/ILogServiceSMO.java
  12. 15 0
      LogService/src/main/java/com/java110/log/smo/impl/LogServiceSMOImpl.java
  13. 0 0
      LogService/src/main/resources/application.yml
  14. 1 1
      OrderService/src/test/java/com/java110/order/AppTest.java
  15. 1 2
      OrderService/src/test/java/com/java110/order/common/PreBoCustAttr.java
  16. 1 2
      OrderService/src/test/java/com/java110/order/executor/ExecutorTest.java
  17. 1 1
      OrderService/src/test/java/com/java110/order/executor/PrintInt.java
  18. 1 2
      OrderService/src/test/java/com/java110/order/jsonpath/CustIdTest.java
  19. 1 1
      OrderService/src/test/java/com/java110/order/type/AppCustEvent.java
  20. 1 1
      OrderService/src/test/java/com/java110/order/type/AppEvent.java
  21. 1 1
      OrderService/src/test/java/com/java110/order/type/AppListener.java
  22. 1 1
      OrderService/src/test/java/com/java110/order/type/CommonTest.java
  23. 1 1
      OrderService/src/test/java/com/java110/order/type/CustDispatchListener.java
  24. 1 1
      OrderService/src/test/java/com/java110/order/type/Ordered.java
  25. 2 6
      OrderService/src/test/java/com/java110/order/type/TypeTest.java
  26. 0 36
      OrderService/src/main/java/com/java110/order/AppSpringBootApplication.java
  27. 0 77
      OrderService/src/main/java/com/java110/order/dao/IOrderServiceDao.java
  28. 0 105
      OrderService/src/main/java/com/java110/order/dao/impl/OrderServiceDaoImpl.java
  29. 0 33
      OrderService/src/main/java/com/java110/order/mq/DeleteOrderInfoProducer.java
  30. 0 28
      OrderService/src/main/java/com/java110/order/mq/MqConfig.java
  31. 0 423
      OrderService/src/main/java/com/java110/order/rest/OrderServiceRest.java
  32. 0 96
      OrderService/src/main/java/com/java110/order/smo/IOrderServiceSMO.java
  33. 0 789
      OrderService/src/main/java/com/java110/order/smo/impl/OrderServiceSMOImpl.java
  34. 5 2
      java110-common/src/main/java/com/java110/common/util/SequenceUtil.java
  35. 1 1
      java110-core/src/main/java/com/java110/core/base/controller/BaseController.java
  36. 77 2
      java110-core/src/main/java/com/java110/core/context/AbstractDataFlowContext.java
  37. 128 0
      java110-core/src/main/java/com/java110/core/context/AbstractTransactionLog.java
  38. 1 1
      java110-core/src/main/java/com/java110/core/context/BusinessServiceDataFlow.java
  39. 3 3
      java110-core/src/main/java/com/java110/core/context/CodeDataFlow.java
  40. 1 1
      java110-core/src/main/java/com/java110/core/context/DataFlow.java
  41. 94 0
      java110-core/src/main/java/com/java110/core/context/TransactionLog.java
  42. 49 0
      java110-core/src/main/java/com/java110/core/factory/DataTransactionFactory.java
  43. 39 0
      java110-logAgent/pom.xml
  44. 49 0
      java110-logAgent/src/main/java/com/java110/log/agent/LogAgent.java
  45. 33 0
      java110-logAgent/src/test/java/com/java110/AppTest.java
  46. 1 0
      java110-service/pom.xml
  47. 9 4
      pom.xml
  48. 55 0
      zipkin/pom.xml
  49. 14 0
      zipkin/src/main/java/com.java110.zipkin/ZipkinServerApplication.java
  50. 11 0
      zipkin/src/main/resources/application-ha.yml
  51. 22 0
      zipkin/src/main/resources/application.yml

+ 6 - 0
CenterService/pom.xml

@@ -37,6 +37,12 @@
             <artifactId>java110-config</artifactId>
             <scope>provided</scope>
         </dependency>
+
+        <dependency>
+            <groupId>com.java110</groupId>
+            <artifactId>java110-logAgent</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>

+ 19 - 9
CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java

@@ -8,23 +8,25 @@ import com.java110.common.cache.AppRouteCache;
 import com.java110.common.cache.MappingCache;
 import com.java110.common.constant.*;
 import com.java110.common.exception.*;
-import com.java110.core.factory.AuthenticationFactory;
-import com.java110.core.factory.DataFlowFactory;
-import com.java110.core.factory.DataTransactionFactory;
 import com.java110.common.kafka.KafkaFactory;
 import com.java110.common.log.LoggerEngine;
 import com.java110.common.util.*;
-import com.java110.entity.center.Business;
 import com.java110.core.context.DataFlow;
-import com.java110.entity.center.*;
+import com.java110.core.factory.AuthenticationFactory;
+import com.java110.core.factory.DataFlowFactory;
+import com.java110.core.factory.DataTransactionFactory;
+import com.java110.entity.center.AppRoute;
+import com.java110.entity.center.AppService;
+import com.java110.entity.center.Business;
+import com.java110.entity.center.DataFlowLinksCost;
 import com.java110.event.center.DataFlowEventPublishing;
+
 import com.java110.service.smo.IQueryServiceSMO;
 import org.apache.commons.lang3.math.NumberUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
 
 import java.util.*;
@@ -63,6 +65,10 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
             reqJson = decrypt(reqJson,headers);
             //1.0 创建数据流
             dataFlow = DataFlowFactory.newInstance(DataFlow.class).builder(reqJson, headers);
+
+            /*LogAgent.sendLog(dataFlow.reBuilder(dataFlow.getTransactionId(),LogAgent.LOG_TYPE_S,LogAgent.LOG_STATUS_S,
+                    dataFlow.getRequestURL(),dataFlow.getReqData(),dataFlow.getHeaders()));
+*/
             //2.0 加载配置信息
             initConfigData(dataFlow);
             //3.0 校验 APPID是否有权限操作serviceCode
@@ -123,17 +129,21 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
                 dataFlow.setEndDate(endDate);
                 dataFlow.setResJson(responseJson);
                 //添加耗时
-                DataFlowFactory.addCostTime(dataFlow, "service", "业务处理总耗时", dataFlow.getStartDate(), dataFlow.getEndDate());
+                //DataFlowFactory.addCostTime(dataFlow, "service", "业务处理总耗时", dataFlow.getStartDate(), dataFlow.getEndDate());
 
                 //这里保存耗时,以及日志
-                saveLogMessage(dataFlow.getReqJson(), dataFlow.getResJson());
+                //saveLogMessage(dataFlow.getReqJson(), dataFlow.getResJson());
 
                 //保存耗时
-                saveCostTimeLogMessage(dataFlow);
+                //saveCostTimeLogMessage(dataFlow);
                 //处理返回报文鉴权
                 AuthenticationFactory.putSign(dataFlow, responseJson);
             }
             resJson = encrypt(responseJson.toJSONString(),headers);
+            /*LogAgent.sendLog(dataFlow.reBuilder(dataFlow.getTransactionId(),
+                            LogAgent.LOG_TYPE_C,DataTransactionFactory.isSuccessBusiness(responseJson)?
+                            LogAgent.LOG_STATUS_S:LogAgent.LOG_STATUS_F,
+                    dataFlow.getRequestURL(),responseJson.toJSONString(),headers));*/
             return resJson;
 
         }

OrderService/README.md → LogService/README.md


OrderService/orderDispatch.png → LogService/orderDispatch.png


+ 4 - 9
OrderService/pom.xml

@@ -7,10 +7,10 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>OrderService</artifactId>
+    <artifactId>LogService</artifactId>
     <packaging>jar</packaging>
 
-    <name>OrderService</name>
+    <name>LogService</name>
     <url>http://maven.apache.org</url>
 
     <properties>
@@ -24,11 +24,6 @@
             <artifactId>java110-service</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>com.java110</groupId>
-            <artifactId>java110-event</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>com.java110</groupId>
             <artifactId>java110-config</artifactId>
@@ -37,7 +32,7 @@
     </dependencies>
 
     <build>
-        <finalName>OrderService</finalName>
+        <finalName>LogService</finalName>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
@@ -69,7 +64,7 @@
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <configuration>
-                    <mainClass>com.java110.order.AppSpringBootApplication</mainClass>
+                    <mainClass>com.java110.log.LogServiceApplicationStart</mainClass>
                 </configuration>
             </plugin>
         </plugins>

+ 34 - 0
LogService/src/main/java/com/java110/log/LogServiceApplicationStart.java

@@ -0,0 +1,34 @@
+package com.java110.log;
+
+/**
+ * Hello world!
+ */
+
+import com.java110.service.init.ServiceStartInit;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.context.ApplicationContext;
+
+/**
+ * 日志服务初始化启动类 初始化启动类
+ *
+ * @version v0.1
+ * @auther com.java110.wuxw
+ * @mail 928255095@qq.com
+ * @date 2016年8月6日
+ * @tag
+ */
+@SpringBootApplication(scanBasePackages = {"com.java110.service","com.java110.log","com.java110.core","com.java110.cache"})
+@EnableDiscoveryClient
+public class LogServiceApplicationStart {
+
+
+    public static void main(String[] args) throws Exception {
+
+        ApplicationContext context =  SpringApplication.run(LogServiceApplicationStart.class, args);
+
+        ServiceStartInit.initSystemConfig(context);
+
+    }
+}

+ 23 - 0
LogService/src/main/java/com/java110/log/dao/impl/LogServiceDaoImpl.java

@@ -0,0 +1,23 @@
+package com.java110.log.dao.impl;
+
+import com.java110.common.log.LoggerEngine;
+import com.java110.core.base.dao.BaseServiceDao;
+import com.java110.entity.order.BusiOrder;
+import com.java110.entity.order.BusiOrderAttr;
+import com.java110.entity.order.OrderList;
+import com.java110.entity.order.OrderListAttr;
+import com.java110.log.dao.logServiceDao;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 日志服务 与数据库交互
+ * Created by wuxw on 2017/4/5.
+ */
+
+@Service("logServiceDaoImpl")
+@Transactional
+public class LogServiceDaoImpl extends BaseServiceDao implements logServiceDao {
+}

+ 20 - 0
LogService/src/main/java/com/java110/log/dao/logServiceDao.java

@@ -0,0 +1,20 @@
+package com.java110.log.dao;
+
+import com.java110.entity.order.BusiOrder;
+import com.java110.entity.order.BusiOrderAttr;
+import com.java110.entity.order.OrderList;
+import com.java110.entity.order.OrderListAttr;
+
+import java.util.List;
+
+/**
+ * 购物车,订单项信息管理
+ *
+ * 增加,查询
+ * 没有查询,理论上购物车信息,不允许删除和修改
+ *
+ * Created by wuxw on 2016/12/27.
+ */
+public interface logServiceDao {
+
+}

+ 16 - 0
LogService/src/main/java/com/java110/log/kafka/LogServiceBean.java

@@ -0,0 +1,16 @@
+package com.java110.log.kafka;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Created by wuxw on 2018/4/15.
+ */
+@Configuration
+public class LogServiceBean {
+    @Bean
+    public LogServiceKafka listener() {
+        return new LogServiceKafka();
+    }
+
+}

+ 87 - 0
LogService/src/main/java/com/java110/log/kafka/LogServiceKafka.java

@@ -0,0 +1,87 @@
+package com.java110.log.kafka;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.KafkaConstant;
+import com.java110.common.constant.ResponseConstant;
+import com.java110.common.constant.StatusConstant;
+import com.java110.common.exception.InitConfigDataException;
+import com.java110.common.exception.InitDataFlowContextException;
+import com.java110.common.kafka.KafkaFactory;
+import com.java110.core.base.controller.BaseController;
+import com.java110.core.context.BusinessServiceDataFlow;
+import com.java110.core.factory.DataTransactionFactory;
+import com.java110.log.smo.ILogServiceSMO;
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.kafka.annotation.KafkaListener;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * kafka侦听
+ * Created by wuxw on 2018/4/15.
+ */
+public class LogServiceKafka extends BaseController {
+
+    @Autowired
+    private ILogServiceSMO logServiceSMOImpl;
+
+    @KafkaListener(topics = {KafkaConstant.TOPIC_LOG_NAME})
+    public void listen(ConsumerRecord<?, ?> record) {
+        logger.info("kafka的key: " + record.key());
+        logger.info("kafka的value: " + record.value().toString());
+        String orderInfo = record.value().toString();
+        BusinessServiceDataFlow businessServiceDataFlow = null;
+        JSONObject responseJson = null;
+        try {
+            Map<String, String> headers = new HashMap<String, String>();
+            //预校验
+            preValiateOrderInfo(orderInfo);
+            businessServiceDataFlow = this.writeDataToDataFlowContext(orderInfo, headers);
+            //responseJson = logServiceSMOImpl.service(businessServiceDataFlow);
+        }catch (InitDataFlowContextException e){
+            logger.error("请求报文错误,初始化 BusinessServiceDataFlow失败"+orderInfo,e);
+            responseJson = DataTransactionFactory.createNoBusinessTypeBusinessResponseJson(orderInfo,ResponseConstant.RESULT_PARAM_ERROR,e.getMessage(),null);
+        }catch (InitConfigDataException e){
+            logger.error("请求报文错误,加载配置信息失败"+orderInfo,e);
+            responseJson = DataTransactionFactory.createNoBusinessTypeBusinessResponseJson(orderInfo,ResponseConstant.RESULT_PARAM_ERROR,e.getMessage(),null);
+        }catch (Exception e){
+            logger.error("请求订单异常",e);
+            responseJson = DataTransactionFactory.createBusinessResponseJson(businessServiceDataFlow,ResponseConstant.RESULT_CODE_ERROR,e.getMessage()+e,
+                    null);
+        }finally {
+            logger.debug("当前请求报文:" + orderInfo +", 当前返回报文:" +responseJson.toJSONString());
+            //只有business 和 instance 过程才做通知消息
+            if(!StatusConstant.REQUEST_BUSINESS_TYPE_BUSINESS.equals(responseJson.getString("businessType"))
+                    && !StatusConstant.REQUEST_BUSINESS_TYPE_INSTANCE.equals(responseJson.getString("businessType"))){
+                return ;
+            }
+            try {
+                KafkaFactory.sendKafkaMessage(KafkaConstant.TOPIC_NOTIFY_CENTER_SERVICE_NAME, "", responseJson.toJSONString());
+            }catch (Exception e){
+                logger.error("用户服务通知centerService失败"+responseJson,e);
+                //这里保存异常信息
+            }
+        }
+    }
+
+
+    /**
+     * 这里预校验,请求报文中不能有 dataFlowId
+     * @param orderInfo
+     */
+    private void preValiateOrderInfo(String orderInfo) {
+       /* if(JSONObject.parseObject(orderInfo).getJSONObject("orders").containsKey("dataFlowId")){
+            throw new BusinessException(ResponseConstant.RESULT_CODE_ERROR,"报文中不能存在dataFlowId节点");
+        }*/
+    }
+
+    public ILogServiceSMO getLogServiceSMOImpl() {
+        return logServiceSMOImpl;
+    }
+
+    public void setLogServiceSMOImpl(ILogServiceSMO logServiceSMOImpl) {
+        this.logServiceSMOImpl = logServiceSMOImpl;
+    }
+}

+ 15 - 0
LogService/src/main/java/com/java110/log/smo/ILogServiceSMO.java

@@ -0,0 +1,15 @@
+package com.java110.log.smo;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.entity.order.OrderList;
+
+/**
+ * 订单服务业务处理接口
+ *
+ * 订单受理
+ * Created by wuxw on 2017/4/11.
+ */
+public interface ILogServiceSMO {
+
+
+}

+ 15 - 0
LogService/src/main/java/com/java110/log/smo/impl/LogServiceSMOImpl.java

@@ -0,0 +1,15 @@
+package com.java110.log.smo.impl;
+
+import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.log.smo.ILogServiceSMO;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 订单服务业务逻辑处理实现类
+ * Created by wuxw on 2017/4/11.
+ */
+@Service("orderServiceSMOImpl")
+@Transactional
+public class LogServiceSMOImpl extends BaseServiceSMO implements ILogServiceSMO {
+}

OrderService/src/main/resources/application.yml → LogService/src/main/resources/application.yml


+ 1 - 1
OrderService/src/test/java/com/java110/order/AppTest.java

@@ -1,4 +1,4 @@
-package com.java110.order;
+package com.java110.log;
 
 import junit.framework.Test;
 import junit.framework.TestCase;

+ 1 - 2
OrderService/src/test/java/com/java110/order/common/PreBoCustAttr.java

@@ -1,8 +1,7 @@
-package com.java110.order.common;
+package com.java110.log.common;
 
 import com.alibaba.fastjson.JSONObject;
 import com.java110.entity.user.BoCustAttr;
-import com.java110.order.AppTest;
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;

+ 1 - 2
OrderService/src/test/java/com/java110/order/executor/ExecutorTest.java

@@ -1,6 +1,5 @@
-package com.java110.order.executor;
+package com.java110.log.executor;
 
-import com.java110.order.AppTest;
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;

+ 1 - 1
OrderService/src/test/java/com/java110/order/executor/PrintInt.java

@@ -1,4 +1,4 @@
-package com.java110.order.executor;
+package com.java110.log.executor;
 
 import java.util.concurrent.Callable;
 

+ 1 - 2
OrderService/src/test/java/com/java110/order/jsonpath/CustIdTest.java

@@ -1,8 +1,7 @@
-package com.java110.order.jsonpath;
+package com.java110.log.jsonpath;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONPath;
-import com.java110.order.AppTest;
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;

+ 1 - 1
OrderService/src/test/java/com/java110/order/type/AppCustEvent.java

@@ -1,4 +1,4 @@
-package com.java110.order.type;
+package com.java110.log.type;
 
 import com.java110.core.context.AppContext;
 

+ 1 - 1
OrderService/src/test/java/com/java110/order/type/AppEvent.java

@@ -1,4 +1,4 @@
-package com.java110.order.type;
+package com.java110.log.type;
 
 import com.java110.core.context.AppContext;
 

+ 1 - 1
OrderService/src/test/java/com/java110/order/type/AppListener.java

@@ -1,4 +1,4 @@
-package com.java110.order.type;
+package com.java110.log.type;
 
 
 

+ 1 - 1
OrderService/src/test/java/com/java110/order/type/CommonTest.java

@@ -1,4 +1,4 @@
-package com.java110.order.type;
+package com.java110.log.type;
 
 import junit.framework.Test;
 import junit.framework.TestCase;

+ 1 - 1
OrderService/src/test/java/com/java110/order/type/CustDispatchListener.java

@@ -1,4 +1,4 @@
-package com.java110.order.type;
+package com.java110.log.type;
 
 
 

+ 1 - 1
OrderService/src/test/java/com/java110/order/type/Ordered.java

@@ -1,4 +1,4 @@
-package com.java110.order.type;
+package com.java110.log.type;
 
 /**
  * 顺序

+ 2 - 6
OrderService/src/test/java/com/java110/order/type/TypeTest.java

@@ -1,15 +1,11 @@
-package com.java110.order.type;
+package com.java110.log.type;
 
-import com.java110.order.AppTest;
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
-import org.apache.ibatis.plugin.Signature;
 
-import java.io.IOException;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
 
 /**
  * Created by wuxw on 2017/4/14.
@@ -42,7 +38,7 @@ public class TypeTest
          * @throws Exception
          */
     public void testType() throws Exception{
-       Object obj = Class.forName("com.java110.order.type.CustDispatchListener").newInstance();
+       Object obj = Class.forName("com.java110.log.type.CustDispatchListener").newInstance();
         Type[] types = obj.getClass().getGenericInterfaces();
        System.out.println(((ParameterizedType)types[0]).getActualTypeArguments()[0].getTypeName());
     }

+ 0 - 36
OrderService/src/main/java/com/java110/order/AppSpringBootApplication.java

@@ -1,36 +0,0 @@
-package com.java110.order;
-
-import com.java110.config.properties.EventProperties;
-import com.java110.event.init.SystemStartUpInit;
-import com.sun.javafx.scene.EventHandlerProperties;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.annotation.PropertySource;
-
-
-/**
- * spring boot 初始化启动类
- *
- * @version v0.1
- * @auther com.java110.wuxw
- * @mail 928255095@qq.com
- * @date 2016年8月6日
- * @tag
- */
-//@SpringBootApplication(scanBasePackages="com.java110.service,com.java110.order,com.java110.core,com.java110.event")
-@SpringBootApplication(scanBasePackages={"com.java110.service","com.java110.order","com.java110.core","com.java110.event"})
-@EnableDiscoveryClient
-@EnableConfigurationProperties(EventProperties.class)
-public class AppSpringBootApplication {
-
-    public static void main(String[] args) throws Exception{
-        ApplicationContext context = SpringApplication.run(AppSpringBootApplication.class, args);
-
-        SystemStartUpInit systemStartUpInit = new SystemStartUpInit();
-
-        systemStartUpInit.initSystemConfig(context);
-    }
-}

+ 0 - 77
OrderService/src/main/java/com/java110/order/dao/IOrderServiceDao.java

@@ -1,77 +0,0 @@
-package com.java110.order.dao;
-
-import com.java110.entity.order.BusiOrder;
-import com.java110.entity.order.BusiOrderAttr;
-import com.java110.entity.order.OrderList;
-import com.java110.entity.order.OrderListAttr;
-import com.java110.entity.user.BoCust;
-import com.java110.entity.user.BoCustAttr;
-import com.java110.entity.user.Cust;
-import com.java110.entity.user.CustAttr;
-
-import java.util.List;
-
-/**
- * 购物车,订单项信息管理
- *
- * 增加,查询
- * 没有查询,理论上购物车信息,不允许删除和修改
- *
- * Created by wuxw on 2016/12/27.
- */
-public interface IOrderServiceDao {
-
-    /**
-     * 保存购物车信息(过程表)
-     * @param orderList 购物车信息
-     * @return
-     */
-    public int saveDataToBoOrderList(OrderList orderList) throws RuntimeException;
-
-    /**
-     * 保存购物车属性(过程表)
-     * @param orderListAttr 用户属性
-     * @return
-     * @throws RuntimeException
-     */
-    public int saveDataToOrderListAttr(OrderListAttr orderListAttr) throws RuntimeException ;
-
-    /**
-     *  保存订单项(过程表)
-     * @param busiOrder 用户信息
-     * @return
-     * @throws RuntimeException
-     */
-    public int saveDataToBusiOrder(BusiOrder busiOrder) throws RuntimeException;
-
-    /**
-     * 保存订单项属性
-     * @param busiOrderAttr
-     * @return
-     * @throws RuntimeException
-     */
-
-    public int saveDataToBusiOrderAttr(BusiOrderAttr busiOrderAttr) throws RuntimeException;
-
-
-    /**
-     * 查询订单信息(order_list order_list_attr)
-     * @param orderList
-     * @return
-     * @throws RuntimeException
-     */
-    public List<OrderList> queryOrderListAndAttr(OrderList orderList) throws RuntimeException;
-
-
-    /**
-     * 查询订单信息(busi_order busi_order_attr)
-     * @param busiOrder
-     * @return
-     * @throws RuntimeException
-     */
-    public List<BusiOrder> queryBusiOrderAndAttr(BusiOrder busiOrder) throws RuntimeException;
-
-
-
-
-}

+ 0 - 105
OrderService/src/main/java/com/java110/order/dao/impl/OrderServiceDaoImpl.java

@@ -1,105 +0,0 @@
-package com.java110.order.dao.impl;
-
-import com.java110.common.log.LoggerEngine;
-import com.java110.core.base.dao.BaseServiceDao;
-import com.java110.entity.order.BusiOrder;
-import com.java110.entity.order.BusiOrderAttr;
-import com.java110.entity.order.OrderList;
-import com.java110.entity.order.OrderListAttr;
-import com.java110.entity.user.BoCust;
-import com.java110.entity.user.BoCustAttr;
-import com.java110.entity.user.Cust;
-import com.java110.entity.user.CustAttr;
-import com.java110.order.dao.IOrderServiceDao;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-/**
- * 用户服务 与数据库交互
- * Created by wuxw on 2017/4/5.
- */
-
-/**
- * 用户信息实现工程
- * Created by wuxw on 2016/12/27.
- */
-@Service("orderServiceDaoImpl")
-@Transactional
-public class OrderServiceDaoImpl extends BaseServiceDao implements IOrderServiceDao {
-
-
-    /**
-     * 保存购物车信息
-     * @param orderList 购物车信息
-     * @return
-     * @throws RuntimeException
-     */
-    @Override
-    public int saveDataToBoOrderList(OrderList orderList) throws RuntimeException {
-        LoggerEngine.debug("----【OrderServiceDaoImpl.saveDataToBoOrderList】保存数据入参 : " + orderList);
-        int saveFlag = 0;
-            saveFlag = sqlSessionTemplate.insert("orderServiceDaoImpl.saveDataToBoOrderList",orderList);
-            LoggerEngine.debug("----【OrderServiceDaoImpl.saveDataToBoOrderList】保存数据出参 : saveFlag:" + saveFlag);
-            return saveFlag;
-    }
-
-    /**
-     * 购物车信息属性保存
-     * @param orderListAttr 用户属性
-     * @return
-     * @throws RuntimeException
-     */
-    @Override
-    public int saveDataToOrderListAttr(OrderListAttr orderListAttr) throws RuntimeException {
-        LoggerEngine.debug("----【OrderServiceDaoImpl.saveDataToOrderListAttr】保存数据入参 : " + orderListAttr);
-        int saveFlag = 0;
-        saveFlag = sqlSessionTemplate.insert("orderServiceDaoImpl.saveDataToOrderListAttr",orderListAttr);
-        LoggerEngine.debug("----【OrderServiceDaoImpl.saveDataToOrderListAttr】保存数据出参 : saveFlag:" + saveFlag);
-        return saveFlag;
-    }
-
-    @Override
-    public int saveDataToBusiOrder(BusiOrder busiOrder) throws RuntimeException {
-        LoggerEngine.debug("----【OrderServiceDaoImpl.saveDataToBusiOrder】保存数据入参 : " + busiOrder);
-        int saveFlag = 0;
-        saveFlag = sqlSessionTemplate.insert("orderServiceDaoImpl.saveDataToBusiOrder",busiOrder);
-        LoggerEngine.debug("----【OrderServiceDaoImpl.saveDataToBusiOrder】保存数据出参 : saveFlag:" + saveFlag);
-        return saveFlag;
-    }
-
-    @Override
-    public int saveDataToBusiOrderAttr(BusiOrderAttr busiOrderAttr) throws RuntimeException {
-        LoggerEngine.debug("----【OrderServiceDaoImpl.saveDataToBusiOrderAttr】保存数据入参 : " + busiOrderAttr);
-        int saveFlag = 0;
-        saveFlag = sqlSessionTemplate.insert("orderServiceDaoImpl.saveDataToBusiOrderAttr",busiOrderAttr);
-        LoggerEngine.debug("----【OrderServiceDaoImpl.saveDataToBusiOrderAttr】保存数据出参 : saveFlag:" + saveFlag);
-        return saveFlag;
-    }
-
-    /**
-     * 查询订单信息(order_list order_list_attr)
-     * @param orderList
-     * @return
-     * @throws RuntimeException
-     */
-    @Override
-    public List<OrderList> queryOrderListAndAttr(OrderList orderList) throws RuntimeException {
-
-        LoggerEngine.debug("----【OrderServiceDaoImpl.queryOrderListAndAttr】保存数据入参 : " + orderList);
-        return sqlSessionTemplate.selectList("orderServiceDaoImpl.queryOrderListAndAttr",orderList);
-    }
-
-    /**
-     * 查询订单信息(busi_order busi_order_attr)
-     * @param busiOrder
-     * @return
-     * @throws RuntimeException
-     */
-    @Override
-    public List<BusiOrder> queryBusiOrderAndAttr(BusiOrder busiOrder) throws RuntimeException {
-        LoggerEngine.debug("----【OrderServiceDaoImpl.queryBusiOrderAndAttr】保存数据入参 : " + busiOrder);
-        return sqlSessionTemplate.selectList("orderServiceDaoImpl.queryBusiOrderAndAttr",busiOrder);
-    }
-}

+ 0 - 33
OrderService/src/main/java/com/java110/order/mq/DeleteOrderInfoProducer.java

@@ -1,33 +0,0 @@
-package com.java110.order.mq;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jms.core.JmsMessagingTemplate;
-import org.springframework.stereotype.Component;
-
-import javax.jms.Queue;
-import javax.jms.Topic;
-
-
-/**
- * 作废订单信息
- *
- * Created by wuxw on 2017/4/17.
- */
-//@Component
-public class DeleteOrderInfoProducer {
-
-    @Autowired
-    private JmsMessagingTemplate jmsMessagingTemplate;
-
-    @Autowired
-    private Topic deleteOrderTopic;
-
-
-    /**
-     * 发布消息
-     * @param msg
-     */
-    public void send(String msg) {
-        this.jmsMessagingTemplate.convertAndSend(deleteOrderTopic, msg);
-    }
-}

+ 0 - 28
OrderService/src/main/java/com/java110/order/mq/MqConfig.java

@@ -1,28 +0,0 @@
-package com.java110.order.mq;
-
-import org.apache.activemq.command.ActiveMQQueue;
-import org.apache.activemq.command.ActiveMQTopic;
-import org.springframework.beans.factory.annotation.Configurable;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-
-import javax.jms.Queue;
-import javax.jms.Topic;
-
-/**
- * Created by wuxw on 2017/4/17.
- */
-@Configurable
-@ConfigurationProperties(prefix = "mq.queue.name",locations="classpath:mq/mq.properties")
-public class MqConfig {
-
-    @Bean
-    public Queue queue() {
-        return new ActiveMQQueue("sample.queue");
-    }
-
-    @Bean
-    public Topic deleteOrderTopic() {
-        return new ActiveMQTopic("sample.topic");
-    }
-}

+ 0 - 423
OrderService/src/main/java/com/java110/order/rest/OrderServiceRest.java

@@ -1,423 +0,0 @@
-package com.java110.order.rest;
-
-import com.alibaba.fastjson.JSONObject;
-import com.java110.common.log.LoggerEngine;
-import com.java110.common.util.ProtocolUtil;
-import com.java110.core.base.controller.BaseController;
-import com.java110.entity.order.OrderList;
-import com.java110.order.smo.IOrderServiceSMO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.Assert;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 订单服务 提供类
- *
- * 主要提供订单相关服务
- * Created by wuxw on 2017/4/11.
- */
-@RestController
-public class OrderServiceRest extends BaseController {
-
-
-    @Autowired
-    IOrderServiceSMO iOrderServiceSMO;
-
-
-    /**
-     * 查询订单信息
-     * 接口协议:
-     * 请求报文
-     * {'olId':'71234567','extSystemId':'','custId':'','channelId':''}
-     *
-     * 可以根据 购物车ID 或者 外部系统ID 或者 custId 或者 channelId
-     *
-     * 返回报文:
-     * {
-     "RESULT_CODE": "0000",
-     "RESULT_MSG": "成功",
-     "RESULT_INFO": {
-     "orderLists": [
-     {
-     "channelId": "700212896",
-     "remarks": "",
-     "olId": "123456",
-     "custId": "701008023904",
-     "statusCd": "S",
-     "reqTime": "20170411163709",
-     "extSystemId": "310013698777",
-     "olTypeCd": "15",
-     "orderListAttrs": [
-     {
-     "olId": "123456",
-     "attrCd": "712345",
-     "value": "XXX",
-     "name": "系统来源"
-     }
-     ],
-     "busiOrders": [
-     {
-     "boId": "123456",
-     "olId": "123456",
-     "actionTypeCd": "C1",
-     "status_cd": "0",
-     "create_dt": "2017-04-16 22:58:03",
-     "start_dt": "2017-04-16 22:58:03",
-     "end_dt": "2017-04-16 22:58:03",
-     "remark": "",
-     "busiOrders": [
-     {
-     "boId": "123456",
-     "attrCd": "712345",
-     "value": "XXX",
-     "name": "系统来源"
-     }
-     ]
-     }
-     ]
-     }
-     ]
-     }
-     }
-     *
-     * @param orderInfo
-     * @return
-     */
-    @RequestMapping("/orderService/queryOrder")
-    public String queryOrder(@RequestParam("orderInfo") String orderInfo) {
-
-        LoggerEngine.debug("soOrderService入参:" + orderInfo);
-        String resultUserInfo = null;
-
-        JSONObject reqOrderJSON = null;
-
-        try{
-
-            reqOrderJSON = this.simpleValidateJSON(orderInfo);
-
-            //校验 购物车ID 或者 外部系统ID 或者 custId 或者 channelId 中的一个是
-            Assert.notNull(reqOrderJSON);
-
-            if(!reqOrderJSON.containsKey("olId") && !reqOrderJSON.containsKey("extSystemId")
-                    && !reqOrderJSON.containsKey("custId") && !reqOrderJSON.containsKey("channelId")){
-                throw new IllegalArgumentException("此接口只支持用olId,extSystemId,custId,channelId 来查询订单,当前请求报文为:"+orderInfo);
-            }
-            //转化为 对象
-            OrderList orderListTmp = JSONObject.toJavaObject(reqOrderJSON, OrderList.class);
-
-            resultUserInfo = iOrderServiceSMO.queryOrderInfo(orderListTmp);
-
-        }catch (Exception e){
-            LoggerEngine.error("查询失败,orderInfo = "+orderInfo,e);
-            resultUserInfo = ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_ERROR,"查询失败,orderInfo = "+orderInfo+"失败原因:"+e,null);
-        }finally {
-            return resultUserInfo;
-        }
-    }
-
-    /**
-     * 订单统一处理接口
-     *
-     * orderListInfo 中字段 asyn 如果为 A 表示 异步处理订单,其他表同步处理订单
-     * 接口协议
-     * {
-     "orderList": {
-     "orderListAttrs": [
-     {
-     "attrCd": "40010026",
-     "name": "购物车流水号",
-     "value": "31201704110009114961"
-     }
-     ],"busiOrder": [
-     {
-
-     "data": {
-     "boCust": [
-     {
-     "custId": "-1",
-     "name": "S",
-     "email": "-52",
-     "cellphone": "17797173942",
-     "realName": "wuxw",
-     "sex": "1",
-     "password": "123456",
-     "lanId": "863010",
-     "custAdress": "青海省西宁市城中区格兰小镇",
-     "custType": "1",
-     "openId": "",
-     "state": "ADD"
-     },
-     {
-     "custId": "123",
-     "name": "S",
-     "email": "-52",
-     "cellphone": "17797173942",
-     "realName": "wuxw",
-     "sex": "1",
-     "password": "123456",
-     "lanId": "863010",
-     "custAdress": "青海省西宁市城中区格兰小镇",
-     "custType": "1",
-     "openId": "",
-     "state": "DEL"
-     }
-     ],
-     "boCustAttr": [
-     {
-     "custId": "123",
-     "prodId": "-1",
-     "attrCd": "123344",
-     "value": "1",
-     "state": "ADD"
-     },
-     {
-     "custId": "123",
-     "prodId": "-1",
-     "attrCd": "123345",
-     "value": "1",
-     "state": "DEL"
-     }
-     ]
-     },
-     "busiObj": {
-     "name": "新建客户",
-     "actionTypeCd": "C1",
-     "actionClassCd": "1",
-     "status_cd": "S",
-     "start_dt": "2017-04-11",
-     "end_dt": "2017-04-12",
-     "remark": ""
-     },
-     "busiOrderAttrs": [
-     {
-     "attrCd": "40010026",
-     "name": "购物车流水号",
-     "value": "31201704110009114961"
-     }
-     ]
-     }
-
-     ],
-     "orderListInfo": {
-     "transactionId": "1000000200201704113137002690",
-     "channelId": "700212896",
-     "remarks": "",
-     "olId": "-1",
-     "custId": "701008023904",
-     "statusCd": "S",
-     "reqTime": "20170411163709",
-     "extSystemId": "310013698777",
-     "olTypeCd": "15",
-     "asyn":"A"
-     }
-     }
-     }
-     * @param orderInfo
-     * @return
-     */
-    @RequestMapping("/orderService/soOrderService")
-    public String soOrderService(@RequestParam("orderInfo") String orderInfo){
-
-        LoggerEngine.debug("soOrderService入参:" + orderInfo);
-        String resultUserInfo = null;
-
-        JSONObject reqOrderJSON = null;
-
-        try{
-
-            reqOrderJSON = this.simpleValidateJSON(orderInfo);
-
-            if(reqOrderJSON == null || !reqOrderJSON.containsKey("orderList")){
-                throw new IllegalArgumentException("请求参数为空 reqOrderJSON :"+reqOrderJSON);
-            }
-
-            resultUserInfo = iOrderServiceSMO.orderDispatch(reqOrderJSON.getJSONObject("orderList"));
-
-        }catch (Exception e){
-            LoggerEngine.error("订单受理出现异常:", e);
-            //这里需要作废订单
-            try{
-                iOrderServiceSMO.soDeleteOrder(reqOrderJSON.getJSONObject("orderList"));
-            }catch (Exception e1){
-                LoggerEngine.error("订单受理撤单出现异常:", e);
-                //这里对于撤单失败的,不做处理。后期可以插入到日志中记录撤单失败单子
-            }
-            resultUserInfo = ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_ERROR,"订单受理出现异常,"+e,null);
-        }finally {
-            return resultUserInfo;
-        }
-
-
-    }
-
-    /**
-     * 作废订单时,order_list busi_order 和bo_开头数据不影响,只是作废实例数据,如作废客户信息,只作废 cust 和cust_attr 表中的数据
-     * 作废订单依然会创建order_list 和busi_order 数据
-     * 作废指定动作的信息
-     * 请求协议:
-     * {
-     *     "orderList":{
-     *     "transactionId": "1000000200201704113137002690",
-             "channelId": "700212896",
-             "remarks": "",
-             "custId": "701008023904",
-             "statusCd": "S",
-             "reqTime": "20170411163709",
-             "extSystemId": "310013698777",
-             "olTypeCd": "15",
-     *        "oldOlId":"123456789",
-     *        "asyn":"S"
-     *     },
-     *     "busiOrder":[{
-     *         "actionTypeCd":"ALL"
-     *     }]
-     * }
-     *
-     * 说明
-     * oldOlId 购物车ID,对应表order_list
-     * asyn 处理方式,S 同步 A 异步
-     *
-     * 注意这里busiOrder 的{} 只能有一个,有多个,只能会处理第一个
-     *
-     * actionTypeCd All标识 作废所有订单订单  C2 作废客户信息,。。。
-     *
-     * transactionId 交易流水
-     *
-     * channelId 渠道ID,对应channel表,可以自定义一个
-     *
-     * remarks 备注,不能超过200个,如果超过200个会截取200个字
-     *
-     * custId 操作者ID,可能客户本身,很有很可能商家,或管理员
-     *
-     * statusCd S表示这个购物车有效,
-     *
-     * reqTime 请求时间
-     *
-     * extSystemId 外部系统关联ID
-     *
-     * olTypeCd 购物车类型,如 微信创建的购物车 1 APP创建的2 PC网站创建 3
-     *
-     * asyn 处理方式,S 同步 A 异步
-     *
-     * 作废指定订单项的信息
-     * 请求协议:
-     * {
-     *     "orderList":{
-     *         "transactionId": "1000000200201704113137002690",
-                 "channelId": "700212896",
-                 "remarks": "",
-                 "custId": "701008023904",
-                 "statusCd": "S",
-                 "reqTime": "20170411163709",
-                 "extSystemId": "310013698777",
-                 "olTypeCd": "15",
-                 "asyn":"A"
-     *     },
-     *     "busiOrder":[{
-     *          "oldBoId":"123456789"
-     *     },
-     *     {
-     *          "oldBoId":"123456799"
-     *     }]
-     * }
-     * oldBoId 为作废单个 要作废的订单项 对应busi_order 的 boId
-     *
-     * transactionId 交易流水
-     *
-     * channelId 渠道ID,对应channel表,可以自定义一个
-     *
-     * remarks 备注,不能超过200个,如果超过200个会截取200个字
-     *
-     * custId 操作者ID,可能客户本身,很有很可能商家,或管理员
-     *
-     * statusCd S表示这个购物车有效,
-     *
-     * reqTime 请求时间
-     *
-     * extSystemId 外部系统关联ID
-     *
-     * olTypeCd 购物车类型,如 微信创建的购物车 1 APP创建的2 PC网站创建 3
-     *
-     * asyn 处理方式,S 同步 A 异步
-     *
-     *
-     * 统一返回协议:
-     * {
-     "RESULT_CODE": "0000",
-     "RESULT_MSG": "成功",
-     "RESULT_INFO": {"oldOrder":"1234567","oldBoId":"7000123,718881991"}
-     }
-     * RESULT_CODE 0000 成功,1999 失败, 失败原因为 RESULT_MSG
-     *
-     * RESULT_INFO 成功时返回作废 的购物车 olId 和 boId
-     * @param orderInfo
-     * @return
-     */
-    @RequestMapping("/orderService/deleteOrderInfo")
-    public String deleteOrderInfo(@RequestParam("orderInfo") String orderInfo){
-
-        LoggerEngine.debug("deleteOrderInfo入参:" + orderInfo);
-        String resultUserInfo = null;
-
-        JSONObject reqOrderJSON = null;
-
-        try{
-
-            reqOrderJSON = this.simpleValidateJSON(orderInfo);
-
-            if(reqOrderJSON == null || !reqOrderJSON.containsKey("orderList")){
-                throw new IllegalArgumentException("请求参数为空 reqOrderJSON :"+reqOrderJSON);
-            }
-
-            // 删除订单对应实例数据
-            resultUserInfo = iOrderServiceSMO.deleteOrder(reqOrderJSON.getJSONObject("orderList"));
-
-        }catch (Exception e){
-            LoggerEngine.error("订单受理出现异常:", e);
-            resultUserInfo = ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_ERROR,"订单受理出现异常,"+e,null);
-        }finally {
-            return resultUserInfo;
-        }
-
-    }
-
-    /**
-     * 公用接口方法,为其他服务提供公用入口
-     *
-     * 相当于实现协议转换 路由功能 还可以加入授权 白黑名单控制 等功能
-     * @return
-     */
-    @RequestMapping("/orderService/common")
-    public String common(@RequestParam("paramIn") String paramIn){
-
-        LoggerEngine.debug("common入参:" + paramIn);
-        String resultUserInfo = null;
-
-        JSONObject reqOrderJSON = null;
-        try{
-
-            reqOrderJSON = this.simpleValidateJSON(paramIn);
-
-            // 删除订单对应实例数据
-           // resultUserInfo = iOrderServiceSMO.deleteOrder(reqOrderJSON.getJSONObject("orderList"));
-            resultUserInfo = ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_ERROR,"功能正在开发中。。。",null);
-        }catch (Exception e){
-            LoggerEngine.error("订单受理出现异常:", e);
-            resultUserInfo = ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_ERROR,"处理出现异常,"+e,null);
-        }finally {
-            return resultUserInfo;
-        }
-
-    }
-
-
-    public IOrderServiceSMO getiOrderServiceSMO() {
-        return iOrderServiceSMO;
-    }
-
-    public void setiOrderServiceSMO(IOrderServiceSMO iOrderServiceSMO) {
-        this.iOrderServiceSMO = iOrderServiceSMO;
-    }
-}

+ 0 - 96
OrderService/src/main/java/com/java110/order/smo/IOrderServiceSMO.java

@@ -1,96 +0,0 @@
-package com.java110.order.smo;
-
-import com.alibaba.fastjson.JSONObject;
-import com.java110.entity.order.OrderList;
-
-/**
- * 订单服务业务处理接口
- *
- * 订单受理
- * Created by wuxw on 2017/4/11.
- */
-public interface IOrderServiceSMO {
-
-
-    /**
-     * 根据购物车ID 或者 外部系统ID 或者 custId 或者 channelId 查询订单信息
-     *
-     * @param orderList
-     * @return
-     */
-    public String queryOrderInfo(OrderList orderList)  throws Exception;
-
-
-    public String queryOrderInfo(OrderList orderList,Boolean isQueryDataInfo,Boolean isNeedDelete) throws Exception;
-
-    /**
-     * 订单调度,
-     * 根据订单类型 调用不同服务 处理
-     * @param orderInfo
-     * @return
-     * @throws Exception
-     */
-    public String orderDispatch(JSONObject orderInfo) throws Exception;
-
-    /**
-     * 作废订单
-     * 根据业务动作作废
-     * 请求协议:
-     * {
-     *     "orderList":{
-     *     "transactionId": "1000000200201704113137002690",
-     "channelId": "700212896",
-     "remarks": "",
-     "custId": "701008023904",
-     "statusCd": "S",
-     "reqTime": "20170411163709",
-     "extSystemId": "310013698777",
-     "olTypeCd": "15",
-     *        "oldOlId":"123456789",
-     *        "asyn":"S"
-     *     },
-     *     "busiOrder":[{
-     *         "actionTypeCd":"ALL"
-     *     }]
-     * }
-     *
-     * ,
-     *
-     * 根据 订单项ID作废
-     *
-     * {
-     *     "orderList":{
-     *         "transactionId": "1000000200201704113137002690",
-     "channelId": "700212896",
-     "remarks": "",
-     "custId": "701008023904",
-     "statusCd": "S",
-     "reqTime": "20170411163709",
-     "extSystemId": "310013698777",
-     "olTypeCd": "15",
-     "asyn":"A"
-     *     },
-     *     "busiOrder":[{
-     *          "oldBoId":"123456789"
-     *     },
-     *     {
-     *          "oldBoId":"123456799"
-     *     }]
-     * }
-     * @param orderInfo
-     * @return
-     * @throws Exception
-     */
-    public String deleteOrder(JSONObject orderInfo) throws Exception;
-
-
-    /**
-     * 撤单处理 add by wuxw 2017-09-10 22:35
-     * 修改以前逻辑,根据olId 去目标系统查询需要查询撤单订单组装报文
-     * @param orderInfo
-     * @throws Exception
-     */
-    public void soDeleteOrder(JSONObject orderInfo) throws Exception;
-
-
-}

+ 0 - 789
OrderService/src/main/java/com/java110/order/smo/impl/OrderServiceSMOImpl.java

@@ -1,789 +0,0 @@
-package com.java110.order.smo.impl;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.java110.common.constant.ActionTypeConstant;
-import com.java110.common.constant.AttrCdConstant;
-import com.java110.common.constant.CommonConstant;
-import com.java110.common.log.LoggerEngine;
-import com.java110.common.util.ProtocolUtil;
-import com.java110.config.properties.EventProperties;
-import com.java110.core.base.smo.BaseServiceSMO;
-import com.java110.core.context.AppContext;
-import com.java110.event.app.AppEventPublishing;
-import com.java110.entity.order.BusiOrder;
-import com.java110.entity.order.BusiOrderAttr;
-import com.java110.entity.order.OrderList;
-import com.java110.entity.order.OrderListAttr;
-import com.java110.feign.base.IPrimaryKeyService;
-import com.java110.order.dao.IOrderServiceDao;
-import com.java110.order.mq.DeleteOrderInfoProducer;
-import com.java110.order.smo.IOrderServiceSMO;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import com.java110.common.util.Assert;
-
-import java.util.*;
-
-/**
- * 订单服务业务逻辑处理实现类
- * Created by wuxw on 2017/4/11.
- */
-@Service("orderServiceSMOImpl")
-@Transactional
-public class OrderServiceSMOImpl extends BaseServiceSMO implements IOrderServiceSMO {
-
-    @Autowired
-    IPrimaryKeyService iPrimaryKeyService;
-
-    @Autowired
-    IOrderServiceDao iOrderServiceDao;
-
-    @Autowired
-    EventProperties eventProperties;
-
-    @Autowired
-    DeleteOrderInfoProducer deleteOrderInfoProducer;
-
-    /**
-     * 根据购物车ID 或者 外部系统ID 或者 custId 或者 channelId 查询订单信息
-     *
-     * 返回报文格式如下:
-     *
-     * {
-
-     "orderList": [{
-
-     "orderListAttrs": [{···}],
-
-     "busiOrder": [
-
-     {
-
-     "data": {
-
-     "boCust": [{···}],
-
-     "boCustAttr": [ {···}]
-
-     },
-
-     "busiObj": {····},
-
-     "busiOrderAttrs": [{···}]
-
-     }
-
-     ],
-
-     "orderListInfo": {···}
-
-     }]
-     }
-
-     * @param orderList
-     * @return
-     */
-    @Override
-    public String queryOrderInfo(OrderList orderList) throws Exception{
-        return queryOrderInfo(orderList,true,false);
-    }
-
-    /**
-     * 根据购物车ID 或者 外部系统ID 或者 custId 或者 channelId 查询订单信息
-     *
-     * 返回报文格式如下:
-     *
-     * {
-
-         "orderList": [{
-
-         "orderListAttrs": [{···}],
-
-         "busiOrder": [
-
-             {
-
-                 "data": {
-
-                 "boCust": [{···}],
-
-                 "boCustAttr": [ {···}]
-
-                 },
-
-                 "busiObj": {····},
-
-                 "busiOrderAttrs": [{···}]
-
-             }
-
-         ],
-
-         "orderListInfo": {···}
-
-         }]
-     }
-
-     * @param orderList
-     * @param isQueryDataInfo 是 查询data节点 否不查询data节点
-     * @return
-     */
-    @Override
-    public String queryOrderInfo(OrderList orderList,Boolean isQueryDataInfo,Boolean isNeedDelete) throws Exception{
-
-
-        /*List<OrderList> orderLists = iOrderServiceDao.queryOrderListAndAttr(orderList);
-        //
-        JSONArray orderListsArray = new JSONArray();
-        for (OrderList orderListTmp : orderLists){
-            //
-            BusiOrder busiOrderTmp = new BusiOrder();
-            busiOrderTmp.setBoId(orderListTmp.getOlId());
-
-            List<BusiOrder> busiOrders = iOrderServiceDao.queryBusiOrderAndAttr(busiOrderTmp);
-
-            JSONObject orderListJSON = JSONObject.parseObject(JSONObject.toJSONString(orderListTmp));
-
-            orderListJSON.put("busiOrders",JSONObject.parseArray(JSONObject.toJSONString(busiOrders)));
-
-            orderListsArray.add(orderListJSON);
-        }
-
-        JSONObject orderListTmpO = new JSONObject();
-        orderListTmpO.put("orderList",orderListsArray);*/
-
-        List<OrderList> orderLists = iOrderServiceDao.queryOrderListAndAttr(orderList);
-        //多个购物车封装
-        JSONArray orderListsArray = new JSONArray();
-
-        JSONObject orderListTmpJson = null;
-
-        for(OrderList orderListTmp : orderLists){
-            orderListTmpJson = new JSONObject();
-            //封装orderListAttrs
-            orderListTmpJson.put("orderListAttrs",JSONArray.parseArray(JSONObject.toJSONString(orderListTmp.getOrderListAttrs())));
-
-            orderListTmpJson.put("orderListInfo",JSONObject.parseObject(JSONObject.toJSONString(orderListTmp)).remove("orderListAttrs"));
-
-
-            BusiOrder busiOrderTmp = new BusiOrder();
-            busiOrderTmp.setBoId(orderListTmp.getOlId());
-
-            List<BusiOrder> busiOrders = iOrderServiceDao.queryBusiOrderAndAttr(busiOrderTmp);
-
-            //封装busiObj
-            JSONArray busiOrderTmpArray = new JSONArray();
-
-            /**
-             * [
-
-             {
-
-             "data": {
-
-             "boCust": [{···}],
-
-             "boCustAttr": [ {···}]
-
-             },
-
-             "busiObj": {····},
-
-             "busiOrderAttrs": [{···}]
-
-             }
-             */
-            JSONObject busiOrderTmpJson = null;
-            for(BusiOrder busiOrderTmp1 : busiOrders){
-                busiOrderTmpJson = new JSONObject();
-
-                //封装busiOrderAttrs
-
-                busiOrderTmpJson.put("busiOrderAttrs",JSONArray.parseArray(JSONObject.toJSONString(busiOrderTmp1.getBusiOrderAttrs())));
-
-
-                //封装busiObj
-
-                busiOrderTmpJson.put("busiObj",JSONObject.parseObject(JSONObject.toJSONString(busiOrderTmp1)).remove("busiOrderAttrs"));
-
-                //封装data 节点
-                if(isQueryDataInfo){
-                    busiOrderTmpJson.put("data",queryDataInfo(busiOrderTmp1,isNeedDelete));
-                }
-
-
-                busiOrderTmpArray.add(busiOrderTmpJson);
-            }
-
-
-            //分装busiOrder
-
-            orderListTmpJson.put("busiOrder",busiOrderTmpArray);
-
-        }
-        orderListsArray.add(orderListTmpJson);
-
-        JSONObject orderListJson = new JSONObject();
-        orderListJson.put("orderList",orderListsArray);
-
-
-        return ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_SUCCESS,"查询成功",orderListJson);
-    }
-
-    /**
-     * 查询data信息
-     * @return
-     */
-    private JSONObject queryDataInfo(BusiOrder busiOrder,Boolean isNeedDelete) throws Exception{
-        //购物车订单类型
-        String actionTypeCd = busiOrder.getActionTypeCd();
-
-        //创建上下文对象
-        AppContext context = createApplicationContext();
-
-        context.setReqObj(busiOrder);
-        if(isNeedDelete) {
-            return AppEventPublishing.queryDataInfoEvent(context, busiOrder);
-        }else {
-            return AppEventPublishing.queryNeedDeleteDataInfoEvent(context,busiOrder);
-        }
-
-    }
-
-    /**
-     * 订单调度
-     *
-     * orderListInfo 中字段 asyn 如果为 A 表示 异步处理订单,其他表同步处理订单
-     * @param orderInfo 订单信息
-     * @return 订单处理接口
-     * @throws Exception
-     */
-    @Override
-    public String orderDispatch(JSONObject orderInfo) throws Exception {
-
-        //1.0 购物车信息校验处理,走订单受理必须要有购物车信息和订单项信息
-        if(!orderInfo.containsKey("orderListInfo") || !orderInfo.containsKey("busiOrder")){
-            throw  new IllegalArgumentException("请求报文中没有购物车相关信息[orderListInfo]或订单项相关信息[busiOrder],请检查报文:"+orderInfo);
-        }
-
-        JSONObject orderListTmp = orderInfo.getJSONObject("orderListInfo");
-
-        OrderList orderList = JSONObject.parseObject(orderListTmp.toJSONString(),OrderList.class);
-
-        String olId = orderList.getOlId();
-        //生成olId
-        if(StringUtils.isBlank(olId) || olId.startsWith("-") ){
-            olId = this.queryPrimaryKey(iPrimaryKeyService,"OL_ID");
-            orderList.setOlId(olId);
-            orderListTmp.put("olId",olId);
-        }
-
-        //这里保存购物车
-
-        int saveOrderListFlag = iOrderServiceDao.saveDataToBoOrderList(orderList);
-        if (saveOrderListFlag < 1){
-            throw  new RuntimeException("保存购物车信息失败"+orderListTmp);
-        }
-
-        //保存购物车属性
-
-        if(orderInfo.containsKey("orderListAttrs")){
-            JSONArray orderListAttrs = orderInfo.getJSONArray("orderListAttrs");
-
-            List<OrderListAttr> orderListAttrsTmp = JSONObject.parseArray(orderListAttrs.toJSONString(), OrderListAttr.class);
-
-            for(OrderListAttr orderListAttr : orderListAttrsTmp){
-                orderListAttr.setOlId(olId);
-                saveOrderListFlag = iOrderServiceDao.saveDataToOrderListAttr(orderListAttr);
-                if(saveOrderListFlag < 1){
-                    throw new RuntimeException("保存购物车属性信息失败"+JSONObject.toJSONString(orderListAttr));
-                }
-            }
-        }
-
-
-        //获取 订单项
-        JSONArray busiOrderTmps = orderInfo.getJSONArray("busiOrder");
-
-        //存放busiOrder 的data节点
-
-        Map<String,JSONArray> datasTmp = new HashMap<String, JSONArray>();
-
-        for(int busiOrderTmpsIndex = 0 ; busiOrderTmpsIndex < busiOrderTmps.size() ; busiOrderTmpsIndex++){
-            JSONObject busiOrderJson = busiOrderTmps.getJSONObject(busiOrderTmpsIndex);
-            /*if (!busiOrderJson.containsKey("busiObj")){
-                throw new IllegalArgumentException("请求报文中busiOrder 节点中没有对应的 busiObj 节点,请检查"+busiOrderJson);
-            }*/
-
-            Assert.isNotNull(busiOrderJson,"busiObj","请求报文中busiOrder 节点中没有对应的 busiObj 节点,请检查"+busiOrderJson);
-
-            BusiOrder busiOrderObj = JSONObject.parseObject(busiOrderJson.getJSONObject("busiObj").toJSONString(),BusiOrder.class);
-
-            String boId = busiOrderObj.getBoId();
-            //生成 订单项ID
-            if(StringUtils.isBlank(boId) || boId.startsWith("-")){
-                boId = this.queryPrimaryKey(iPrimaryKeyService,"BO_ID");
-            }
-            busiOrderObj.setOlId(olId);
-            //修改boId
-            busiOrderObj.setBoId(boId);
-
-            //这里保存订单项 busiOrder
-            int saveBusiOrderFlag = iOrderServiceDao.saveDataToBusiOrder(busiOrderObj);
-            if(saveBusiOrderFlag < 1){
-                throw new RuntimeException("保存订单项信息失败"+JSONObject.toJSONString(busiOrderObj));
-            }
-
-            //如果有busiOrderAttrs 节点 每个节点添加 boId
-            if(busiOrderJson.containsKey("busiOrderAttrs")){
-                List<BusiOrderAttr> busiOrderAttrsTmp = JSONObject.parseArray(busiOrderJson.getJSONArray("busiOrderAttrs").toJSONString(),
-                        BusiOrderAttr.class);
-
-                for (BusiOrderAttr busiOrderAttrTmp : busiOrderAttrsTmp){
-                    busiOrderAttrTmp.setBoId(boId);
-                    //这里保存订单项属性
-                    saveBusiOrderFlag =  iOrderServiceDao.saveDataToBusiOrderAttr(busiOrderAttrTmp);
-                    if(saveBusiOrderFlag < 1){
-                        throw new RuntimeException("保存订单项信息属性失败"+JSONObject.toJSONString(busiOrderAttrTmp));
-                    }
-                }
-            }
-            //修改data节点下的boId,一般是没有这个值,所以直接新加就行了,不许判断是否已-开头
-           /* if (!busiOrderJson.containsKey("data")){
-                throw new IllegalArgumentException("请求报文中busiOrder 节点中没有对应的 data 节点,请检查"+busiOrderJson);
-            }*/
-
-            Assert.isNotNull(busiOrderJson,"data","请求报文中busiOrder 节点中没有对应的 data 节点,请检查"+busiOrderJson);
-
-            //处理data 节点
-            JSONObject data = busiOrderJson.getJSONObject("data");
-
-            for (Map.Entry<String, Object> entry : data.entrySet()) {
-                Object valueObj = entry.getValue();
-                if (valueObj instanceof JSONObject){
-                    ((JSONObject)valueObj).put("boId",boId);
-                }else if(valueObj instanceof JSONArray){
-                    JSONArray valueArray = (JSONArray)valueObj;
-                    for(int valueIndex = 0 ; valueIndex < valueArray.size(); valueIndex++){
-                        valueArray.getJSONObject(valueIndex).put("boId",boId);
-                    }
-                }
-            }
-
-            LoggerEngine.debug("处理后的data节点 :" + data.toString());
-
-            //根据busiOrder 的  actionTypeCd 注册那个服务去处理
-            String actionTypeCd = busiOrderObj.getActionTypeCd();
-
-            JSONArray dataJsonTmp = null;
-            if(!datasTmp.containsKey(actionTypeCd)){
-                dataJsonTmp = new JSONArray();
-            }else{
-                dataJsonTmp = datasTmp.get(actionTypeCd);
-            }
-            data.put("actionTypeCd",actionTypeCd);
-            dataJsonTmp.add(data);
-
-            datasTmp.put(actionTypeCd,dataJsonTmp);
-
-        }
-
-        //创建上下文对象
-        AppContext context = createApplicationContext();
-
-
-        prepareContext(context, datasTmp);
-       /* try {*/
-            //发布事件
-            AppEventPublishing.multicastEvent(context,datasTmp,orderListTmp.getString("asyn"));
-       /* }catch (Exception e){
-            //这里补偿事物,这里发布广播
-            compensateTransactional(datasTmp);
-            throw e;
-        }*/
-        return ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_SUCCESS,"成功",JSONObject.parseObject(JSONObject.toJSONString(orderList)));
-    }
-
-    /**
-     * 作废订单
-     * 根据业务动作作废
-     * 请求协议:
-     * {
-     *     "orderList":{
-     *     "transactionId": "1000000200201704113137002690",
-             "channelId": "700212896",
-             "remarks": "",
-             "custId": "701008023904",
-             "statusCd": "S",
-             "reqTime": "20170411163709",
-             "extSystemId": "310013698777",
-             "olTypeCd": "15",
-     *        "oldOlId":"123456789",
-     *        "asyn":"S"
-     *     },
-     *     "busiOrder":[{
-     *         "actionTypeCd":"ALL"
-     *     }]
-     * }
-     *
-     * ,
-     *
-     * 根据 订单项ID作废
-     *
-     * {
-     *     "orderList":{
-     *         "transactionId": "1000000200201704113137002690",
-     "channelId": "700212896",
-     "remarks": "",
-     "custId": "701008023904",
-     "statusCd": "S",
-     "reqTime": "20170411163709",
-     "extSystemId": "310013698777",
-     "olTypeCd": "15",
-     "asyn":"A"
-     *     },
-     *     "busiOrder":[{
-     *          "oldBoId":"123456789"
-     *     },
-     *     {
-     *          "oldBoId":"123456799"
-     *     }]
-     * }
-     * @param orderInfo
-     * @return
-     * @throws Exception
-     */
-    @Override
-    public String deleteOrder(JSONObject orderInfo) throws Exception {
-        //1.0 购物车信息校验处理,走订单受理必须要有购物车信息和订单项信息
-        if(!orderInfo.containsKey("orderList") || !orderInfo.containsKey("busiOrder")){
-            throw  new IllegalArgumentException("请求报文中没有购物车相关信息[orderList]或订单项相关信息[busiOrder],请检查报文:"+orderInfo);
-        }
-
-        JSONObject orderListTmp = orderInfo.getJSONObject("orderList");
-        OrderList orderList = JSONObject.parseObject(orderListTmp.toJSONString(),OrderList.class);
-
-        String olId = orderList.getOlId();
-        //生成olId
-        if(StringUtils.isBlank(olId) || olId.startsWith("-") ){
-            olId = this.queryPrimaryKey(iPrimaryKeyService,"OL_ID");
-            orderList.setOlId(olId);
-        }
-
-        //这里保存购物车
-
-        int saveOrderListFlag = iOrderServiceDao.saveDataToBoOrderList(orderList);
-        if (saveOrderListFlag < 1){
-            throw  new RuntimeException("作废订单时保存购物车信息失败"+orderListTmp);
-        }
-
-        JSONArray busiOrderTmps = orderInfo.getJSONArray("busiOrder");
-
-        /**
-         * 根据actionTypeCd 作废
-         */
-        Assert.isNull(busiOrderTmps,"入参错误,没有busiOrder 节点,或没有子节点");
-
-        List<Map<String,String>> needDeleteBoIds = new ArrayList<Map<String,String>>();
-
-        if(busiOrderTmps.getJSONObject(0).containsKey("actionTypeCd")){
-           String actionTypeCds = busiOrderTmps.getJSONObject(0).getString("actionTypeCd");
-            getNeeddeleteOrderByActionTypeCd(orderListTmp.getString("oldOlId"),needDeleteBoIds,actionTypeCds.split(","));
-            //return ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_SUCCESS,"成功",JSONObject.parseObject(JSONObject.toJSONString(orderList)));
-        }else if(busiOrderTmps.getJSONObject(0).containsKey("oldBoId")){
-            Map<String,String> oldBoIdMap = null;
-            for(int busiOrderIndex = 0; busiOrderIndex< busiOrderTmps.size();busiOrderIndex++){
-                oldBoIdMap = new HashMap<String, String>();
-                oldBoIdMap.put("actionTypeCd","");
-                oldBoIdMap.put("boId",busiOrderTmps.getJSONObject(busiOrderIndex).getString("oldBoId"));
-                oldBoIdMap.put("olId","");
-                needDeleteBoIds.add(oldBoIdMap);
-            }
-        }else {
-            throw new IllegalArgumentException("当前系统只支持busiOrder 节点下第一个节点包含 actionTypeCd节点和 oldOlId节点的报文:"+orderInfo);
-        }
-
-        //数据分装
-        Map<String,JSONArray> datasTmp = new HashMap<String, JSONArray>();
-        //添加数据至 busi_order,这里生成新的boId 将需要作废的boId信息写入值busi_order_attr 中单独注册一个属性信息
-
-        for(Map<String,String> needDeleteBoIdMap : needDeleteBoIds){
-            BusiOrder busiOrder = new BusiOrder();
-
-            String newBoId = this.queryPrimaryKey(iPrimaryKeyService,"BO_ID");
-
-            busiOrder.setOlId(olId);
-            //重新生成 boId
-            busiOrder.setBoId(newBoId);
-            //设置撤单,作废订单动作
-            busiOrder.setActionTypeCd(ActionTypeConstant.ACTION_TYPE_CANCEL_ORDER);
-
-            busiOrder.setRemark("撤单,作废订单处理,作废订单为"+needDeleteBoIdMap.get("boId"));
-
-            //这里保存订单项 busiOrder
-            int saveBusiOrderFlag = iOrderServiceDao.saveDataToBusiOrder(busiOrder);
-            if(saveBusiOrderFlag < 1){
-                throw new RuntimeException("撤单,作废订单失败,保存订单项信息失败"+JSONObject.toJSONString(busiOrder));
-            }
-
-            //将需要作废的订单boId 写入值 busi_order_attr 中 属性为: 10000001
-
-            BusiOrderAttr busiOrderAttr = new BusiOrderAttr();
-            busiOrderAttr.setBoId(newBoId);
-            busiOrderAttr.setAttrCd(AttrCdConstant.BUSI_ORDER_ATTR_10000001);
-            busiOrderAttr.setValue(needDeleteBoIdMap.get("boId"));
-            needDeleteBoIdMap.put("newBoId",newBoId);
-
-            saveBusiOrderFlag =  iOrderServiceDao.saveDataToBusiOrderAttr(busiOrderAttr);
-            if(saveBusiOrderFlag < 1){
-                throw new RuntimeException("撤单,作废订单失败,保存订单项信息属性失败"+JSONObject.toJSONString(busiOrderAttr));
-            }
-
-            //封装数据
-            processDeleteOrderByActionTypeCd(needDeleteBoIdMap,datasTmp);
-
-        }
-
-        //这里补充 order_list_attr中 编码为 10000002 的数据,要作废 订单购物车信息,真正作废单子是以 busi_order_attr 中的boId 为主
-        Assert.hasSize(datasTmp,"当前没有可作废的订单,请核实");
-        //由于撤单,作废订单我们只支持一个购物车操作
-        Set keys = datasTmp.keySet();
-        Object key =  keys.toArray()[0];
-        Assert.isNotNull(datasTmp.get(key).getJSONObject(0),"olId","数据错误,需要作废的订单的第一个节点为空,或不包含olId节点,请核查"+datasTmp);
-        String oldOlId = datasTmp.get(key).getJSONObject(0).getString("olId");
-
-
-        OrderListAttr orderListAttr = new OrderListAttr();
-        orderListAttr.setOlId(olId);
-        orderListAttr.setAttrCd(AttrCdConstant.ORDER_LIST_ATTR_10000002);
-        orderListAttr.setValue(oldOlId);
-        saveOrderListFlag = iOrderServiceDao.saveDataToOrderListAttr(orderListAttr);
-        if(saveOrderListFlag < 1){
-            throw new RuntimeException("保存购物车属性信息失败"+JSONObject.toJSONString(orderListAttr));
-        }
-
-
-
-
-        //创建上下文对象
-        AppContext context = createApplicationContext();
-
-        prepareContext(context, datasTmp);
-        try {
-            //发布事件
-            AppEventPublishing.multicastEvent(context,datasTmp,orderListTmp.getString("asyn"));
-        }catch (Exception e){
-            //这里补偿事物
-            compensateTransactional(datasTmp);
-            throw e;
-        }
-        return ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_SUCCESS,"成功",JSONObject.parseObject(JSONObject.toJSONString(orderList)));
-
-    }
-
-    /**
-     * 撤单处理 add by wuxw 2017-09-10 22:35
-     * 修改以前逻辑,根据olId 去目标系统查询需要查询撤单订单组装报文
-     * @param orderInfo
-     * @throws Exception
-     */
-    public void soDeleteOrder(JSONObject orderInfo) throws Exception{
-
-        //1.0 购物车信息校验处理,走订单受理必须要有购物车信息和订单项信息
-        if(!orderInfo.containsKey("orderListInfo") || !orderInfo.containsKey("busiOrder")){
-            return;
-        }
-
-        JSONObject orderListTmp = orderInfo.getJSONObject("orderListInfo");
-
-        OrderList orderList = JSONObject.parseObject(orderListTmp.toJSONString(),OrderList.class);
-
-        String olId = orderList.getOlId();
-        //生成olId
-        if(StringUtils.isBlank(olId) || olId.startsWith("-") ){
-           return ;
-        }
-
-        // 查询购物车信息,订单项信息
-        String oldOrderInfo = this.queryOrderInfo(orderList,true,true);
-
-
-        //重新发起撤单订单
-        orderDispatch(JSONObject.parseObject(oldOrderInfo));
-    }
-
-    /**
-     * 根据 订单动作 作废
-     * @param oldOlId 作废的购物车
-     * @param actionTypeCd busi_order action_type_cd 类型来作废订单
-     * @throws Exception
-     */
-    private void getNeeddeleteOrderByActionTypeCd(String oldOlId,List<Map<String,String>> needDeleteBoIds,String ...actionTypeCd) throws Exception{
-        //根据oldOdId actionTypeCd 获取订单项
-        BusiOrder busiOrderTmp = new BusiOrder();
-        busiOrderTmp.setOlId(oldOlId);
-        String actionTypeCds= "";
-        // 'C1','A1','M1',
-        for(String ac : actionTypeCd){
-            actionTypeCds += ("'"+ac+"',");
-        }
-
-        // 'C1','A1','M1'
-        actionTypeCds = actionTypeCds.endsWith(",")?actionTypeCds.substring(0,actionTypeCds.length()-1):actionTypeCds;
-
-        //如果为 ALL 作废整个订单数据,这里直接传为空 根据olId 处理
-        if("ALL".equals(actionTypeCds)){
-
-            actionTypeCds = "";
-        }
-
-        busiOrderTmp.setActionTypeCd(actionTypeCds);
-
-        /**
-         * 已经生成的订单项信息
-         */
-        List<BusiOrder> oldBusiOrders =  iOrderServiceDao.queryBusiOrderAndAttr(busiOrderTmp);
-
-        Assert.isNull(oldBusiOrders,"没有找到需要作废的订单,[oldOdId="+oldOlId+",actionTypeCd = "+actionTypeCd+"]");
-
-        //作废老订单信息
-        Map<String,String> oldBoIdMap = null;
-        for(BusiOrder oldBusiOrder : oldBusiOrders){
-            oldBoIdMap = new HashMap<String, String>();
-            oldBoIdMap.put("actionTypeCd",oldBusiOrder.getActionTypeCd());
-            oldBoIdMap.put("boId",oldBusiOrder.getBoId());
-            oldBoIdMap.put("olId",oldBusiOrder.getOlId());
-            needDeleteBoIds.add(oldBoIdMap);
-        }
-    }
-
-    private void prepareContext(AppContext context,Map<String,JSONArray> datasTmp){
-        Assert.isNull(context,"创建上下对象失败");
-
-        //这里将整个订单的data 信息存入 上下文对象中,以防后期使用无法获取
-
-        context.coverData(datasTmp);
-
-    }
-
-
-    /**
-     *
-     * oldBoIdMap.put("actionTypeCd","");
-     *
-     *  oldBoIdMap.put("boId",busiOrderTmps.getJSONObject(busiOrderIndex).getString("oldBoId"));
-     *  oldBoIdMap.put("olId","");
-     * @param needDeleteBoIdMap
-     *
-     */
-    private void processDeleteOrderByActionTypeCd(Map<String,String> needDeleteBoIdMap,Map<String,JSONArray> datasTmp){
-
-        Assert.isNull(datasTmp,"processDeleteOrderByActionTypeCd 方法的参数 datasTmp 为空,");
-
-        // 如果这两个中有一个为空,则从库中查询
-        if(StringUtils.isBlank(needDeleteBoIdMap.get("newBoId")) || StringUtils.isBlank(needDeleteBoIdMap.get("actionTypeCd"))){
-            BusiOrder busiOrderTmp = new BusiOrder();
-            busiOrderTmp.setBoId(needDeleteBoIdMap.get("boId"));
-            //这里只有一条其他,否则抛出异常
-            List<BusiOrder> oldBusiOrders =  iOrderServiceDao.queryBusiOrderAndAttr(busiOrderTmp);
-
-            if(oldBusiOrders == null || oldBusiOrders.size() != 1){
-                throw new IllegalArgumentException("当前[boId="+needDeleteBoIdMap.get("boId")+"] 数据在busi_order表中不存在,请处理,很有可能是入参错误");
-            }
-
-            //回写数据
-
-            needDeleteBoIdMap.put("olId",oldBusiOrders.get(0).getOlId());
-            needDeleteBoIdMap.put("actionTypeCd",oldBusiOrders.get(0).getActionTypeCd()+ CommonConstant.SUFFIX_DELETE_ORDER);
-        }
-
-        String actionTypeCd = needDeleteBoIdMap.get("actionTypeCd");
-
-        JSONArray dataJsonTmp = null;
-        if(!datasTmp.containsKey(actionTypeCd)){
-            dataJsonTmp = new JSONArray();
-        }else{
-            dataJsonTmp = datasTmp.get(actionTypeCd);
-        }
-        dataJsonTmp.add(JSONObject.parseObject(JSONObject.toJSONString(needDeleteBoIdMap)));
-        datasTmp.put(actionTypeCd,dataJsonTmp);
-
-        //deleteOrderInfoProducer.send(datasTmp.toString());
-    }
-
-
-    /**
-     * 补偿事物,这里不用手工作废 购物车信息,事物会自动回退掉,这里这需要手工给其他的系统发布事物回退
-     *
-     * { 'data': [
-
-     {
-     'boId': '222222',
-     'actionTypeCd': 'C1',
-     'oldBoId':'11111'
-     },
-     {
-     'boId': '222222',
-     'actionTypeCd': 'M1',
-     'oldBoId':'11111'
-     },
-     {
-     'boId': '222222',
-     'actionTypeCd': 'C1',
-     'oldBoId':'11111'
-     }
-     ]
-     }
-     * @param datasTmp {C1={'data':[{}]}}
-     */
-    private void compensateTransactional(Map<String,JSONArray> datasTmp){
-
-        Set<String> keys = datasTmp.keySet();
-
-        JSONArray compensateDatas = new JSONArray();
-
-        JSONObject compensateBoId = null;
-        for(String key : keys){
-            JSONArray datas = datasTmp.get(key);
-
-            for(int dataIndex = 0 ; dataIndex <datas.size() ; dataIndex++){
-                compensateBoId.put("boId",datas.getJSONObject(dataIndex).getString("boId"));
-                compensateBoId.put("actionTypeCd",key);
-                compensateDatas.add(compensateBoId);
-            }
-        }
-
-        JSONObject compensateData = new JSONObject();
-
-        compensateData.put("data",compensateDatas);
-
-        deleteOrderInfoProducer.send(datasTmp.toString());
-    }
-
-    public IPrimaryKeyService getiPrimaryKeyService() {
-        return iPrimaryKeyService;
-    }
-
-    public void setiPrimaryKeyService(IPrimaryKeyService iPrimaryKeyService) {
-        this.iPrimaryKeyService = iPrimaryKeyService;
-    }
-
-    public IOrderServiceDao getiOrderServiceDao() {
-        return iOrderServiceDao;
-    }
-
-    public void setiOrderServiceDao(IOrderServiceDao iOrderServiceDao) {
-        this.iOrderServiceDao = iOrderServiceDao;
-    }
-
-    public EventProperties getEventProperties() {
-        return eventProperties;
-    }
-
-    public void setEventProperties(EventProperties eventProperties) {
-        this.eventProperties = eventProperties;
-    }
-}

+ 5 - 2
java110-common/src/main/java/com/java110/common/util/SequenceUtil.java

@@ -15,6 +15,7 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
@@ -149,11 +150,13 @@ public class SequenceUtil {
     }
 
     public static String getDataFlowId()  throws GenerateCodeException{
-        if(!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))){
+        /*if(!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))){
             return prefixMap.get("dataFlowId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId("%08d");
         }
 
-        return getCode(prefixMap.get("dataFlowId"));
+        return getCode(prefixMap.get("dataFlowId"));*/
+
+        return UUID.randomUUID().toString().replace("-","").toLowerCase();
 
     }
 

+ 1 - 1
java110-core/src/main/java/com/java110/core/base/controller/BaseController.java

@@ -214,7 +214,7 @@ public class BaseController extends AppBase {
      * @return
      * @throws Exception
      */
-    protected BusinessServiceDataFlow writeDataToDataFlowContext(String reqJson, Map<String,String> headers) throws InitDataFlowContextException {
+    protected BusinessServiceDataFlow writeDataToDataFlowContext(String reqJson, Map<String,String> headers) throws Exception {
         BusinessServiceDataFlow businessServiceDataFlow = DataFlowFactory.newInstance(BusinessServiceDataFlow.class).builder(reqJson,headers);
         return businessServiceDataFlow;
     }

+ 77 - 2
java110-core/src/main/java/com/java110/core/context/AbstractDataFlowContext.java

@@ -2,17 +2,22 @@ package com.java110.core.context;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.java110.common.factory.ApplicationContextFactory;
+import com.java110.common.log.LoggerEngine;
+import com.java110.common.util.DateUtil;
 import com.java110.entity.center.Business;
 import com.java110.entity.center.DataFlowLinksCost;
 import com.java110.entity.center.DataFlowLog;
 
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.*;
 
 /**
  * 数据流上下文
  * Created by wuxw on 2018/5/18.
  */
-public abstract class AbstractDataFlowContext implements DataFlowContext,Orders{
+public abstract class AbstractDataFlowContext extends AbstractTransactionLog implements DataFlowContext,Orders,TransactionLog{
 
     private String dataFlowId;
 
@@ -66,7 +71,37 @@ public abstract class AbstractDataFlowContext implements DataFlowContext,Orders{
      * @return
      * @throws Exception
      */
-    public abstract DataFlowContext builder(String reqInfo, Map<String,String> headerAll) throws Exception;
+    public  <T> T builder(String reqInfo, Map<String,String> headerAll) throws Exception{
+        //预处理
+        preBuilder(reqInfo, headerAll);
+        //调用builder
+        T dataFlowContext = (T)doBuilder(reqInfo, headerAll);
+        //后处理
+        afterBuilder((DataFlowContext) dataFlowContext);
+        return dataFlowContext;
+    }
+
+    /**
+     * 预处理
+     * @param reqInfo
+     * @param headerAll
+     */
+    protected void preBuilder(String reqInfo, Map<String,String> headerAll) {
+        super.preBuilder(reqInfo,headerAll);
+    }
+
+    /**
+     * 构建对象
+     * @param reqInfo
+     * @param headerAll
+     * @return
+     * @throws Exception
+     */
+    public abstract DataFlowContext doBuilder(String reqInfo, Map<String,String> headerAll) throws Exception;
+
+    protected void afterBuilder(DataFlowContext dataFlowContext){
+
+    }
 
     public void setTransactionId(String transactionId) {
         this.transactionId = transactionId;
@@ -219,6 +254,16 @@ public abstract class AbstractDataFlowContext implements DataFlowContext,Orders{
 
     public String getUserId(){return null;};
 
+    @Override
+    public void setAppId(String appId) {
+
+    }
+
+    @Override
+    public void setUserId(String userId) {
+
+    }
+
     public String getRemark(){return null;};
 
     public String getReqSign(){return null;};
@@ -261,6 +306,36 @@ public abstract class AbstractDataFlowContext implements DataFlowContext,Orders{
         return null;
     }
 
+    public String getLogId(){
+        return getbId();
+    }
+
+
+    /**
+     * 业务编码 当前需要处理的业务编码,可以写将要请求服务提供方的方法名
+     * 主要用于 日志端展示
+     * @return 当前服务编码
+     */
+    public String getServiceCode(){
+        if(this.currentBusiness != null){
+            return currentBusiness.getServiceCode();
+        }
+        return "";
+    }
+
+    /**
+     * 业务名称 当前需要处理的业务名称,可以当前调用的业务名称 如 商品购买 等
+     * 主要用于 日志端展示
+     * @return 当前服务名称
+     */
+    public String getServiceName(){
+        if(this.currentBusiness != null){
+            return currentBusiness.getServiceName();
+        }
+        return "";
+    }
+
+
     public abstract Orders getOrder();
 
     protected AbstractDataFlowContext(Date startDate, String code){

+ 128 - 0
java110-core/src/main/java/com/java110/core/context/AbstractTransactionLog.java

@@ -0,0 +1,128 @@
+package com.java110.core.context;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.java110.common.log.LoggerEngine;
+import com.java110.common.util.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.InetAddress;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * 交互日志抽象类
+ * Created by wuxw on 2018/6/9.
+ */
+public abstract class AbstractTransactionLog  implements TransactionLog {
+
+    private final static Logger logger = LoggerFactory.getLogger(AbstractTransactionLog.class);
+
+    private String port;
+
+    private String logStatus;
+
+    private String requestMessage;
+
+    private String responseMessage;
+
+    public String getHostIp() {
+        String ip = null;
+        try {
+            ip = InetAddress.getLocalHost().getHostAddress();
+        }catch (Exception e){
+            logger.error("获取主机Ip失败",e);
+            ip = "-1";
+        }
+        return ip;
+    }
+
+    /**
+     * 时间戳
+     * @return
+     */
+    public String getTimestamp(){
+        return DateUtil.getCurrentDate().getTime()+"";
+    }
+
+
+    @Override
+    public String getLogStatus() {
+        return logStatus;
+    }
+
+    public String getRequestMessage() {
+        return requestMessage;
+    }
+
+    public String getResponseMessage() {
+        return responseMessage;
+    }
+
+    @Override
+    public String getPort() {
+        return port;
+    }
+
+    /**
+     * 预构建
+     * @param reqInfo
+     * @param headerAll
+     */
+    protected void preBuilder(String reqInfo, Map<String,String> headerAll){
+
+        if(headerAll != null && headerAll.containsKey("port")){
+            this.port = headerAll.get("port");
+        }
+
+    }
+
+    /**
+     * 重新构建 TransactionLog 对象 主要用于服务调用方
+     * @return
+     */
+    public TransactionLog reBuilder(String requestMessage,String responseMessage,String logStatus){
+
+        this.logStatus = logStatus;
+        this.requestMessage = requestMessage;
+        this.responseMessage = responseMessage;
+
+        return this;
+    }
+
+    /**
+     * 重新构建 TransactionLog 对象 主要用于服务提供方
+     * @return
+     */
+    public TransactionLog reBuilder(String appId,String userId,String requestMessage,String responseMessage,String logStatus){
+
+        this.logStatus = logStatus;
+        this.requestMessage = requestMessage;
+        this.responseMessage = responseMessage;
+        this.setAppId(appId);
+        this.setUserId(userId);
+        return this;
+    }
+
+
+    @Override
+    public String toString() {
+        //return JSONObject.toJSONString(this);
+        JSONObject logMessage = JSONObject.parseObject("{}");
+        logMessage.put("transactionId",getTransactionId());
+        logMessage.put("dataFlowId",getDataFlowId());
+        logMessage.put("ip",getHostIp());
+        logMessage.put("port", getPort());
+        logMessage.put("appId",getAppId());
+        logMessage.put("userId",getUserId());
+        logMessage.put("serviceCode",getServiceCode());
+        logMessage.put("serviceName",getServiceName());
+        logMessage.put("timestamp",getTimestamp());
+        logMessage.put("logStatus",getLogStatus());
+        logMessage.put("requestMessage",getRequestMessage());
+        logMessage.put("responseMessage",getResponseMessage());
+        return logMessage.toJSONString(logMessage,SerializerFeature.WriteNullStringAsEmpty);
+    }
+}

+ 1 - 1
java110-core/src/main/java/com/java110/core/context/BusinessServiceDataFlow.java

@@ -34,7 +34,7 @@ public class BusinessServiceDataFlow extends AbstractDataFlowContext {
         super(startDate, code);
     }
 
-    public BusinessServiceDataFlow builder(String reqInfo, Map<String, String> headerAll) throws InitDataFlowContextException {
+    public BusinessServiceDataFlow doBuilder(String reqInfo, Map<String, String> headerAll) throws InitDataFlowContextException {
         try{
             Business business = null;
             JSONObject reqInfoObj = JSONObject.parseObject(reqInfo);

+ 3 - 3
java110-core/src/main/java/com/java110/core/context/CodeDataFlow.java

@@ -11,8 +11,6 @@ import java.util.Map;
  */
 public class CodeDataFlow extends AbstractDataFlowContext {
 
-
-
     /**
      * 前缀
      */
@@ -42,6 +40,8 @@ public class CodeDataFlow extends AbstractDataFlowContext {
         return port;
     }
 
+
+
     public void setPort(String port) {
         this.port = port;
     }
@@ -51,7 +51,7 @@ public class CodeDataFlow extends AbstractDataFlowContext {
     }
 
     @Override
-    public CodeDataFlow builder(String reqInfo, Map<String, String> headerAll) throws Exception {
+    public CodeDataFlow doBuilder(String reqInfo, Map<String, String> headerAll) throws Exception {
         JSONObject reqInfoObj = JSONObject.parseObject(reqInfo);
         this.setReqJson(reqInfoObj);
         this.setReqData(reqInfo);

+ 1 - 1
java110-core/src/main/java/com/java110/core/context/DataFlow.java

@@ -213,7 +213,7 @@ public class DataFlow extends AbstractDataFlowContext {
         return this;
     }
 
-    public DataFlow builder(String reqInfo, Map<String,String> headerAll) throws Exception{
+    public DataFlow doBuilder(String reqInfo, Map<String,String> headerAll) throws Exception{
 
         try{
             Business business = null;

+ 94 - 0
java110-core/src/main/java/com/java110/core/context/TransactionLog.java

@@ -0,0 +1,94 @@
+package com.java110.core.context;
+
+import java.io.Serializable;
+import java.net.UnknownHostException;
+import java.util.Map;
+
+/**
+ * 交互日志
+ *
+ * id 业务ID,每次接口交互时的唯一编码 如订单ID 业务ID等
+ * logContextId 上下文ID ,每次调用 每个系统只有一个contextId 每次不一样 生成规则为uuId
+ * ip 当前主机IP
+ * port 当前应用监听端口
+ * url 交互地址 调用端和服务提供端 必须一致
+ * serviceCode 服务编码
+ * serviceName 服务名称
+ * type S 调用端 C服务提供端
+ * timestamp 时间戳
+ * status 状态 S表示成功 F表示失败
+ * messageHeaders 消息头部信息 目前只有调用端保存日志
+ * message 消息 目前只有调用端保存
+ * Created by wuxw on 2018/6/7.
+ */
+public interface TransactionLog extends Serializable {
+
+    //业务ID
+    public String getTransactionId();
+
+    /**
+     * 日志上下文ID
+     * @return
+     */
+    public String getDataFlowId();
+
+    //获取主机Ip
+    public String getHostIp();
+
+    //获取监听端口
+    public String getPort();
+
+    public String getAppId();
+
+    public String getUserId();
+
+    public void setAppId(String appId);
+
+    public void setUserId(String userId);
+
+    //业务编码,如果是批量受理就取第一个
+    public String getServiceCode();
+
+    //业务名称 如果是批量受理就取第一个
+    public String getServiceName();
+
+    //时间
+    public String getTimestamp();
+
+    //编码 S 表示成功 F其他表示失败
+
+    /**
+     * 当前状态 调用的时候和接受的时候统一写成S
+     * 返回时如果返回失败则写为F
+     * @return S 表示成功 F其他表示失败
+     */
+    public String getLogStatus();
+
+    /**
+     * 接口请求消息
+     * @return
+     */
+    public String getRequestMessage();
+
+
+    public String getResponseMessage();
+
+    /**
+     * 重新构建 TransactionLog 对象 主要用于服务调用方
+     * @return
+     */
+    public TransactionLog reBuilder(String appId,String userId,String requestMessage,String responseMessage,String logStatus);
+
+    /**
+     * 重新构建 TransactionLog 对象 主要用于服务提供方
+     * @return
+     */
+    public TransactionLog reBuilder(String requestMessage,String responseMessage,String logStatus);
+
+    /**
+     * 转换成json模式
+     * @return
+     */
+    public String toString();
+
+}

+ 49 - 0
java110-core/src/main/java/com/java110/core/factory/DataTransactionFactory.java

@@ -3,6 +3,7 @@ package com.java110.core.factory;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSONPath;
 import com.java110.common.constant.MappingConstant;
 import com.java110.common.constant.OrderTypeCdConstant;
 import com.java110.common.constant.ResponseConstant;
@@ -51,6 +52,54 @@ public class DataTransactionFactory {
         return responseInfo;
     }
 
+    /**
+     * 业务是否都成功了
+     * @param response true 成功 false 失败
+     * @return
+     */
+    public static boolean isSuccessBusiness(JSONObject response){
+        Object obj = JSONPath.eval(response,"$.orders.response.code");
+
+        if(obj != null && obj instanceof String && ResponseConstant.RESULT_CODE_SUCCESS.equals(obj.toString())){
+            Object businessObj = JSONPath.eval(response,"$.business");
+            if(businessObj == null){
+                return true;
+            }
+
+            if(businessObj instanceof JSONObject){
+                JSONObject businessJson = (JSONObject) businessObj;
+                if(!businessJson.containsKey("response")){ //这里返回协议错误,我们认为是成功
+                    return true;
+                }
+                if(businessJson.getJSONObject("response").containsKey("code")
+                        && ResponseConstant.RESULT_CODE_SUCCESS.equals(businessJson.getJSONObject("response").getString("code"))){
+                    return true;
+                }
+            }
+
+            if(businessObj instanceof JSONArray){
+                JSONArray businessJsons = (JSONArray) businessObj;
+                if(businessJsons == null || businessJsons.size() == 0){
+                    return true;
+                }
+                JSONObject businessJson = null;
+                for (int businessIndex = 0;businessIndex < businessJsons.size();businessIndex++) {
+                    businessJson = businessJsons.getJSONObject(businessIndex);
+                    if (!businessJson.containsKey("response")) { //这里返回协议错误,我们认为是成功
+                        continue;
+                    }
+                    if (businessJson.getJSONObject("response").containsKey("code")
+                            && !ResponseConstant.RESULT_CODE_SUCCESS.equals(businessJson.getJSONObject("response").getString("code"))) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     /**
      * 返回模板 只有Order信息
      * @param transactionId

+ 39 - 0
java110-logAgent/pom.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>MicroCommunity</artifactId>
+        <groupId>com.java110</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>java110-logAgent</artifactId>
+
+    <name>java110-logAgent</name>
+    <!-- FIXME change it to the project's website -->
+    <url>http://www.example.com</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.7</maven.compiler.source>
+        <maven.compiler.target>1.7</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.java110</groupId>
+            <artifactId>java110-core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+
+</project>

+ 49 - 0
java110-logAgent/src/main/java/com/java110/log/agent/LogAgent.java

@@ -0,0 +1,49 @@
+package com.java110.log.agent;
+
+import com.java110.common.cache.MappingCache;
+import com.java110.common.constant.KafkaConstant;
+import com.java110.common.constant.MappingConstant;
+import com.java110.common.factory.ApplicationContextFactory;
+import com.java110.common.kafka.KafkaFactory;
+import com.java110.common.log.LoggerEngine;
+import com.java110.core.context.DataFlow;
+import com.java110.core.context.TransactionLog;
+
+/**
+ * 日志代理
+ * 收集日志 发送至 日志服务
+ * Created by wuxw on 2018/6/9.
+ */
+public class LogAgent extends LoggerEngine{
+
+    public static final String LOG_STATUS_S = "S";
+    public static final String LOG_STATUS_F = "F";
+    public static final String LOG_TYPE_S = "S";
+    public static final String LOG_TYPE_C = "C";
+
+
+    /**
+     * 发送日志
+     * @param transactionLog
+     * @return
+     */
+    public static boolean sendLog(TransactionLog transactionLog){
+        if(MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_LOG_ON_OFF))) {
+            try {
+                KafkaFactory.sendKafkaMessage(KafkaConstant.TOPIC_LOG_NAME, "", transactionLog.toString());
+            }catch (Exception e){
+                logger.error("保存日志失败:"+transactionLog.toString(),e);
+                return false;
+            }
+        }
+        return true;
+    }
+
+
+    public static boolean sendLog(DataFlow dataFlow){
+        return sendLog(dataFlow);
+
+    }
+
+
+}

+ 33 - 0
java110-logAgent/src/test/java/com/java110/AppTest.java

@@ -0,0 +1,33 @@
+package com.java110;
+
+import static org.junit.Assert.assertTrue;
+
+import com.java110.core.context.DataFlow;
+import com.java110.core.context.TransactionLog;
+import org.junit.Test;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+{
+    /**
+     * Rigorous Test :-)
+     */
+    @Test
+    public void shouldAnswerWithTrue()
+    {
+        assertTrue( true );
+    }
+
+    @Test
+    public void testDataFlow(){
+        TransactionLog transactionLog = new DataFlow(new Date(),"0000");
+        transactionLog.reBuilder("234","234324","F");
+
+        System.out.println(transactionLog.toString());
+    }
+}

+ 1 - 0
java110-service/pom.xml

@@ -32,6 +32,7 @@
             <groupId>org.mybatis.spring.boot</groupId>
             <artifactId>mybatis-spring-boot-starter</artifactId>
         </dependency>
+
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid</artifactId>

+ 9 - 4
pom.xml

@@ -13,7 +13,7 @@
         <module>java110-config</module>
         <module>java110-common</module>
         <module>UserService</module>
-        <module>OrderService</module>
+        <module>LogService</module>
         <module>PayService</module>
         <module>eureka</module>
         <module>WechatService</module>
@@ -28,6 +28,8 @@
         <module>CenterService</module>
         <module>java110-cacheAgent</module>
         <module>ConsoleService</module>
+        <module>java110-logAgent</module>
+        <module>zipkin</module>
     </modules>
 
     <parent>
@@ -81,6 +83,7 @@
                 <scope>import</scope>
             </dependency>
 
+
             <dependency>
                 <groupId>org.springframework</groupId>
                 <artifactId>spring-context-support</artifactId>
@@ -167,7 +170,11 @@
                 <artifactId>java110-cacheAgent</artifactId>
                 <version>${microcommunity.version}</version>
             </dependency>
-
+            <dependency>
+                <groupId>com.java110</groupId>
+                <artifactId>java110-logAgent</artifactId>
+                <version>${microcommunity.version}</version>
+            </dependency>
             <!-- logback 日志组件支持  -->
 
             <dependency>
@@ -331,8 +338,6 @@
             </dependency>
 
 
-
-
             <dependency>
                 <groupId>org.quartz-scheduler</groupId>
                 <artifactId>quartz</artifactId>

+ 55 - 0
zipkin/pom.xml

@@ -0,0 +1,55 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <parent>
+        <artifactId>MicroCommunity</artifactId>
+        <groupId>com.java110</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>zipkin</artifactId>
+    <packaging>war</packaging>
+    <name>zipkin Maven Webapp</name>
+    <url>http://maven.apache.org</url>
+    <dependencies>
+
+        <!--springboot依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <!--加入zipkin依赖-->
+        <dependency>
+            <groupId>io.zipkin.java</groupId>
+            <artifactId>zipkin</artifactId>
+            <version>2.4.2</version>
+        </dependency>
+
+        <!--引入zipkin的流绑定-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-stream-kafka</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>3.8.1</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <finalName>zipkin</finalName>
+    </build>
+</project>

+ 14 - 0
zipkin/src/main/java/com.java110.zipkin/ZipkinServerApplication.java

@@ -0,0 +1,14 @@
+package com.java110.zipkin;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamServer;
+
+@SpringBootApplication
+@EnableZipkinStreamServer//配置可以作为zipkinserver
+public class ZipkinServerApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ZipkinServerApplication.class,args);
+    }
+}

+ 11 - 0
zipkin/src/main/resources/application-ha.yml

@@ -0,0 +1,11 @@
+---
+spring:
+  profiles: peer1                                 # 指定profile=peer1
+server:
+  port: 8761
+eureka:
+  instance:
+    hostname: peer1                               # 指定当profile=peer1时,主机名
+  client:
+    serviceUrl:
+      defaultZone: http://peer2:8762/eureka/      # 将自己注册到peer2这个Eureka上面去

+ 22 - 0
zipkin/src/main/resources/application.yml

@@ -0,0 +1,22 @@
+#配置kafka
+spring:
+  sleuth:
+    enabled: false
+    sampler:
+      percentage: 1.0
+  cloud:
+    stream:
+      kafka:
+        binder:
+          brokers: localhost:9092
+          zkNodes: localhost:2181
+
+logging:
+  file: logs/eureka.log
+  level:
+    org:
+      springframework:
+        web: DEBUG
+
+# 参考文档:http://projects.spring.io/spring-cloud/docs/1.0.3/spring-cloud.html#_standalone_mode
+# 参考文档:http://my.oschina.net/buwei/blog/618756