Преглед на файлове

新增产品包装配置,并生成出库信息

fgd преди 1 година
родител
ревизия
98845de4cf

+ 18 - 0
sd-business/src/main/java/com/sd/business/controller/order/OrderController.java

@@ -5,10 +5,12 @@ import com.fjhx.flow.enums.FlowStatusEnum;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.sd.business.entity.order.dto.OrderInfoDto;
 import com.sd.business.entity.order.dto.OrderSelectDto;
+import com.sd.business.entity.order.dto.SkuSpecPackageBomDto;
 import com.sd.business.entity.order.dto.SkuSpecPriceDto;
 import com.sd.business.entity.order.enums.OrderExceptionTypeEnum;
 import com.sd.business.entity.order.vo.CompareVo;
 import com.sd.business.entity.order.vo.OrderInfoVo;
+import com.sd.business.entity.order.vo.OrderPackageBomVo;
 import com.sd.business.entity.order.vo.SkuSpecPriceVo;
 import com.sd.business.entity.production.vo.OutBomVo;
 import com.sd.business.service.order.OrderService;
@@ -95,6 +97,22 @@ public class OrderController {
     }
 
     /**
+     * 获取产品包装bom列表
+     */
+    @PostMapping("/getSkuSpecPackageBomList")
+    public List<OrderPackageBomVo> getSkuSpecPackageBomList(@Validated @RequestBody SkuSpecPackageBomDto dto) {
+        return orderService.getSkuSpecPackageBomList(dto);
+    }
+
+    /**
+     * 修改订单产品包装
+     */
+    @PostMapping("/editOrderPackageBom")
+    public void editOrderPackageBom(@RequestBody OrderInfoDto dto) {
+        orderService.editOrderPackageBom(dto);
+    }
+
+    /**
      * 通过sku规格id获取产品价格
      */
     @PostMapping("/deletedOrderPage")

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventorySelectDto.java

@@ -7,6 +7,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 库存列表查询入参实体
@@ -89,4 +90,8 @@ public class InventorySelectDto extends BaseSelectDto {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date backupDate;
 
+    /**
+     * 仓库id列表
+     */
+    private List<Long> warehouseIdList;
 }

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/order/dto/OrderInfoDto.java

@@ -42,6 +42,11 @@ public class OrderInfoDto extends OrderInfo {
     private List<OrderPackageBomDto> orderPackageBomList;
 
     /**
+     * 外箱不干胶文件
+     */
+    private ObsFile outerBoxSelfAdhesiveStickerFile;
+
+    /**
      * 包裹图片
      */
     private List<ObsFile> packagePictureList;

+ 9 - 0
sd-business/src/main/java/com/sd/business/entity/order/vo/OrderPackageBomVo.java

@@ -14,4 +14,13 @@ import lombok.Setter;
 @Setter
 public class OrderPackageBomVo extends OrderPackageBom {
 
+    /**
+     * bom规格编码
+     */
+    private String bomSpecCode;
+
+    /**
+     * bom规格名称
+     */
+    private String bomSpecName;
 }

+ 3 - 0
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryServiceImpl.java

@@ -667,6 +667,9 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
         wrapper.eq("i", Inventory::getWarehouseId, dto.getWarehouseId());
         wrapper.eq("i", Inventory::getDepartmentId, dto.getDepartmentId());
         wrapper.eq("i", InventoryBackup::getBackupDate, dto.getBackupDate());
+        if (ObjectUtil.isNotNull(dto.getWarehouseIdList())) {
+            wrapper.in("i", Inventory::getWarehouseId, dto.getWarehouseIdList());
+        }
 
         return wrapper;
     }

+ 16 - 0
sd-business/src/main/java/com/sd/business/service/order/OrderService.java

@@ -6,10 +6,12 @@ import com.ruoyi.common.core.service.BaseService;
 import com.sd.business.entity.bom.bo.BomSpecOrderConsumptionBo;
 import com.sd.business.entity.order.dto.OrderInfoDto;
 import com.sd.business.entity.order.dto.OrderSelectDto;
+import com.sd.business.entity.order.dto.SkuSpecPackageBomDto;
 import com.sd.business.entity.order.dto.SkuSpecPriceDto;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.vo.CompareVo;
 import com.sd.business.entity.order.vo.OrderInfoVo;
+import com.sd.business.entity.order.vo.OrderPackageBomVo;
 import com.sd.business.entity.order.vo.SkuSpecPriceVo;
 import com.sd.business.entity.production.vo.OutBomVo;
 import com.sd.business.entity.statement.vo.StatementOrderClassifyTotalCountVo;
@@ -158,6 +160,20 @@ public interface OrderService extends BaseService<OrderInfo> {
     List<OutBomVo> returnBomList(Long id);
 
     /**
+     * 获取产品包装bom列表
+     * @param dto
+     * @return
+     */
+    List<OrderPackageBomVo> getSkuSpecPackageBomList(SkuSpecPackageBomDto dto);
+
+    /**
+     * 修改订单产品包装
+     * @param dto
+     * @return
+     */
+    void editOrderPackageBom(OrderInfoDto dto);
+
+    /**
      * 订单导出
      * @param id
      */

+ 184 - 0
sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java

@@ -25,10 +25,12 @@ import com.sd.business.entity.bom.bo.BomSpecBo;
 import com.sd.business.entity.bom.bo.BomSpecOrderConsumptionBo;
 import com.sd.business.entity.bom.po.Bom;
 import com.sd.business.entity.bom.po.BomSpec;
+import com.sd.business.entity.department.constant.DepartmentConstant;
 import com.sd.business.entity.department.po.Department;
 import com.sd.business.entity.in.dto.InOutStorageDto;
 import com.sd.business.entity.in.emums.InDetailTypeEnum;
 import com.sd.business.entity.in.emums.InOutTypeEnum;
+import com.sd.business.entity.in.emums.OutDetailTypeEnum;
 import com.sd.business.entity.in.po.InOutStorageBom;
 import com.sd.business.entity.inventory.po.Inventory;
 import com.sd.business.entity.order.dto.*;
@@ -42,6 +44,7 @@ import com.sd.business.entity.price.po.PriceBillingStandardDetail;
 import com.sd.business.entity.production.po.ProductionWorkOrder;
 import com.sd.business.entity.production.vo.OutBomVo;
 import com.sd.business.entity.sku.po.SkuSpec;
+import com.sd.business.entity.sku.po.SkuSpecLink;
 import com.sd.business.entity.statement.po.StatementOfAccount;
 import com.sd.business.entity.statement.vo.StatementOrderClassifyTotalCountVo;
 import com.sd.business.entity.warehouse.constant.WarehouseConstant;
@@ -56,6 +59,7 @@ import com.sd.business.service.order.*;
 import com.sd.business.service.price.PriceBillingStandardDetailService;
 import com.sd.business.service.price.PriceBillingStandardService;
 import com.sd.business.service.production.ProductionWorkOrderService;
+import com.sd.business.service.sku.SkuSpecLinkService;
 import com.sd.business.service.sku.SkuSpecService;
 import com.sd.business.service.statement.StatementOfAccountService;
 import com.sd.business.util.CodeEnum;
@@ -141,6 +145,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
     private ProductionWorkOrderService productionWorkOrderService;
 
     @Autowired
+    private SkuSpecLinkService skuSpecLinkService;
+
+    @Autowired
     private HttpServletResponse response;
 
     @Override
@@ -1167,6 +1174,183 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
                 .collect(Collectors.toList());
     }
 
+    @Override
+    public List<OrderPackageBomVo> getSkuSpecPackageBomList(SkuSpecPackageBomDto dto) {
+        List<SkuSpecPriceDto> skuSpecList = dto.getSkuSpecList();
+        List<Long> skuSpecIds = skuSpecList.stream().map(SkuSpecPriceDto::getSkuSpecId).collect(Collectors.toList());
+        Map<Long, List<SkuSpecLink>> skuSpecMap = skuSpecLinkService.mapKGroup(
+                SkuSpecLink::getSkuSpecId,
+                q -> q.in(SkuSpecLink::getSkuSpecId, skuSpecIds).eq(SkuSpecLink::getType, 2));
+        if (ObjectUtil.isEmpty(skuSpecMap)) {
+            return Collections.emptyList();
+        }
+        List<Long> bomSpecIds = skuSpecMap.values().stream()
+                .flatMap(item -> item.stream().map(SkuSpecLink::getBomSpecId))
+                .collect(Collectors.toList());
+        Map<Long, BomSpec> bomSpecPriceMap = bomSpecService.mapKEntity(
+                BaseIdPo::getId, q -> q.in(BaseIdPo::getId, bomSpecIds));
+
+        List<OrderPackageBomVo> list = new ArrayList<>();
+        for (SkuSpecPriceDto skuSpecPriceDto : skuSpecList) {
+            List<SkuSpecLink> skuSpecLinkList = skuSpecMap.getOrDefault(skuSpecPriceDto.getSkuSpecId(), Collections.emptyList());
+            List<OrderPackageBomVo> packageBomVoList = skuSpecLinkList.stream().map(item -> {
+                BomSpec bomSpec = bomSpecPriceMap.get(item.getBomSpecId());
+                OrderPackageBomVo orderPackageBomVo = new OrderPackageBomVo();
+                orderPackageBomVo.setBomSpecName(bomSpec.getName());
+                orderPackageBomVo.setBomSpecCode(bomSpec.getCode());
+                orderPackageBomVo.setCostPrice(bomSpec.getCostPrice());
+                orderPackageBomVo.setInternalSellingPrice(bomSpec.getInternalSellingPrice());
+                orderPackageBomVo.setBomSpecId(item.getBomSpecId());
+                orderPackageBomVo.setQuantity(item.getQuantity().multiply(skuSpecPriceDto.getQuantity()));
+                return orderPackageBomVo;
+            }).collect(Collectors.toList());
+            list.addAll(packageBomVoList);
+        }
+        // 合并相同bom
+        Map<Long, OrderPackageBomVo> bomVoMap = list.stream().collect(Collectors.toMap(
+                OrderPackageBom::getBomSpecId,
+                Function.identity(),
+                (v1, v2) -> {
+                    v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
+                    return v1;
+                }));
+        return new ArrayList<>(bomVoMap.values());
+    }
+
+    @Override
+    public void editOrderPackageBom(OrderInfoDto dto) {
+        OrderInfo orderInfo = this.getById(dto.getId());
+        if (orderInfo == null) {
+            throw new ServiceException("未知订单");
+        }
+        // 生产中和生产完成的订单快递包材归还入库
+        if (ObjectUtil.equals(orderInfo.getStatus(), OrderStatusEnum.IN_PRODUCTION.getKey())
+                || ObjectUtil.equals(orderInfo.getStatus(), OrderStatusEnum.COMPLETION_PRODUCTION.getKey())) {
+            this.orderPackageBomInOutStorage(dto);
+        }
+
+        List<OrderPackageBomDto> tempOrderPackageBomList = dto.getOrderPackageBomList();
+        BigDecimal totalAmount = orderInfo.getTotalAmount();
+        BigDecimal oldDeliveryMaterialsFee = orderInfo.getDeliveryMaterialsFee();
+        BigDecimal newDeliveryMaterialsFee = BigDecimal.ZERO;
+        if (ObjectUtil.isEmpty(tempOrderPackageBomList)) {
+            orderPackageBomService.remove(q -> q.eq(OrderPackageBom::getOrderId, orderInfo.getId()));
+        } else {
+            List<OrderPackageBom> orderPackageBomList = tempOrderPackageBomList.stream()
+                    .peek(item -> item.setOrderId(dto.getId()))
+                    .map(item -> (OrderPackageBom) item)
+                    .collect(Collectors.toList());
+            orderPackageBomService.editLinked(orderPackageBomList, OrderPackageBom::getOrderId, orderInfo.getId());
+            newDeliveryMaterialsFee = orderPackageBomList.stream()
+                    .map(item -> item.getInternalSellingPrice().multiply(item.getQuantity()))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+        }
+        orderInfo.setDeliveryMaterialsFee(newDeliveryMaterialsFee);
+        List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, orderInfo.getId()));
+        orderSkuList.forEach(item ->
+                item.setDeliveryMaterialsFee(orderInfo.getDeliveryMaterialsFee()
+                        .divide(new BigDecimal(orderSkuList.size()), 2, RoundingMode.HALF_UP)
+                        .divide(item.getQuantity(), 2, RoundingMode.HALF_UP))
+        );
+        orderInfo.setTotalAmount(totalAmount.subtract(oldDeliveryMaterialsFee).add(newDeliveryMaterialsFee));
+        this.updateById(orderInfo);
+        orderSkuService.updateBatchById(orderSkuList);
+        ObsFileUtil.editFile(dto.getOuterBoxSelfAdhesiveStickerFile(), dto.getId(), 1);
+    }
+
+    /**
+     * 订单修改快递包材出入库操作
+     * @param dto
+     */
+    private void orderPackageBomInOutStorage(OrderInfoDto dto) {
+        List<OrderPackageBom> oldOrderPackageBomList = orderPackageBomService.list(q -> q.eq(OrderPackageBom::getOrderId, dto.getId()));
+        List<OrderPackageBomDto> newOrderPackageBomList = dto.getOrderPackageBomList();
+
+        // 旧bom
+        Map<Long, BigDecimal> oldBomMap = oldOrderPackageBomList.stream()
+                .collect(Collectors.toMap(
+                        OrderPackageBom::getBomSpecId,
+                        OrderPackageBom::getQuantity,
+                        BigDecimal::add
+                ));
+        Map<Long, BigDecimal> newBomMap = newOrderPackageBomList.stream()
+                .collect(Collectors.toMap(
+                        OrderPackageBom::getBomSpecId,
+                        OrderPackageBom::getQuantity,
+                        BigDecimal::add
+                ));
+        // 查询所有bom进行对比
+        Set<Long> bomIds = new HashSet<>(oldBomMap.keySet());
+        bomIds.addAll(newBomMap.keySet());
+        Map<Long, BigDecimal> outBomMap = new HashMap<>();
+        Map<Long, BigDecimal> inBomMap = new HashMap<>();
+        for (Long bomId : bomIds) {
+            BigDecimal oldReturnQuantity = oldBomMap.get(bomId);
+            BigDecimal newReturnQuantity = newBomMap.get(bomId);
+            // 旧bom没有,出库库存,反之则归还库存
+            if (oldReturnQuantity == null) {
+                outBomMap.put(bomId, newReturnQuantity);
+                continue;
+            } else if (newReturnQuantity == null) {
+                inBomMap.put(bomId, oldReturnQuantity);
+                continue;
+            }
+            // 都有值,判断数量
+            if (oldReturnQuantity.compareTo(newReturnQuantity) == 0) {
+                continue;
+            }
+            // 旧bom大于新bom则归还入库,反之出库库存
+            if (oldReturnQuantity.compareTo(newReturnQuantity) > 0) {
+                inBomMap.put(bomId, oldReturnQuantity.subtract(newReturnQuantity));
+            } else {
+                outBomMap.put(bomId, newReturnQuantity.subtract(oldReturnQuantity));
+            }
+        }
+        if (!outBomMap.isEmpty()) {
+            // 包材从包材仓出库
+            List<InOutStorageBom> outStorageBomList = outBomMap.entrySet().stream()
+                    .map(item -> {
+                        InOutStorageBom inOutStorageBom = new InOutStorageBom();
+                        inOutStorageBom.setBomSpecId(item.getKey());
+                        inOutStorageBom.setQuantity(item.getValue());
+                        return inOutStorageBom;
+                    })
+                    .collect(Collectors.toList());
+            InOutStorageDto inOutStorageDto = new InOutStorageDto();
+            inOutStorageDto.setType(InOutTypeEnum.OUT.getKey());
+            inOutStorageDto.setDetailType(OutDetailTypeEnum.PRODUCTION.getKey());
+            inOutStorageDto.setWarehouseId(WarehouseConstant.PACKAGING_MATERIAL);
+            inOutStorageDto.setDepartmentId(DepartmentConstant.SD_SPORTS);
+            inOutStorageDto.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
+            inOutStorageDto.setInOutStorageBomList(outStorageBomList);
+            inOutStorageDto.setLockStorage(StatusConstant.NO);
+            inOutStorageService.add(inOutStorageDto);
+        }
+        if (!inBomMap.isEmpty()) {
+            // 包材归还入库
+            List<InOutStorageBom> inOutStorageBomList = inBomMap.entrySet()
+                    .stream()
+                    .map(item -> {
+                        InOutStorageBom inOutStorageBom = new InOutStorageBom();
+                        inOutStorageBom.setBomSpecId(item.getKey());
+                        inOutStorageBom.setQuantity(item.getValue());
+                        return inOutStorageBom;
+                    })
+                    .collect(Collectors.toList());
+            InOutStorageDto packagingMaterialInOutStorageDto = new InOutStorageDto();
+            packagingMaterialInOutStorageDto.setType(InOutTypeEnum.IN.getKey());
+            packagingMaterialInOutStorageDto.setDetailType(InDetailTypeEnum.RETURN_GOODS.getKey());
+            packagingMaterialInOutStorageDto.setWarehouseId(WarehouseConstant.PACKAGING_MATERIAL);
+            packagingMaterialInOutStorageDto.setDepartmentId(DepartmentConstant.SD_SPORTS);
+            packagingMaterialInOutStorageDto.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
+            packagingMaterialInOutStorageDto.setRemark("订单产品快递包装修改:" + dto.getCode()
+                    + (StrUtil.isBlank(dto.getWlnCode()) ? StringPool.EMPTY : "(" + dto.getWlnCode() + ")")
+                    + " 包材归还入库");
+            packagingMaterialInOutStorageDto.setInOutStorageBomList(inOutStorageBomList);
+            inOutStorageService.add(packagingMaterialInOutStorageDto);
+        }
+    }
+
     /**
      * 订单导出
      * @param id

+ 27 - 3
sd-business/src/main/java/com/sd/business/service/production/impl/StockPreparationServiceImpl.java

@@ -19,6 +19,7 @@ import com.sd.business.entity.order.enums.OrderClassifyEnum;
 import com.sd.business.entity.order.enums.OrderExceptionTypeEnum;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 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.production.dto.StockPreparationDto;
@@ -34,6 +35,7 @@ import com.sd.business.service.bom.BomSpecService;
 import com.sd.business.service.in.InOutStorageService;
 import com.sd.business.service.inventory.InventoryFinishedService;
 import com.sd.business.service.inventory.InventoryService;
+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;
@@ -95,6 +97,9 @@ public class StockPreparationServiceImpl implements StockPreparationService {
     @Autowired
     private InventoryFinishedService inventoryFinishedService;
 
+    @Autowired
+    private OrderPackageBomService orderPackageBomService;
+
     @Override
     public List<UncompletedVo> uncompletedList(StockPreparationDto dto) {
 
@@ -411,9 +416,10 @@ public class StockPreparationServiceImpl implements StockPreparationService {
                 .stream().map(BaseIdPo::getId).collect(Collectors.toList());
         List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(OrderSku::getOrderId, orderIdList));
         List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.in(OrderSkuBom::getOrderId, orderIdList));
+        List<OrderPackageBom> orderPackageBomList = orderPackageBomService.list(q -> q.in(OrderPackageBom::getOrderId, orderIdList));
         Map<Long, OrderSku> orderSkuMap = orderSkuList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
 
-        Map<Long, OutBomVo> map = Stream.concat(
+        Map<Long, OutBomVo> map = Stream.of(
                         // 主材
                         orderSkuList.stream()
                                 .filter(item -> outsourceOrderIds.isEmpty() || !outsourceOrderIds.contains(item.getOrderId()))
@@ -431,8 +437,17 @@ public class StockPreparationServiceImpl implements StockPreparationService {
                             outBomVo.setBomSpecId(item.getBomSpecId());
                             outBomVo.setOutQuantity(item.getQuantity().multiply(orderSku.getQuantity()));
                             return outBomVo;
+                        }),
+
+                        // 快递包材
+                        orderPackageBomList.stream().map(item -> {
+                            OutBomVo outBomVo = new OutBomVo();
+                            outBomVo.setBomSpecId(item.getBomSpecId());
+                            outBomVo.setOutQuantity(item.getQuantity());
+                            return outBomVo;
                         })
                 )
+                .flatMap(stream -> stream)
                 .collect(Collectors.toMap(
                         OutBomVo::getBomSpecId,
                         Function.identity(),
@@ -584,8 +599,9 @@ public class StockPreparationServiceImpl implements StockPreparationService {
         List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(OrderSku::getOrderId, orderIdLockStorageMap.keySet()));
         List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.in(OrderSkuBom::getOrderId, orderIdLockStorageMap.keySet()));
         Map<Long, OrderSku> orderSkuMap = orderSkuList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
+        List<OrderPackageBom> orderPackageBomList = orderPackageBomService.list(q -> q.in(OrderPackageBom::getOrderId, orderIdLockStorageMap.keySet()));
 
-        List<InOutStorageBomBo> inOutStorageBomBoList = Stream.concat(
+        List<InOutStorageBomBo> inOutStorageBomBoList = Stream.of(
 
                 // 主材
                 orderSkuList.stream()
@@ -604,9 +620,17 @@ public class StockPreparationServiceImpl implements StockPreparationService {
                     inOutStorageBom.setBomSpecId(item.getBomSpecId());
                     inOutStorageBom.setQuantity(item.getQuantity().multiply(orderSkuMap.get(item.getOrderSkuId()).getQuantity()));
                     return inOutStorageBom;
+                }),
+
+                // 快递包材
+                orderPackageBomList.stream().map(item -> {
+                    InOutStorageBomBo inOutStorageBom = new InOutStorageBomBo();
+                    inOutStorageBom.setBomSpecId(item.getBomSpecId());
+                    inOutStorageBom.setQuantity(item.getQuantity());
+                    return inOutStorageBom;
                 })
 
-        ).collect(Collectors.toList());
+        ).flatMap(item -> item).collect(Collectors.toList());
 
         List<Long> bomSpecIdList = inOutStorageBomBoList.stream().map(InOutStorageBom::getBomSpecId).collect(Collectors.toList());
         Map<Long, BomSpecBo> bomSpecBo = skuSpecService.getBomSpecBoByIdList(bomSpecIdList);

+ 30 - 32
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

@@ -414,39 +414,37 @@ public class WlnOrderServiceImpl implements WlnOrderService {
     /**
      * 创建订单包装
      */
-    private List<OrderPackageBom> createOrderPackageBomList(OrderContext context, List<OrderSku> orderSkuList) {
+    private List<OrderPackageBom> createOrderPackageBomList(OrderContext context, OrderSku orderSku) {
         Map<Long, Map<Integer, List<SkuSpecLink>>> linkBomSpecMap = context.getSkuSpecLinkBomSpecMap();
         Map<Long, BomSpecBo> bomBoMap = context.getBomSpecBoMap();
 
         Map<Long, OrderPackageBom> orderPackageBomMap = new HashMap<>();
 
-        // 循环订单sku规格
-        for (OrderSku orderSku : orderSkuList) {
-
-            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);
-                    BomSpecBo bomSpecBo = bomBoMap.get(bomSpecId);
-                    if (bomSpecBo == null) {
-                        tempOrderPackageBom.setCostPrice(BigDecimal.ZERO);
-                        tempOrderPackageBom.setInternalSellingPrice(BigDecimal.ZERO);
-                    } else {
-                        tempOrderPackageBom.setCostPrice(bomSpecBo.getCostPrice());
-                        tempOrderPackageBom.setInternalSellingPrice(bomSpecBo.getInternalSellingPrice());
-                    }
-                    return tempOrderPackageBom;
-                });
+        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);
+                BomSpecBo bomSpecBo = bomBoMap.get(bomSpecId);
+                if (bomSpecBo == null) {
+                    tempOrderPackageBom.setCostPrice(BigDecimal.ZERO);
+                    tempOrderPackageBom.setInternalSellingPrice(BigDecimal.ZERO);
+                } else {
+                    tempOrderPackageBom.setCostPrice(bomSpecBo.getCostPrice());
+                    tempOrderPackageBom.setInternalSellingPrice(bomSpecBo.getInternalSellingPrice());
+                }
+                return tempOrderPackageBom;
+            });
 
-                orderPackageBom.setQuantity(orderPackageBom.getQuantity().add(orderSku.getQuantity().multiply(skuSpecLink.getQuantity())));
-            }
+            orderPackageBom.setQuantity(orderPackageBom.getQuantity().add(orderSku.getQuantity().multiply(skuSpecLink.getQuantity())));
+            BigDecimal deliveryMaterialsFee = orderPackageBom.getInternalSellingPrice().multiply(orderPackageBom.getQuantity());
+            orderSku.setDeliveryMaterialsFee(orderSku.getDeliveryMaterialsFee().add(deliveryMaterialsFee));
         }
 
         return new ArrayList<>(orderPackageBomMap.values());
@@ -462,6 +460,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         List<OrderSku> orderSkuList = new ArrayList<>();
         List<OrderSkuProductionCost> orderSkuProductionCostList = new ArrayList<>();
         List<OrderSkuBom> orderSkuBomList = new ArrayList<>();
+        List<OrderPackageBom> orderPackageBomList = new ArrayList<>();
 
         // 创建订单sku
         for (JSONObject wlnOrderSku : wlnOrder.getJSONArray("orders").toJavaList(JSONObject.class)) {
@@ -480,6 +479,9 @@ public class WlnOrderServiceImpl implements WlnOrderService {
             // 获取订单sku包材
             List<OrderSkuBom> tempOrderSkuBomList = createOrderSkuBoom(context, orderSku);
 
+            // 获取订单sku快递包材
+            List<OrderPackageBom> tempOrderPackageBomList = createOrderPackageBomList(context, orderSku);
+
             // 获取订单sku成本
             OrderSkuProductionCost productionCostList = createOrderSkuProductionCostList(orderSku, tempOrderSkuBomList);
 
@@ -488,12 +490,11 @@ public class WlnOrderServiceImpl implements WlnOrderService {
 
             orderSkuList.add(orderSku);
             orderSkuBomList.addAll(tempOrderSkuBomList);
+            orderPackageBomList.addAll(tempOrderPackageBomList);
 
             orderSkuProductionCostList.add(productionCostList);
         }
 
-        List<OrderPackageBom> orderPackageBomList = createOrderPackageBomList(context, orderSkuList);
-
         context.getSaveOrderList().add(orderInfo);
         context.getSaveOrderSkuList().addAll(orderSkuList);
         context.getSaveOrderSkuBomList().addAll(orderSkuBomList);
@@ -592,9 +593,6 @@ public class WlnOrderServiceImpl implements WlnOrderService {
                 case "50":
                     orderSku.setLssueFee(chargePrice);
                     break;
-                case "60":
-                    orderSku.setDeliveryMaterialsFee(chargePrice);
-                    break;
                 case "70":
                     orderSku.setManagementFee(chargePrice);
                     break;