From 601a32ba5dcee884180908ad00b9d7f65a4e7fea Mon Sep 17 00:00:00 2001
From: wuxw7 <wuxw7@asiainfo.com>
Date: 星期一, 24 四月 2017 10:38:24 +0800
Subject: [PATCH] 新建客户时,将新生成的客户主键信息回写至AppContext 中方便于其他模块用改造

---
 OrderService/src/main/java/com/java110/order/smo/impl/OrderServiceSMOImpl.java |  118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 111 insertions(+), 7 deletions(-)

diff --git a/OrderService/src/main/java/com/java110/order/smo/impl/OrderServiceSMOImpl.java b/OrderService/src/main/java/com/java110/order/smo/impl/OrderServiceSMOImpl.java
index cf29791..f58a7d3 100644
--- a/OrderService/src/main/java/com/java110/order/smo/impl/OrderServiceSMOImpl.java
+++ b/OrderService/src/main/java/com/java110/order/smo/impl/OrderServiceSMOImpl.java
@@ -6,6 +6,7 @@
 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.core.event.AppEventPublishing;
 import com.java110.entity.order.BusiOrder;
 import com.java110.entity.order.BusiOrderAttr;
@@ -19,8 +20,10 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.Assert;
+import com.java110.common.util.Assert;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -127,11 +130,17 @@
         //鑾峰彇 璁㈠崟椤�
         JSONArray busiOrderTmps = orderInfo.getJSONArray("busiOrder");
 
+        //瀛樻斁busiOrder 鐨刣ata鑺傜偣
+
+        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")){
+            /*if (!busiOrderJson.containsKey("busiObj")){
                 throw new IllegalArgumentException("璇锋眰鎶ユ枃涓璪usiOrder 鑺傜偣涓病鏈夊搴旂殑 busiObj 鑺傜偣锛岃妫�鏌�"+busiOrderJson);
-            }
+            }*/
+
+            Assert.isNull(busiOrderJson,"busiObj","璇锋眰鎶ユ枃涓璪usiOrder 鑺傜偣涓病鏈夊搴旂殑 busiObj 鑺傜偣锛岃妫�鏌�"+busiOrderJson);
 
             BusiOrder busiOrderObj = JSONObject.parseObject(busiOrderJson.getJSONObject("busiObj").toJSONString(),BusiOrder.class);
 
@@ -165,9 +174,11 @@
                 }
             }
             //淇敼data鑺傜偣涓嬬殑boId锛屼竴鑸槸娌℃湁杩欎釜鍊硷紝鎵�浠ョ洿鎺ユ柊鍔犲氨琛屼簡锛屼笉璁稿垽鏂槸鍚﹀凡-寮�澶�
-            if (!busiOrderJson.containsKey("data")){
+           /* if (!busiOrderJson.containsKey("data")){
                 throw new IllegalArgumentException("璇锋眰鎶ユ枃涓璪usiOrder 鑺傜偣涓病鏈夊搴旂殑 data 鑺傜偣锛岃妫�鏌�"+busiOrderJson);
-            }
+            }*/
+
+            Assert.isNull(busiOrderJson,"data","璇锋眰鎶ユ枃涓璪usiOrder 鑺傜偣涓病鏈夊搴旂殑 data 鑺傜偣锛岃妫�鏌�"+busiOrderJson);
 
             //澶勭悊data 鑺傜偣
             JSONObject data = busiOrderJson.getJSONObject("data");
@@ -189,16 +200,35 @@
             //鏍规嵁busiOrder 鐨�  actionTypeCd 娉ㄥ唽閭d釜鏈嶅姟鍘诲鐞�
             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);
+
+            /*
             try {
                 //鍙戝竷浜嬩欢
                 AppEventPublishing.multicastEvent(actionTypeCd,orderInfo.toJSONString(), data.toJSONString(),orderListTmp.getString("asyn"));
             }catch (Exception e){
                 //杩欓噷琛ュ伩浜嬬墿
                 throw e;
-            }
-
+            }*/
 
         }
+
+        //鍒涘缓涓婁笅鏂囧璞�
+        AppContext context = createApplicationContext();
+
+        prepareContext(context, datasTmp);
+
+        //鍙戝竷浜嬩欢
+        AppEventPublishing.multicastEvent(context,datasTmp,orderListTmp.getString("asyn"));
 
         return ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_SUCCESS,"鎴愬姛",JSONObject.parseObject(JSONObject.toJSONString(orderList)));
     }
@@ -254,9 +284,83 @@
      */
     @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,"鍏ュ弬閿欒锛屾病鏈塨usiOrder 鑺傜偣锛屾垨娌℃湁瀛愯妭鐐�");
+
+        if(!busiOrderTmps.getJSONObject(0).containsKey("oldBoId")){
+           String actionTypeCds = busiOrderTmps.getJSONObject(0).getString("actionTypeCd");
+            deleteOrderByActionTypeCd(orderListTmp.getString("oldOlId"),actionTypeCds.split(","));
+            return ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_SUCCESS,"鎴愬姛",JSONObject.parseObject(JSONObject.toJSONString(orderList)));
+        }
+
+
+
         return null;
     }
 
+    /**
+     * 鏍规嵁 璁㈠崟鍔ㄤ綔 浣滃簾
+     * @param oldOlId 浣滃簾鐨勮喘鐗╄溅
+     * @param actionTypeCd busi_order action_type_cd 绫诲瀷鏉ヤ綔搴熻鍗�
+     * @throws Exception
+     */
+    private void deleteOrderByActionTypeCd(String oldOlId,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;
+
+        busiOrderTmp.setActionTypeCd(actionTypeCds);
+
+        List<BusiOrder> busiOrders =  iOrderServiceDao.queryBusiOrderAndAttr(busiOrderTmp);
+
+        Assert.isNull(busiOrders,"娌℃湁鎵惧埌闇�瑕佷綔搴熺殑璁㈠崟锛孾oldOdId="+oldOlId+",actionTypeCd = "+actionTypeCd+"]");
+
+
+    }
+
+    private void prepareContext(AppContext context,Map<String,JSONArray> datasTmp){
+        Assert.isNull(context,"鍒涘缓涓婁笅瀵硅薄澶辫触");
+
+        //杩欓噷灏嗘暣涓鍗曠殑data 淇℃伅瀛樺叆 涓婁笅鏂囧璞′腑锛屼互闃插悗鏈熶娇鐢ㄦ棤娉曡幏鍙�
+
+        context.coverData(datasTmp);
+
+    }
+
     public IPrimaryKeyService getiPrimaryKeyService() {
         return iPrimaryKeyService;
     }

--
Gitblit v1.8.0