diff --git a/ant-design-vue-jeecg/src/api/api.js b/ant-design-vue-jeecg/src/api/api.js
index d38eb66..cec1eab 100644
--- a/ant-design-vue-jeecg/src/api/api.js
+++ b/ant-design-vue-jeecg/src/api/api.js
@@ -260,6 +260,8 @@ export const callShipmentBox = (params) => postAction('/shipment/shipmentHeader/
 export const listReceiveByReceiveId = (params) => postAction('/receipt/receiveHeader/listReceiveByReceiveId', params);
 //收货
 export const receive = (params) => postAction('/receipt/receiveHeader/receive', params);
+//越库
+export const crossDocking = (params) => postAction('/receipt/receiptHeader/crossDocking?id=' + params, params);
 // 中转HTTP请求
 export const transitRESTful = {
   get: (url, parameter) => getAction(getTransitURL(url), parameter),
diff --git a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue
index 065876b..2afa07a 100644
--- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue
@@ -178,6 +178,11 @@
         <span slot="action" slot-scope="text, record">
           <a-popconfirm v-has="'receiptHeader:back'" v-if="record.lastStatus == 800" title="确定回传吗?" @confirm="() => hanleBack(record)">
           	<a><a-button type="default">回传</a-button></a>
+            <a-divider type="vertical"/>
+          </a-popconfirm>
+          <a-popconfirm v-has="'receiptHeader:crossDocking'" v-if="record.lastStatus == 0" title="确定越库吗?" @confirm="() => hanleCross(record)">
+          	<a><a-button type="primary">越库</a-button></a>
+            <a-divider type="vertical"/>
           </a-popconfirm>
           <a v-if="(record.lastStatus < 800 && record.firstStatus >= 15 && record.firstStatus != '20') || (flowOff == '0' && record.lastStatus < 800) " @click="receive(record)" v-has="'receiptHeader:receive'">
             <a-button type="primary">组盘</a-button>
@@ -230,7 +235,7 @@ import {initDictOptions, filterMultiDictText} from '@/components/dict/JDictSelec
 import '@/assets/less/TableExpand.less'
 import {getCompanyList} from '@/api/api'
 import {getReceiptTypeList} from '@/api/api'
-import {getSupplierList, backErpReceipt,createReceiptAuditFlow,getDocumentAduitFlow} from '@/api/api'
+import {getSupplierList, backErpReceipt,createReceiptAuditFlow,getDocumentAduitFlow, crossDocking} from '@/api/api'
 import ReceiptModal from "./modules/ReceiptModal";
 import { notification } from 'ant-design-vue';
 import FlowProcess from "../flow/FlowProcess";
@@ -537,6 +542,16 @@ export default {
         this.searchQuery();
       });
     },
+    hanleCross(record) {
+      crossDocking(record.id).then((res) => {
+        if (res.success) {
+          this.$message.success(res.message);
+        } else {
+          this.$message.warning(res.message);
+        }
+        this.searchQuery();
+      });
+    },
     loadFrom() {
       getCompanyList().then((res) => {
         if (res.success) {
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java
index 54a8a6f..1429c51 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java
@@ -403,4 +403,13 @@ public class ReceiptHeaderController extends JeecgController<ReceiptHeader, IRec
         }
         return result;
     }
+
+    @AutoLog(value = "越库")
+    @ApiOperation(value = "越库", notes = "越库")
+    @PostMapping("/crossDocking")
+    @ResponseBody
+    @ApiLogger(apiName = "越库", from = "WMS")
+    public Result<?> crossDocking(@RequestParam(name = "id", required = true) String id, HttpServletRequest req) {
+        return receiptHeaderService.crossDocking(id);
+    }
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/IReceiptHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/IReceiptHeaderService.java
index 116807a..584db7e 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/IReceiptHeaderService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/IReceiptHeaderService.java
@@ -41,4 +41,5 @@ public interface IReceiptHeaderService extends IService<ReceiptHeader> {
 
     String createReceiptCode(String receiptType);
 
+    Result crossDocking(String id);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
index 567ab3e..9c4f32d 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
@@ -3,6 +3,7 @@ package org.jeecg.modules.wms.receipt.receiptHeader.service.impl;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
@@ -15,6 +16,8 @@ import org.jeecg.modules.wms.audit.service.IAuditService;
 import org.jeecg.modules.wms.config.receiptType.entity.ReceiptType;
 import org.jeecg.modules.wms.config.receiptType.service.IReceiptTypeService;
 import org.jeecg.modules.wms.flow.service.IFlowDetailService;
+import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction;
+import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService;
 import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail;
 import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader;
 import org.jeecg.modules.wms.receipt.receiptHeader.mapper.ReceiptDetailMapper;
@@ -29,6 +32,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
@@ -60,6 +64,8 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl<ReceiptHeaderMapper, R
     private IFlowDetailService iFlowDetailService;
     @Resource
     private IAuditService iAuditService;
+    @Resource
+    private IInventoryTransactionService inventoryTransactionService;
 
     /**
      * @param  id     入库单主表id
@@ -148,6 +154,72 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl<ReceiptHeaderMapper, R
         return code;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result crossDocking(String id) {
+        ReceiptHeader receiptHeader = receiptHeaderService.getById(id);
+        if (receiptHeader == null) {
+            return Result.error("越库失败,没有找到入库单头" + id);
+        }
+        List<ReceiptDetail> receiptDetailList = receiptDetailService.selectByMainId(id);
+        if (CollectionUtils.isEmpty(receiptDetailList)) {
+            return Result.error("越库失败,没有找到入库详情" + id);
+        }
+        List<InventoryTransaction> inventoryTransactionList = new ArrayList<>();
+        for (ReceiptDetail receiptDetail : receiptDetailList) {
+            BigDecimal qty = receiptDetail.getQty();
+            receiptDetail.setTaskQty(qty);
+            receiptDetail.setReceiptQty(qty);
+            receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED);
+            InventoryTransaction inventoryTransaction = new InventoryTransaction();
+            inventoryTransaction.setType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT);
+            inventoryTransaction.setWarehouseCode(receiptDetail.getWarehouseCode());
+            inventoryTransaction.setCompanyCode(receiptDetail.getCompanyCode());
+            inventoryTransaction.setMaterialCode(receiptDetail.getMaterialCode());
+            inventoryTransaction.setMaterialName(receiptDetail.getMaterialName());
+            inventoryTransaction.setMaterialSpec(receiptDetail.getMaterialSpec());
+            inventoryTransaction.setMaterialUnit(receiptDetail.getMaterialUnit());
+            inventoryTransaction.setReceiptId(receiptDetail.getReceiptId());
+            inventoryTransaction.setReceiptCode(receiptHeader.getCode());
+            inventoryTransaction.setReceiptType(receiptHeader.getType());
+            inventoryTransaction.setReceiptDetailId(receiptDetail.getId());
+            inventoryTransaction.setBatch(receiptDetail.getBatch());
+            inventoryTransaction.setLot(receiptDetail.getLot());
+            inventoryTransaction.setProject(receiptDetail.getProject());
+            inventoryTransaction.setInventoryStatus(receiptDetail.getInventoryStatus());
+            inventoryTransaction.setQty(qty);
+            inventoryTransaction.setReceiptQty(qty);
+            inventoryTransactionList.add(inventoryTransaction);
+
+            inventoryTransaction = new InventoryTransaction();
+            inventoryTransaction.setType(QuantityConstant.INVENTORY_TRANSACTION_SHIPMENT);
+            inventoryTransaction.setWarehouseCode(receiptDetail.getWarehouseCode());
+            inventoryTransaction.setCompanyCode(receiptDetail.getCompanyCode());
+            inventoryTransaction.setMaterialCode(receiptDetail.getMaterialCode());
+            inventoryTransaction.setMaterialName(receiptDetail.getMaterialName());
+            inventoryTransaction.setMaterialSpec(receiptDetail.getMaterialSpec());
+            inventoryTransaction.setMaterialUnit(receiptDetail.getMaterialUnit());
+            inventoryTransaction.setInventoryStatus(receiptDetail.getInventoryStatus());
+            inventoryTransaction.setBatch(receiptDetail.getBatch());
+            inventoryTransaction.setLot(receiptDetail.getLot());
+            inventoryTransaction.setProject(receiptDetail.getProject());
+            inventoryTransaction.setQty(receiptDetail.getQty());
+            inventoryTransaction.setShipmentQty(receiptDetail.getQty());
+            inventoryTransactionList.add(inventoryTransaction);
+        }
+
+        if (!receiptDetailService.updateBatchById(receiptDetailList)) {
+            throw new JeecgBootException("越库失败,批量更新入库单详情失败");
+        }
+        if (!inventoryTransactionService.saveBatch(inventoryTransactionList)) {
+            throw new JeecgBootException("越库失败,批量保存库存交易记录失败");
+        }
+        if (!receiptHeaderService.updateReceiptHeaderStatus(Integer.parseInt(id))) {
+            throw new JeecgBootException("越库失败,批更新入库单失败");
+        }
+        return Result.ok("越库成功");
+    }
+
     /**
      * 更新入库单 头状态和尾状态
      * 头状态是单据详情中最大的状态