From 980e74ee64ba7e279537e582de46776170d3debd Mon Sep 17 00:00:00 2001
From: wuxw7 <wuxw7@asiainfo.com>
Date: 星期一, 24 四月 2017 17:41:43 +0800
Subject: [PATCH] 完善订单作废功能实现

---
 OrderService/src/main/java/com/java110/order/smo/impl/OrderServiceSMOImpl.java |  143 ++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 132 insertions(+), 11 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 f58a7d3..6aea826 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
@@ -2,6 +2,8 @@
 
 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.log.LoggerEngine;
 import com.java110.common.util.ProtocolUtil;
 import com.java110.config.properties.EventProperties;
@@ -226,10 +228,13 @@
         AppContext context = createApplicationContext();
 
         prepareContext(context, datasTmp);
-
-        //鍙戝竷浜嬩欢
-        AppEventPublishing.multicastEvent(context,datasTmp,orderListTmp.getString("asyn"));
-
+        try {
+            //鍙戝竷浜嬩欢
+            AppEventPublishing.multicastEvent(context,datasTmp,orderListTmp.getString("asyn"));
+        }catch (Exception e){
+            //杩欓噷琛ュ伩浜嬬墿
+            throw e;
+        }
         return ProtocolUtil.createResultMsg(ProtocolUtil.RETURN_MSG_SUCCESS,"鎴愬姛",JSONObject.parseObject(JSONObject.toJSONString(orderList)));
     }
 
@@ -313,11 +318,67 @@
          */
         Assert.isNull(busiOrderTmps,"鍏ュ弬閿欒锛屾病鏈塨usiOrder 鑺傜偣锛屾垨娌℃湁瀛愯妭鐐�");
 
-        if(!busiOrderTmps.getJSONObject(0).containsKey("oldBoId")){
+        List<Map<String,String>> needDeleteBoIds = new ArrayList<Map<String,String>>();
+
+        if(busiOrderTmps.getJSONObject(0).containsKey("actionTypeCd")){
            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)));
+            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("褰撳墠绯荤粺鍙敮鎸乥usiOrder 鑺傜偣涓嬬涓�涓妭鐐瑰寘鍚� actionTypeCd鑺傜偣鍜� oldOlId鑺傜偣鐨勬姤鏂囷細"+orderInfo);
         }
+
+        //鏁版嵁鍒嗚
+        Map<String,JSONArray> datasTmp = new HashMap<String, JSONArray>();
+        //娣诲姞鏁版嵁鑷� busi_order,杩欓噷鐢熸垚鏂扮殑boId 灏嗛渶瑕佷綔搴熺殑boId淇℃伅鍐欏叆鍊糱usi_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"));
+
+            saveBusiOrderFlag =  iOrderServiceDao.saveDataToBusiOrderAttr(busiOrderAttr);
+            if(saveBusiOrderFlag < 1){
+                throw new RuntimeException("鎾ゅ崟锛屼綔搴熻鍗曞け璐�,淇濆瓨璁㈠崟椤逛俊鎭睘鎬уけ璐�"+JSONObject.toJSONString(busiOrderAttr));
+            }
+
+
+
+        }
+
+        //杩欓噷琛ュ厖 order_list_attr涓� 缂栫爜涓� 10000002 鐨勬暟鎹紝瑕佷綔搴� 璁㈠崟璐墿杞︿俊鎭紝鐪熸浣滃簾鍗曞瓙鏄互 busi_order_attr 涓殑boId 涓轰富
+
+
 
 
 
@@ -330,7 +391,7 @@
      * @param actionTypeCd busi_order action_type_cd 绫诲瀷鏉ヤ綔搴熻鍗�
      * @throws Exception
      */
-    private void deleteOrderByActionTypeCd(String oldOlId,String ...actionTypeCd) 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);
@@ -343,13 +404,30 @@
         // '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> busiOrders =  iOrderServiceDao.queryBusiOrderAndAttr(busiOrderTmp);
+        /**
+         * 宸茬粡鐢熸垚鐨勮鍗曢」淇℃伅
+         */
+        List<BusiOrder> oldBusiOrders =  iOrderServiceDao.queryBusiOrderAndAttr(busiOrderTmp);
 
-        Assert.isNull(busiOrders,"娌℃湁鎵惧埌闇�瑕佷綔搴熺殑璁㈠崟锛孾oldOdId="+oldOlId+",actionTypeCd = "+actionTypeCd+"]");
+        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){
@@ -361,6 +439,49 @@
 
     }
 
+
+    /**
+     *
+     * 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("olId")) || 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")+"] 鏁版嵁鍦╞usi_order琛ㄤ腑涓嶅瓨鍦紝璇峰鐞嗭紝寰堟湁鍙兘鏄叆鍙傞敊璇�");
+            }
+
+            //鍥炲啓鏁版嵁
+
+            needDeleteBoIdMap.put("olId",oldBusiOrders.get(0).getOlId());
+            needDeleteBoIdMap.put("actionTypeCd",oldBusiOrders.get(0).getActionTypeCd());
+        }
+
+        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);
+    }
+
     public IPrimaryKeyService getiPrimaryKeyService() {
         return iPrimaryKeyService;
     }

--
Gitblit v1.8.0