24282 преди 1 година
родител
ревизия
573341828f

+ 6 - 1
sd-business/src/main/java/com/sd/business/entity/bom/bo/BomBo.java → sd-business/src/main/java/com/sd/business/entity/bom/bo/BomSpecBo.java

@@ -7,7 +7,7 @@ import java.math.BigDecimal;
 
 @Getter
 @Setter
-public class BomBo {
+public class BomSpecBo {
 
     /**
      * bom规格id
@@ -15,6 +15,11 @@ public class BomBo {
     private Long bomSpecId;
 
     /**
+     * 成本价
+     */
+    private BigDecimal costPrice;
+
+    /**
      * 对内销售价(含税)
      */
     private BigDecimal internalSellingPrice;

+ 5 - 0
sd-business/src/main/java/com/sd/business/mapper/department/DepartmentMapper.java

@@ -23,4 +23,9 @@ public interface DepartmentMapper extends BaseMapper<Department> {
      */
     Page<DepartmentVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Department> wrapper);
 
+    /**
+     * 根据仓库编码获取事业部
+     */
+    Department getDepartmentByWarehouseCode(@Param("warehouseCode") String warehouseCode);
+
 }

+ 2 - 2
sd-business/src/main/java/com/sd/business/mapper/sku/SkuSpecMapper.java

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.sd.business.entity.bom.bo.BomBo;
+import com.sd.business.entity.bom.bo.BomSpecBo;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.sku.vo.SkuSpecVo;
 import org.apache.ibatis.annotations.Param;
@@ -30,6 +30,6 @@ public interface SkuSpecMapper extends BaseMapper<SkuSpec> {
     /**
      * 根据sku规格id获取bomId和bom规格id
      */
-    List<BomBo> getBomBoList(@Param("ew") QueryWrapper<Object> in);
+    List<BomSpecBo> getBomBoList(@Param("ew") QueryWrapper<Object> in);
 
 }

+ 5 - 0
sd-business/src/main/java/com/sd/business/service/department/DepartmentService.java

@@ -43,4 +43,9 @@ public interface DepartmentService extends BaseService<Department> {
      */
     void delete(Long id);
 
+    /**
+     * 根据仓库编码获取事业部
+     */
+    Department getDepartmentByWarehouseCode(String warehouseCode);
+
 }

+ 5 - 0
sd-business/src/main/java/com/sd/business/service/department/impl/DepartmentServiceImpl.java

@@ -142,4 +142,9 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         this.removeById(id);
     }
 
+    @Override
+    public Department getDepartmentByWarehouseCode(String warehouseCode) {
+        return baseMapper.getDepartmentByWarehouseCode(warehouseCode);
+    }
+
 }

+ 2 - 2
sd-business/src/main/java/com/sd/business/service/sku/SkuSpecService.java

@@ -2,7 +2,7 @@ package com.sd.business.service.sku;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.service.BaseService;
-import com.sd.business.entity.bom.bo.BomBo;
+import com.sd.business.entity.bom.bo.BomSpecBo;
 import com.sd.business.entity.sku.dto.SkuSpecDto;
 import com.sd.business.entity.sku.dto.SkuSpecSelectDto;
 import com.sd.business.entity.sku.po.SkuSpec;
@@ -50,6 +50,6 @@ public interface SkuSpecService extends BaseService<SkuSpec> {
     /**
      * 根据sku规格id获取bomId和bom规格id
      */
-    Map<Long, BomBo> getBomBoByIdList(List<Long> bomSpecIdList);
+    Map<Long, BomSpecBo> getBomBoByIdList(List<Long> bomSpecIdList);
 
 }

+ 4 - 4
sd-business/src/main/java/com/sd/business/service/sku/impl/SkuSpecServiceImpl.java

@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.sd.business.entity.bom.bo.BomBo;
+import com.sd.business.entity.bom.bo.BomSpecBo;
 import com.sd.business.entity.sku.dto.SkuSpecDto;
 import com.sd.business.entity.sku.dto.SkuSpecSelectDto;
 import com.sd.business.entity.sku.po.SkuSpec;
@@ -64,7 +64,7 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
     }
 
     @Override
-    public Map<Long, BomBo> getBomBoByIdList(List<Long> bomSpecIdList) {
+    public Map<Long, BomSpecBo> getBomBoByIdList(List<Long> bomSpecIdList) {
 
         if (ObjectUtil.isEmpty(bomSpecIdList)) {
             return Collections.emptyMap();
@@ -76,9 +76,9 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
             return Collections.emptyMap();
         }
 
-        List<BomBo> list = baseMapper.getBomBoList(Wrappers.query().in("bs.id", bomSpecIdList));
+        List<BomSpecBo> list = baseMapper.getBomBoList(Wrappers.query().in("bs.id", bomSpecIdList));
 
-        return list.stream().collect(Collectors.toMap(BomBo::getBomSpecId, Function.identity()));
+        return list.stream().collect(Collectors.toMap(BomSpecBo::getBomSpecId, Function.identity()));
     }
 
 }

+ 7 - 0
sd-business/src/main/resources/mapper/department/DepartmentMapper.xml

@@ -32,4 +32,11 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getDepartmentByWarehouseCode" resultType="com.sd.business.entity.department.po.Department">
+        SELECT *
+        FROM department
+        WHERE find_in_set(#{warehouseCode}, wln_warehouse_code)
+        LIMIT 1
+    </select>
+
 </mapper>

+ 6 - 5
sd-business/src/main/resources/mapper/sku/SkuSpecMapper.xml

@@ -24,11 +24,12 @@
             ${ew.customSqlSegment}
     </select>
 
-    <select id="getBomBoList" resultType="com.sd.business.entity.bom.bo.BomBo">
-        SELECT bs.id        bomSpecId,
-               bs.internal_selling_price,
-               bs.external_selling_price,
-               bc.parent_id classifyParentId
+    <select id="getBomBoList" resultType="com.sd.business.entity.bom.bo.BomSpecBo">
+        SELECT bs.id                                     bomSpecId,
+               ifnull(bs.cost_price, '0.00')             costPrice,
+               ifnull(bs.internal_selling_price, '0.00') internalSellingPrice,
+               ifnull(bs.external_selling_price, '0.00') externalSellingPrice,
+               bc.parent_id                              classifyParentId
         FROM bom_spec bs
                  LEFT JOIN bom b ON bs.bom_id = b.id
                  LEFT JOIN bom_classify bc on b.bom_classify_id = bc.id

+ 140 - 114
sd-wln/src/main/java/com/sd/wln/context/OrderContext.java

@@ -1,13 +1,10 @@
 package com.sd.wln.context;
 
 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.common.core.domain.BaseIdPo;
 import com.ruoyi.framework.mybatis.holder.LogicHolder;
+import com.sd.business.entity.bom.bo.BomSpecBo;
 import com.sd.business.entity.department.po.Department;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.po.OrderPackageBom;
@@ -15,9 +12,11 @@ import com.sd.business.entity.order.po.OrderSku;
 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.OrderService;
 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.util.WlnUtil;
 import lombok.Getter;
@@ -25,27 +24,16 @@ import lombok.extern.slf4j.Slf4j;
 
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @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);
-    private final PriceBillingStandardDetailService priceBillingStandardDetailService = SpringUtil.getBean(PriceBillingStandardDetailService.class);
-
-    /**
-     * 当前时间
-     */
-    @Getter
-    private final Date endDate;
-
-    /**
-     * 万里牛订单列表
-     */
-    @Getter
-    private final List<JSONObject> wlnOrderList;
+    private static final OrderService orderService = SpringUtil.getBean(OrderService.class);
+    private static final DepartmentService departmentService = SpringUtil.getBean(DepartmentService.class);
+    private static final SkuSpecService skuSpecService = SpringUtil.getBean(SkuSpecService.class);
+    private static final SkuSpecLinkService skuSpecLinkService = SpringUtil.getBean(SkuSpecLinkService.class);
+    private static final PriceBillingStandardDetailService priceBillingStandardDetailService = SpringUtil.getBean(PriceBillingStandardDetailService.class);
 
     /**
      * 保存订单列表
@@ -78,18 +66,35 @@ public class OrderContext {
     private final List<OrderPackageBom> orderPackageBomList = new ArrayList<>();
 
     /**
-     * 近3天已存在数据库中的订单
-     * key:万里牛订单uid
-     * value:订单实体
+     * 当前时间
      */
-    private Map<String, OrderInfo> orderMap;
+    @Getter
+    private final Date endDate;
 
     /**
-     * 查询事业部
-     * key:仓库编码
-     * value:仓库实体
+     * 万里牛仓库编码
      */
-    private Map<String, Department> departmentMap;
+    @Getter
+    private final String warehouseCode;
+
+    /**
+     * 万里牛订单列表
+     */
+    @Getter
+    private final List<JSONObject> wlnOrderList;
+
+    /**
+     * 事业部
+     */
+    @Getter
+    private final Department department;
+
+    /**
+     * 已存在数据库中的订单map
+     * key:万里牛订单uid
+     * value:订单实体
+     */
+    private Map<String, OrderInfo> existOrderMap;
 
     /**
      * sku规格map
@@ -99,31 +104,46 @@ public class OrderContext {
     private Map<String, SkuSpec> skuSpecMap;
 
     /**
-     * 报价规则
-     * key:部门id
-     * value:报价规则列表
+     * sku规格关联bom
+     * key:sku规格id
+     * value: key:类型 1包材 2快递包装 value:sku规格实体
+     */
+    private Map<Long, Map<Integer, List<SkuSpecLink>>> skuSpecLinkBomSpecMap;
+
+    /**
+     * bom规格明细
+     * key:bom规格id
+     * value:bom规格明细
+     */
+    private Map<Long, BomSpecBo> bomSpecBoMap;
+
+    /**
+     * 加工计费标准明细列表
      */
-    private Map<Long, List<PriceBillingStandardDetail>> priceBillingStandardMap;
+    private List<PriceBillingStandardDetail> priceBillingStandardList;
 
-    public OrderContext() {
+    /**
+     * 实例化
+     */
+    public OrderContext(String warehouseCode) {
         this.endDate = new Date();
-        this.wlnOrderList = selectWlnOrderList();
+        this.warehouseCode = warehouseCode;
+        this.wlnOrderList = selectWlnOrderList(warehouseCode);
+        this.department = departmentService.getDepartmentByWarehouseCode(warehouseCode);
     }
 
     /**
      * 查询万里牛订单
      */
-    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;
-        }
+    private List<JSONObject> selectWlnOrderList(String warehouseCode) {
 
         long endTime = endDate.getTime();
         long startTime;
 
-        OrderInfo orderInfo = orderService.getOne(q -> q.orderByDesc(OrderInfo::getWlnModifyTimestamp));
+        OrderInfo orderInfo = orderService.getOne(q -> q
+                .eq(OrderInfo::getWlnStorageCode, warehouseCode)
+                .orderByDesc(OrderInfo::getWlnModifyTimestamp));
+
         if (orderInfo == null) {
             startTime = endTime - 1000 * 60 * 60 * 24;
         } else {
@@ -135,104 +155,110 @@ public class OrderContext {
 
         List<JSONObject> list = new ArrayList<>();
 
-        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);
-        }
+        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 Collections.emptyList();
+            }
+        } while (size >= 200);
 
         return list;
     }
 
     /**
-     * 查询已存在数据库中的订单
+     * 获取存在于数据库的订单
      */
-    public Map<String, OrderInfo> getOrderMap() {
-        if (this.orderMap == null) {
+    public Map<String, OrderInfo> getExistOrderMap() {
+        if (existOrderMap == null) {
             LogicHolder.setLogicHolder(new LogicHolder());
-
-            List<String> uidList = wlnOrderList.stream()
-                    .map(item -> item.getString("uid"))
-                    .collect(Collectors.toList());
-
-            this.orderMap = orderService.mapKEntity(OrderInfo::getWlnUid, q -> q.in(OrderInfo::getWlnUid, uidList));
-
+            List<String> uidList = wlnOrderList.stream().map(item -> item.getString("uid")).collect(Collectors.toList());
+            existOrderMap = orderService.mapKEntity(OrderInfo::getWlnUid, q -> q.in(OrderInfo::getWlnUid, uidList));
             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;
+        return existOrderMap;
     }
 
     /**
      * 获取sku规格
      */
     public Map<String, SkuSpec> getSkuSpecMap() {
-        if (this.skuSpecMap == null) {
-            List<String> wlnUidList = wlnOrderList.stream()
+        if (skuSpecMap == null) {
+            List<String> wlnSkuSpecUidList = 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));
+
+            if (wlnSkuSpecUidList.size() == 0) {
+                skuSpecMap = Collections.emptyMap();
+            } else {
+                skuSpecMap = skuSpecService.mapKEntity(SkuSpec::getWlnUid, q -> q.in(SkuSpec::getWlnUid, wlnSkuSpecUidList));
+            }
+        }
+        return skuSpecMap;
+    }
+
+    public Map<Long, Map<Integer, List<SkuSpecLink>>> getSkuSpecLinkBomSpecMap() {
+
+        if (skuSpecLinkBomSpecMap == null) {
+            if (department == null) {
+                skuSpecLinkBomSpecMap = Collections.emptyMap();
+                return skuSpecLinkBomSpecMap;
+            }
+
+            List<Long> skuSpecId = getSkuSpecMap().values().stream().map(SkuSpec::getId).collect(Collectors.toList());
+
+            if (skuSpecId.size() == 0) {
+                skuSpecLinkBomSpecMap = Collections.emptyMap();
+                return skuSpecLinkBomSpecMap;
+            }
+
+            List<SkuSpecLink> list = skuSpecLinkService.list(q -> q
+                    .in(SkuSpecLink::getSkuSpecId, skuSpecId)
+                    .eq(SkuSpecLink::getDepartmentId, department.getId()));
+
+            skuSpecLinkBomSpecMap = list.stream().collect(
+                    Collectors.groupingBy(SkuSpecLink::getSkuSpecId, Collectors.groupingBy(SkuSpecLink::getType)));
         }
 
-        return this.skuSpecMap;
+        return skuSpecLinkBomSpecMap;
     }
 
-    public Map<Long, List<PriceBillingStandardDetail>> getPriceBillingStandardMap() {
-
-        if (this.priceBillingStandardMap == null) {
-
-            // 加工计费标准id 报价规则列表 map
-            Map<Long, List<PriceBillingStandardDetail>> map = priceBillingStandardDetailService.list()
-                    .stream()
-                    .filter(item -> ObjectUtil.isNotNull(item.getPriceBillingStandardId()))
-                    .collect(Collectors.groupingBy(PriceBillingStandardDetail::getPriceBillingStandardId));
-
-            // 部门id、加工计费标准id map
-            this.priceBillingStandardMap = this.getDepartmentMap().values()
-                    .stream()
-                    .filter(item -> ObjectUtil.isNotNull(item.getPriceBillingStandardId()))
-                    .collect(Collectors.toMap(
-                            BaseIdPo::getId,
-                            item -> map.getOrDefault(item.getPriceBillingStandardId(), Collections.emptyList()),
-                            (t1, t2) -> t1
-                    ));
+    public Map<Long, BomSpecBo> getBomSpecBoMap() {
+        if (bomSpecBoMap == null) {
+            List<Long> bomSpecIdList = Stream.concat(
+                            getSkuSpecMap().values().stream().map(SkuSpec::getBomSpecId),
+                            getSkuSpecLinkBomSpecMap().values().stream().flatMap(item -> Stream.concat(
+                                    item.getOrDefault(1, Collections.emptyList()).stream(),
+                                    item.getOrDefault(2, Collections.emptyList()).stream()
+                            )).map(SkuSpecLink::getBomSpecId))
+                    .distinct().collect(Collectors.toList());
+            bomSpecBoMap = skuSpecService.getBomBoByIdList(bomSpecIdList);
         }
+        return bomSpecBoMap;
+    }
 
-        return this.priceBillingStandardMap;
+    /**
+     * 获取加工计费标准
+     */
+    public List<PriceBillingStandardDetail> getPriceBillingStandardList() {
+        if (priceBillingStandardList == null) {
+            if (department == null || department.getPriceBillingStandardId() == null) {
+                priceBillingStandardList = Collections.emptyList();
+            } else {
+                priceBillingStandardList = priceBillingStandardDetailService.list(q -> q
+                        .eq(PriceBillingStandardDetail::getPriceBillingStandardId, department.getPriceBillingStandardId()));
+            }
+        }
+        return priceBillingStandardList;
     }
 
 }

+ 103 - 140
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

@@ -4,10 +4,10 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 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.sd.business.entity.bom.bo.BomBo;
-import com.sd.business.entity.bom.po.BomSpec;
+import com.sd.business.entity.bom.bo.BomSpecBo;
 import com.sd.business.entity.department.po.Department;
 import com.sd.business.entity.order.enums.OrderExceptionTypeEnum;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
@@ -18,13 +18,10 @@ 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.bom.BomSpecService;
 import com.sd.business.service.order.OrderPackageBomService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.order.OrderSkuBomService;
 import com.sd.business.service.order.OrderSkuService;
-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 lombok.extern.slf4j.Slf4j;
@@ -49,6 +46,9 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     private TransactionDefinition transactionDefinition;
 
     @Autowired
+    private DictCommonDataService dictCommonDataService;
+
+    @Autowired
     private OrderService orderService;
 
     @Autowired
@@ -60,68 +60,62 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     @Autowired
     private OrderPackageBomService orderPackageBomService;
 
-    @Autowired
-    private SkuSpecService skuSpecService;
-
-    @Autowired
-    private SkuSpecLinkService skuSpecLinkService;
-
-    @Autowired
-    private BomSpecService bomSpecService;
-
     @Override
     public void syncOrder() {
 
-        OrderContext context = new OrderContext();
-
-        // 万里牛订单若为0,结束同步任务
-        List<JSONObject> wlnOrderList = context.getWlnOrderList();
-        if (ObjectUtil.isEmpty(wlnOrderList)) {
+        List<DictCommonData> warehouseCodeList = dictCommonDataService.list(q -> q.eq(DictCommonData::getDictCode, "warehouse_code"));
+        if (warehouseCodeList.size() == 0) {
+            log.error("订单同步失败,仓库字典:warehouse_code 为空");
             return;
         }
 
-        Map<String, OrderInfo> orderMap = context.getOrderMap();
+        for (DictCommonData dictCommonData : warehouseCodeList) {
+            OrderContext context = new OrderContext(dictCommonData.getDictValue());
+
+            // 万里牛订单若为0,结束同步任务
+            List<JSONObject> wlnOrderList = context.getWlnOrderList();
+            if (ObjectUtil.isEmpty(wlnOrderList)) {
+                continue;
+            }
+
+            Map<String, OrderInfo> existOrderMap = context.getExistOrderMap();
 
-        // 循环万里牛订单
-        for (JSONObject wlnOrder : wlnOrderList) {
+            // 循环万里牛订单
+            for (JSONObject wlnOrder : wlnOrderList) {
 
-            // 仓库编号
-            String storageCode = wlnOrder.getString("storage_code");
+                // 订单uid
+                String wlnUid = wlnOrder.getString("uid");
 
-            // 订单uid
-            String wlnUid = wlnOrder.getString("uid");
+                OrderInfo orderInfo = existOrderMap.get(wlnUid);
 
-            // 部门实体
-            Department department = context.getDepartmentMap().get(storageCode);
+                if (orderInfo == null) {
+                    // 创建订单
+                    orderInfo = createOrder(context, wlnOrder);
+                } else {
+                    // 修改订单
+                    updateOrder(context, wlnOrder, orderInfo);
+                    continue;
+                }
 
-            OrderInfo orderInfo = orderMap.get(wlnUid);
+                // 添加订单到上下文
+                addOrder(context, wlnOrder, orderInfo);
 
-            if (orderInfo == null) {
-                // 创建订单
-                orderInfo = createOrder(wlnOrder, department);
-            } else {
-                // 修改订单
-                updateOrder(context, wlnOrder, department, orderInfo);
-                continue;
             }
 
-            // 添加订单到上下文
-            addOrder(context, wlnOrder, orderInfo);
+            // 计算订单价格
+            setOrderPrice(context);
 
-        }
+            // 保存或更新数据
+            saveOrUpdateOrder(context);
 
-        // 计算订单价格
-        setOrderPrice(context);
-
-        // 保存或更新数据
-        saveOrUpdateOrder(context);
+        }
 
     }
 
     /**
      * 创建订单
      */
-    private OrderInfo createOrder(JSONObject wlnOrder, Department department) {
+    private OrderInfo createOrder(OrderContext context, JSONObject wlnOrder) {
 
         OrderInfo orderInfo = new OrderInfo();
         orderInfo.setId(IdWorker.getId());
@@ -130,7 +124,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         orderInfo.setTag("0");
         orderInfo.setSettlementStatus(1);
 
-        orderInfo.setWlnStorageCode(wlnOrder.getString("storage_code"));
+        orderInfo.setWlnStorageCode(context.getWarehouseCode());
         orderInfo.setWlnUid(wlnOrder.getString("uid"));
         orderInfo.setCode(wlnOrder.getString("tp_tid"));
         orderInfo.setWlnCode(wlnOrder.getString("trade_no"));
@@ -163,6 +157,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         }
 
         // 事业部id
+        Department department = context.getDepartment();
         if (department == null) {
             addExceptionType(orderInfo, OrderExceptionTypeEnum.UNKNOWN_WAREHOUSE);
         } else {
@@ -183,10 +178,10 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     /**
      * 修改订单
      */
-    private void updateOrder(OrderContext context, JSONObject wlnOrder, Department department, OrderInfo orderInfo) {
+    private void updateOrder(OrderContext context, JSONObject wlnOrder, OrderInfo orderInfo) {
         List<OrderInfo> updateOrderList = context.getUpdateOrderList();
 
-        orderInfo.setWlnStorageCode(wlnOrder.getString("storage_code"));
+        orderInfo.setWlnStorageCode(context.getWarehouseCode());
         orderInfo.setWlnUid(wlnOrder.getString("uid"));
         orderInfo.setCode(wlnOrder.getString("tp_tid"));
         orderInfo.setWlnCode(wlnOrder.getString("trade_no"));
@@ -218,6 +213,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         }
 
         // 事业部id
+        Department department = context.getDepartment();
         if (department == null) {
             addExceptionType(orderInfo, OrderExceptionTypeEnum.UNKNOWN_WAREHOUSE);
         } else {
@@ -253,40 +249,16 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     }
 
     /**
-     * 创建订单sku
-     */
-    private OrderSku createOrderSku(JSONObject wlnOrderSku, OrderInfo orderInfo, SkuSpec skuSpec) {
-        OrderSku orderSku = new OrderSku();
-        orderSku.setId(IdWorker.getId());
-        orderSku.setWlnSkuId(wlnOrderSku.getString("sys_goods_uid"));
-        orderSku.setWlnSkuSpecId(wlnOrderSku.getString("sys_spec_uid"));
-        orderSku.setWlnSkuName(wlnOrderSku.getString("oln_sku_name"));
-        orderSku.setOrderId(orderInfo.getId());
-        orderSku.setQuantity(wlnOrderSku.getBigDecimal("size"));
-        orderSku.setPrintType(1);
-        orderSku.setStockPreparationStatus(StatusConstant.NO);
-
-        if (skuSpec != null) {
-            orderSku.setSkuId(skuSpec.getSkuId());
-            orderSku.setSkuSpecId(skuSpec.getId());
-            orderSku.setBomSpecId(skuSpec.getBomSpecId());
-        }
-
-        return orderSku;
-    }
-
-    /**
      * 创建订单包材
      */
-    private List<OrderSkuBom> createOrderSkuBoom(List<OrderSku> orderSkuList, Map<Long, BomSpec> bomSpecMap, List<SkuSpecLink> list) {
-        if (ObjectUtil.isEmpty(list)) {
-            return Collections.emptyList();
-        }
-
-        Map<Long, List<SkuSpecLink>> skuSpecLinkMap = list.stream().collect(Collectors.groupingBy(SkuSpecLink::getSkuSpecId));
+    private List<OrderSkuBom> createOrderSkuBoom(OrderContext context, List<OrderSku> orderSkuList) {
+        Map<Long, Map<Integer, List<SkuSpecLink>>> linkBomSpecMap = context.getSkuSpecLinkBomSpecMap();
+        Map<Long, BomSpecBo> bomBoMap = context.getBomSpecBoMap();
 
         return orderSkuList.stream().flatMap(orderSku -> {
-            List<SkuSpecLink> skuSpecLinkList = skuSpecLinkMap.getOrDefault(orderSku.getSkuSpecId(), Collections.emptyList());
+            Map<Integer, List<SkuSpecLink>> map = linkBomSpecMap.getOrDefault(orderSku.getSkuSpecId(), Collections.emptyMap());
+            List<SkuSpecLink> skuSpecLinkList = map.getOrDefault(1, Collections.emptyList());
+
             return skuSpecLinkList.stream().map(item -> {
                 OrderSkuBom orderSkuBom = new OrderSkuBom();
                 orderSkuBom.setId(IdWorker.getId());
@@ -294,52 +266,53 @@ public class WlnOrderServiceImpl implements WlnOrderService {
                 orderSkuBom.setOrderSkuId(orderSku.getId());
                 orderSkuBom.setBomSpecId(item.getBomSpecId());
                 orderSkuBom.setQuantity(item.getQuantity());
-                BomSpec bomSpec = bomSpecMap.get(item.getBomSpecId());
-                if (bomSpec == null) {
+                BomSpecBo bomSpecBo = bomBoMap.get(item.getBomSpecId());
+                if (bomSpecBo == null) {
                     orderSkuBom.setUnitPrice(BigDecimal.ZERO);
                 } else {
-                    orderSkuBom.setUnitPrice(ObjectUtil.defaultIfNull(bomSpec.getInternalSellingPrice(), BigDecimal.ZERO));
+                    orderSkuBom.setUnitPrice(bomSpecBo.getInternalSellingPrice());
                 }
                 return orderSkuBom;
             });
+
         }).collect(Collectors.toList());
+
     }
 
     /**
      * 创建订单包装
      */
-    private List<OrderPackageBom> createOrderPackageBomList(List<OrderSku> orderSkuList, Map<Long, BomSpec> bomSpecMap, List<SkuSpecLink> list) {
-        if (ObjectUtil.isEmpty(list)) {
-            return Collections.emptyList();
-        }
+    private List<OrderPackageBom> createOrderPackageBomList(OrderContext context, List<OrderSku> orderSkuList) {
+        Map<Long, Map<Integer, List<SkuSpecLink>>> linkBomSpecMap = context.getSkuSpecLinkBomSpecMap();
+        Map<Long, BomSpecBo> bomBoMap = context.getBomSpecBoMap();
 
-        Map<Long, List<SkuSpecLink>> skuSpecLinkMap = list.stream().collect(Collectors.groupingBy(SkuSpecLink::getSkuSpecId));
         Map<Long, OrderPackageBom> orderPackageBomMap = new HashMap<>();
 
         // 循环订单sku规格
         for (OrderSku orderSku : orderSkuList) {
-            List<SkuSpecLink> skuSpecLinkList = skuSpecLinkMap.get(orderSku.getSkuSpecId());
-            if (ObjectUtil.isEmpty(skuSpecLinkList)) {
-                continue;
-            }
+
+            Map<Integer, List<SkuSpecLink>> map = linkBomSpecMap.getOrDefault(orderSku.getSkuSpecId(), Collections.emptyMap());
+            List<SkuSpecLink> skuSpecLinkList = map.getOrDefault(2, Collections.emptyList());
 
             for (SkuSpecLink skuSpecLink : skuSpecLinkList) {
                 Long bomSpecId = skuSpecLink.getBomSpecId();
+
                 OrderPackageBom orderPackageBom = orderPackageBomMap.computeIfAbsent(bomSpecId, item -> {
                     OrderPackageBom tempOrderPackageBom = new OrderPackageBom();
                     tempOrderPackageBom.setOrderId(orderSku.getOrderId());
                     tempOrderPackageBom.setBomSpecId(bomSpecId);
                     tempOrderPackageBom.setQuantity(BigDecimal.ZERO);
-                    BomSpec bomSpec = bomSpecMap.get(bomSpecId);
-                    if (bomSpec == null) {
+                    BomSpecBo bomSpecBo = bomBoMap.get(bomSpecId);
+                    if (bomSpecBo == null) {
                         tempOrderPackageBom.setCostPrice(BigDecimal.ZERO);
                         tempOrderPackageBom.setInternalSellingPrice(BigDecimal.ZERO);
                     } else {
-                        tempOrderPackageBom.setCostPrice(ObjectUtil.defaultIfNull(bomSpec.getCostPrice(), BigDecimal.ZERO));
-                        tempOrderPackageBom.setInternalSellingPrice(ObjectUtil.defaultIfNull(bomSpec.getInternalSellingPrice(), BigDecimal.ZERO));
+                        tempOrderPackageBom.setCostPrice(bomSpecBo.getCostPrice());
+                        tempOrderPackageBom.setInternalSellingPrice(bomSpecBo.getInternalSellingPrice());
                     }
                     return tempOrderPackageBom;
                 });
+
                 orderPackageBom.setQuantity(orderPackageBom.getQuantity().add(orderSku.getQuantity().multiply(skuSpecLink.getQuantity())));
             }
         }
@@ -357,48 +330,23 @@ public class WlnOrderServiceImpl implements WlnOrderService {
 
         // 创建订单sku
         for (JSONObject wlnOrderSku : wlnOrder.getJSONArray("orders").toJavaList(JSONObject.class)) {
-
-            // 订单明细未匹配到sku规格,跳过次订单同步
-            String sysSpecUid = wlnOrderSku.getString("sys_spec_uid");
-
             // sku规格信息
-            SkuSpec skuSpec = skuSpecMap.get(sysSpecUid);
-
+            SkuSpec skuSpec = skuSpecMap.get(wlnOrderSku.getString("sys_spec_uid"));
             if (skuSpec == null) {
                 addExceptionType(orderInfo, OrderExceptionTypeEnum.UNKNOWN_SKU_SPEC);
             } else if (skuSpec.getBomSpecId() == null) {
                 addExceptionType(orderInfo, OrderExceptionTypeEnum.UNKNOWN_BOM_SPEC);
             }
-
             // 创建订单sku
             OrderSku orderSku = createOrderSku(wlnOrderSku, orderInfo, skuSpec);
             orderSkuList.add(orderSku);
-
-        }
-
-        // 订单关联
-        List<Long> skuSpecIdList = orderSkuList.stream().map(OrderSku::getSkuSpecId).collect(Collectors.toList());
-        List<SkuSpecLink> list = skuSpecLinkService.list(q -> q
-                .in(SkuSpecLink::getSkuSpecId, skuSpecIdList)
-                .eq(SkuSpecLink::getDepartmentId, orderInfo.getDepartmentId()));
-
-        // 跳过type区分包材和快递包装
-        Map<Integer, List<SkuSpecLink>> map = list.stream().collect(Collectors.groupingBy(SkuSpecLink::getType));
-
-        // 根据sku规格id获取bomId和bom规格id
-        List<Long> bomSpecIdList = list.stream().map(SkuSpecLink::getBomSpecId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
-        Map<Long, BomSpec> bomSpecMap;
-        if (bomSpecIdList.size() == 0) {
-            bomSpecMap = Collections.emptyMap();
-        } else {
-            bomSpecMap = bomSpecService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, bomSpecIdList));
         }
 
         // 获取订单sku包材
-        List<OrderSkuBom> orderSkuBomList = createOrderSkuBoom(orderSkuList, bomSpecMap, map.get(1));
+        List<OrderSkuBom> orderSkuBomList = createOrderSkuBoom(context, orderSkuList);
 
         // 获取订单sku快递包装
-        List<OrderPackageBom> orderPackageBomList = createOrderPackageBomList(orderSkuList, bomSpecMap, map.get(2));
+        List<OrderPackageBom> orderPackageBomList = createOrderPackageBomList(context, orderSkuList);
 
         context.getSaveOrderList().add(orderInfo);
         context.getSaveOrderSkuList().addAll(orderSkuList);
@@ -408,6 +356,28 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     }
 
     /**
+     * 创建订单sku
+     */
+    private OrderSku createOrderSku(JSONObject wlnOrderSku, OrderInfo orderInfo, SkuSpec skuSpec) {
+        OrderSku orderSku = new OrderSku();
+        orderSku.setId(IdWorker.getId());
+        orderSku.setWlnSkuId(wlnOrderSku.getString("sys_goods_uid"));
+        orderSku.setWlnSkuSpecId(wlnOrderSku.getString("sys_spec_uid"));
+        orderSku.setWlnSkuName(wlnOrderSku.getString("oln_sku_name"));
+        orderSku.setOrderId(orderInfo.getId());
+        orderSku.setQuantity(wlnOrderSku.getBigDecimal("size"));
+        orderSku.setPrintType(1);
+        orderSku.setStockPreparationStatus(StatusConstant.NO);
+
+        if (skuSpec != null) {
+            orderSku.setSkuId(skuSpec.getSkuId());
+            orderSku.setSkuSpecId(skuSpec.getId());
+            orderSku.setBomSpecId(skuSpec.getBomSpecId());
+        }
+        return orderSku;
+    }
+
+    /**
      * 赋值订单价格
      */
     private void setOrderPrice(OrderContext context) {
@@ -416,16 +386,13 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         List<OrderSku> saveOrderSkuList = context.getSaveOrderSkuList();
         List<OrderSkuBom> saveOrderSkuBomList = context.getSaveOrderSkuBomList();
         Map<String, SkuSpec> skuSpecMap = context.getSkuSpecMap();
-        Map<Long, List<PriceBillingStandardDetail>> priceBillingStandardMap = context.getPriceBillingStandardMap();
+        List<PriceBillingStandardDetail> priceBillingStandardDetailList = context.getPriceBillingStandardList();
+        Map<Long, BomSpecBo> bomBoMap = context.getBomSpecBoMap();
 
         if (saveOrderList.size() == 0) {
             return;
         }
 
-        // 根据sku规格id获取bom规格
-        List<Long> bomSpecIdList = saveOrderSkuList.stream().map(OrderSku::getBomSpecId).collect(Collectors.toList());
-        Map<Long, BomBo> bomBoMap = skuSpecService.getBomBoByIdList(bomSpecIdList);
-
         // 订单明细
         Map<Long, List<OrderSku>> orderSkuGroup = saveOrderSkuList.stream().collect(Collectors.groupingBy(OrderSku::getOrderId));
 
@@ -439,10 +406,6 @@ public class WlnOrderServiceImpl implements WlnOrderService {
             orderInfo.setPackingLabor(BigDecimal.ZERO);
             orderInfo.setPackagingMaterialCost(BigDecimal.ZERO);
 
-            // 加工计费标准
-            Long departmentId = orderInfo.getDepartmentId();
-            List<PriceBillingStandardDetail> priceBillingStandardDetailList = priceBillingStandardMap.get(departmentId);
-
             // 订单明细
             List<OrderSku> itemOrderSkuList = orderSkuGroup.get(orderInfo.getId());
 
@@ -468,10 +431,10 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     /**
      * 赋值单价
      */
-    private void assignedUnitPrice(OrderSku orderSku, Map<Long, BomBo> bomBoMap) {
-        BomBo bomBo = bomBoMap.get(orderSku.getBomSpecId());
-        if (bomBo != null) {
-            orderSku.setUnitPrice(ObjectUtil.defaultIfNull(bomBo.getInternalSellingPrice(), BigDecimal.ZERO));
+    private void assignedUnitPrice(OrderSku orderSku, Map<Long, BomSpecBo> bomBoMap) {
+        BomSpecBo bomSpecBo = bomBoMap.get(orderSku.getBomSpecId());
+        if (bomSpecBo != null) {
+            orderSku.setUnitPrice(ObjectUtil.defaultIfNull(bomSpecBo.getInternalSellingPrice(), BigDecimal.ZERO));
         } else {
             orderSku.setUnitPrice(BigDecimal.ZERO);
         }
@@ -492,7 +455,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     /**
      * 赋值其他价格
      */
-    private void assignedOtherPrice(OrderSku orderSku, Map<Long, BomBo> bomBoMap,
+    private void assignedOtherPrice(OrderSku orderSku, Map<Long, BomSpecBo> bomBoMap,
                                     List<PriceBillingStandardDetail> priceBillingStandardDetailList,
                                     Map<String, SkuSpec> skuSpecMap) {
 
@@ -507,13 +470,13 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         }
 
         // 没绑定bom规格,不赋值价格
-        BomBo bomBo = bomBoMap.get(orderSku.getBomSpecId());
-        if (bomBo == null) {
+        BomSpecBo bomSpecBo = bomBoMap.get(orderSku.getBomSpecId());
+        if (bomSpecBo == null) {
             return;
         }
 
         // 如果bom规格不为主材,不赋值价格
-        if (ObjectUtil.notEqual(bomBo.getClassifyParentId(), 1L)) {
+        if (ObjectUtil.notEqual(bomSpecBo.getClassifyParentId(), 1L)) {
             return;
         }