Parcourir la source

新增功能:为JD平台的富氢水机增加合并功能,因为富氢水机在JD平台是三个SKU,但是到我司系统后需要进行删除,耗费人工,固新增此功能。

xian il y a 5 ans
Parent
commit
47a2c2cd5d

+ 76 - 4
watero-rst-service/src/main/java/com/iamberry/rst/service/order/OrderSyncLogServiceImpl.java

@@ -2,6 +2,7 @@ package com.iamberry.rst.service.order;
 
 import com.github.pagehelper.PageHelper;
 import com.iamberry.app.tool.util.MD5;
+import com.iamberry.redis.RedisUtils;
 import com.iamberry.rst.core.address.City;
 import com.iamberry.rst.core.address.District;
 import com.iamberry.rst.core.address.Province;
@@ -638,7 +639,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         orderIdMap.put("condValue",orderIds);
         conditionTypeList.add(orderIdMap);
 
-        StringBuffer stringBuffer = new StringBuffer();
+        StringBuilder stringBuffer = new StringBuilder();
         Integer amountAllNum = 0;   //同步总数量
         Integer amountSuccessAllNum = 0;   //同步成功总数量
         String batchId = ""; //批次id
@@ -1115,10 +1116,8 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
      * @return
      */
     private Map<String,Object> saveOrder(Integer type,String json,String batchId){
-
         //获取省份
         List<Province> provinceList = addressService.listProvince(new Province());
-
         //返回保存订单结果
         Map<String,Object> returnMap = new HashMap<>();
 
@@ -1443,7 +1442,18 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                         salesOrder.setSalesPledgeMoney(0);//押金金额
                         salesOrder.setSalesRemainDeposit(0);
                         salesOrder.setSalesWaitMoney(0);//待付金额
-                        salesOrder.setSalesSendType(2);//送货方式 1:线下送货,2:物流发货
+                        salesOrder.setSalesSendType(2);// 送货方式 1:线下送货,2:物流发货
+
+                        // 新增处理:如果有订单满足规则,去除对应的订单项内容 {"productCode":"xx","group":[{"productCode":"xx", "productNum":1}]}
+                        for (int j = 0; j < itemsArray.length(); j++) {
+                            JSONObject o = itemsArray.getJSONObject(j);
+                            String groupRule = RedisUtils.get("GROUP_PRODUCT_" + platformId + "_" + o.getString("outerId"));
+                            if (groupRule != null) {
+                                // 第一步:匹配订单中是否有包含的产品
+                                itemsArray = groupProductFilter(itemsArray, groupRule);
+                                break;
+                            }
+                        }
 
                         Integer salesWarrantyStatus = 0;
                         List<SalesOrderItem> salesOrderItemList = new ArrayList<SalesOrderItem>();
@@ -1785,6 +1795,68 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         return returnMap;
     }
 
+    private JSONArray groupProductFilter(JSONArray itemsArray, String groupRule) {
+        // 再次判断来源产品中是否包含了指定的组合产品
+        com.alibaba.fastjson.JSONObject groupJSON = com.alibaba.fastjson.JSONObject.parseObject(groupRule);
+        boolean isGroup = false;
+        for (int i = 0; i < itemsArray.length(); i++) {
+            JSONObject jsonObject = itemsArray.getJSONObject(i);
+            if (jsonObject.get("outerId").equals(groupJSON.getString("productCode"))) {
+                isGroup = true;
+                break;
+            }
+        }
+        if (!isGroup) {
+            return itemsArray;
+        }
+
+        // 获取产品的对应规则,如果不符合规则,则不出发系统功能
+        com.alibaba.fastjson.JSONArray group = groupJSON.getJSONArray("group");
+        if (group == null || group.size() <= 0) {
+            return itemsArray;
+        }
+        // 匹配规则
+        int count = 0;
+        for (int gi = 0; gi < group.size(); gi++) {
+            com.alibaba.fastjson.JSONObject rule = group.getJSONObject(gi);
+            String productCode = rule.getString("productCode");
+            Integer productNum = rule.getInteger("productNum");
+            for (int i = 0; i < itemsArray.length(); i++) {
+                JSONObject org = itemsArray.getJSONObject(i);
+                if (productCode.equals(org.getString("outerId")) && org.getInt("num") >= productNum) {
+                    count++;
+                    break;
+                }
+            }
+        }
+        // 如果订单项全部匹配上,则表示匹配上规则
+        if (count != group.size()) {
+            return itemsArray;
+        }
+        JSONArray result = new JSONArray(itemsArray.toString());
+        for (int gi = 0; gi < group.size(); gi++) {
+            com.alibaba.fastjson.JSONObject rule = group.getJSONObject(gi);
+            String productCode = rule.getString("productCode");
+            Integer productNum = rule.getInteger("productNum");
+            for (int i = 0; i < result.length(); i++) {
+                JSONObject org = result.getJSONObject(i);
+                int num = org.getInt("num");
+                if (productCode.equals(org.getString("outerId")) && num >= productNum) {
+                    // 减少产品或者删除订单项
+                    if (num > productNum) {
+                        JSONObject edit = result.getJSONObject(i);
+                        edit.remove("num");
+                        edit.put("num", num-productNum);
+                    } else {
+                        result.remove(i);
+                    }
+                    break;
+                }
+            }
+        }
+        return result;
+    }
+
     /**
      * 拉取单个订单,但是调用请走验证发货验证或者保存接口,此方法不公开
      * @param orderId