From 768a42166035e34360e92f90852f38301aab25ca Mon Sep 17 00:00:00 2001
From: wuxw7 <wuxw7@asiainfo.com>
Date: 星期二, 22 五月 2018 17:29:13 +0800
Subject: [PATCH] 订单受理 同步 异步 逻辑处理完成待测试

---
 CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java |  175 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 134 insertions(+), 41 deletions(-)

diff --git a/CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java b/CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java
index 642bcfd..ed101d1 100644
--- a/CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java
+++ b/CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java
@@ -379,7 +379,7 @@
 
 
     /**
-     * 7.0 浣滃簾璁㈠崟鍜屼笟鍔¢」
+     * 7.0 浣滃簾璁㈠崟鍜屼笟鍔¢」 鎻掑叆鎾ゅ崟璁板綍 绛夊緟鎾ゅ崟
      *
      * @param dataFlow
      */
@@ -392,12 +392,25 @@
             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 @@
      * @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 琛ㄤ腑鐨勫瓧娈礲usiness_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,12 +483,29 @@
         centerServiceDaoImpl.updateOrder(DataFlowFactory.getNeedInvalidOrder(dataFlow));
 
         //浣滃簾璁㈠崟椤�
-        centerServiceDaoImpl.updateBusiness(DataFlowFactory.getNeedInvalidOrder(dataFlow));
+        centerServiceDaoImpl.updateBusiness(DataFlowFactory.getNeedDeleteBusiness(dataFlow));
+
+        //鍔犲叆鎾ゅ崟璁板綍
+        //doAddDeleteOrderBusinessData(dataFlow);
 
 
 
         DataFlowFactory.addCostTime(dataFlow, "updateOrderAndBusinessError", "璁㈠崟鐘舵�佹敼涓哄け璐ヨ�楁椂", startDate);
 
+    }
+
+    /**
+     * 鍔犲叆鎾ゅ崟璁板綍
+     * @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,22 +529,39 @@
                 return ;
             }
 
+            //濡傛灉涓嶆槸 business 鍜宨nstance 杩囩▼ 鍒欑洿鎺ヨ烦鍑�
+            judgeBusinessOrInstance(dataFlow);
+
             //2.0鍔犺浇鏁版嵁锛屾病鏈夋壘鍒癮ppId 鍙婇厤缃俊鎭� 鍒欐姏鍑篒nitConfigDataException
             reloadOrderInfoAndConfigData(dataFlow);
 
             //3.0 鍒ゆ柇鏄惁鎴愬姛,澶辫触浼氭姏鍑築usinessStatusException寮傚父
-            judgeBusinessStatus(dataFlow);
+            judgeBusinessStatusAndCompleteBusiness(dataFlow);
 
             //4.0 淇敼涓氬姟涓烘垚鍔�,濡傛灉鍙戠幇涓氬姟椤瑰凡缁忔槸浣滃簾鎴栧け璐ョ姸鎬侊紙D鎴朎锛夊垯鎶涘嚭BusinessException寮傚父
-            completeBusiness(dataFlow);
-            //5.0褰撴墍鏈変笟鍔″姩浣滄槸鍚﹂兘鏄疌锛屽皢璁㈠崟淇℃伅鏀逛负 C 骞朵笖鍙戝竷绔e伐娑堟伅锛岃繖閲屽湪骞挎挱涔嬪墠纭
-            completeOrderAndNotifyBusinessSystem(dataFlow);
+            //completeBusiness(dataFlow);
+
+            //5.0 鍒ゆ柇 鍙戣捣 Instance 鏉′欢鏄惁婊¤冻锛屽鏋滄弧瓒� 鍙戣捣 Instance杩囩▼
+            judgeSendToInstance(dataFlow);
+
+            //7.0 鍒ゆ柇鎾ゅ崟鏉′欢鏄惁婊¤冻锛屽鏋滄弧瓒冲彂璧锋挙鍗�
+            invalidCompletedBusinessSystem(dataFlow);
 
         }catch (BusinessStatusException e){
+
+            logger.error("璁㈠崟澶辫触:" ,e);
+            //8.0 灏嗚鍗曠姸鎬佹敼涓哄け璐ワ紝浜哄伐澶勭悊銆�
+            updateOrderAndBusinessError(dataFlow);
+
+        }catch (BusinessException e) {
+            //9.0璇存槑杩欎釜璁㈠崟宸茬粡澶辫触浜嗭紝鍐嶄笉闇�瑕�
+            //鎯虫硶锛岃繖閲屽箍鎾綋鍓嶅け璐ヤ笟鍔�
+            logger.error("淇敼涓氬姟鏁版嵁澶辫触",e);
+        }catch (InitConfigDataException e){ //杩欑涓�鑸笉浼氬嚭鐜帮紝闄ら潪浜哄伐鏀逛簡鏁版嵁
+            LoggerEngine.error("鍔犺浇閰嶇疆鏁版嵁鍑洪敊", e);
             try {
                 //6.0 浣滃簾璁㈠崟鍜屾墍鏈変笟鍔¢」
                 invalidOrderAndBusiness(dataFlow);
-
                 //7.0 骞挎挱浣滃簾涓氬姟绯荤粺璁㈠崟淇℃伅,杩欓噷鍙湁 Instance 澶辫触鍚庢墠鍙戣捣 鎾ゅ崟
                 if(StatusConstant.REQUEST_BUSINESS_TYPE_INSTANCE.equals(dataFlow.getBusinessType())) {
                     invalidCompletedBusinessSystem(dataFlow);
@@ -510,28 +571,9 @@
                 //8.0 灏嗚鍗曠姸鎬佹敼涓哄け璐ワ紝浜哄伐澶勭悊銆�
                 updateOrderAndBusinessError(dataFlow);
             }
-        }catch (BusinessException e) {
-            //9.0璇存槑杩欎釜璁㈠崟宸茬粡澶辫触浜嗭紝鍐嶄笉闇�瑕�
-            //鎯虫硶锛岃繖閲屽箍鎾綋鍓嶅け璐ヤ笟鍔�
-            try {
-                notifyBusinessSystemErrorMessage(dataFlow);
-            }catch (Exception e1){
-                //杩欓噷璁板綍鏃ュ織
-            }
-        }catch (InitConfigDataException e){ //杩欑涓�鑸笉浼氬嚭鐜帮紝闄ら潪浜哄伐鏀逛簡鏁版嵁
-            LoggerEngine.error("鍔犺浇閰嶇疆鏁版嵁鍑洪敊", e);
-            try {
-                //6.0 浣滃簾璁㈠崟鍜屾墍鏈変笟鍔¢」
-                invalidOrderAndBusiness(dataFlow);
-                //7.0 骞挎挱浣滃簾涓氬姟绯荤粺璁㈠崟淇℃伅
-                //鎯虫硶锛岃繖閲屽彧骞挎挱宸茬粡瀹屾垚鐨勮鍗曢」
-                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 鎴愬姛鐨勬儏鍐典笅閫氱煡涓嬫父绯荤粺澶辫触灏嗙姸鎬佹敼涓篘E锛屼汉宸ュ鐞嗐��
@@ -540,6 +582,38 @@
             DataFlowFactory.addCostTime(dataFlow, "receiveBusinessSystemNotifyMessage", "鎺ュ彈涓氬姟绯荤粺閫氱煡娑堟伅鑰楁椂", startDate);
             saveLogMessage(dataFlow.getReqJson(),null);
         }
+    }
+
+    /**
+     * 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杩囩▼");
     }
 
 
@@ -579,14 +653,26 @@
      * 鍒ゆ柇鏄惁閮芥垚鍔熶簡
      * @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 @@
      */
     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 @@
      * //4.0褰撴墍鏈変笟鍔″姩浣滄槸鍚﹂兘鏄疌锛屽皢璁㈠崟淇℃伅鏀逛负 C 骞朵笖鍙戝竷绔e伐娑堟伅锛岃繖閲屽湪骞挎挱涔嬪墠纭
      * @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){
             //杩欓噷浠�涔堥兘涓嶅仛锛岃鏄庤鍗曟病鏈夊畬鎴�
         }

--
Gitblit v1.8.0