24282 vor 1 Jahr
Ursprung
Commit
34bccef6db

+ 0 - 10
sd-business/src/main/java/com/sd/business/entity/order/po/OrderInfo.java

@@ -34,16 +34,6 @@ public class OrderInfo extends BasePo {
     private String code;
 
     /**
-     * 设计图
-     */
-    private String blueprint;
-
-    /**
-     * 生产文件
-     */
-    private String productionDocument;
-
-    /**
      * 万里牛唯一uid
      */
     private String wlnUid;

+ 10 - 0
sd-business/src/main/java/com/sd/business/entity/order/po/OrderSku.java

@@ -46,6 +46,16 @@ public class OrderSku extends BasePo {
     private Long bomSpecId;
 
     /**
+     * 设计图
+     */
+    private String blueprint;
+
+    /**
+     * 生产文件
+     */
+    private String productionDocument;
+
+    /**
      * 万里牛sys_goods_uid
      */
     private String wlnSkuId;

+ 0 - 2
sd-business/src/main/resources/mapper/order/OrderMapper.xml

@@ -6,8 +6,6 @@
         select o.id,
                o.source,
                o.code,
-               o.blueprint,
-               o.production_document,
                o.wln_uid,
                o.wln_code,
                o.wln_status,

+ 2 - 5
sd-business/src/main/resources/mapper/order/OrderSkuMapper.xml

@@ -7,6 +7,8 @@
                os.order_id,
                os.sku_id,
                os.sku_spec_id,
+               os.blueprint,
+               os.production_document,
                os.quantity,
                os.custom_processing_fee,
                os.lssue_fee,
@@ -20,22 +22,17 @@
                os.create_time,
                os.update_user,
                os.update_time,
-
                oi.code              orderCode,
                oi.wln_code          orderWlnCode,
                oi.status            orderStatus,
                oi.settlement_status orderSettlementStatus,
                oi.total_amount      orderTotalAmount,
                oi.wln_create_time,
-
                ss.code              skuSpecCode,
                ss.name              skuSpecName,
-
                bs.name              bomSpecName,
                bs.code              bomSpecCode,
-
                d.name               departmentName
-
         from order_sku os
                  left join order_info oi on oi.id = os.order_id
                  left join sku_spec ss on os.sku_spec_id = ss.id

+ 184 - 0
sd-wln/src/main/java/com/sd/wln/context/OrderContext.java

@@ -0,0 +1,184 @@
+package com.sd.wln.context;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson2.JSONObject;
+import com.fjhx.tenant.entity.dict.po.DictCommonData;
+import com.fjhx.tenant.service.dict.DictCommonDataService;
+import com.ruoyi.framework.mybatis.holder.LogicHolder;
+import com.sd.business.entity.department.po.Department;
+import com.sd.business.entity.order.po.OrderInfo;
+import com.sd.business.entity.order.po.OrderPackageBom;
+import com.sd.business.entity.order.po.OrderSku;
+import com.sd.business.entity.order.po.OrderSkuBom;
+import com.sd.business.entity.sku.po.SkuSpec;
+import com.sd.business.service.department.DepartmentService;
+import com.sd.business.service.order.OrderService;
+import com.sd.business.service.sku.SkuSpecService;
+import com.sd.wln.util.WlnUtil;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+public class OrderContext {
+
+    private final OrderService orderService = SpringUtil.getBean(OrderService.class);
+    private final DictCommonDataService dictCommonDataService = SpringUtil.getBean(DictCommonDataService.class);
+    private final DepartmentService departmentService = SpringUtil.getBean(DepartmentService.class);
+    private final SkuSpecService skuSpecService = SpringUtil.getBean(SkuSpecService.class);
+
+    /**
+     * 当前时间
+     */
+    @Getter
+    private final Date endDate;
+
+    /**
+     * 万里牛订单列表
+     */
+    @Getter
+    private final List<JSONObject> wlnOrderList;
+    /**
+     * 保存订单列表
+     */
+    @Getter
+    private final List<OrderInfo> saveOrderList = new ArrayList<>();
+    /**
+     * 更新订单列表
+     */
+    @Getter
+    private final List<OrderInfo> updateOrderList = new ArrayList<>();
+    /**
+     * 保存订单明细列表
+     */
+    @Getter
+    private final List<OrderSku> saveOrderSkuList = new ArrayList<>();
+    /**
+     * 保存订单包材
+     */
+    @Getter
+    private final List<OrderSkuBom> saveOrderSkuBomList = new ArrayList<>();
+    /**
+     * 保存订单包装
+     */
+    @Getter
+    private final List<OrderPackageBom> orderPackageBomList = new ArrayList<>();
+    /**
+     * 近3天已存在数据库中的订单
+     * key:万里牛订单uid
+     * value:订单实体
+     */
+    private Map<String, OrderInfo> orderMap;
+    /**
+     * 查询事业部
+     * key:仓库编码
+     * value:仓库实体
+     */
+    private Map<String, Department> departmentMap;
+    /**
+     * sku规格map
+     * key:万里牛sku规格id
+     * value:sku规格实体
+     */
+    private Map<String, SkuSpec> skuSpecMap;
+
+    public OrderContext() {
+        this.endDate = new Date();
+        this.wlnOrderList = selectWlnOrderList();
+    }
+
+    /**
+     * 查询1天内万里牛订单
+     */
+    private List<JSONObject> selectWlnOrderList() {
+        List<DictCommonData> warehouseCodeList = dictCommonDataService.list(q -> q.eq(DictCommonData::getDictCode, "warehouse_code"));
+        if (warehouseCodeList.size() == 0) {
+            log.error("订单同步失败,仓库字典:warehouse_code 为空");
+            return null;
+        }
+
+        List<JSONObject> list = new ArrayList<>();
+
+        long endTime = endDate.getTime();
+        long startTime = endTime - 1000 * 60 * 60 * 24;
+
+        for (DictCommonData dictCommonData : warehouseCodeList) {
+            String warehouseCode = dictCommonData.getDictValue();
+            int page = 1;
+            int size;
+            do {
+                try {
+                    List<JSONObject> itemList = WlnUtil.getOrderList(page, 200, startTime, endTime, warehouseCode);
+                    page++;
+                    size = itemList.size();
+                    list.addAll(itemList);
+                } catch (Exception e) {
+                    log.error("订单同步失败", e);
+                    return null;
+                }
+            } while (size >= 200);
+        }
+
+        return list;
+    }
+
+    /**
+     * 查询近3天已存在数据库中的订单
+     */
+    public Map<String, OrderInfo> getOrderMap() {
+        if (this.orderMap != null) {
+            LogicHolder.setLogicHolder(new LogicHolder());
+
+            this.orderMap = orderService.mapKEntity(
+                    OrderInfo::getWlnUid,
+                    q -> q.between(OrderInfo::getWlnApproveTime, DateUtil.offsetDay(endDate, -3), endDate));
+
+            LogicHolder.clear();
+        }
+
+        return this.orderMap;
+    }
+
+    /**
+     * 查询事业部
+     */
+    public Map<String, Department> getDepartmentMap() {
+        if (this.departmentMap == null) {
+            this.departmentMap = new HashMap<>();
+            for (Department department : departmentService.list()) {
+                String warehouseCode = department.getWlnWarehouseCode();
+                if (StrUtil.isBlank(warehouseCode)) {
+                    continue;
+                }
+                for (String item : warehouseCode.split(",")) {
+                    this.departmentMap.put(item, department);
+                }
+            }
+        }
+
+        return this.departmentMap;
+    }
+
+    /**
+     * 获取sku规格
+     */
+    public Map<String, SkuSpec> getSkuSpecMap() {
+        if (this.skuSpecMap == null) {
+            List<String> wlnUidList = wlnOrderList.stream()
+                    .flatMap(item -> item.getJSONArray("orders").toJavaList(JSONObject.class).stream())
+                    .map(item -> item.getString("sys_spec_uid"))
+                    .filter(ObjectUtil::isNotNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+            this.skuSpecMap = skuSpecService.mapKEntity(SkuSpec::getWlnUid, q -> q.in(SkuSpec::getWlnUid, wlnUidList));
+        }
+
+        return this.skuSpecMap;
+    }
+
+}

+ 143 - 202
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

@@ -2,14 +2,10 @@ package com.sd.wln.service.impl;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
-import com.fjhx.tenant.entity.dict.po.DictCommonData;
-import com.fjhx.tenant.service.dict.DictCommonDataService;
 import com.ruoyi.common.constant.StatusConstant;
 import com.ruoyi.common.core.domain.BaseIdPo;
-import com.ruoyi.framework.mybatis.holder.LogicHolder;
 import com.sd.business.entity.bom.bo.BomBo;
 import com.sd.business.entity.department.po.Department;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
@@ -20,7 +16,6 @@ import com.sd.business.entity.order.po.OrderSkuBom;
 import com.sd.business.entity.price.po.PriceBillingStandardDetail;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.sku.po.SkuSpecLink;
-import com.sd.business.service.department.DepartmentService;
 import com.sd.business.service.order.OrderPackageBomService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.order.OrderSkuBomService;
@@ -28,8 +23,8 @@ import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.price.PriceBillingStandardDetailService;
 import com.sd.business.service.sku.SkuSpecLinkService;
 import com.sd.business.service.sku.SkuSpecService;
+import com.sd.wln.context.OrderContext;
 import com.sd.wln.service.WlnOrderService;
-import com.sd.wln.util.WlnUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -52,12 +47,6 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     private TransactionDefinition transactionDefinition;
 
     @Autowired
-    private DictCommonDataService dictCommonDataService;
-
-    @Autowired
-    private DepartmentService departmentService;
-
-    @Autowired
     private OrderService orderService;
 
     @Autowired
@@ -81,178 +70,56 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     @Override
     public void syncOrder() {
 
-        // 当前时间
-        Date endDate = new Date();
-        // 保存订单列表
-        List<OrderInfo> saveOrderList = new ArrayList<>();
-        // 更新订单列表
-        List<OrderInfo> updateOrderList = new ArrayList<>();
-        // 保存订单明细列表
-        List<OrderSku> saveOrderSkuList = new ArrayList<>();
-        // 保存订单包材
-        List<OrderSkuBom> saveOrderSkuBomList = new ArrayList<>();
-        // 保存订单包装
-        List<OrderPackageBom> orderPackageBomList = new ArrayList<>();
-
-        // 查询近3天万里牛订单
-        List<JSONObject> wlnOrderList = getWlnOrderList(endDate);
-        if (wlnOrderList == null || wlnOrderList.size() == 0) {
+        OrderContext context = new OrderContext();
+
+        // 万里牛订单若为0,结束同步任务
+        List<JSONObject> wlnOrderList = context.getWlnOrderList();
+        if (ObjectUtil.isEmpty(wlnOrderList)) {
             return;
         }
 
-        // 查询近3天已存在数据库中的订单
-        Map<String, OrderInfo> orderMap = getOrderMap(endDate);
-
-        // 查询事业部
-        Map<String, Department> departmentMap = getDepartmentMap();
-
-        // 获取sku规格
-        Map<String, SkuSpec> skuSpecMap = getSkuSpecMap(wlnOrderList);
-
         // 循环万里牛订单
         for (JSONObject wlnOrder : wlnOrderList) {
 
-            // 没有匹配到事业部,则跳过
-            String storageCode = wlnOrder.getString("storage_code");
-            Department department = departmentMap.get(storageCode);
-            if (department == null) {
-                log.error("未知仓库code:{}", storageCode);
+            // 创建订单
+            OrderInfo orderInfo = createOrder(context, wlnOrder);
+
+            // 没有创建订单实体,跳过同步
+            if (orderInfo == null) {
                 continue;
             }
 
-            // 创建订单
-            OrderInfo orderInfo = createOrder(wlnOrder, department);
-
             // 判断订单是否存在与数据库中,若订单存在且订单信息被修改,则添加到更新订单数组
-            boolean existOrder = existOrder(orderMap, orderInfo, updateOrderList);
+            boolean existOrder = existOrder(context, orderInfo);
 
             // 若订单是否存在与数据库中,跳过以下保存订单逻辑
             if (existOrder) {
                 continue;
             }
 
-            List<OrderSku> tempOrderSkuList = new ArrayList<>();
-            List<OrderSkuBom> tempOrderSkuBomList = new ArrayList<>();
-
-            boolean isSave = true;
-
-            // 创建订单sku
-            for (JSONObject wlnOrderSku : wlnOrder.getJSONArray("orders").toJavaList(JSONObject.class)) {
-
-                // 订单明细未匹配到sku规格,跳过次订单同步
-                String sysSpecUid = wlnOrderSku.getString("sys_spec_uid");
-                SkuSpec skuSpec = skuSpecMap.get(sysSpecUid);
-                if (skuSpec == null) {
-                    isSave = false;
-                    log.error("没有通过万里牛sys_spec_uid: {} 找到sku规格", sysSpecUid);
-                    break;
-                }
-
-                // 创建订单sku
-                OrderSku orderSku = createOrderSku(wlnOrderSku, orderInfo, skuSpec);
-                tempOrderSkuList.add(orderSku);
-
-                // 创建订单包材
-                List<OrderSkuBom> orderSkuBomList = createOrderSkuBoom(orderInfo, orderSku);
-                tempOrderSkuBomList.addAll(orderSkuBomList);
-            }
-
-            if (isSave) {
-                saveOrderList.add(orderInfo);
-                saveOrderSkuList.addAll(tempOrderSkuList);
-                saveOrderSkuBomList.addAll(tempOrderSkuBomList);
-                orderPackageBomList.addAll(createOrderPackageBomList(tempOrderSkuList, department.getId()));
-            }
-
-        }
-
-        // 赋值订单价格
-        setOrderPrice(departmentMap, saveOrderList, saveOrderSkuList, saveOrderSkuBomList, skuSpecMap);
-
-        // 开启事务
-        TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
-        try {
-            if (saveOrderList.size() > 0) {
-                orderService.saveBatch(saveOrderList);
-            }
-            if (updateOrderList.size() > 0) {
-                orderService.updateBatchById(updateOrderList);
-            }
-            if (saveOrderSkuList.size() > 0) {
-                orderSkuService.saveBatch(saveOrderSkuList);
-            }
-            if (saveOrderSkuBomList.size() > 0) {
-                orderSkuBomService.saveBatch(saveOrderSkuBomList);
-            }
-            if (orderPackageBomList.size() > 0) {
-                orderPackageBomService.saveBatch(orderPackageBomList);
-            }
-            // 提交事务
-            platformTransactionManager.commit(transactionStatus);
-        } catch (Exception e) {
-            // 回滚事务
-            platformTransactionManager.rollback(transactionStatus);
-            log.error("同步订单失败", e);
-        }
-
-    }
-
-    /**
-     * 查询1天内万里牛订单
-     */
-    private List<JSONObject> getWlnOrderList(Date endDate) {
-        List<DictCommonData> warehouseCodeList = dictCommonDataService.list(q -> q.eq(DictCommonData::getDictCode, "warehouse_code"));
-        if (warehouseCodeList.size() == 0) {
-            log.error("订单同步失败,仓库字典:warehouse_code 为空");
-            return null;
-        }
+            // 添加订单到上下文
+            addOrder(context, wlnOrder, orderInfo);
 
-        List<JSONObject> list = new ArrayList<>();
-
-        long endTime = endDate.getTime();
-        long startTime = endTime - 1000 * 60 * 60 * 24;
-
-        for (DictCommonData dictCommonData : warehouseCodeList) {
-            int page = 1;
-            int size;
-            do {
-                try {
-                    List<JSONObject> itemList = WlnUtil.getOrderList(page, 200, startTime, endTime, dictCommonData.getDictValue());
-                    page++;
-                    size = itemList.size();
-                    list.addAll(itemList);
-                } catch (Exception e) {
-                    log.error("订单同步失败", e);
-                    return null;
-                }
-            } while (size >= 200);
         }
 
-        return list;
-    }
+        // 计算订单价格
+        setOrderPrice(context);
 
-    /**
-     * 查询近3天已存在数据库中的订单
-     */
-    private Map<String, OrderInfo> getOrderMap(Date endDate) {
-        LogicHolder.setLogicHolder(new LogicHolder());
-
-        Map<String, OrderInfo> orderMap = orderService.mapKEntity(
-                OrderInfo::getWlnUid,
-                q -> q.between(OrderInfo::getWlnApproveTime, DateUtil.offsetDay(endDate, -3), endDate)
-        );
+        // 保存或更新数据
+        saveOrUpdateOrder(context);
 
-        LogicHolder.clear();
-        return orderMap;
     }
 
     /**
      * 订单是否存在,若订单存在且订单信息被修改,则添加到更新订单数组
      */
-    private boolean existOrder(Map<String, OrderInfo> orderMap, OrderInfo orderInfo, List<OrderInfo> updateOrderList) {
+    private boolean existOrder(OrderContext context, OrderInfo orderInfo) {
+        Map<String, OrderInfo> orderMap = context.getOrderMap();
+        List<OrderInfo> updateOrderList = context.getUpdateOrderList();
 
         // 如果订单存在于数据库,且订单状态改变,执行update
         OrderInfo oldOrderInfo = orderMap.get(orderInfo.getWlnUid());
+
         if (oldOrderInfo != null) {
             if (ObjectUtil.notEqual(oldOrderInfo.getWlnStatus(), orderInfo.getWlnStatus())
                     || ObjectUtil.notEqual(oldOrderInfo.getWlnModifyTimestamp(), orderInfo.getWlnModifyTimestamp())
@@ -260,6 +127,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
                     || ObjectUtil.notEqual(DateUtil.formatDateTime(oldOrderInfo.getWlnPrintTime()), DateUtil.formatDateTime(orderInfo.getWlnPrintTime()))
                     || ObjectUtil.notEqual(oldOrderInfo.getWlnStorageCode(), orderInfo.getWlnStorageCode())
                     || ObjectUtil.notEqual(oldOrderInfo.getDepartmentId(), orderInfo.getDepartmentId())) {
+
                 OrderInfo updateOrder = new OrderInfo();
                 updateOrder.setId(oldOrderInfo.getId());
                 updateOrder.setWlnStatus(orderInfo.getWlnStatus());
@@ -270,6 +138,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
                 updateOrder.setWlnStorageCode(orderInfo.getWlnStorageCode());
                 updateOrder.setDepartmentId(orderInfo.getDepartmentId());
                 updateOrderList.add(updateOrder);
+
             }
             return true;
         }
@@ -278,41 +147,22 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     }
 
     /**
-     * 查询事业部
+     * 创建订单
      */
-    private Map<String, Department> getDepartmentMap() {
-        List<Department> departmentList = departmentService.list();
-        Map<String, Department> departmentMap = new HashMap<>();
+    private OrderInfo createOrder(OrderContext context, JSONObject wlnOrder) {
 
-        for (Department department : departmentList) {
-            String warehouseCode = department.getWlnWarehouseCode();
-            if (StrUtil.isBlank(warehouseCode)) {
-                continue;
-            }
-            for (String item : warehouseCode.split(",")) {
-                departmentMap.put(item, department);
-            }
-        }
-        return departmentMap;
-    }
+        // 仓库编号
+        String storageCode = wlnOrder.getString("storage_code");
 
-    /**
-     * 获取sku规格
-     */
-    private Map<String, SkuSpec> getSkuSpecMap(List<JSONObject> wlnOrderList) {
-        List<String> wlnUidList = wlnOrderList.stream()
-                .flatMap(item -> item.getJSONArray("orders").toJavaList(JSONObject.class).stream())
-                .map(item -> item.getString("sys_spec_uid"))
-                .filter(ObjectUtil::isNotNull)
-                .distinct()
-                .collect(Collectors.toList());
-        return skuSpecService.mapKEntity(SkuSpec::getWlnUid, q -> q.in(SkuSpec::getWlnUid, wlnUidList));
-    }
+        // 部门实体
+        Department department = context.getDepartmentMap().get(storageCode);
+
+        // 未匹配到部门id
+        if (department == null) {
+            log.error("未知仓库code:{}", storageCode);
+            return null;
+        }
 
-    /**
-     * 创建订单
-     */
-    private OrderInfo createOrder(JSONObject wlnOrder, Department department) {
         OrderInfo orderInfo = new OrderInfo();
         orderInfo.setId(IdWorker.getId());
         orderInfo.setSource(2);
@@ -345,11 +195,11 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         }
         // 店铺名称
         if (wlnOrder.containsKey("shop_name")) {
-            builder.append("_");
-            builder.append(wlnOrder.getString("shop_name"));
+            builder.append("_").append(wlnOrder.getString("shop_name"));
         }
         orderInfo.setCommercePlatform(builder.toString());
 
+        // 订单状态
         if (orderInfo.getWlnStatus() == 10 || orderInfo.getWlnStatus() == 11 || orderInfo.getWlnStatus() == 12) {
             orderInfo.setStatus(OrderStatusEnum.EXCEPTION.getKey());
         } else if (Objects.equals(department.getOrderMode(), "2")) {
@@ -368,6 +218,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         OrderSku orderSku = new OrderSku();
         orderSku.setId(IdWorker.getId());
         orderSku.setOrderId(orderInfo.getId());
+        orderSku.setBomSpecId(skuSpec.getBomSpecId());
         orderSku.setQuantity(wlnOrderSku.getBigDecimal("size"));
         orderSku.setPrintType(1);
         orderSku.setWlnSkuId(wlnOrderSku.getString("sys_goods_uid"));
@@ -399,6 +250,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         Map<Long, BomBo> bomBoMap = skuSpecService.getBomBySkuSpecIdList(skuSpecIdList);
 
         return list.stream().map(item -> {
+
             OrderSkuBom orderSkuBom = new OrderSkuBom();
             orderSkuBom.setId(IdWorker.getId());
             orderSkuBom.setOrderId(orderInfo.getId());
@@ -415,6 +267,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
 
             return orderSkuBom;
         }).collect(Collectors.toList());
+
     }
 
     /**
@@ -431,7 +284,6 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         );
         Map<Long, List<SkuSpecLink>> skuSpecLinkMap = list.stream().collect(Collectors.groupingBy(SkuSpecLink::getSkuSpecId));
 
-
         Map<Long, OrderPackageBom> orderPackageBomMap = new HashMap<>();
 
         // 循环订单sku规格
@@ -462,15 +314,63 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     }
 
     /**
+     * 添加订单到上下文
+     */
+    private void addOrder(OrderContext context, JSONObject wlnOrder, OrderInfo orderInfo) {
+        Map<String, SkuSpec> skuSpecMap = context.getSkuSpecMap();
+
+        List<OrderSku> tempOrderSkuList = new ArrayList<>();
+        List<OrderSkuBom> tempOrderSkuBomList = new ArrayList<>();
+
+        // 是否添加
+        boolean isAdd = true;
+
+        // 创建订单sku
+        for (JSONObject wlnOrderSku : wlnOrder.getJSONArray("orders").toJavaList(JSONObject.class)) {
+
+            // 订单明细未匹配到sku规格,跳过次订单同步
+            String sysSpecUid = wlnOrderSku.getString("sys_spec_uid");
+
+            // sku规格信息
+            SkuSpec skuSpec = skuSpecMap.get(sysSpecUid);
+
+            if (skuSpec == null) {
+                isAdd = false;
+                log.error("没有通过万里牛sys_spec_uid: {} 找到sku规格", sysSpecUid);
+                break;
+            }
+
+            // 创建订单sku
+            OrderSku orderSku = createOrderSku(wlnOrderSku, orderInfo, skuSpec);
+            tempOrderSkuList.add(orderSku);
+
+            // 创建订单包材
+            List<OrderSkuBom> orderSkuBomList = createOrderSkuBoom(orderInfo, orderSku);
+            tempOrderSkuBomList.addAll(orderSkuBomList);
+        }
+
+        if (isAdd) {
+            List<OrderPackageBom> tempOrderPackageBomList = createOrderPackageBomList(tempOrderSkuList, orderInfo.getDepartmentId());
+            context.getSaveOrderList().add(orderInfo);
+            context.getSaveOrderSkuList().addAll(tempOrderSkuList);
+            context.getSaveOrderSkuBomList().addAll(tempOrderSkuBomList);
+            context.getOrderPackageBomList().addAll(tempOrderPackageBomList);
+        }
+
+    }
+
+    /**
      * 赋值订单价格
      */
-    private void setOrderPrice(Map<String, Department> departmentMap,
-                               List<OrderInfo> orderList,
-                               List<OrderSku> orderSkuList,
-                               List<OrderSkuBom> saveOrderSkuBomList,
-                               Map<String, SkuSpec> skuSpecMap) {
+    private void setOrderPrice(OrderContext context) {
 
-        if (orderList.size() == 0 || orderSkuList.size() == 0) {
+        List<OrderInfo> saveOrderList = context.getSaveOrderList();
+        List<OrderSku> saveOrderSkuList = context.getSaveOrderSkuList();
+        List<OrderSkuBom> saveOrderSkuBomList = context.getSaveOrderSkuBomList();
+        Map<String, SkuSpec> skuSpecMap = context.getSkuSpecMap();
+        Map<String, Department> departmentMap = context.getDepartmentMap();
+
+        if (saveOrderList.size() == 0) {
             return;
         }
 
@@ -489,12 +389,12 @@ public class WlnOrderServiceImpl implements WlnOrderService {
 
         // 根据sku规格id获取bomId和bom规格id
         Map<Long, BomBo> bomBoMap = skuSpecService.getBomBySkuSpecIdList(
-                orderSkuList.stream().map(OrderSku::getSkuSpecId).collect(Collectors.toList()));
+                saveOrderSkuList.stream().map(OrderSku::getSkuSpecId).collect(Collectors.toList()));
 
         // 订单明细
-        Map<Long, List<OrderSku>> orderSkuGroup = orderSkuList.stream().collect(Collectors.groupingBy(OrderSku::getOrderId));
+        Map<Long, List<OrderSku>> orderSkuGroup = saveOrderSkuList.stream().collect(Collectors.groupingBy(OrderSku::getOrderId));
 
-        for (OrderInfo orderInfo : orderList) {
+        for (OrderInfo orderInfo : saveOrderList) {
 
             orderInfo.setTotalAmount(BigDecimal.ZERO);
             orderInfo.setProductTotalAmount(BigDecimal.ZERO);
@@ -505,9 +405,6 @@ public class WlnOrderServiceImpl implements WlnOrderService {
             orderInfo.setPackagingMaterialCost(BigDecimal.ZERO);
 
             List<OrderSku> itemOrderSkuList = orderSkuGroup.get(orderInfo.getId());
-            if (ObjectUtil.isEmpty(itemOrderSkuList)) {
-                continue;
-            }
 
             for (OrderSku orderSku : itemOrderSkuList) {
 
@@ -534,7 +431,6 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     private void assignedUnitPrice(OrderSku orderSku, Map<Long, BomBo> bomBoMap) {
         BomBo bomBo = bomBoMap.get(orderSku.getSkuSpecId());
         if (bomBo != null) {
-            orderSku.setBomSpecId(bomBo.getBomSpecId());
             orderSku.setUnitPrice(ObjectUtil.defaultIfNull(bomBo.getInternalSellingPrice(), BigDecimal.ZERO));
         } else {
             orderSku.setUnitPrice(BigDecimal.ZERO);
@@ -647,4 +543,49 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         orderInfo.setTotalAmount(orderInfo.getTotalAmount().add(totalAmount));
     }
 
+    /**
+     * 保存或更新数据
+     */
+    private void saveOrUpdateOrder(OrderContext context) {
+
+        List<OrderInfo> saveOrderList = context.getSaveOrderList();
+        List<OrderInfo> updateOrderList = context.getUpdateOrderList();
+        List<OrderSku> saveOrderSkuList = context.getSaveOrderSkuList();
+        List<OrderSkuBom> saveOrderSkuBomList = context.getSaveOrderSkuBomList();
+        List<OrderPackageBom> orderPackageBomList = context.getOrderPackageBomList();
+
+        // 开启事务
+        TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
+
+        try {
+
+            if (saveOrderList.size() > 0) {
+                orderService.saveBatch(saveOrderList);
+            }
+            if (updateOrderList.size() > 0) {
+                orderService.updateBatchById(updateOrderList);
+            }
+            if (saveOrderSkuList.size() > 0) {
+                orderSkuService.saveBatch(saveOrderSkuList);
+            }
+            if (saveOrderSkuBomList.size() > 0) {
+                orderSkuBomService.saveBatch(saveOrderSkuBomList);
+            }
+            if (orderPackageBomList.size() > 0) {
+                orderPackageBomService.saveBatch(orderPackageBomList);
+            }
+
+            // 提交事务
+            platformTransactionManager.commit(transactionStatus);
+
+        } catch (Exception e) {
+
+            log.error("同步订单失败", e);
+
+            // 回滚事务
+            platformTransactionManager.rollback(transactionStatus);
+
+        }
+    }
+
 }