Просмотр исходного кода

订单受理 同步 异步 逻辑处理完成待测试

wuxw7 лет назад: 8
Родитель
Сommit
768a421660

+ 33 - 0
CenterService/src/main/java/com/java110/center/dao/ICenterServiceDAO.java

@@ -33,6 +33,12 @@ public interface ICenterServiceDAO {
      */
     public void saveBusiness(List<Map> businesses) throws DAOException;
 
+    /**
+     * 保存订单项信息
+     * @param business 订单项信息
+     */
+    public void saveBusiness(Map business) throws DAOException;
+
     /**
      * 保存属性信息
      * @param businessAttrs
@@ -69,6 +75,15 @@ public interface ICenterServiceDAO {
      */
     public void completeOrderByBId(String bId) throws DAOException;
 
+    /**
+     * 判断 business 过程是否完成 1 表示完成 0表示未完成
+     * @param oId
+     * @return
+     * @throws DAOException
+     */
+    public int judgeAllBusinessCompleted(String oId,String statusCd) throws DAOException;
+
+
     /**
      * 根据bId查询订单信息
      * @param bId
@@ -77,6 +92,14 @@ public interface ICenterServiceDAO {
      */
     public Map getOrderInfoByBId(String bId)throws DAOException;
 
+    /**
+     * 根据oId查询订单信息
+     * @param oId
+     * @return
+     * @throws DAOException
+     */
+    public Map getDeleteOrderBusinessByOId(String oId)throws DAOException;
+
     /**
      * 获取同个订单中已经完成的订单项
      * @param bId
@@ -85,6 +108,14 @@ public interface ICenterServiceDAO {
      */
     public List<Map> getCommonOrderCompledBusinessByBId(String bId) throws DAOException;
 
+    /**
+     * 根据oId 查询Business
+     * @param info
+     * @return
+     * @throws DAOException
+     */
+    public List<Map> getBusinessByOId(Map info) throws DAOException;
+
     /**
      * 查询所有组件
      * @return
@@ -97,4 +128,6 @@ public interface ICenterServiceDAO {
      */
     public List<Mapping> getMappingInfoAll();
 
+
+
 }

+ 61 - 0
CenterService/src/main/java/com/java110/center/dao/impl/CenterServiceDAOImpl.java

@@ -10,6 +10,7 @@ import com.java110.entity.mapping.Mapping;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -56,6 +57,20 @@ public class CenterServiceDAOImpl extends BaseServiceDao implements ICenterServi
         }
     }
 
+    /**
+     * 保存订单项信息
+     * @param business 订单项信息
+     */
+    @Override
+    public void saveBusiness(Map business) throws DAOException {
+
+        LoggerEngine.debug("----【CenterServiceDAOImpl.saveBusiness】保存数据入参 : " + JSONObject.toJSONString(business));
+            int saveFlag = sqlSessionTemplate.insert("centerServiceDAOImpl.saveBusiness", business);
+            if (saveFlag < 1) {
+                throw new DAOException(ResponseConstant.RESULT_CODE_INNER_ERROR, "保存订单项信息失败:" + JSONObject.toJSONString(business));
+            }
+    }
+
     /**
      * 保存订单项信息
      * @param businesses 订单项信息
@@ -149,6 +164,25 @@ public class CenterServiceDAOImpl extends BaseServiceDao implements ICenterServi
         }
     }
 
+    /**
+     * 判断 business 过程是否完成 1 表示完成 0表示未完成
+     * @param oId
+     * @return
+     * @throws DAOException
+     */
+    public int judgeAllBusinessCompleted(String oId,String statusCd) throws DAOException{
+        LoggerEngine.debug("----【CenterServiceDAOImpl.judgeAllBusinessCompleted】数据入参 :oId= " + oId + ",statusCd = " + statusCd);
+        Map paramIn = new HashMap();
+        paramIn.put("oId",oId);
+        paramIn.put("statusCd",statusCd);
+
+        Map paramOut = sqlSessionTemplate.selectOne("centerServiceDAOImpl.judgeAllBusinessCompleted",paramIn);
+        if(paramOut == null || paramOut.isEmpty()){
+            return 0;
+        }
+        return 1;
+    }
+
     /**
      * 根据bId查询订单信息
      * @param bId
@@ -162,6 +196,21 @@ public class CenterServiceDAOImpl extends BaseServiceDao implements ICenterServi
         }
         return null;
     }
+    /**
+     * 根据oId查询订单信息
+     * @param oId
+     * @return
+     * @throws DAOException
+     */
+    public Map getDeleteOrderBusinessByOId(String oId)throws DAOException{
+        List<Map> orders = sqlSessionTemplate.selectList("centerServiceDAOImpl.getDeleteOrderBusinessByOId",oId);
+        if(orders !=null){
+            return orders.get(0);
+        }
+        return null;
+    }
+
+
     /**
      * 获取同个订单中已经完成的订单项
      * @param bId
@@ -188,5 +237,17 @@ public class CenterServiceDAOImpl extends BaseServiceDao implements ICenterServi
         return sqlSessionTemplate.selectList("centerServiceDAOImpl.getMappingInfoAll");
     }
 
+    /**
+     * 根据oId 查询Business
+     * @param info
+     * @return
+     * @throws DAOException
+     */
+    public List<Map> getBusinessByOId(Map info) throws DAOException{
+        LoggerEngine.debug("----【CenterServiceDAOImpl.getBusinessByOId】保存数据入参 : " + JSONObject.toJSONString(info));
+
+        return sqlSessionTemplate.selectList("centerServiceDAOImpl.getBusinessByOId",info);
+    }
+
 
 }

+ 132 - 39
CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java

@@ -379,7 +379,7 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
 
 
     /**
-     * 7.0 作废订单和业务项
+     * 7.0 作废订单和业务项 插入撤单记录 等待撤单
      *
      * @param dataFlow
      */
@@ -392,12 +392,25 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
             return ;
         }
 
+        //如果已经作废 不存在 或失败,则不做处理
+
+        Map order = centerServiceDaoImpl.getOrderInfoByBId(dataFlow.getbId());
+
+        if(order == null || !order.containsKey("status_cd") || StatusConstant.STATUS_CD_DELETE.equals(order.get("status_cd"))
+                || StatusConstant.STATUS_CD_ERROR.equals(order.get("status_cd"))){
+            return ;
+        }
+
         //作废 订单
         centerServiceDaoImpl.updateOrder(DataFlowFactory.getNeedInvalidOrder(dataFlow));
 
         //作废订单项
         centerServiceDaoImpl.updateBusiness(DataFlowFactory.getNeedInvalidOrder(dataFlow));
 
+        //将当前订单项改为 撤单状态
+        centerServiceDaoImpl.updateBusinessByBId(DataFlowFactory.getNeedDeleteBusiness(dataFlow));
+        //插入撤单记录
+        doAddDeleteOrderBusinessData(dataFlow);
 
         DataFlowFactory.addCostTime(dataFlow, "invalidOrderAndBusiness", "作废订单和业务项耗时", startDate);
     }
@@ -409,14 +422,28 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
      * @param dataFlow
      */
     private void invalidCompletedBusinessSystem(DataFlow dataFlow) throws Exception{
+
+        if(!StatusConstant.REQUEST_BUSINESS_TYPE_INSTANCE.equals(dataFlow.getBusinessType())) {
+            return ;
+        }
+
+        //判断 订单instance 是否都变成了撤单状态
+        if(centerServiceDaoImpl.judgeAllBusinessCompleted(dataFlow.getoId(),StatusConstant.STATUS_CD_DELETE_ORDER) < 1){
+            return ;
+        }
+
         // 根据 c_business 表中的字段business_type_cd 找到对应的消息队列名称
-        List<Map> completedBusinesses = centerServiceDaoImpl.getCommonOrderCompledBusinessByBId(dataFlow.getBusinesses().get(0).getbId());
+        Map paramIn = new HashMap();
+        paramIn.put("oId",dataFlow.getoId());
+        paramIn.put("statusCd",StatusConstant.STATUS_CD_DELETE_ORDER);
+        List<Map> completedBusinesses = centerServiceDaoImpl.getBusinessByOId(paramIn);
         for(AppRoute appRoute :dataFlow.getAppRoutes()){
             for(Map completedBusiness : completedBusinesses){
                 if(completedBusiness.get("business_type_cd").equals(appRoute.getAppService().getBusinessTypeCd())){
+                    //发起撤单
                     KafkaFactory.sendKafkaMessage(appRoute.getAppService().getMessageQueueName(),"",
-                            DataFlowFactory.getCompletedBusinessErrorJson(dataFlow,completedBusiness,appRoute.getAppService()));
-                    saveLogMessage(DataFlowFactory.getCompletedBusinessErrorJson(dataFlow,completedBusiness,appRoute.getAppService()),null);
+                            DataFlowFactory.getDeleteInstanceTableJson(dataFlow,completedBusiness,appRoute.getAppService()));
+                    saveLogMessage(DataFlowFactory.getDeleteInstanceTableJson(dataFlow,completedBusiness,appRoute.getAppService()),null);
                 }
             }
         }
@@ -456,7 +483,10 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
         centerServiceDaoImpl.updateOrder(DataFlowFactory.getNeedInvalidOrder(dataFlow));
 
         //作废订单项
-        centerServiceDaoImpl.updateBusiness(DataFlowFactory.getNeedInvalidOrder(dataFlow));
+        centerServiceDaoImpl.updateBusiness(DataFlowFactory.getNeedDeleteBusiness(dataFlow));
+
+        //加入撤单记录
+        //doAddDeleteOrderBusinessData(dataFlow);
 
 
 
@@ -464,6 +494,20 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
 
     }
 
+    /**
+     * 加入撤单记录
+     * @param dataFlow
+     */
+    private void doAddDeleteOrderBusinessData(DataFlow dataFlow){
+       /* Map business = new HashMap();
+        business.put("bId",SequenceUtil.getBId());
+        business.put("oId",dataFlow.getoId());
+        business.put("businessTypeCd",StatusConstant.REQUEST_BUSINESS_TYPE_DELETE);
+        business.put("remark","发起撤单");
+        business.put("statusCd",StatusConstant.STATUS_CD_DELETE_ORDER);*/
+        centerServiceDaoImpl.saveBusiness(DataFlowFactory.getDeleteOrderBusiness(dataFlow,"订单失败,加入撤单"));
+    }
+
 
 
     /**
@@ -485,53 +529,51 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
                 return ;
             }
 
+            //如果不是 business 和instance 过程 则直接跳出
+            judgeBusinessOrInstance(dataFlow);
+
             //2.0加载数据,没有找到appId 及配置信息 则抛出InitConfigDataException
             reloadOrderInfoAndConfigData(dataFlow);
 
             //3.0 判断是否成功,失败会抛出BusinessStatusException异常
-            judgeBusinessStatus(dataFlow);
+            judgeBusinessStatusAndCompleteBusiness(dataFlow);
 
             //4.0 修改业务为成功,如果发现业务项已经是作废或失败状态(D或E)则抛出BusinessException异常
-            completeBusiness(dataFlow);
-            //5.0当所有业务动作是否都是C,将订单信息改为 C 并且发布竣工消息,这里在广播之前确认
-            completeOrderAndNotifyBusinessSystem(dataFlow);
+            //completeBusiness(dataFlow);
+
+            //5.0 判断 发起 Instance 条件是否满足,如果满足 发起 Instance过程
+            judgeSendToInstance(dataFlow);
+
+            //7.0 判断撤单条件是否满足,如果满足发起撤单
+            invalidCompletedBusinessSystem(dataFlow);
 
         }catch (BusinessStatusException e){
-            try {
-                //6.0 作废订单和所有业务项
-                invalidOrderAndBusiness(dataFlow);
 
-                //7.0 广播作废业务系统订单信息,这里只有 Instance 失败后才发起 撤单
-                if(StatusConstant.REQUEST_BUSINESS_TYPE_INSTANCE.equals(dataFlow.getBusinessType())) {
-                    invalidCompletedBusinessSystem(dataFlow);
-                }
-            } catch (Exception e1) {
-                LoggerEngine.error("作废订单失败", e1);
-                //8.0 将订单状态改为失败,人工处理。
-                updateOrderAndBusinessError(dataFlow);
-            }
+            logger.error("订单失败:" ,e);
+            //8.0 将订单状态改为失败,人工处理。
+            updateOrderAndBusinessError(dataFlow);
+
         }catch (BusinessException e) {
             //9.0说明这个订单已经失败了,再不需要
             //想法,这里广播当前失败业务
-            try {
-                notifyBusinessSystemErrorMessage(dataFlow);
-            }catch (Exception e1){
-                //这里记录日志
-            }
+            logger.error("修改业务数据失败",e);
         }catch (InitConfigDataException e){ //这种一般不会出现,除非人工改了数据
             LoggerEngine.error("加载配置数据出错", e);
             try {
                 //6.0 作废订单和所有业务项
                 invalidOrderAndBusiness(dataFlow);
-                //7.0 广播作废业务系统订单信息
-                //想法,这里只广播已经完成的订单项
-                invalidCompletedBusinessSystem(dataFlow);
+                //7.0 广播作废业务系统订单信息,这里只有 Instance 失败后才发起 撤单
+                if(StatusConstant.REQUEST_BUSINESS_TYPE_INSTANCE.equals(dataFlow.getBusinessType())) {
+                    invalidCompletedBusinessSystem(dataFlow);
+                }
             } catch (Exception e1) {
                 LoggerEngine.error("作废订单失败", e1);
                 //8.0 将订单状态改为失败,人工处理。
                 updateOrderAndBusinessError(dataFlow);
             }
 
+        }catch (NoSupportException e){
+            LoggerEngine.error("当前业务不支持", e);
         }catch (Exception e){
             LoggerEngine.error("作废订单失败", e);
             //10.0 成功的情况下通知下游系统失败将状态改为NE,人工处理。
@@ -542,6 +584,38 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
         }
     }
 
+    /**
+     * Instance过程
+     * @param dataFlow
+     */
+    private void doSendInstance(DataFlow dataFlow) {
+        if(dataFlow == null || !StatusConstant.REQUEST_BUSINESS_TYPE_BUSINESS.equals(dataFlow.getBusinessType())){
+            return ;
+        }
+        try {
+            KafkaFactory.sendKafkaMessage(DataFlowFactory.getService(dataFlow, dataFlow.getCurrentBusiness().getServiceCode()).getMessageQueueName(), "",
+                    DataFlowFactory.getBusinessTableDataInfoToInstanceTableJson(dataFlow, dataFlow.getCurrentBusiness()).toJSONString());
+        }catch (Exception e){
+
+        }
+
+    }
+
+    /**
+     * 判断是否是 business 或者 instance过程
+     * @param dataFlow
+     * @throws NoSupportException
+     */
+    private void judgeBusinessOrInstance(DataFlow dataFlow) throws  NoSupportException{
+
+        if(dataFlow == null || StatusConstant.REQUEST_BUSINESS_TYPE_BUSINESS.equals(dataFlow.getBusinessType()) ||
+                StatusConstant.REQUEST_BUSINESS_TYPE_INSTANCE.equals(dataFlow.getBusinessType())){
+            return ;
+        }
+
+        throw new NoSupportException(ResponseConstant.RESULT_PARAM_ERROR,"当前只支持 Business 和 Instance过程");
+    }
+
 
     /**
      * 2.0重新加载订单信息到dataFlow 中
@@ -579,16 +653,28 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
      * 判断是否都成功了
      * @param dataFlow
      */
-    private void judgeBusinessStatus(DataFlow dataFlow) throws BusinessStatusException{
+    private void judgeBusinessStatusAndCompleteBusiness(DataFlow dataFlow) throws BusinessStatusException{
 
         List<Business> businesses = dataFlow.getBusinesses();
 
-        for(Business business: businesses){
-            if(!ResponseConstant.RESULT_CODE_SUCCESS.equals(business.getCode())){
-                throw new BusinessStatusException(business.getCode(),"业务bId= "+business.getbId() + " 处理失败,需要作废订单");
+        //1.0 判断是否存在撤单,如果是撤单则将当前 bId 标记为撤单状态
+        if(StatusConstant.REQUEST_BUSINESS_TYPE_INSTANCE.equals(dataFlow.getBusinessType())) {
+            Map businessMap = centerServiceDaoImpl.getDeleteOrderBusinessByOId(dataFlow.getoId());
+            if(businessMap != null && !businessMap.isEmpty()){
+                centerServiceDaoImpl.updateBusinessByBId(DataFlowFactory.getNeedDeleteBusiness(dataFlow));
+                return ;
             }
         }
 
+        Business business = dataFlow.getCurrentBusiness();
+        if(!ResponseConstant.RESULT_CODE_SUCCESS.equals(business.getCode())){
+            //throw new BusinessStatusException(business.getCode(),"业务bId= "+business.getbId() + " 处理失败,需要作废订单");
+            //作废订单和业务项 插入撤单记录 等待撤单
+            invalidOrderAndBusiness(dataFlow);
+        }else{
+            completeBusiness(dataFlow);
+        }
+
     }
 
     /**
@@ -598,8 +684,14 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
      */
     private void completeBusiness(DataFlow dataFlow) throws BusinessException{
         try {
-            //完成订单项
-            centerServiceDaoImpl.updateBusinessByBId(DataFlowFactory.getNeedCompleteBusiness(dataFlow));
+            if(StatusConstant.REQUEST_BUSINESS_TYPE_INSTANCE.equals(dataFlow.getBusinessType())) {
+                //完成订单项
+                centerServiceDaoImpl.updateBusinessByBId(DataFlowFactory.getNeedCompleteBusiness(dataFlow));
+            }else if(StatusConstant.REQUEST_BUSINESS_TYPE_BUSINESS.equals(dataFlow.getBusinessType())) {
+                centerServiceDaoImpl.updateBusinessByBId(DataFlowFactory.getNeedBusinessComplete(dataFlow));
+            }else{ //这里到不了,前面做了校验
+                throw new BusinessException(ResponseConstant.RESULT_PARAM_ERROR,"当前不支持 业务类型为 businessType" +dataFlow.getBusinessType());
+            }
 
         }catch (DAOException e){
             throw new BusinessException(e.getResult(),e);
@@ -610,11 +702,12 @@ public class CenterServiceSMOImpl extends LoggerEngine implements ICenterService
      * //4.0当所有业务动作是否都是C,将订单信息改为 C 并且发布竣工消息,这里在广播之前确认
      * @param dataFlow
      */
-    private void completeOrderAndNotifyBusinessSystem(DataFlow dataFlow) throws Exception{
+    private void judgeSendToInstance(DataFlow dataFlow) throws Exception{
         try {
-            centerServiceDaoImpl.completeOrderByBId(DataFlowFactory.getMoreBId(dataFlow));
-            //通知成功消息
-            notifyBusinessSystemSuccessMessage(dataFlow);
+            if(centerServiceDaoImpl.judgeAllBusinessCompleted(dataFlow.getoId(),StatusConstant.STATUS_CD_BUSINESS_COMPLETE) > 0) {
+                //通知成功消息
+                doSendInstance(dataFlow);
+            }
         }catch (DAOException e){
             //这里什么都不做,说明订单没有完成
         }

+ 20 - 1
UserService/src/test/java/com/java110/user/AppTest.java

@@ -1,5 +1,6 @@
 package com.java110.user;
 
+import com.java110.common.util.WebServiceAxisClient;
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -33,6 +34,24 @@ public class AppTest
      */
     public void testApp()
     {
-        assertTrue( true );
+        String url = "http://135.192.70.67:9084/serviceAgent/http/FactorageManager_ForAgent?AppKey=2017082401";
+        String function = "queryOrderInfo";
+
+        String xml  = "<QueryOrderInfoRequest>\n" +
+                "\t<accNbr>18009706604</accNbr>\n" +
+                "\t<accNbrType>1</accNbrType> \n" +
+                "\t<areaCode>0971</areaCode>\n" +
+                "\t<channelId></channelId>\n" +
+                "\t<staffCode></staffCode> \t\n" +
+                "</QueryOrderInfoRequest>";
+
+        try {
+            Object retObj = WebServiceAxisClient.callWebService(url, function, new Object[]{xml});
+
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
     }
 }

+ 2 - 0
java110-common/pom.xml

@@ -54,6 +54,8 @@
             <artifactId>commons-httpclient</artifactId>
         </dependency>
 
+
+
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>

+ 3 - 0
java110-common/src/main/java/com/java110/common/constant/StatusConstant.java

@@ -18,7 +18,10 @@ public class StatusConstant {
     public final static String STATUS_CD_NOTIFY_ERROR = "NE";//通知错误订单
     public final static String STATUS_CD_COMPLETE = "C";//错误订单
     public final static String STATUS_CD_BUSINESS = "B";//BUSINESS过程
+    public final static String STATUS_CD_BUSINESS_COMPLETE = "BC";//BUSINESS过程 完成
     public final static String STATUS_CD_INSTANCE = "I";//INSTANCE过程
+    public final static String STATUS_CD_DELETE_ORDER = "DO";// 撤单
+
 
     public final static String OPERATE_ADD = "ADD";
     public final static String OPERATE_MOD = "MOD";

+ 189 - 0
java110-common/src/main/java/com/java110/common/exception/NoSupportException.java

@@ -0,0 +1,189 @@
+package com.java110.common.exception;
+
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.PrintStream;
+import java.io.PrintWriter;
+
+/**
+ * 系统不支持异常
+ * Created by wuxw on 2018/4/14.
+ */
+public class NoSupportException extends RuntimeException {
+
+
+    private Result result;
+    private Throwable cause = this;
+
+    public NoSupportException(){}
+
+    /**
+     * 构造方法
+     * @param result 返回值
+     * @param cause  异常堆栈
+     */
+    public NoSupportException(Result result, Throwable cause) {
+        super(result.getMsg(), cause);
+        this.result = result;
+    }
+
+    /**
+     * 构造方法
+     * @param code 返回码
+     * @param msg  错误消息
+     */
+    public NoSupportException(int code, String msg) {
+        super(msg);
+        this.result = new Result(code, msg);
+    }
+
+    public NoSupportException(String code, String msg) {
+        super(msg);
+        this.result = new Result(code, msg);
+    }
+
+    /**
+     * 构造方法
+     * @param result 返回值
+     * @param detail 具体的返回消息
+     */
+    public NoSupportException(Result result, String detail) {
+        super(result.getMsg() + "," + detail);
+        this.result = new Result(result.getCode(), result.getMsg() + "," + detail);
+    }
+
+    /**
+     * 构造方法
+     * @param result 返回值
+     * @param detail 具体的返回消息
+     * @param cause  异常堆栈
+     */
+    public NoSupportException(Result result, String detail, Throwable cause) {
+        super(result.getMsg() + "," + detail, cause);
+        this.result = new Result(result.getCode(), result.getMsg() + "," + detail);
+    }
+
+    /**
+     * 构造方法
+     * @param code	返回码
+     * @param msg	返回消息
+     * @param cause 异常堆栈
+     */
+    public NoSupportException(int code, String msg, Throwable cause) {
+        super(msg, cause);
+
+        if(cause != null) {
+            if(cause.getCause() != null) {
+                msg += " cause:" + ExceptionUtils.populateExecption(cause.getCause(), 500);
+            }
+            msg += " StackTrace:"+ExceptionUtils.populateExecption(cause, 500);
+        }
+        this.result = new Result(code, msg);
+    }
+
+    /**
+     * 构造方法
+     * @param code	返回码
+     * @param cause	异常堆栈
+     */
+    public NoSupportException(int code, Throwable cause) {
+        super(cause);
+        String msg = "";
+
+        if(cause != null) {
+            if(cause.getCause() != null) {
+                msg += " cause:" + ExceptionUtils.populateExecption(cause.getCause(), 500);
+            }
+            msg += " StackTrace:"+ExceptionUtils.populateExecption(cause, 500);
+        }
+        this.result = new Result(code, msg);
+    }
+
+    /**
+     *
+     * TODO 简单描述该方法的实现功能(可选).
+     * @see Throwable#getCause()
+     */
+    public synchronized Throwable getCause() {
+        return (cause==this ? super.getCause() : cause);
+    }
+
+
+    /**
+     * 返回异常消息
+     * @return 异常消息
+     */
+    @Override
+    public String getMessage() {
+        return ExceptionUtils.buildMessage(super.getMessage(), getCause());
+    }
+
+    /**
+     * 异常
+     * @return
+     */
+    public String toJsonString() {
+        JSONObject exceptionJson = JSONObject.parseObject("{\"exception\":{}");
+        JSONObject exceptionJsonObj = exceptionJson.getJSONObject("exception");
+
+        if (getResult() != null)
+            exceptionJsonObj.putAll(JSONObject.parseObject(result.toString()));
+
+        exceptionJsonObj.put("exceptionTrace",getMessage());
+
+        return exceptionJsonObj.toString();
+    }
+    @Override
+    public void printStackTrace(PrintStream ps) {
+        ps.print("<exception>");
+        if (getResult() != null) {
+            ps.print(result.toString());
+        }
+        ps.append("<exceptionTrace>");
+
+        Throwable cause = getCause();
+        if (cause == null) {
+            super.printStackTrace(ps);
+        } else {
+            ps.println(this);
+            ps.print("Caused by: ");
+            cause.printStackTrace(ps);
+        }
+        ps.append("</exceptionTrace>");
+        ps.println("</exception>");
+    }
+
+    @Override
+    public void printStackTrace(PrintWriter pw) {
+        pw.print("<exception>");
+        if (getResult() != null) {
+            pw.print(result.toString());
+        }
+        pw.append("<exceptionTrace>");
+
+        Throwable cause = getCause();
+        if (cause == null) {
+            super.printStackTrace(pw);
+        } else {
+            pw.println(this);
+            pw.print("Caused by: ");
+            cause.printStackTrace(pw);
+        }
+        pw.append("</exceptionTrace>");
+        pw.println("</exception>");
+    }
+
+    /**
+     * 返回异常值
+     * @return	异常值对象
+     */
+    public Result getResult() {
+        return result;
+    }
+
+    public void setResult(Result result) {
+        this.result = result;
+    }
+
+}

+ 12 - 7
java110-common/src/main/java/com/java110/common/util/WebServiceAxisClient.java

@@ -16,16 +16,21 @@ import org.apache.axis.client.Service;
 
 public class WebServiceAxisClient extends LoggerEngine {
     public static void main(String[] args) {
-        String url = "http://135.192.100.2:9001/QH10000Web/WebTelecom10000";
-        String function = "getBalance";
+        String url = "http://135.192.70.67:9084/serviceAgent/http/FactorageManager_ForAgent?AppKey=2017082401";
+        String function = "queryOrderInfo";
 
-        String areaCode = "0971";
-        String accNbr = "18997240042";
-        String type = "2";
-        Object[] obj = new Object[]{areaCode, accNbr, type};
+        String xml  = "<QueryOrderInfoRequest>\n" +
+                "\t<accNbr>18009706604</accNbr>\n" +
+                "\t<accNbrType>1</accNbrType> \n" +
+                "\t<areaCode>0971</areaCode>\n" +
+                "\t<channelId></channelId>\n" +
+                "\t<staffCode></staffCode> \t\n" +
+                "</QueryOrderInfoRequest>";
 
         try {
-            Object retObj = WebServiceAxisClient.callWebService(url, function, obj);
+            Object retObj = WebServiceAxisClient.callWebService(url, function, new Object[]{xml});
+
+
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 32 - 0
java110-config/src/main/resources/mapper/center/CenterServiceDAOImplMapper.xml

@@ -81,6 +81,26 @@
         )
     ]]>
     </select>
+    <!-- 根据 OID 查询 business -->
+    <select id="getBusinessByOId" parameterType="map" resultType="map">
+        SELECT co.`o_id`,co.`app_id`,co.`order_type_cd`,co.`user_id`,cb.`business_type_cd`,cb.`b_id`,cb.`status_cd`
+        FROM c_orders co,c_business cb
+        WHERE co.`o_id` = cb.`o_id`
+        AND cb.`business_type_cd` NOT IN ('DO')
+        <if test="statusCd != null and statusCd != ''">
+        AND cb.`status_cd` = #{statusCd}
+        </if>
+        <if test="oId != null and oId != ''">
+        AND co.`o_id` = #{oId}
+        </if>
+    </select>
+
+    <select id="getDeleteOrderBusinessByOId" parameterType="String" resultType="Map">
+        <![CDATA[
+           select cb.b_id,cb.o_id,cb.business_type_cd,cb.status_cd from c_orders co,c_business cb where co.o_id = cb.o_id and cb.business_type_cd = 'DO' and cb.status_cd = 'DO'
+           and co.o_id = #{oId}
+        ]]>
+    </select>
 
     <!-- 获取同个订单中已经完成的订单项-->
     <select id="getCommonOrderCompledBusinessByBId" parameterType="String" resultType="Map">
@@ -113,4 +133,16 @@
         ]]>
     </select>
 
+    <select id="judgeAllBusinessCompleted" parameterType="map" resultType="map">
+        SELECT co.* FROM c_orders co WHERE co.`o_id` = #{oId} and not exists (
+        SELECT 1 FROM c_business cb WHERE cb.`o_id` = co.`o_id`
+        AND cb.`status_cd` NOT IN (#{statusCd})
+        )
+        AND NOT EXISTS (
+        SELECT 1 FROM c_business cbs WHERE cbs.`o_id` =co.`o_id`
+        AND cbs.`business_type_cd` = 'DO'
+        )
+        AND co.`status_cd` NOT IN ('D','C')
+    </select>
+
 </mapper>

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

@@ -16,6 +16,8 @@ public abstract class AbstractDataFlowContext implements DataFlowContext,Orders{
 
     private String dataFlowId;
 
+    private String businessType;
+
     //交易流水
     private String transactionId;
 
@@ -220,7 +222,11 @@ public abstract class AbstractDataFlowContext implements DataFlowContext,Orders{
     public JSONArray getAttrs(){return null;};
 
     public String getBusinessType() {
-        return null;
+        return businessType;
+    }
+
+    public void setBusinessType(String businessType) {
+        this.businessType = businessType;
     }
 
     public Map<String, Object> getParamOut() {

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

@@ -18,7 +18,7 @@ import java.util.Map;
 public class BusinessServiceDataFlow extends AbstractDataFlowContext {
 
 
-    private String businessType;
+
 
     private String bId;
 
@@ -29,13 +29,6 @@ public class BusinessServiceDataFlow extends AbstractDataFlowContext {
         return this;
     }
 
-    public String getBusinessType() {
-        return businessType;
-    }
-
-    public void setBusinessType(String businessType) {
-        this.businessType = businessType;
-    }
 
     public BusinessServiceDataFlow(Date startDate, String code) {
         super(startDate, code);

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

@@ -186,6 +186,7 @@ public class DataFlow extends AbstractDataFlowContext {
             this.setTransactionId(reqInfoObj.getString("transactionId"));
             this.setOrderTypeCd(reqInfoObj.getString("orderTypeCd"));
             this.setRequestTime(reqInfoObj.getString("responseTime"));
+            this.setBusinessType(reqInfoObj.getString("businessType"));
             //this.setReqOrders(orderObj);
             JSONObject businessObj = new JSONObject();
             businessObj.put("bId",reqInfoObj.getString("bId"));

+ 52 - 4
java110-core/src/main/java/com/java110/core/factory/DataFlowFactory.java

@@ -199,7 +199,7 @@ public class DataFlowFactory {
         busiMap.put("oId",dataFlow.getoId());
         busiMap.put("businessTypeCd",StatusConstant.REQUEST_BUSINESS_TYPE_DELETE);
         busiMap.put("remark",message);
-        busiMap.put("statusCd",StatusConstant.STATUS_CD_DELETE);
+        busiMap.put("statusCd",StatusConstant.STATUS_CD_DELETE_ORDER);
         busiMap.put("bId",SequenceUtil.getBId());
         business.add(busiMap);
         return business;
@@ -270,6 +270,40 @@ public class DataFlowFactory {
         return business;
     }
 
+    /**
+     * Business 过程完成
+     * @param dataFlow
+     * @return
+     */
+    public static Map getNeedBusinessComplete(DataFlow dataFlow){
+        Map business = new HashMap();
+        String bId = "";
+        for(Business busi:dataFlow.getBusinesses()){
+            bId += "'"+busi.getbId()+"',";
+        }
+        business.put("bId",bId.substring(0,bId.length()-1));
+        business.put("finishTime",DateUtil.getCurrentDate());
+        business.put("statusCd",StatusConstant.STATUS_CD_BUSINESS_COMPLETE);
+        return business;
+    }
+
+    /**
+     * Business 过程完成
+     * @param dataFlow
+     * @return
+     */
+    public static Map getNeedDeleteBusiness(DataFlow dataFlow){
+        Map business = new HashMap();
+        String bId = "";
+        for(Business busi:dataFlow.getBusinesses()){
+            bId += "'"+busi.getbId()+"',";
+        }
+        business.put("bId",bId.substring(0,bId.length()-1));
+        business.put("finishTime",DateUtil.getCurrentDate());
+        business.put("statusCd",StatusConstant.STATUS_CD_DELETE_ORDER);
+        return business;
+    }
+
     public static Map getNeedNotifyErrorBusiness(DataFlow dataFlow){
         Map business = new HashMap();
         String bId = getMoreBId(dataFlow);
@@ -374,6 +408,8 @@ public class DataFlowFactory {
 
     }
 
+
+
     /**
      * 获取失败消息的报文(订单失败后通知业务系统)
      * @param business
@@ -387,8 +423,8 @@ public class DataFlowFactory {
             busi.put("bId",business.getbId());
             busi.put("serviceCode",business.getServiceCode());
             busi.put("serviceName",business.getServiceName());
-            busi.put("isInstance",CommonConstant.INSTANCE_Y);
-        busi.put("datas",business.getDatas());
+            //busi.put("isInstance",CommonConstant.INSTANCE_Y);
+        //busi.put("datas",business.getDatas());
         requestMessage.put("business",busi);
         return requestMessage;
     }
@@ -407,11 +443,23 @@ public class DataFlowFactory {
         busi.put("bId",business.getbId());
         busi.put("serviceCode",business.getServiceCode());
         busi.put("serviceName",business.getServiceName());
-        busi.put("datas",business.getDatas());
+        //busi.put("datas",business.getDatas());
         requestMessage.put("business",busi);
         return requestMessage;
     }
 
+    public static JSONObject getDeleteInstanceTableJson(DataFlow dataFlow,Map business,AppService appService){
+        JSONObject requestMessage = getTransactionBusinessBaseJson(dataFlow,StatusConstant.REQUEST_BUSINESS_TYPE_DELETE);
+        JSONObject busi = null;
+        busi = new JSONObject();
+        busi.put("bId",business.get("b_id"));
+        busi.put("serviceCode",appService.getServiceCode());
+        //busi.put("datas",business.getDatas());
+        requestMessage.put("business",busi);
+        return requestMessage;
+
+    }
+
     /**
      * 获取失败消息的报文(订单失败后通知业务系统)
      * @param business

+ 1 - 0
pom.xml

@@ -293,6 +293,7 @@
                 <version>${httpclient.verion}</version>
             </dependency>
 
+
             <!-- https://mvnrepository.com/artifact/org.apache.axis2/axis2 -->
             <dependency>
                 <groupId>org.apache.axis</groupId>