diff --git a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxOrderCheckInfo/BoxOrderCheckInfoService.java b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxOrderCheckInfo/BoxOrderCheckInfoService.java
index c113326a8f9f3b9a75ca5069a8a30be806e20e3c..f69fe3f428b62ae3e0afdf0970eddd614a36eeb9 100644
--- a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxOrderCheckInfo/BoxOrderCheckInfoService.java
+++ b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxOrderCheckInfo/BoxOrderCheckInfoService.java
@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.service.IService;
 import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
+import cn.iocoder.yudao.module.order.dal.dataobject.order.OrderDO;
 import cn.iocoder.yudao.module.shipment.dal.dataobject.boxOrderCheckInfo.BoxOrderCheckInfoDO;
 import cn.iocoder.yudao.module.shipment.dto.OrderCheckInfoDto;
 import cn.iocoder.yudao.module.shipment.vo.box.BoxOrderSearchVO;
@@ -83,4 +84,6 @@ public interface BoxOrderCheckInfoService extends IService<BoxOrderCheckInfoDO>
     void batchRemove(BoxOrderCheckInfoRemoveReqVO removeReqVO);
 
     void orderTally(Collection<Long> orderIdList, Long shipmentId);
+
+    List<String> getOrderTagList(OrderDO orderDO) ;
 }
diff --git a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxOrderCheckInfo/BoxOrderCheckInfoServiceImpl.java b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxOrderCheckInfo/BoxOrderCheckInfoServiceImpl.java
index 8d9a5c5a0f6cccbc1171d9687db8162c9b411b33..25b0a3d1af3268fdd16aa7ebc3dcae130f6e052e 100644
--- a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxOrderCheckInfo/BoxOrderCheckInfoServiceImpl.java
+++ b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxOrderCheckInfo/BoxOrderCheckInfoServiceImpl.java
@@ -182,7 +182,7 @@ public class BoxOrderCheckInfoServiceImpl extends AbstractService<BoxOrderCheckI
             List<BoxPkgOrderDO> boxPkgOrderDOS = boxPkgOrderService.selectList(BoxPkgOrderDO::getPkgId, createReqVO.getPkgId());
             orderIdList = boxPkgOrderDOS.stream().map(BoxPkgOrderDO::getOrderId).collect(Collectors.toSet());
             if(orderIdList.isEmpty() || CollectionUtil.isEmpty(orderIdList)){
-                throw exception(ErrorCodeConstants.ORDER_IS_NOT_PRE_INSTALLED);
+                throw exception(ORDER_CASE_NUM_NOT_EXIST);
             }
             orderDOList = orderQueryService.getOrderList(orderIdList);
             boolean isParentOrder = false;
@@ -686,7 +686,7 @@ public class BoxOrderCheckInfoServiceImpl extends AbstractService<BoxOrderCheckI
         return orderList.get(0);
     }
 
-    private List<String> getOrderTagList(OrderDO orderDO) {
+    public List<String> getOrderTagList(OrderDO orderDO) {
         //从OrderLabel里面查找订单的箱号
         Long orderId = orderDO.getOrderId();
         OrderLabelQueryVO queryVO = new OrderLabelQueryVO();
diff --git a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxPkgOrder/BoxPkgOrderServiceImpl.java b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxPkgOrder/BoxPkgOrderServiceImpl.java
index c117fcb9cac28c6f411de8ad71221804f19b9fc1..f373f4bed4727ba86962f739dae196372bc7d612 100644
--- a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxPkgOrder/BoxPkgOrderServiceImpl.java
+++ b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/service/boxPkgOrder/BoxPkgOrderServiceImpl.java
@@ -15,14 +15,19 @@ import cn.iocoder.yudao.module.shipment.convert.BoxPkgOrderConvert;
 import cn.iocoder.yudao.module.shipment.dal.dataobject.BoxDO;
 import cn.iocoder.yudao.module.shipment.dal.dataobject.BoxMergePkgDO;
 import cn.iocoder.yudao.module.shipment.dal.dataobject.BoxPkgOrderDO;
+import cn.iocoder.yudao.module.shipment.dal.dataobject.BoxPreloadGoodsDO;
 import cn.iocoder.yudao.module.shipment.dal.dataobject.boxOrderCheckInfo.BoxOrderCheckInfoDO;
 import cn.iocoder.yudao.module.shipment.dal.mysql.BoxPkgOrderMapper;
+import cn.iocoder.yudao.module.shipment.dal.mysql.BoxPreloadGoodsMapper;
+import cn.iocoder.yudao.module.shipment.dal.mysql.boxOrderCheckInfo.BoxOrderCheckInfoMapper;
 import cn.iocoder.yudao.module.shipment.enums.AirShipmentStatusEnum;
 import cn.iocoder.yudao.module.shipment.enums.MergePkgStatusEnum;
 import cn.iocoder.yudao.module.shipment.enums.OrderShipmentLog;
 import cn.iocoder.yudao.module.shipment.service.box.BoxService;
 import cn.iocoder.yudao.module.shipment.service.boxMergePkg.BoxMergePkgService;
 import cn.iocoder.yudao.module.shipment.service.boxOrderCheckInfo.BoxOrderCheckInfoService;
+import cn.iocoder.yudao.module.shipment.service.boxPreloadGoods.BoxPreloadGoodsService;
+import cn.iocoder.yudao.module.shipment.vo.boxOrderCheckInfo.BoxOrderCheckInfoCreateReqVO;
 import cn.iocoder.yudao.module.shipment.vo.boxPkgOrder.BoxPkgOrderCreateReqVO;
 import cn.iocoder.yudao.module.shipment.vo.boxPkgOrder.BoxPkgOrderQueryVO;
 import cn.iocoder.yudao.module.shipment.vo.boxPkgOrder.BoxPkgOrderScanCodeVO;
@@ -40,8 +45,7 @@ import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.order.enums.ErrorCodeConstants.ORDER_IS_PRE_INSTALLED;
-import static cn.iocoder.yudao.module.shipment.enums.ErrorCodeConstants.BOX_PKG_ORDER_NOT_EXISTS;
-import static cn.iocoder.yudao.module.shipment.enums.ErrorCodeConstants.MERGE_PKG_IS_FINISH;
+import static cn.iocoder.yudao.module.shipment.enums.ErrorCodeConstants.*;
 
 /**
  * 合包订单 Service 实现类
@@ -73,6 +77,12 @@ public class BoxPkgOrderServiceImpl extends AbstractService<BoxPkgOrderMapper, B
 
     private OrderService orderService ;
 
+    @Resource
+    private BoxPreloadGoodsMapper boxPreloadGoodsMapper  ;
+
+    @Resource
+    private BoxOrderCheckInfoMapper boxOrderCheckInfoMapper;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String createBoxPkgOrder(BoxPkgOrderCreateReqVO createReqVO) {
@@ -88,35 +98,184 @@ public class BoxPkgOrderServiceImpl extends AbstractService<BoxPkgOrderMapper, B
 
         String orderNumCode = createReqVO.getOrderNo();
         int position = orderNumCode.lastIndexOf("-");
+
+
         if(position >= 0) {
+
             String orderNumber = orderNumCode.substring(0, position);
-            Long orderId = orderService.getOrderIdByOrderNo(orderNumber);
-            vo.setOrderId(orderId);
-            BoxMergePkgDO boxMergePkgDO = boxMergePkgService.selectOne(new LambdaQueryWrapperX<BoxMergePkgDO>().eq(BoxMergePkgDO::getPkgNum,createReqVO.getPkgNum()));
-            vo.setPkgId(boxMergePkgDO.getId()) ;
-            BoxPkgOrderDO pkgOrderDO =  boxPkgOrderMapper.selectOne(new LambdaQueryWrapperX<BoxPkgOrderDO>().eq(BoxPkgOrderDO::getOrderId,orderId).eq(BoxPkgOrderDO::getPkgId,boxMergePkgDO.getId()));
-            if(pkgOrderDO!=null){
-                throw  exception(ORDER_IS_PRE_INSTALLED);
+
+            if(orderNumCode.contains("A") && orderNumCode.startsWith("A")){
+              return   this.scanCodeByOrderNo(orderNumCode,vo,createReqVO);
             }
-            if(vo.getOrderId()!=null && vo.getPkgId()!=null){//订单和包裹id 不为空,调用装箱方法
-                this.create(vo);
+
+            BoxMergePkgDO boxMergePkgDO = boxMergePkgService.selectOne(new LambdaQueryWrapper<BoxMergePkgDO>()
+                    .eq(BoxMergePkgDO::getShipmentId, createReqVO.getShipmentId())
+                    .eq(BoxMergePkgDO::getPkgNum, orderNumber));
+            if(boxMergePkgDO!=null){
+                List<BoxPreloadGoodsDO> goodsDOS = boxPreloadGoodsMapper.selectList(new LambdaQueryWrapperX<BoxPreloadGoodsDO>().eq(BoxPreloadGoodsDO::getShipmentId,createReqVO.getShipmentId()).eq(BoxPreloadGoodsDO::getDeleted,0));
+                if (CollectionUtil.isNotEmpty(goodsDOS)) {
+                    List<Long> orderIds = goodsDOS.stream().map(BoxPreloadGoodsDO::getOrderId).collect(Collectors.toList());
+                    List<OrderDO> orderDOS = orderService.selectList(OrderDO::getOrderId, orderIds);
+                    if(CollectionUtil.isNotEmpty(orderDOS)){
+                        orderDOS.forEach(order->{
+                            BoxPkgOrderCreateReqVO boxPkgOrderCreateReqVO = new BoxPkgOrderCreateReqVO();
+                            boxPkgOrderCreateReqVO.setOrderId(order.getOrderId());
+                            boxPkgOrderCreateReqVO.setPkgId(boxMergePkgDO.getId());
+                            this.create(boxPkgOrderCreateReqVO);
+
+                            Long orderId = order.getOrderId();
+                            //删除以装柜的编号
+//                              boxOrderCheckInfoMapper.delete(new LambdaQueryWrapper<BoxOrderCheckInfoDO>()
+//                                      .eq(BoxOrderCheckInfoDO::getOrderId, orderId)
+//                                      .eq(boxMergePkgDO.getId() != null && boxMergePkgDO.getId().longValue() > 0L,BoxOrderCheckInfoDO::getPkgId,boxMergePkgDO.getId())
+//                                      .eq(BoxOrderCheckInfoDO::getShipmentId, createReqVO.getShipmentId())
+//                                      .eq(BoxOrderCheckInfoDO::getType,1)
+//                              );
+
+                            //找到这个订单所有需要装柜的编号
+                            List<String> tagList = boxOrderCheckInfoService.getOrderTagList(order);
+                            List<BoxOrderCheckInfoDO> boxOrderCheckInfoDOS = new ArrayList<>();
+                            for (int i = 0; i < tagList.size(); i++) {
+                                String tag = tagList.get(i);
+                                BoxOrderCheckInfoDO boxOrderCheckInfoDO = new BoxOrderCheckInfoDO();
+                                boxOrderCheckInfoDO.setOrderId(orderId);
+                                boxOrderCheckInfoDO.setPkgId(boxMergePkgDO.getId());
+                                boxOrderCheckInfoDO.setOrderNumCode(tag);
+                                boxOrderCheckInfoDO.setShipmentId(createReqVO.getShipmentId());
+                                boxOrderCheckInfoDO.setType(1);
+                                boxOrderCheckInfoDO.setDeleted(false);
+                                boxOrderCheckInfoDOS.add(boxOrderCheckInfoDO);
+                            }
+                            boxOrderCheckInfoService.saveBatch(boxOrderCheckInfoDOS);
+
+                        });
+
+                    }
+                }
+            }else{
+                throw exception(ORDER_CASE_NUM_NOT_EXIST);
             }
+
+//            Long orderId = orderService.getOrderIdByOrderNo(orderNumber);
+//            vo.setOrderId(orderId);
+//            BoxMergePkgDO boxMergePkgDO = boxMergePkgService.selectOne(new LambdaQueryWrapperX<BoxMergePkgDO>().eq(BoxMergePkgDO::getPkgNum,createReqVO.getPkgNum()));
+//            vo.setPkgId(boxMergePkgDO.getId()) ;
+//            BoxPkgOrderDO pkgOrderDO =  boxPkgOrderMapper.selectOne(new LambdaQueryWrapperX<BoxPkgOrderDO>().eq(BoxPkgOrderDO::getOrderId,orderId).eq(BoxPkgOrderDO::getPkgId,boxMergePkgDO.getId()));
+//            if(pkgOrderDO!=null){
+//                throw  exception(ORDER_IS_PRE_INSTALLED);
+//            }
+//            if(vo.getOrderId()!=null && vo.getPkgId()!=null){//订单和包裹id 不为空,调用装箱方法
+//                this.create(vo);
+//            }
         }else if(!createReqVO.getOrderNo().contains("-")){
-            Long orderId = orderService.getOrderIdByOrderNo(createReqVO.getOrderNo());
+            BoxMergePkgDO boxMergePkgDO = boxMergePkgService.selectOne(new LambdaQueryWrapper<BoxMergePkgDO>()
+                                            .eq(BoxMergePkgDO::getShipmentId, createReqVO.getShipmentId())
+                                            .eq(BoxMergePkgDO::getPkgNum, orderNumCode));
+            if(boxMergePkgDO!=null){
+                List<BoxPreloadGoodsDO> goodsDOS = boxPreloadGoodsMapper.selectList(new LambdaQueryWrapperX<BoxPreloadGoodsDO>().eq(BoxPreloadGoodsDO::getShipmentId,createReqVO.getShipmentId()).eq(BoxPreloadGoodsDO::getDeleted,0));
+                if (CollectionUtil.isNotEmpty(goodsDOS)) {
+                    List<Long> orderIds = goodsDOS.stream().map(BoxPreloadGoodsDO::getOrderId).collect(Collectors.toList());
+                    List<OrderDO> orderDOS = orderService.selectList(OrderDO::getOrderId, orderIds);
+                      if(CollectionUtil.isNotEmpty(orderDOS)){
+                          orderDOS.forEach(order->{
+                              BoxPkgOrderCreateReqVO boxPkgOrderCreateReqVO = new BoxPkgOrderCreateReqVO();
+                              boxPkgOrderCreateReqVO.setOrderId(order.getOrderId());
+                              boxPkgOrderCreateReqVO.setPkgId(boxMergePkgDO.getId());
+                              this.create(boxPkgOrderCreateReqVO);
+
+                              Long orderId = order.getOrderId();
+                              //删除以装柜的编号
+//                              boxOrderCheckInfoMapper.delete(new LambdaQueryWrapper<BoxOrderCheckInfoDO>()
+//                                      .eq(BoxOrderCheckInfoDO::getOrderId, orderId)
+//                                      .eq(boxMergePkgDO.getId() != null && boxMergePkgDO.getId().longValue() > 0L,BoxOrderCheckInfoDO::getPkgId,boxMergePkgDO.getId())
+//                                      .eq(BoxOrderCheckInfoDO::getShipmentId, createReqVO.getShipmentId())
+//                                      .eq(BoxOrderCheckInfoDO::getType,1)
+//                              );
+
+                              //找到这个订单所有需要装柜的编号
+                              List<String> tagList = boxOrderCheckInfoService.getOrderTagList(order);
+                              List<BoxOrderCheckInfoDO> boxOrderCheckInfoDOS = new ArrayList<>();
+                              for (int i = 0; i < tagList.size(); i++) {
+                                  String tag = tagList.get(i);
+                                  BoxOrderCheckInfoDO boxOrderCheckInfoDO = new BoxOrderCheckInfoDO();
+                                  boxOrderCheckInfoDO.setOrderId(orderId);
+                                  boxOrderCheckInfoDO.setPkgId(boxMergePkgDO.getId());
+                                  boxOrderCheckInfoDO.setOrderNumCode(tag);
+                                  boxOrderCheckInfoDO.setShipmentId(createReqVO.getShipmentId());
+                                  boxOrderCheckInfoDO.setType(1);
+                                  boxOrderCheckInfoDO.setDeleted(false);
+                                  boxOrderCheckInfoDOS.add(boxOrderCheckInfoDO);
+                              }
+                              boxOrderCheckInfoService.saveBatch(boxOrderCheckInfoDOS);
+                          });
+
+                      }
+                }
+            }else {
+                throw exception(ORDER_CASE_NUM_NOT_EXIST);
+            }
+
+        }
+
+        // 返回
+        return "success";
+    }
+
+    private String scanCodeByOrderNo(String orderNumCode ,BoxPkgOrderCreateReqVO vo, BoxPkgOrderScanCodeVO createReqVO){
+        int position = orderNumCode.lastIndexOf("-");
+          String orderNumber = orderNumCode.substring(0, position);
+            Long orderId = orderService.getOrderIdByOrderNo(orderNumber);
+            if(Objects.isNull(orderId)){
+                throw  exception(ORDER_NOT_IN_BOX);
+            }
+            OrderDO order = orderService.getById(orderId);
             vo.setOrderId(orderId);
             BoxMergePkgDO boxMergePkgDO = boxMergePkgService.selectOne(new LambdaQueryWrapperX<BoxMergePkgDO>().eq(BoxMergePkgDO::getPkgNum,createReqVO.getPkgNum()));
             vo.setPkgId(boxMergePkgDO.getId()) ;
-            BoxPkgOrderDO pkgOrderDO =  boxPkgOrderMapper.selectOne(new LambdaQueryWrapperX<BoxPkgOrderDO>().eq(BoxPkgOrderDO::getOrderId,orderId).eq(BoxPkgOrderDO::getPkgId,boxMergePkgDO.getId()));
-            if(pkgOrderDO!=null){
+            List<BoxPkgOrderDO> pkgOrderDO =  boxPkgOrderMapper.selectList(new LambdaQueryWrapperX<BoxPkgOrderDO>().eq(BoxPkgOrderDO::getOrderId,orderId).eq(BoxPkgOrderDO::getPkgId,boxMergePkgDO.getId()));
+            if(CollectionUtil.isNotEmpty(pkgOrderDO)){
                 throw  exception(ORDER_IS_PRE_INSTALLED);
             }
             if(vo.getOrderId()!=null && vo.getPkgId()!=null){//订单和包裹id 不为空,调用装箱方法
                 this.create(vo);
-            }
-        }
 
-        // 返回
-        return "success";
+                //删除以装柜的编号
+//                              boxOrderCheckInfoMapper.delete(new LambdaQueryWrapper<BoxOrderCheckInfoDO>()
+//                                      .eq(BoxOrderCheckInfoDO::getOrderId, orderId)
+//                                      .eq(boxMergePkgDO.getId() != null && boxMergePkgDO.getId().longValue() > 0L,BoxOrderCheckInfoDO::getPkgId,boxMergePkgDO.getId())
+//                                      .eq(BoxOrderCheckInfoDO::getShipmentId, createReqVO.getShipmentId())
+//                                      .eq(BoxOrderCheckInfoDO::getType,1)
+//                              );
+
+                //找到这个订单所有需要装柜的编号
+                List<String> tagList = boxOrderCheckInfoService.getOrderTagList(order);
+                List<BoxOrderCheckInfoDO> boxOrderCheckInfoDOS = new ArrayList<>();
+                if(tagList.contains(orderNumCode) ){
+                    String tag = orderNumCode ;
+                    BoxOrderCheckInfoDO boxOrderCheckInfoDO = new BoxOrderCheckInfoDO();
+                    boxOrderCheckInfoDO.setOrderId(orderId);
+                    boxOrderCheckInfoDO.setPkgId(boxMergePkgDO.getId());
+                    boxOrderCheckInfoDO.setOrderNumCode(tag);
+                    boxOrderCheckInfoDO.setShipmentId(createReqVO.getShipmentId());
+                    boxOrderCheckInfoDO.setType(1);
+                    boxOrderCheckInfoDO.setDeleted(false);
+                    boxOrderCheckInfoDOS.add(boxOrderCheckInfoDO);
+                }
+
+//                for (int i = 0; i < tagList.size(); i++) {
+//                    String tag = tagList.get(i);
+//                    BoxOrderCheckInfoDO boxOrderCheckInfoDO = new BoxOrderCheckInfoDO();
+//                    boxOrderCheckInfoDO.setOrderId(orderId);
+//                    boxOrderCheckInfoDO.setPkgId(boxMergePkgDO.getId());
+//                    boxOrderCheckInfoDO.setOrderNumCode(tag);
+//                    boxOrderCheckInfoDO.setShipmentId(createReqVO.getShipmentId());
+//                    boxOrderCheckInfoDO.setType(1);
+//                    boxOrderCheckInfoDO.setDeleted(false);
+//                    boxOrderCheckInfoDOS.add(boxOrderCheckInfoDO);
+//                }
+                boxOrderCheckInfoService.saveBatch(boxOrderCheckInfoDOS);
+            }
+            return "success" ;
     }
 
 
diff --git a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/vo/boxPkgOrder/BoxPkgOrderScanCodeVO.java b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/vo/boxPkgOrder/BoxPkgOrderScanCodeVO.java
index 920db800501a92d69373ef4b0d559153ef3783f8..47507147ab7af649432242ebbe84ea7da8ad7871 100644
--- a/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/vo/boxPkgOrder/BoxPkgOrderScanCodeVO.java
+++ b/yudao-module-shipment/yudao-module-shipment-core/src/main/java/cn/iocoder/yudao/module/shipment/vo/boxPkgOrder/BoxPkgOrderScanCodeVO.java
@@ -19,4 +19,10 @@ public class BoxPkgOrderScanCodeVO {
 
     @ApiModelProperty("合宝箱编号")
     private String pkgNum ;
+
+    /**
+     * 出货id
+     */
+    @ApiModelProperty("出货id")
+    private Long shipmentId;
 }