From 14cb8959fbc8e0e20d2472e2502441e85dc1012d Mon Sep 17 00:00:00 2001
From: yiwenpeng <ywp303@163.com>
Date: Mon, 19 Dec 2022 19:00:54 +0800
Subject: [PATCH] 历史出入库单

---
 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/ReceiptDetailHistoryList.vue                                                                                | 255 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderHistoryList.vue                                                                                | 461 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptDetailHistoryModal.vue                                                                       | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptHeaderHistoryModal.vue                                                                       | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailHistoryList.vue                                                                              | 261 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderHistoryList.vue                                                                              | 439 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentDetailHistoryModal.vue                                                                     | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentHeaderHistoryModal.vue                                                                     | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java                  |   4 ++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/controller/ReceiptHeaderHistoryController.java       | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/entity/ReceiptDetailHistory.java                     | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/entity/ReceiptHeaderHistory.java                     | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/ReceiptDetailHistoryMapper.java               |  20 ++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/ReceiptHeaderHistoryMapper.java               |  17 +++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/xml/ReceiptDetailHistoryMapper.xml            |  18 ++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/xml/ReceiptHeaderHistoryMapper.xml            |   5 +++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/IReceiptDetailHistoryService.java            |  16 ++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/IReceiptHeaderHistoryService.java            |  35 +++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/impl/ReceiptDetailHistoryServiceImpl.java    |  27 +++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/impl/ReceiptHeaderHistoryServiceImpl.java    | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/vo/ReceiptHeaderHistoryPage.java                     | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java               |   4 ++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/controller/ShipmentHeaderHistoryController.java    | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/entity/ShipmentDetailHistory.java                  | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/entity/ShipmentHeaderHistory.java                  | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/ShipmentDetailHistoryMapper.java            |  20 ++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/ShipmentHeaderHistoryMapper.java            |  17 +++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/xml/ShipmentDetailHistoryMapper.xml         |  18 ++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/xml/ShipmentHeaderHistoryMapper.xml         |   5 +++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/IShipmentDetailHistoryService.java         |  16 ++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/IShipmentHeaderHistoryService.java         |  35 +++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/impl/ShipmentDetailHistoryServiceImpl.java |  27 +++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/impl/ShipmentHeaderHistoryServiceImpl.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/vo/ShipmentHeaderHistoryPage.java                  | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 34 files changed, 3617 insertions(+), 0 deletions(-)
 create mode 100644 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/ReceiptDetailHistoryList.vue
 create mode 100644 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderHistoryList.vue
 create mode 100644 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptDetailHistoryModal.vue
 create mode 100644 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptHeaderHistoryModal.vue
 create mode 100644 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailHistoryList.vue
 create mode 100644 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderHistoryList.vue
 create mode 100644 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentDetailHistoryModal.vue
 create mode 100644 jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentHeaderHistoryModal.vue
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/controller/ReceiptHeaderHistoryController.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/entity/ReceiptDetailHistory.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/entity/ReceiptHeaderHistory.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/ReceiptDetailHistoryMapper.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/ReceiptHeaderHistoryMapper.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/xml/ReceiptDetailHistoryMapper.xml
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/xml/ReceiptHeaderHistoryMapper.xml
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/IReceiptDetailHistoryService.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/IReceiptHeaderHistoryService.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/impl/ReceiptDetailHistoryServiceImpl.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/impl/ReceiptHeaderHistoryServiceImpl.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/vo/ReceiptHeaderHistoryPage.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/controller/ShipmentHeaderHistoryController.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/entity/ShipmentDetailHistory.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/entity/ShipmentHeaderHistory.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/ShipmentDetailHistoryMapper.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/ShipmentHeaderHistoryMapper.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/xml/ShipmentDetailHistoryMapper.xml
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/xml/ShipmentHeaderHistoryMapper.xml
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/IShipmentDetailHistoryService.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/IShipmentHeaderHistoryService.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/impl/ShipmentDetailHistoryServiceImpl.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/impl/ShipmentHeaderHistoryServiceImpl.java
 create mode 100644 jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/vo/ShipmentHeaderHistoryPage.java

diff --git a/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/ReceiptDetailHistoryList.vue b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/ReceiptDetailHistoryList.vue
new file mode 100644
index 0000000..43c96b0
--- /dev/null
+++ b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/ReceiptDetailHistoryList.vue
@@ -0,0 +1,255 @@
+<template>
+  <a-card :bordered="false" :class="'cust-erp-sub-tab'">
+    <!-- 操作按钮区域 -->
+    <div class="table-operator" v-if="mainId">
+<!--      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>-->
+<!--      <a-button type="primary" icon="download" @click="handleExportXls('历史入库单明细')">导出</a-button>-->
+      <a-upload
+        name="file"
+        :showUploadList="false"
+        :multiple="false"
+        :headers="tokenHeader"
+        :action="importExcelUrl"
+        @change="handleImportExcel">
+<!--          <a-button type="primary" icon="import">导入</a-button>-->
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :scroll="{x:true}"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <template slot="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
+          <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            下载
+          </a-button>
+        </template>
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+          <a-divider type="vertical" />
+          <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+            <a>删除</a>
+          </a-popconfirm>
+        </span>
+
+      </a-table>
+    </div>
+
+    <receiptDetailHistory-modal ref="modalForm" @ok="modalFormOk" :mainId="mainId"></receiptDetailHistory-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ReceiptDetailHistoryModal from './modules/ReceiptDetailHistoryModal'
+
+  export default {
+    name: "ReceiptDetailHistoryList",
+    mixins:[JeecgListMixin],
+    components: { ReceiptDetailHistoryModal },
+    props:{
+      mainId:{
+        type:String,
+        default:'',
+        required:false
+      }
+    },
+    watch:{
+      mainId:{
+        immediate: true,
+        handler(val) {
+          if(!this.mainId){
+            this.clearList()
+          }else{
+            this.queryParam['receiptId'] = val
+            this.loadData(1);
+          }
+        }
+      }
+    },
+    data () {
+      return {
+        description: '历史入库单管理页面',
+        disableMixinCreated:true,
+        // 表头
+        columns: [
+          // {
+          //   title: '#',
+          //   dataIndex: '',
+          //   key:'rowIndex',
+          //   width:60,
+          //   align:"center",
+          //   customRender:function (t,r,index) {
+          //     return parseInt(index)+1;
+          //   }
+          // },
+          // {
+          //   title:'单据详情ID',
+          //   align:"center",
+          //   dataIndex: 'id'
+          // },
+          // {
+          //   title:'入库单ID',
+          //   align:"center",
+          //   dataIndex: 'receiptId'
+          // },
+          {
+            title:'入库单编码',
+            align:"center",
+            dataIndex: 'receiptCode'
+          },
+          // {
+          //   title:'货主编码',
+          //   align:"center",
+          //   dataIndex: 'companyCode'
+          // },
+          {
+            title:'物料编码',
+            align:"center",
+            dataIndex: 'materialCode'
+          },
+          {
+            title:'物料名称',
+            align:"center",
+            dataIndex: 'materialName'
+          },
+          {
+            title:'物料规格',
+            align:"center",
+            dataIndex: 'materialSpec'
+          },
+          {
+            title:'物料单位',
+            align:"center",
+            dataIndex: 'materialUnit'
+          },
+          {
+            title:'单据数量',
+            align:"center",
+            dataIndex: 'qty'
+          },
+          {
+            title:'已收数量',
+            align:"center",
+            dataIndex: 'taskQty'
+          },
+          {
+            title:'库存状态',
+            align:"center",
+            dataIndex: 'inventoryStatus_dictText',
+          },
+          {
+            title:'批次',
+            align:"center",
+            dataIndex: 'batch'
+          },
+          {
+            title:'单据状态',
+            align:"center",
+            dataIndex: 'status_dictText'
+          },
+          {
+            title:'上游单号',
+            align:"center",
+            dataIndex: 'referCode'
+          },
+          {
+            title:'创建人',
+            align:"center",
+            dataIndex: 'createBy'
+          },
+          {
+            title:'创建日期',
+            align:"center",
+            dataIndex: 'createTime'
+          },
+          {
+            title:'更新人',
+            align:"center",
+            dataIndex: 'updateBy'
+          },
+          {
+            title:'更新日期',
+            align:"center",
+            dataIndex: 'updateTime'
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+        url: {
+          list: "/receipt/receiptHeaderHistory/listReceiptDetailHistoryByMainId",
+          delete: "/receipt/receiptHeaderHistory/deleteReceiptDetailHistory",
+          deleteBatch: "/receipt/receiptHeaderHistory/deleteBatchReceiptDetailHistory",
+          exportXlsUrl: "/receipt/receiptHeaderHistory/exportReceiptDetailHistory",
+          importUrl: "/receipt/receiptHeaderHistory/importReceiptDetailHistory",
+        },
+        dictOptions:{
+          firstStatus:[],
+          lastStatus:[],
+        }
+      }
+    },
+    created() {
+    },
+    computed: {
+      importExcelUrl(){
+        return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`;
+      }
+    },
+    methods: {
+      clearList(){
+        this.dataSource=[]
+        this.selectedRowKeys=[]
+        this.ipagination.current = 1
+      }
+
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>
diff --git a/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderHistoryList.vue b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderHistoryList.vue
new file mode 100644
index 0000000..8c61400
--- /dev/null
+++ b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderHistoryList.vue
@@ -0,0 +1,461 @@
+<template>
+  <a-card :bordered='false'>
+    <!-- 查询区域 -->
+    <div class='table-page-search-wrapper'>
+      <a-form layout='inline' @keyup.enter.native='searchQuery'>
+        <a-row :gutter='24'>
+          <a-col :xl='6' :lg='7' :md='8' :sm='24'>
+            <a-form-item label='编码'>
+              <a-input placeholder='请输入编码' v-model='queryParam.code'></a-input>
+            </a-form-item>
+          </a-col>
+
+          <a-col :xl='6' :lg='7' :md='8' :sm='24'>
+            <a-form-item label='货主'>
+              <a-select
+                show-search
+                placeholder='请选择货主'
+                option-filter-prop='children'
+                :filter-option='filterOption'
+                v-model='queryParam.companyCode'>
+                <a-select-option v-for='item in companyList' :key='item.name' :value='item.code'>{{ item.name }}</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+
+          <a-col :xl='6' :lg='7' :md='8' :sm='24'>
+            <a-form-item label='入库单类型'>
+              <a-select
+                show-search
+                placeholder='请选择入库单类型'
+                option-filter-prop='children'
+                :filter-option='filterOption'
+                v-model='queryParam.type'>
+                <a-select-option v-for='item in receiptTypeList' :key='item.name' :value='item.code'>{{ item.name }}</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+
+          <template v-if="toggleSearchStatus">
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="头状态">
+                <j-dict-select-tag placeholder="请选择头状态" v-model="queryParam.firstStatus" dictCode="receipt_status"/>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="尾状态">
+                <j-dict-select-tag placeholder="请选择尾状态" v-model="queryParam.lastStatus" dictCode="receipt_status"/>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="上游单号">
+                <a-input placeholder="请输入上游单号" v-model="queryParam.referCode"></a-input>
+              </a-form-item>
+            </a-col>
+
+
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="供应商">
+                <a-select
+                  show-search
+                  placeholder="请选择供应商"
+                  option-filter-prop="children"
+                  :filter-option="filterOption"
+                  v-model="queryParam.supplierCode">
+                  <a-select-option v-for="item in supplierList" :key="item.name" :value="item.code">{{ item.name }}</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+
+            <a-col :xl="10" :lg="11" :md="12" :sm="24">
+              <a-form-item label="创建日期">
+                <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择开始时间" class="query-group-cust" v-model="queryParam.createTime_begin"></j-date>
+                <span class="query-group-split-cust"></span>
+                <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择结束时间" class="query-group-cust" v-model="queryParam.createTime_end"></j-date>
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+<!-- 查询区域-END -->
+
+<!-- 操作按钮区域 -->
+<div class='table-operator'>
+<a-upload name='file' :showUploadList='false' :multiple='false' :headers='tokenHeader' :action='importExcelUrl'
+          @change='handleImportExcel'>
+  <!--        <a-button type="primary" icon="import">导入</a-button>-->
+</a-upload>
+<!-- 高级查询区域 -->
+<j-super-query :fieldList='superFieldList' ref='superQueryModal' @handleSuperQuery='handleSuperQuery'></j-super-query>
+</div>
+
+<!-- table区域-begin -->
+<div>
+<div class='ant-alert ant-alert-info' style='margin-bottom: 16px;'>
+  <i class='anticon anticon-info-circle ant-alert-icon'></i> 已选择 <a
+  style='font-weight: 600'>{{ selectedRowKeys.length }}</a>项
+  <a style='margin-left: 24px' @click='onClearSelected'>清空</a>
+</div>
+
+<a-table
+  ref='table'
+  size='middle'
+  bordered
+  rowKey='id'
+  class='j-table-force-nowrap'
+  :scroll='{x:true}'
+  :columns='columns'
+  :dataSource='dataSource'
+  :pagination='ipagination'
+  :loading='loading'
+  :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'radio'}"
+  :customRow='clickThenSelect'
+  @change='handleTableChange'>
+
+
+        <span slot="companyCode" slot-scope="companyCode">
+          <a-tag :key="companyCode" color=blue>
+            {{ solutionCompany(companyCode) }}
+          </a-tag>
+        </span>
+
+        <span slot="type" slot-scope="type">
+          <a-tag :key="type" color=pink>
+            {{ solutionReceiptType(type) }}
+          </a-tag>
+        </span>
+
+        <span slot="supplierCode" slot-scope="supplierCode">
+          <a-tag :key="supplierCode" color=pink>
+            {{ solutionSupplier(supplierCode) }}
+          </a-tag>
+        </span>
+
+
+  <template slot='htmlSlot' slot-scope='text'>
+    <div v-html='text'></div>
+  </template>
+  <template slot='imgSlot' slot-scope='text'>
+    <span v-if='!text' style='font-size: 12px;font-style: italic;'>无图片</span>
+    <img v-else :src='getImgView(text)' height='25px' alt='' style='max-width:80px;font-size: 12px;font-style: italic;' />
+  </template>
+  <template slot='fileSlot' slot-scope='text'>
+    <span v-if='!text' style='font-size: 12px;font-style: italic;'>无文件</span>
+    <a-button
+      v-else
+      :ghost='true'
+      type='primary'
+      icon='download'
+      size='small'
+      @click='downloadFile(text)'>
+      下载
+    </a-button>
+  </template>
+
+  <span slot='action' slot-scope='text, record'>
+    <a @click='handleEdit(record)'>编辑</a>
+
+          <a-divider type='vertical' />
+          <a-dropdown>
+            <a class='ant-dropdown-link'>更多 <a-icon type='down' /></a>
+            <a-menu slot='overlay'>
+              <a-menu-item>
+                <a-popconfirm title='确定删除吗?' @confirm='() => handleDelete(record.id)'>
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+</a-table>
+</div>
+
+<a-tabs defaultActiveKey='1'>
+<a-tab-pane tab='历史入库单明细' key='1'>
+  <ReceiptDetailHistoryList :mainId='selectedMainId' />
+</a-tab-pane>
+</a-tabs>
+
+<receiptHeaderHistory-modal ref='modalForm' @ok='modalFormOk'></receiptHeaderHistory-modal>
+  </a-card>
+</template>
+
+<script>
+
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import ReceiptHeaderHistoryModal from './modules/ReceiptHeaderHistoryModal'
+import { getAction } from '@/api/manage'
+import ReceiptDetailHistoryList from './ReceiptDetailHistoryList'
+import { initDictOptions, filterMultiDictText } from '@/components/dict/JDictSelectUtil'
+import '@/assets/less/TableExpand.less'
+import { getCompanyList, getReceiptTypeList, getSupplierList } from '@api/api'
+
+export default {
+  name: 'ReceiptHeaderHistoryList',
+  mixins: [JeecgListMixin],
+  components: {
+    ReceiptDetailHistoryList,
+    ReceiptHeaderHistoryModal
+  },
+  data() {
+    return {
+      description: '历史入库单管理页面',
+      companyList:[],
+      receiptTypeList:[],
+      supplierList:[],
+      // 表头
+      columns: [
+        {
+          title: '单据ID',
+          align: 'center',
+          dataIndex: 'id'
+        },
+        {
+          title: '编码',
+          align: 'center',
+          dataIndex: 'code'
+        },
+        {
+          title:'货主',
+          align:"center",
+          dataIndex: 'companyCode',
+          key: 'companyCode',
+          scopedSlots: { customRender: 'companyCode' }
+        },
+        {
+          title:'入库单类型',
+          align:"center",
+          dataIndex: 'type',
+          key: 'type',
+          scopedSlots: { customRender: 'type' }
+        },
+        {
+          title:'头状态',
+          align:"center",
+          dataIndex: 'firstStatus_dictText',
+        },
+        {
+          title:'尾状态',
+          align:"center",
+          dataIndex: 'lastStatus_dictText',
+        },
+        {
+          title: '上游单号',
+          align: 'center',
+          dataIndex: 'referCode'
+        },
+        {
+          title:'供应商',
+          align:"center",
+          dataIndex: 'supplierCode',
+          key: 'supplierCode',
+          scopedSlots: { customRender: 'supplierCode' }
+        },
+        {
+          title: '总数量',
+          align: 'center',
+          dataIndex: 'totalqty'
+        },
+        {
+          title: '总行数',
+          align: 'center',
+          dataIndex: 'totallines'
+        },
+        {
+          title: '入库单备注',
+          align: 'center',
+          dataIndex: 'remark'
+        },
+        {
+          title: '创建人',
+          align: 'center',
+          dataIndex: 'createBy'
+        },
+        {
+          title: '创建日期',
+          align: 'center',
+          dataIndex: 'createTime'
+        },
+        {
+          title: '更新人',
+          align: 'center',
+          dataIndex: 'updateBy'
+        },
+        {
+          title: '更新日期',
+          align: 'center',
+          dataIndex: 'updateTime'
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          align: 'center',
+          fixed: 'right',
+          width: 147,
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/receipt/receiptHeaderHistory/list',
+        delete: '/receipt/receiptHeaderHistory/delete',
+        deleteBatch: '/receipt/receiptHeaderHistory/deleteBatch',
+        exportXlsUrl: '/receipt/receiptHeaderHistory/exportXls',
+        importExcelUrl: 'receipt/receiptHeaderHistory/importExcel'
+      },
+      dictOptions: {
+        firstStatus:[],
+        lastStatus:[],
+      },
+      /* 分页参数 */
+      ipagination: {
+        current: 1,
+        pageSize: 5,
+        pageSizeOptions: ['5', '10', '50'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 共' + total + '条'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+      selectedMainId: '',
+      superFieldList: []
+    }
+  },
+  created() {
+    this.getSuperFieldList()
+    this.loadFrom();
+  },
+  computed: {
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+    }
+  },
+  methods: {
+    initDictConfig() {
+    },
+    clickThenSelect(record) {
+      return {
+        on: {
+          click: () => {
+            this.onSelectChange(record.id.split(','), [record])
+          }
+        }
+      }
+    },
+    onClearSelected() {
+      this.selectedRowKeys = []
+      this.selectionRows = []
+      this.selectedMainId = ''
+    },
+    onSelectChange(selectedRowKeys, selectionRows) {
+      this.selectedMainId = selectedRowKeys[0]
+      this.selectedRowKeys = selectedRowKeys
+      this.selectionRows = selectionRows
+    },
+    loadData(arg) {
+      if (!this.url.list) {
+        this.$message.error('请设置url.list属性!')
+        return
+      }
+      //加载数据 若传入参数1则加载第一页的内容
+      if (arg === 1) {
+        this.ipagination.current = 1
+      }
+      this.onClearSelected()
+      var params = this.getQueryParams()//查询条件
+      this.loading = true
+      getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          this.dataSource = res.result.records
+          this.ipagination.total = res.result.total
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false
+      })
+    },
+    getSuperFieldList() {
+      let fieldList = []
+      fieldList.push({ type: 'string', value: 'code', text: '编码', dictCode: '' })
+      fieldList.push({ type: 'string', value: 'companyCode', text: '货主', dictCode: '' })
+      fieldList.push({ type: 'string', value: 'type', text: '入库单类型', dictCode: '' })
+      fieldList.push({ type: 'int', value: 'firstStatus', text: '头状态', dictCode: 'receipt_status' })
+      fieldList.push({ type: 'int', value: 'lastStatus', text: '尾状态', dictCode: 'receipt_status' })
+      fieldList.push({ type: 'string', value: 'referCode', text: '上游单号', dictCode: '' })
+      fieldList.push({ type: 'string', value: 'supplierCode', text: '供应商编码', dictCode: '' })
+      fieldList.push({ type: 'BigDecimal', value: 'totalqty', text: '总数量', dictCode: '' })
+      fieldList.push({ type: 'int', value: 'totallines', text: '总行数', dictCode: '' })
+      fieldList.push({ type: 'string', value: 'remark', text: '入库单备注', dictCode: '' })
+      fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' })
+      fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' })
+      fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' })
+      fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' })
+      this.superFieldList = fieldList
+    },
+    loadFrom() {
+      getCompanyList().then((res) => {
+        if (res.success) {
+          this.companyList = res.result
+        }
+      })
+      getReceiptTypeList().then((res) => {
+        if (res.success) {
+          this.receiptTypeList = res.result
+        }
+      })
+      getSupplierList().then((res) => {
+        if (res.success) {
+          this.supplierList = res.result
+        }
+      })
+    },
+    solutionCompany(value) {
+      var actions = []
+      Object.keys(this.companyList).some((key) => {
+        if (this.companyList[key].code == ('' + value)) {
+          actions.push(this.companyList[key].name)
+          return true
+        }
+      })
+      return actions.join('')
+    },
+    solutionReceiptType(value) {
+      var actions = []
+      Object.keys(this.receiptTypeList).some((key) => {
+        if (this.receiptTypeList[key].code == ('' + value)) {
+          actions.push(this.receiptTypeList[key].name)
+          return true
+        }
+      })
+      return actions.join('')
+    },
+    solutionSupplier(value) {
+      var actions = []
+      Object.keys(this.supplierList).some((key) => {
+        if (this.supplierList[key].code == ('' + value)) {
+          actions.push(this.supplierList[key].name)
+          return true
+        }
+      })
+      return actions.join('')
+    }
+  }
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less'
+</style>
\ No newline at end of file
diff --git a/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptDetailHistoryModal.vue b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptDetailHistoryModal.vue
new file mode 100644
index 0000000..e8f360d
--- /dev/null
+++ b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptDetailHistoryModal.vue
@@ -0,0 +1,155 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="入库单ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="receiptId">
+              <a-input-number v-model="model.receiptId"placeholder="请输入入库单ID" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="物料编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialCode">
+              <a-input v-model="model.materialCode"placeholder="请输入物料编码" ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="物料名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialName">
+              <a-input v-model="model.materialName"placeholder="请输入物料名称" ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="单据数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qty">
+              <a-input-number v-model="model.qty"placeholder="请输入单据数量" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="已收数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="taskQty">
+              <a-input-number v-model="model.taskQty"placeholder="请输入已收数量" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="库存状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inventoryStatus">
+              <a-input v-model="model.inventoryStatus"placeholder="请输入库存状态" ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="批次" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="batch">
+              <a-input v-model="model.batch"placeholder="请输入批次" ></a-input>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+
+  import { httpAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+
+  export default {
+    name: "ReceiptDetailHistoryModal",
+    components: {
+    },
+    props:{
+      mainId:{
+        type:String,
+        required:false,
+        querySource:{},
+        default:''
+      }
+    },
+    data () {
+      return {
+        title:"操作",
+        width:800,
+        visible: false,
+        querySource:{},
+        model:{
+        },
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        validatorRules: {
+        },
+        url: {
+          add: "/receipt/receiptHeaderHistory/addReceiptDetailHistory",
+          edit: "/receipt/receiptHeaderHistory/editReceiptDetailHistory",
+        }
+
+      }
+    },
+    created () {
+    //备份model原始值
+      this.modelDefault = JSON.parse(JSON.stringify(this.model));
+    },
+    methods: {
+      add () {
+        this.edit(this.modelDefault);
+      },
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+        this.$refs.form.clearValidate();
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            this.model['receiptId'] = this.mainId
+            httpAction(httpurl,this.model,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+          }else{
+             return false
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
diff --git a/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptHeaderHistoryModal.vue b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptHeaderHistoryModal.vue
new file mode 100644
index 0000000..fcd0024
--- /dev/null
+++ b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptHeaderHistoryModal.vue
@@ -0,0 +1,182 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="货主"  :labelCol="labelCol" :wrapperCol="wrapperCol" prop="companyCode">
+              <a-select
+                show-search
+                placeholder="请选择货主"
+                option-filter-prop="children"
+                :filter-option="filterOption"
+                v-model="model.companyCode">
+                <a-select-option v-for="item in companyList" :key="item.name" :value="item.code">{{ item.name }}</a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+
+          <a-col :span="24">
+            <a-form-model-item label="入库单类型"  :labelCol="labelCol" :wrapperCol="wrapperCol" prop="type">
+              <a-select
+                show-search
+                placeholder="请选择入库单类型"
+                option-filter-prop="children"
+                :filter-option="filterOption"
+                v-model="model.type">
+                <a-select-option v-for="item in receiptTypeList" :key="item.name" :value="item.code">{{ item.name }}</a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+
+
+          <a-col :span="24">
+            <a-form-model-item label="供应商"  :labelCol="labelCol" :wrapperCol="wrapperCol" prop="supplierCode">
+              <a-select
+                show-search
+                placeholder="请选择供应商"
+                option-filter-prop="children"
+                :filter-option="filterOption"
+                v-model="model.supplierCode">
+                <a-select-option v-for="item in supplierList" :key="item.name" :value="item.code">{{ item.name }}</a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+
+          <a-col :span="24">
+            <a-form-model-item label="入库单备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
+              <a-input v-model="model.remark" placeholder="请输入入库单备注" ></a-input>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+
+  import { httpAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+  import {getCompanyList} from '@/api/api'
+  import {getReceiptTypeList} from '@/api/api'
+  import {getSupplierList} from '@/api/api'
+
+  export default {
+    name: "ReceiptHeaderHistoryModal",
+    components: {
+    },
+    data () {
+      return {
+        title:"操作",
+        width:800,
+        visible: false,
+        companyList:[],
+        receiptTypeList:[],
+        supplierList:[],
+        model:{
+        },
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        validatorRules: {
+           type: [
+              { required: true, message: '请输入入库单类型!'},
+           ],
+        },
+        url: {
+          add: "/receipt/receiptHeaderHistory/add",
+          edit: "/receipt/receiptHeaderHistory/edit",
+        }
+
+      }
+    },
+    created () {
+    //备份model原始值
+      this.modelDefault = JSON.parse(JSON.stringify(this.model));
+      this.loadFrom();
+    },
+    methods: {
+      add () {
+        this.edit(this.modelDefault);
+        this.model.companyCode =  this.companyList[0].code;
+      },
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+        this.$refs.form.clearValidate();
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            httpAction(httpurl,this.model,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+          }else{
+             return false
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+      loadFrom() {
+        getCompanyList().then((res) => {
+          if (res.success) {
+            this.companyList = res.result
+          }
+        });
+        getReceiptTypeList().then((res) => {
+          if (res.success) {
+            this.receiptTypeList = res.result
+          }
+        });
+        getSupplierList().then((res) => {
+          if (res.success) {
+            this.supplierList = res.result
+          }
+        });
+      },
+
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailHistoryList.vue b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailHistoryList.vue
new file mode 100644
index 0000000..cfa9875
--- /dev/null
+++ b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailHistoryList.vue
@@ -0,0 +1,261 @@
+<template>
+  <a-card :bordered="false" :class="'cust-erp-sub-tab'">
+    <!-- 操作按钮区域 -->
+    <div class="table-operator" v-if="mainId">
+<!--      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>-->
+<!--      <a-button type="primary" icon="download" @click="handleExportXls('历史出库单明细')">导出</a-button>-->
+      <a-upload
+        name="file"
+        :showUploadList="false"
+        :multiple="false"
+        :headers="tokenHeader"
+        :action="importExcelUrl"
+        @change="handleImportExcel">
+<!--          <a-button type="primary" icon="import">导入</a-button>-->
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :scroll="{x:true}"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <template slot="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
+          <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            下载
+          </a-button>
+        </template>
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+          <a-divider type="vertical" />
+          <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+            <a>删除</a>
+          </a-popconfirm>
+        </span>
+
+      </a-table>
+    </div>
+
+    <shipmentDetailHistory-modal ref="modalForm" @ok="modalFormOk" :mainId="mainId"></shipmentDetailHistory-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ShipmentDetailHistoryModal from './modules/ShipmentDetailHistoryModal'
+
+  export default {
+    name: "ShipmentDetailHistoryList",
+    mixins:[JeecgListMixin],
+    components: { ShipmentDetailHistoryModal },
+    props:{
+      mainId:{
+        type:String,
+        default:'',
+        required:false
+      }
+    },
+    watch:{
+      mainId:{
+        immediate: true,
+        handler(val) {
+          if(!this.mainId){
+            this.clearList()
+          }else{
+            this.queryParam['shipmentId'] = val
+            this.loadData(1);
+          }
+        }
+      }
+    },
+    data () {
+      return {
+        description: '历史出库单管理页面',
+        disableMixinCreated:true,
+        // 表头
+        columns: [
+          // {
+          //   title: '#',
+          //   dataIndex: '',
+          //   key:'rowIndex',
+          //   width:60,
+          //   align:"center",
+          //   customRender:function (t,r,index) {
+          //     return parseInt(index)+1;
+          //   }
+          // },
+          // {
+          //   title:'出库单ID',
+          //   align:"center",
+          //   dataIndex: 'shipmentId'
+          // },
+          {
+            title:'出库单编码',
+            align:"center",
+            dataIndex: 'shipmentCode'
+          },
+          {
+            title:'货主编码',
+            align:"center",
+            dataIndex: 'companyCode'
+          },
+          {
+            title:'物料编码',
+            align:"center",
+            dataIndex: 'materialCode'
+          },
+          {
+            title:'物料名称',
+            align:"center",
+            dataIndex: 'materialName'
+          },
+          {
+            title:'物料规格',
+            align:"center",
+            dataIndex: 'materialSpec'
+          },
+          {
+            title:'物料单位',
+            align:"center",
+            dataIndex: 'materialUnit'
+          },
+          {
+            title:'单据数量',
+            align:"center",
+            dataIndex: 'qty'
+          },
+          {
+            title:'已收数量',
+            align:"center",
+            dataIndex: 'taskQty'
+          },
+          {
+            title:'库存状态',
+            align:"center",
+            dataIndex: 'inventoryStatus_dictText'
+          },
+          {
+            title:'批次',
+            align:"center",
+            dataIndex: 'batch'
+          },
+          {
+            title:'单据状态',
+            align:"center",
+            dataIndex: 'status_dictText'
+          },
+          {
+            title:'上游单号',
+            align:"center",
+            dataIndex: 'referCode'
+          },
+          {
+            title:'上游行号',
+            align:"center",
+            dataIndex: 'referLineNum'
+          },
+          {
+            title:'创建人',
+            align:"center",
+            dataIndex: 'createBy'
+          },
+          {
+            title:'创建日期',
+            align:"center",
+            dataIndex: 'createTime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'更新人',
+            align:"center",
+            dataIndex: 'updateBy'
+          },
+          {
+            title:'更新日期',
+            align:"center",
+            dataIndex: 'updateTime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+        url: {
+          list: "/shipment/shipmentHeaderHistory/listShipmentDetailHistoryByMainId",
+          delete: "/shipment/shipmentHeaderHistory/deleteShipmentDetailHistory",
+          deleteBatch: "/shipment/shipmentHeaderHistory/deleteBatchShipmentDetailHistory",
+          exportXlsUrl: "/shipment/shipmentHeaderHistory/exportShipmentDetailHistory",
+          importUrl: "/shipment/shipmentHeaderHistory/importShipmentDetailHistory",
+        },
+        dictOptions:{
+          firstStatus:[],
+          lastStatus:[],
+        }
+      }
+    },
+    created() {
+    },
+    computed: {
+      importExcelUrl(){
+        return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`;
+      }
+    },
+    methods: {
+      clearList(){
+        this.dataSource=[]
+        this.selectedRowKeys=[]
+        this.ipagination.current = 1
+      }
+
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>
diff --git a/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderHistoryList.vue b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderHistoryList.vue
new file mode 100644
index 0000000..06edf62
--- /dev/null
+++ b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderHistoryList.vue
@@ -0,0 +1,439 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="出库单编码">
+              <a-input placeholder="请输入出库单编码" v-model="queryParam.code"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="货主">
+              <a-select
+                show-search
+                placeholder="请选择货主"
+                option-filter-prop="children"
+                :filter-option="filterOption"
+                v-model="queryParam.companyCode">
+                <a-select-option v-for="item in companyList" :key="item.name" :value="item.code">{{ item.name }}</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="出库单类型">
+              <a-select
+                show-search
+                placeholder="请选择出库单类型"
+                option-filter-prop="children"
+                :filter-option="filterOption"
+                v-model="queryParam.type">
+                <a-select-option v-for="item in shipmentTypeList" :key="item.name" :value="item.code">{{ item.name }}</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <template v-if="toggleSearchStatus">
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="头状态">
+                <j-dict-select-tag placeholder="请选择头状态" v-model="queryParam.firstStatus" dictCode="shipment_status"/>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="尾状态">
+                <j-dict-select-tag placeholder="请选择尾状态" v-model="queryParam.lastStatus" dictCode="shipment_status"/>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="上游单号">
+                <a-input placeholder="请输入上游单号" v-model="queryParam.referCode"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="客户">
+                <a-select
+                  show-search
+                  placeholder="请选择客户"
+                  option-filter-prop="children"
+                  :filter-option="filterOption"
+                  v-model="queryParam.customerCode">
+                  <a-select-option v-for="item in customerList" :key="item.name" :value="item.code">{{ item.name }}</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="出库单备注">
+                <a-input placeholder="请输入出库单备注" v-model="queryParam.remark"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="创建人">
+                <a-input placeholder="请输入创建人" v-model="queryParam.createBy"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="创建日期">
+                <j-date placeholder="请选择创建日期" v-model="queryParam.createTime"></j-date>
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 查询区域-END -->
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+<!--      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>-->
+<!--      <a-button type="primary" icon="download" @click="handleExportXls('历史出库单')">导出</a-button>-->
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+<!--        <a-button type="primary" icon="import">导入</a-button>-->
+      </a-upload>
+      <!-- 高级查询区域 -->
+      <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        class="j-table-force-nowrap"
+        :scroll="{x:true}"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'radio'}"
+        :customRow="clickThenSelect"
+        @change="handleTableChange">
+
+        <template slot="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
+          <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            下载
+          </a-button>
+        </template>
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+
+    <a-tabs defaultActiveKey="1">
+      <a-tab-pane tab="历史出库单明细" key="1" >
+        <ShipmentDetailHistoryList :mainId="selectedMainId" />
+      </a-tab-pane>
+    </a-tabs>
+
+    <shipmentHeaderHistory-modal ref="modalForm" @ok="modalFormOk"></shipmentHeaderHistory-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ShipmentHeaderHistoryModal from './modules/ShipmentHeaderHistoryModal'
+  import { getAction } from '@/api/manage'
+  import ShipmentDetailHistoryList from './ShipmentDetailHistoryList'
+  import {initDictOptions,filterMultiDictText} from '@/components/dict/JDictSelectUtil'
+  import '@/assets/less/TableExpand.less'
+  import { getCompanyList, getCustomerList, getShipmentTypeList } from '@api/api'
+
+  export default {
+    name: "ShipmentHeaderHistoryList",
+    mixins:[JeecgListMixin],
+    components: {
+      ShipmentDetailHistoryList,
+      ShipmentHeaderHistoryModal
+    },
+    data () {
+      return {
+        description: '历史出库单管理页面',
+        // 表头
+        columns: [
+          {
+            title:'出库单编码',
+            align:"center",
+            dataIndex: 'code'
+          },
+          {
+            title:'货主',
+            align:"center",
+            dataIndex: 'companyCode',
+            key: 'companyCode',
+            scopedSlots: { customRender: 'companyCode' }
+          },
+          {
+            title:'出库单类型',
+            align:"center",
+            dataIndex: 'type',
+            key: 'type',
+            scopedSlots: { customRender: 'type' }
+          },
+          {
+            title:'头状态',
+            align:"center",
+            dataIndex: 'firstStatus_dictText',
+          },
+          {
+            title:'尾状态',
+            align:"center",
+            dataIndex: 'lastStatus_dictText',
+          },
+          {
+            title:'上游单号',
+            align:"center",
+            dataIndex: 'referCode'
+          },
+          {
+            title:'客户',
+            align:"center",
+            dataIndex: 'customerCode',
+            key: 'customerCode',
+            scopedSlots: { customRender: 'customerCode' }
+          },
+          {
+            title:'总数量',
+            align:"center",
+            dataIndex: 'totalQty'
+          },
+          {
+            title:'总行数',
+            align:"center",
+            dataIndex: 'totalLines'
+          },
+          {
+            title:'出库单备注',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'创建人',
+            align:"center",
+            dataIndex: 'createBy'
+          },
+          {
+            title:'创建日期',
+            align:"center",
+            dataIndex: 'createTime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'更新人',
+            align:"center",
+            dataIndex: 'updateBy'
+          },
+          {
+            title:'更新日期',
+            align:"center",
+            dataIndex: 'updateTime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+        url: {
+          list: "/shipment/shipmentHeaderHistory/list",
+          delete: "/shipment/shipmentHeaderHistory/delete",
+          deleteBatch: "/shipment/shipmentHeaderHistory/deleteBatch",
+          exportXlsUrl: "/shipment/shipmentHeaderHistory/exportXls",
+          importExcelUrl: "shipment/shipmentHeaderHistory/importExcel",
+        },
+        dictOptions:{
+        },
+        /* 分页参数 */
+        ipagination:{
+          current: 1,
+          pageSize: 5,
+          pageSizeOptions: ['5', '10', '50'],
+          showTotal: (total, range) => {
+            return range[0] + "-" + range[1] + " 共" + total + "条"
+          },
+          showQuickJumper: true,
+          showSizeChanger: true,
+          total: 0
+        },
+        selectedMainId:'',
+        superFieldList:[],
+      }
+    },
+    created() {
+      this.getSuperFieldList();
+      this.loadFrom();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      }
+    },
+    methods: {
+      initDictConfig(){
+      },
+      clickThenSelect(record) {
+        return {
+          on: {
+            click: () => {
+              this.onSelectChange(record.id.split(","), [record]);
+            }
+          }
+        }
+      },
+      onClearSelected() {
+        this.selectedRowKeys = [];
+        this.selectionRows = [];
+        this.selectedMainId=''
+      },
+      onSelectChange(selectedRowKeys, selectionRows) {
+        this.selectedMainId=selectedRowKeys[0]
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectionRows = selectionRows;
+      },
+      loadFrom() {
+        getCompanyList().then((res) => {
+          if (res.success) {
+            this.companyList = res.result
+          }
+        });
+        getShipmentTypeList().then((res) => {
+          if (res.success) {
+            this.shipmentTypeList = res.result
+          }
+        });
+        getCustomerList().then((res) => {
+          if (res.success) {
+            this.customerList = res.result
+          }
+        });
+      },
+      solutionCompany(value) {
+        var actions = []
+        Object.keys(this.companyList).some((key) => {
+          if (this.companyList[key].code == ('' + value)) {
+            actions.push(this.companyList[key].name)
+            return true
+          }
+        })
+        return actions.join('')
+      },
+      solutionShipmentType(value) {
+        var actions = []
+        Object.keys(this.shipmentTypeList).some((key) => {
+          if (this.shipmentTypeList[key].code == ('' + value)) {
+            actions.push(this.shipmentTypeList[key].name)
+            return true
+          }
+        })
+        return actions.join('')
+      },
+      solutionCustomer(value) {
+        var actions = []
+        Object.keys(this.customerList).some((key) => {
+          if (this.customerList[key].code == ('' + value)) {
+            actions.push(this.customerList[key].name)
+            return true
+          }
+        })
+        return actions.join('')
+      },
+      loadData(arg) {
+        if(!this.url.list){
+          this.$message.error("请设置url.list属性!")
+          return
+        }
+        //加载数据 若传入参数1则加载第一页的内容
+        if (arg === 1) {
+          this.ipagination.current = 1;
+        }
+        this.onClearSelected()
+        var params = this.getQueryParams();//查询条件
+        this.loading = true;
+        getAction(this.url.list, params).then((res) => {
+          if (res.success) {
+            this.dataSource = res.result.records;
+            this.ipagination.total = res.result.total;
+          }
+          if(res.code===510){
+            this.$message.warning(res.message)
+          }
+          this.loading = false;
+        })
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'string',value:'code',text:'出库单编码',dictCode:''})
+        fieldList.push({type:'string',value:'companyCode',text:'货主',dictCode:''})
+        fieldList.push({type:'string',value:'type',text:'出库单类型',dictCode:''})
+        fieldList.push({type:'int',value:'firstStatus',text:'头状态',dictCode:'shipment_status'})
+        fieldList.push({type:'int',value:'lastStatus',text:'尾状态',dictCode:'shipment_status'})
+        fieldList.push({type:'string',value:'referCode',text:'上游单号',dictCode:''})
+        fieldList.push({type:'string',value:'customerCode',text:'客户编码',dictCode:''})
+        fieldList.push({type:'BigDecimal',value:'totalQty',text:'总数量',dictCode:''})
+        fieldList.push({type:'int',value:'totalLines',text:'总行数',dictCode:''})
+        fieldList.push({type:'string',value:'remark',text:'出库单备注',dictCode:''})
+        fieldList.push({type:'string',value:'createBy',text:'创建人',dictCode:''})
+        fieldList.push({type:'datetime',value:'createTime',text:'创建日期'})
+        fieldList.push({type:'string',value:'updateBy',text:'更新人',dictCode:''})
+        fieldList.push({type:'datetime',value:'updateTime',text:'更新日期'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>
\ No newline at end of file
diff --git a/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentDetailHistoryModal.vue b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentDetailHistoryModal.vue
new file mode 100644
index 0000000..eeaeec5
--- /dev/null
+++ b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentDetailHistoryModal.vue
@@ -0,0 +1,158 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="出库单ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="shipmentId">
+              <a-input-number v-model="model.shipmentId"placeholder="请输入出库单ID" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="物料编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialCode">
+              <a-input v-model="model.materialCode"placeholder="请输入物料编码" ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="物料名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialName">
+              <a-input v-model="model.materialName"placeholder="请输入物料名称" ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="单据数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qty">
+              <a-input-number v-model="model.qty"placeholder="请输入单据数量" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="已收数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="taskQty">
+              <a-input-number v-model="model.taskQty"placeholder="请输入已收数量" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="库存状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inventoryStatus">
+              <a-input v-model="model.inventoryStatus"placeholder="请输入库存状态" ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="批次" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="batch">
+              <a-input v-model="model.batch"placeholder="请输入批次" ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="单据状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="status">
+              <a-input-number v-model="model.status"placeholder="请输入单据状态" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+
+  import { httpAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+
+  export default {
+    name: "ShipmentDetailHistoryModal",
+    components: {
+    },
+    props:{
+      mainId:{
+        type:String,
+        required:false,
+        default:''
+      }
+    },
+    data () {
+      return {
+        title:"操作",
+        width:800,
+        visible: false,
+        model:{
+        },
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        validatorRules: {
+        },
+        url: {
+          add: "/shipment/shipmentHeaderHistory/addShipmentDetailHistory",
+          edit: "/shipment/shipmentHeaderHistory/editShipmentDetailHistory",
+        }
+
+      }
+    },
+    created () {
+    //备份model原始值
+      this.modelDefault = JSON.parse(JSON.stringify(this.model));
+    },
+    methods: {
+      add () {
+        this.edit(this.modelDefault);
+      },
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+        this.$refs.form.clearValidate();
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            this.model['shipmentId'] = this.mainId
+            httpAction(httpurl,this.model,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+          }else{
+             return false
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
diff --git a/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentHeaderHistoryModal.vue b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentHeaderHistoryModal.vue
new file mode 100644
index 0000000..050ae64
--- /dev/null
+++ b/jeecg-boot-master/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentHeaderHistoryModal.vue
@@ -0,0 +1,175 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="货主"  :labelCol="labelCol" :wrapperCol="wrapperCol" prop="companyCode">
+              <a-select
+                show-search
+                placeholder="请选择货主"
+                option-filter-prop="children"
+                :filter-option="filterOption"
+                v-model="model.companyCode">
+                <a-select-option v-for="item in companyList" :key="item.name" :value="item.code">{{ item.name }}</a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="出库单类型"  :labelCol="labelCol" :wrapperCol="wrapperCol" prop="type">
+              <a-select
+                show-search
+                placeholder="请选择出库单类型"
+                option-filter-prop="children"
+                :filter-option="filterOption"
+                v-model="model.type">
+                <a-select-option v-for="item in shipmentTypeList" :key="item.name" :value="item.code">{{ item.name }}</a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="客户编码"  :labelCol="labelCol" :wrapperCol="wrapperCol" prop="customerCode">
+              <a-select
+                show-search
+                placeholder="请选择客户编码"
+                option-filter-prop="children"
+                :filter-option="filterOption"
+                v-model="model.customerCode">
+                <a-select-option v-for="item in customerList" :key="item.name" :value="item.code">{{ item.name }}</a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="出库单备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
+              <a-input v-model="model.remark" placeholder="请输入出库单备注" ></a-input>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+
+  import { httpAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+  import { getCompanyList, getCustomerList, getShipmentTypeList } from '@api/api'
+
+  export default {
+    name: "ShipmentHeaderHistoryModal",
+    companyList:[],
+    shipmentTypeList:[],
+    customerList:[],
+    components: {
+    },
+    data () {
+      return {
+        title:"操作",
+        width:800,
+        visible: false,
+        model:{
+        },
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        validatorRules: {
+           type: [
+              { required: true, message: '请输入出库单类型!'},
+           ],
+        },
+        url: {
+          add: "/shipment/shipmentHeaderHistory/add",
+          edit: "/shipment/shipmentHeaderHistory/edit",
+        }
+
+      }
+    },
+    created () {
+    //备份model原始值
+      this.modelDefault = JSON.parse(JSON.stringify(this.model));
+      this.loadFrom();
+    },
+    methods: {
+      add () {
+        this.edit(this.modelDefault);
+      },
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+        this.$refs.form.clearValidate();
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            httpAction(httpurl,this.model,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+          }else{
+             return false
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+      loadFrom() {
+        getCompanyList().then((res) => {
+          if (res.success) {
+            this.companyList = res.result
+          }
+        });
+        getShipmentTypeList().then((res) => {
+          if (res.success) {
+            this.shipmentTypeList = res.result
+          }
+        });
+        getCustomerList().then((res) => {
+          if (res.success) {
+            this.customerList = res.result
+          }
+        });
+      },
+
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
index 862cf9e..ff94d64 100644
--- a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
@@ -14,6 +14,7 @@ import org.jeecg.modules.wms.receipt.receiptHeader.mapper.ReceiptDetailMapper;
 import org.jeecg.modules.wms.receipt.receiptHeader.mapper.ReceiptHeaderMapper;
 import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptDetailService;
 import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptHeaderService;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.service.IReceiptHeaderHistoryService;
 import org.jeecg.utils.StringUtils;
 import org.jeecg.utils.constant.QuantityConstant;
 import org.springframework.stereotype.Service;
@@ -48,6 +49,8 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl<ReceiptHeaderMapper, R
 	private IReceiptDetailService receiptDetailService;
 	@Resource
 	private IReceiptHeaderService receiptHeaderService;
+	@Resource
+	private IReceiptHeaderHistoryService receiptHeaderHistoryService;
 
 	@Override
 	@Transactional
@@ -56,6 +59,7 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl<ReceiptHeaderMapper, R
 		if(receiptHeader.getFirstStatus().intValue() > QuantityConstant.RECEIPT_HEADER_BUILD) {
 			throw new ServiceException("不能删除非新建状态单据");
 		}
+		receiptHeaderHistoryService.saveById(id);
 		receiptDetailMapper.deleteByMainId(id);
 		receiptHeaderMapper.deleteById(id);
 	}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/controller/ReceiptHeaderHistoryController.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/controller/ReceiptHeaderHistoryController.java
new file mode 100644
index 0000000..051ebf7
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/controller/ReceiptHeaderHistoryController.java
@@ -0,0 +1,169 @@
+package org.jeecg.modules.wms.receipt.receiptHeaderHistory.controller;
+
+import org.jeecg.common.system.query.QueryGenerator;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptDetailHistory;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptHeaderHistory;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.service.IReceiptHeaderHistoryService;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.service.IReceiptDetailHistoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 历史入库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Api(tags="历史入库单")
+@RestController
+@RequestMapping("/receipt/receiptHeaderHistory")
+@Slf4j
+public class ReceiptHeaderHistoryController extends JeecgController<ReceiptHeaderHistory, IReceiptHeaderHistoryService> {
+
+	@Autowired
+	private IReceiptHeaderHistoryService receiptHeaderHistoryService;
+
+	@Autowired
+	private IReceiptDetailHistoryService receiptDetailHistoryService;
+
+
+	/*---------------------------------主表处理-begin-------------------------------------*/
+
+	/**
+	 * 分页列表查询
+	 * @param receiptHeaderHistory
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "历史入库单-分页列表查询")
+	@ApiOperation(value="历史入库单-分页列表查询", notes="历史入库单-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ReceiptHeaderHistory>> queryPageList(ReceiptHeaderHistory receiptHeaderHistory,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<ReceiptHeaderHistory> queryWrapper = QueryGenerator.initQueryWrapper(receiptHeaderHistory, req.getParameterMap());
+		Page<ReceiptHeaderHistory> page = new Page<ReceiptHeaderHistory>(pageNo, pageSize);
+		IPage<ReceiptHeaderHistory> pageList = receiptHeaderHistoryService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+
+    /**
+     *  编辑
+     * @param receiptHeaderHistory
+     * @return
+     */
+    @AutoLog(value = "历史入库单-编辑")
+    @ApiOperation(value="历史入库单-编辑", notes="历史入库单-编辑")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+    public Result<String> edit(@RequestBody ReceiptHeaderHistory receiptHeaderHistory) {
+        receiptHeaderHistoryService.updateById(receiptHeaderHistory);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "历史入库单-通过id删除")
+    @ApiOperation(value="历史入库单-通过id删除", notes="历史入库单-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+        receiptHeaderHistoryService.delMain(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "历史入库单-批量删除")
+    @ApiOperation(value="历史入库单-批量删除", notes="历史入库单-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+        this.receiptHeaderHistoryService.delBatchMain(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+	/*---------------------------------主表处理-end-------------------------------------*/
+
+
+    /*--------------------------------子表处理-历史入库单明细-begin----------------------------------------------*/
+	/**
+	 * 通过主表ID查询
+	 * @return
+	 */
+	//@AutoLog(value = "历史入库单明细-通过主表ID查询")
+	@ApiOperation(value="历史入库单明细-通过主表ID查询", notes="历史入库单明细-通过主表ID查询")
+	@GetMapping(value = "/listReceiptDetailHistoryByMainId")
+    public Result<IPage<ReceiptDetailHistory>> listReceiptDetailHistoryByMainId(ReceiptDetailHistory receiptDetailHistory,
+                                                    @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                    @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                    HttpServletRequest req) {
+        QueryWrapper<ReceiptDetailHistory> queryWrapper = QueryGenerator.initQueryWrapper(receiptDetailHistory, req.getParameterMap());
+        Page<ReceiptDetailHistory> page = new Page<ReceiptDetailHistory>(pageNo, pageSize);
+        IPage<ReceiptDetailHistory> pageList = receiptDetailHistoryService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+	 * 编辑
+	 * @param receiptDetailHistory
+	 * @return
+	 */
+	@AutoLog(value = "历史入库单明细-编辑")
+	@ApiOperation(value="历史入库单明细-编辑", notes="历史入库单明细-编辑")
+	@RequestMapping(value = "/editReceiptDetailHistory", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> editReceiptDetailHistory(@RequestBody ReceiptDetailHistory receiptDetailHistory) {
+		receiptDetailHistoryService.updateById(receiptDetailHistory);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 * 通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "历史入库单明细-通过id删除")
+	@ApiOperation(value="历史入库单明细-通过id删除", notes="历史入库单明细-通过id删除")
+	@DeleteMapping(value = "/deleteReceiptDetailHistory")
+	public Result<String> deleteReceiptDetailHistory(@RequestParam(name="id",required=true) String id) {
+		receiptDetailHistoryService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 * 批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "历史入库单明细-批量删除")
+	@ApiOperation(value="历史入库单明细-批量删除", notes="历史入库单明细-批量删除")
+	@DeleteMapping(value = "/deleteBatchReceiptDetailHistory")
+	public Result<String> deleteBatchReceiptDetailHistory(@RequestParam(name="ids",required=true) String ids) {
+	    this.receiptDetailHistoryService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+
+    /*--------------------------------子表处理-历史入库单明细-end----------------------------------------------*/
+
+
+
+
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/entity/ReceiptDetailHistory.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/entity/ReceiptDetailHistory.java
new file mode 100644
index 0000000..7888518
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/entity/ReceiptDetailHistory.java
@@ -0,0 +1,126 @@
+package org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.jeecg.common.aspect.annotation.Dict;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 历史入库单明细
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("receipt_detail_history")
+@ApiModel(value="receipt_detail_history对象", description="历史入库单明细")
+public class ReceiptDetailHistory implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+	/**入库单ID*/
+    @ApiModelProperty(value = "入库单ID")
+    private Integer receiptId;
+	/**入库单编码*/
+	@Excel(name = "入库单编码", width = 15)
+    @ApiModelProperty(value = "入库单编码")
+    private String receiptCode;
+	/**仓库编码*/
+	@Excel(name = "仓库编码", width = 15)
+    @ApiModelProperty(value = "仓库编码")
+    private String warehouseCode;
+	/**货主编码*/
+	@Excel(name = "货主编码", width = 15)
+    @ApiModelProperty(value = "货主编码")
+    private String companyCode;
+	/**物料编码*/
+	@Excel(name = "物料编码", width = 15)
+    @ApiModelProperty(value = "物料编码")
+    private String materialCode;
+	/**物料名称*/
+	@Excel(name = "物料名称", width = 15)
+    @ApiModelProperty(value = "物料名称")
+    private String materialName;
+	/**物料规格*/
+	@Excel(name = "物料规格", width = 15)
+    @ApiModelProperty(value = "物料规格")
+    private String materialSpec;
+	/**物料单位*/
+	@Excel(name = "物料单位", width = 15)
+    @ApiModelProperty(value = "物料单位")
+    private String materialUnit;
+	/**单据数量*/
+	@Excel(name = "单据数量", width = 15)
+    @ApiModelProperty(value = "单据数量")
+    private java.math.BigDecimal qty;
+	/**已收数量*/
+	@Excel(name = "已收数量", width = 15)
+    @ApiModelProperty(value = "已收数量")
+    private java.math.BigDecimal taskQty;
+    /**库存状态*/
+    @Excel(name = "库存状态", width = 15)
+    @Dict(dicCode = "inventory_status")
+    @ApiModelProperty(value = "库存状态")
+    private String inventoryStatus;
+	/**批次*/
+	@Excel(name = "批次", width = 15)
+    @ApiModelProperty(value = "批次")
+    private String batch;
+	/**批号*/
+	@Excel(name = "批号", width = 15)
+    @ApiModelProperty(value = "批号")
+    private String lot;
+	/**项目号*/
+	@Excel(name = "项目号", width = 15)
+    @ApiModelProperty(value = "项目号")
+    private String project;
+    /**单据状态*/
+    @Excel(name = "单据状态", width = 15)
+    @Dict(dicCode = "receipt_status")
+    @ApiModelProperty(value = "单据状态")
+    private Integer status;
+	/**上游单号*/
+	@Excel(name = "上游单号", width = 15)
+    @ApiModelProperty(value = "上游单号")
+    private String referCode;
+    /**上游行号*/
+    @Excel(name = "上游行号", width = 15)
+    @ApiModelProperty(value = "上游行号")
+    private String referLineNum;
+	/**备用字段1*/
+	@Excel(name = "备用字段1", width = 15)
+    @ApiModelProperty(value = "备用字段1")
+    private String userdef1;
+	/**备用字段2*/
+	@Excel(name = "备用字段2", width = 15)
+    @ApiModelProperty(value = "备用字段2")
+    private String userdef2;
+	/**备用字段3*/
+	@Excel(name = "备用字段3", width = 15)
+    @ApiModelProperty(value = "备用字段3")
+    private String userdef3;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/entity/ReceiptHeaderHistory.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/entity/ReceiptHeaderHistory.java
new file mode 100644
index 0000000..7d2204f
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/entity/ReceiptHeaderHistory.java
@@ -0,0 +1,103 @@
+package org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 历史入库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("receipt_header_history")
+@ApiModel(value="receipt_header_history对象", description="历史入库单")
+public class ReceiptHeaderHistory implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+	/**编码*/
+    @Excel(name = "编码", width = 15)
+    @ApiModelProperty(value = "编码")
+    private String code;
+	/**仓库编码*/
+    @Excel(name = "仓库编码", width = 15)
+    @ApiModelProperty(value = "仓库编码")
+    private String warehouseCode;
+	/**货主*/
+    @Excel(name = "货主", width = 15)
+    @ApiModelProperty(value = "货主")
+    private String companyCode;
+	/**入库单类型*/
+    @Excel(name = "入库单类型", width = 15)
+    @ApiModelProperty(value = "入库单类型")
+    private String type;
+    /**头状态*/
+    @Excel(name = "头状态", width = 15, dicCode = "receipt_status")
+    @Dict(dicCode = "receipt_status")
+    @ApiModelProperty(value = "头状态")
+    private Integer firstStatus;
+    /**尾状态*/
+    @Excel(name = "尾状态", width = 15, dicCode = "receipt_status")
+    @Dict(dicCode = "receipt_status")
+    @ApiModelProperty(value = "尾状态")
+    private Integer lastStatus;
+	/**上游单号*/
+    @Excel(name = "上游单号", width = 15)
+    @ApiModelProperty(value = "上游单号")
+    private String referCode;
+	/**供应商编码*/
+    @Excel(name = "供应商编码", width = 15)
+    @ApiModelProperty(value = "供应商编码")
+    private String supplierCode;
+	/**总数量*/
+    @Excel(name = "总数量", width = 15)
+    @ApiModelProperty(value = "总数量")
+    private java.math.BigDecimal totalqty;
+	/**总行数*/
+    @Excel(name = "总行数", width = 15)
+    @ApiModelProperty(value = "总行数")
+    private Integer totallines;
+	/**入库单备注*/
+    @Excel(name = "入库单备注", width = 15)
+    @ApiModelProperty(value = "入库单备注")
+    private String remark;
+	/**备用字段1*/
+    @Excel(name = "备用字段1", width = 15)
+    @ApiModelProperty(value = "备用字段1")
+    private String userdef1;
+	/**备用字段2*/
+    @Excel(name = "备用字段2", width = 15)
+    @ApiModelProperty(value = "备用字段2")
+    private String userdef2;
+	/**备用字段3*/
+    @Excel(name = "备用字段3", width = 15)
+    @ApiModelProperty(value = "备用字段3")
+    private String userdef3;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/ReceiptDetailHistoryMapper.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/ReceiptDetailHistoryMapper.java
new file mode 100644
index 0000000..56a0774
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/ReceiptDetailHistoryMapper.java
@@ -0,0 +1,20 @@
+package org.jeecg.modules.wms.receipt.receiptHeaderHistory.mapper;
+
+import java.util.List;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptDetailHistory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 历史入库单明细
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+public interface ReceiptDetailHistoryMapper extends BaseMapper<ReceiptDetailHistory> {
+
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+
+	public List<ReceiptDetailHistory> selectByMainId(@Param("mainId") String mainId);
+
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/ReceiptHeaderHistoryMapper.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/ReceiptHeaderHistoryMapper.java
new file mode 100644
index 0000000..90f58f1
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/ReceiptHeaderHistoryMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.wms.receipt.receiptHeaderHistory.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptHeaderHistory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 历史入库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+public interface ReceiptHeaderHistoryMapper extends BaseMapper<ReceiptHeaderHistory> {
+
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/xml/ReceiptDetailHistoryMapper.xml b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/xml/ReceiptDetailHistoryMapper.xml
new file mode 100644
index 0000000..f37e3a9
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/xml/ReceiptDetailHistoryMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.wms.receipt.receiptHeaderHistory.mapper.ReceiptDetailHistoryMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE
+		FROM  receipt_detail_history
+		WHERE
+			 receipt_id = #{mainId}
+	</delete>
+
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptDetailHistory">
+		SELECT *
+		FROM  receipt_detail_history
+		WHERE
+			 receipt_id = #{mainId}
+	</select>
+</mapper>
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/xml/ReceiptHeaderHistoryMapper.xml b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/xml/ReceiptHeaderHistoryMapper.xml
new file mode 100644
index 0000000..af5b5cd
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/mapper/xml/ReceiptHeaderHistoryMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.wms.receipt.receiptHeaderHistory.mapper.ReceiptHeaderHistoryMapper">
+
+</mapper>
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/IReceiptDetailHistoryService.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/IReceiptDetailHistoryService.java
new file mode 100644
index 0000000..12107fc
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/IReceiptDetailHistoryService.java
@@ -0,0 +1,16 @@
+package org.jeecg.modules.wms.receipt.receiptHeaderHistory.service;
+
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptDetailHistory;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 历史入库单明细
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+public interface IReceiptDetailHistoryService extends IService<ReceiptDetailHistory> {
+
+	public List<ReceiptDetailHistory> selectByMainId(String mainId);
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/IReceiptHeaderHistoryService.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/IReceiptHeaderHistoryService.java
new file mode 100644
index 0000000..1c2217e
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/IReceiptHeaderHistoryService.java
@@ -0,0 +1,35 @@
+package org.jeecg.modules.wms.receipt.receiptHeaderHistory.service;
+
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptDetailHistory;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptHeaderHistory;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.beans.factory.annotation.Autowired;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 历史入库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+public interface IReceiptHeaderHistoryService extends IService<ReceiptHeaderHistory> {
+
+	/**
+	 * 删除一对多
+	 */
+	public void delMain (String id);
+
+	/**
+	 * 批量删除一对多
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+
+
+	/**
+	 * 根据删除的入库单主表ID新增历史入库单记录
+	 * @param id
+	 */
+	void saveById(String id);
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/impl/ReceiptDetailHistoryServiceImpl.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/impl/ReceiptDetailHistoryServiceImpl.java
new file mode 100644
index 0000000..ded7e48
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/impl/ReceiptDetailHistoryServiceImpl.java
@@ -0,0 +1,27 @@
+package org.jeecg.modules.wms.receipt.receiptHeaderHistory.service.impl;
+
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptDetailHistory;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.mapper.ReceiptDetailHistoryMapper;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.service.IReceiptDetailHistoryService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 历史入库单明细
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Service
+public class ReceiptDetailHistoryServiceImpl extends ServiceImpl<ReceiptDetailHistoryMapper, ReceiptDetailHistory> implements IReceiptDetailHistoryService {
+
+	@Autowired
+	private ReceiptDetailHistoryMapper receiptDetailHistoryMapper;
+
+	@Override
+	public List<ReceiptDetailHistory> selectByMainId(String mainId) {
+		return receiptDetailHistoryMapper.selectByMainId(mainId);
+	}
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/impl/ReceiptHeaderHistoryServiceImpl.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/impl/ReceiptHeaderHistoryServiceImpl.java
new file mode 100644
index 0000000..fbf491e
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/service/impl/ReceiptHeaderHistoryServiceImpl.java
@@ -0,0 +1,108 @@
+package org.jeecg.modules.wms.receipt.receiptHeaderHistory.service.impl;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+
+import com.aliyun.oss.ServiceException;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.service.IReceiptDetailService;
+import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptHeaderService;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptHeaderHistory;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptDetailHistory;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.mapper.ReceiptDetailHistoryMapper;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.mapper.ReceiptHeaderHistoryMapper;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.service.IReceiptDetailHistoryService;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.service.IReceiptHeaderHistoryService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 历史入库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Service
+public class ReceiptHeaderHistoryServiceImpl extends ServiceImpl<ReceiptHeaderHistoryMapper, ReceiptHeaderHistory> implements IReceiptHeaderHistoryService {
+
+	@Autowired
+	private ReceiptHeaderHistoryMapper receiptHeaderHistoryMapper;
+	@Autowired
+	private ReceiptDetailHistoryMapper receiptDetailHistoryMapper;
+
+	@Resource
+	private IReceiptHeaderService receiptHeaderService;
+	@Resource
+	private IReceiptDetailService receiptDetailService;
+	@Resource
+	private IReceiptDetailHistoryService receiptDetailHistoryService;
+
+	@Override
+	@Transactional
+	public void delMain(String id) {
+		receiptDetailHistoryMapper.deleteByMainId(id);
+		receiptHeaderHistoryMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			receiptDetailHistoryMapper.deleteByMainId(id.toString());
+			receiptHeaderHistoryMapper.deleteById(id);
+		}
+	}
+
+	/**
+	 * 根据删除的入库单主表ID新增历史入库单记录
+	 * @param id
+	 */
+	@Override
+	public void saveById(String id) {
+		ReceiptHeader receiptHeader = receiptHeaderService.getById(id);
+		ReceiptHeaderHistory receiptHeaderHistory = new ReceiptHeaderHistory();
+		receiptHeaderHistory.setCode(receiptHeader.getCode());
+		receiptHeaderHistory.setWarehouseCode(receiptHeader.getWarehouseCode());
+		receiptHeaderHistory.setCompanyCode(receiptHeader.getCompanyCode());
+		receiptHeaderHistory.setType(receiptHeader.getType());
+		receiptHeaderHistory.setFirstStatus(receiptHeader.getFirstStatus());
+		receiptHeaderHistory.setLastStatus(receiptHeader.getLastStatus());
+		receiptHeaderHistory.setReferCode(receiptHeader.getReferCode());
+		receiptHeaderHistory.setSupplierCode(receiptHeader.getSupplierCode());
+		receiptHeaderHistory.setTotalqty(receiptHeader.getTotalqty());
+		receiptHeaderHistory.setTotallines(receiptHeader.getTotallines());
+		receiptHeaderHistory.setRemark(receiptHeader.getRemark());
+		receiptHeaderHistory.setUserdef1(receiptHeader.getUserdef1());
+		receiptHeaderHistory.setUserdef2(receiptHeader.getUserdef2());
+		receiptHeaderHistory.setUserdef3(receiptHeader.getUserdef3());
+		receiptHeaderHistory.setCreateBy(receiptHeader.getCreateBy());
+		receiptHeaderHistory.setCreateTime(receiptHeader.getCreateTime());
+		receiptHeaderHistory.setUpdateBy(receiptHeader.getUpdateBy());
+		receiptHeaderHistory.setUpdateTime(receiptHeader.getUpdateTime());
+		receiptHeaderHistoryMapper.insert(receiptHeaderHistory);
+		List<ReceiptDetailHistory> receiptDetailHistoryList = new ArrayList<>();
+		List<ReceiptDetail> receiptDetailList = receiptDetailService.list(new LambdaQueryWrapper<ReceiptDetail>().eq(ReceiptDetail::getReceiptId, receiptHeader.getId()));
+		for (ReceiptDetail detail : receiptDetailList) {
+			ReceiptDetailHistory receiptDetailHistory = new ReceiptDetailHistory();
+			BeanUtils.copyProperties(detail, receiptDetailHistory);
+			receiptDetailHistoryList.add(receiptDetailHistory);
+		}
+		List<ReceiptDetailHistory> newList = receiptDetailHistoryList.stream().peek(detail -> detail.setReceiptId(receiptHeaderHistory.getId())).collect(Collectors.toList());
+		if (!receiptDetailHistoryService.saveBatch(newList)){
+			throw new ServiceException("批量新增失败");
+		}
+
+	}
+
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/vo/ReceiptHeaderHistoryPage.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/vo/ReceiptHeaderHistoryPage.java
new file mode 100644
index 0000000..020445e
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/receipt/receiptHeaderHistory/vo/ReceiptHeaderHistoryPage.java
@@ -0,0 +1,103 @@
+package org.jeecg.modules.wms.receipt.receiptHeaderHistory.vo;
+
+import java.util.List;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptHeaderHistory;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptDetailHistory;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelEntity;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 历史入库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="receipt_header_historyPage对象", description="历史入库单")
+public class ReceiptHeaderHistoryPage {
+
+	/**主键*/
+	@ApiModelProperty(value = "主键")
+    private String id;
+	/**编码*/
+	@Excel(name = "编码", width = 15)
+	@ApiModelProperty(value = "编码")
+    private String code;
+	/**仓库编码*/
+	@Excel(name = "仓库编码", width = 15)
+	@ApiModelProperty(value = "仓库编码")
+    private String warehouseCode;
+	/**货主*/
+	@Excel(name = "货主", width = 15)
+	@ApiModelProperty(value = "货主")
+    private String companyCode;
+	/**入库单类型*/
+	@Excel(name = "入库单类型", width = 15)
+	@ApiModelProperty(value = "入库单类型")
+    private String type;
+	/**头状态*/
+	@Excel(name = "头状态", width = 15)
+	@ApiModelProperty(value = "头状态")
+    private Integer firstStatus;
+	/**尾状态*/
+	@Excel(name = "尾状态", width = 15)
+	@ApiModelProperty(value = "尾状态")
+    private Integer lastStatus;
+	/**上游单号*/
+	@Excel(name = "上游单号", width = 15)
+	@ApiModelProperty(value = "上游单号")
+    private String referCode;
+	/**供应商编码*/
+	@Excel(name = "供应商编码", width = 15)
+	@ApiModelProperty(value = "供应商编码")
+    private String supplierCode;
+	/**总数量*/
+	@Excel(name = "总数量", width = 15)
+	@ApiModelProperty(value = "总数量")
+    private java.math.BigDecimal totalqty;
+	/**总行数*/
+	@Excel(name = "总行数", width = 15)
+	@ApiModelProperty(value = "总行数")
+    private Integer totallines;
+	/**入库单备注*/
+	@Excel(name = "入库单备注", width = 15)
+	@ApiModelProperty(value = "入库单备注")
+    private String remark;
+	/**备用字段1*/
+	@Excel(name = "备用字段1", width = 15)
+	@ApiModelProperty(value = "备用字段1")
+    private String userdef1;
+	/**备用字段2*/
+	@Excel(name = "备用字段2", width = 15)
+	@ApiModelProperty(value = "备用字段2")
+    private String userdef2;
+	/**备用字段3*/
+	@Excel(name = "备用字段3", width = 15)
+	@ApiModelProperty(value = "备用字段3")
+    private String userdef3;
+	/**创建人*/
+	@ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+	@ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+
+	@ExcelCollection(name="历史入库单明细")
+	@ApiModelProperty(value = "历史入库单明细")
+	private List<ReceiptDetailHistory> receiptDetailHistoryList;
+
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
index 8abfab6..c2bb9b4 100644
--- a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
@@ -25,6 +25,7 @@ import org.jeecg.modules.wms.shipment.shipmentHeader.mapper.ShipmentDetailMapper
 import org.jeecg.modules.wms.shipment.shipmentHeader.mapper.ShipmentHeaderMapper;
 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService;
 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.service.IShipmentHeaderHistoryService;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
 import org.jeecg.utils.StringUtils;
@@ -73,6 +74,8 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
 	private IInventoryDetailService inventoryDetailService;
 	@Resource
 	private IParameterConfigurationService parameterConfigurationService;
+	@Resource
+	private IShipmentHeaderHistoryService shipmentHeaderHistoryService;
 
 	@Override
 	@Transactional
@@ -81,6 +84,7 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
 		if(shipmentHeader.getFirstStatus().intValue() > QuantityConstant.RECEIPT_HEADER_BUILD) {
 			throw new ServiceException("不能删除非新建状态单据");
 		}
+		shipmentHeaderHistoryService.saveById(id);
 		shipmentDetailMapper.deleteByMainId(id);
 		shipmentHeaderMapper.deleteById(id);
 	}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/controller/ShipmentHeaderHistoryController.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/controller/ShipmentHeaderHistoryController.java
new file mode 100644
index 0000000..77b8f40
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/controller/ShipmentHeaderHistoryController.java
@@ -0,0 +1,173 @@
+package org.jeecg.modules.wms.shipment.shipmentHeaderHistory.controller;
+
+import org.jeecg.common.system.query.QueryGenerator;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity.ShipmentDetailHistory;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity.ShipmentHeaderHistory;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.service.IShipmentHeaderHistoryService;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.service.IShipmentDetailHistoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+ /**
+ * @Description: 历史出库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Api(tags="历史出库单")
+@RestController
+@RequestMapping("/shipment/shipmentHeaderHistory")
+@Slf4j
+public class ShipmentHeaderHistoryController extends JeecgController<ShipmentHeaderHistory, IShipmentHeaderHistoryService> {
+
+	@Autowired
+	private IShipmentHeaderHistoryService shipmentHeaderHistoryService;
+
+	@Autowired
+	private IShipmentDetailHistoryService shipmentDetailHistoryService;
+
+
+	/*---------------------------------主表处理-begin-------------------------------------*/
+
+	/**
+	 * 分页列表查询
+	 * @param shipmentHeaderHistory
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "历史出库单-分页列表查询")
+	@ApiOperation(value="历史出库单-分页列表查询", notes="历史出库单-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ShipmentHeaderHistory>> queryPageList(ShipmentHeaderHistory shipmentHeaderHistory,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<ShipmentHeaderHistory> queryWrapper = QueryGenerator.initQueryWrapper(shipmentHeaderHistory, req.getParameterMap());
+		Page<ShipmentHeaderHistory> page = new Page<>(pageNo, pageSize);
+		IPage<ShipmentHeaderHistory> pageList = shipmentHeaderHistoryService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+
+
+    /**
+     *  编辑
+     * @param shipmentHeaderHistory
+     * @return
+     */
+    @AutoLog(value = "历史出库单-编辑")
+    @ApiOperation(value="历史出库单-编辑", notes="历史出库单-编辑")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+    public Result<String> edit(@RequestBody ShipmentHeaderHistory shipmentHeaderHistory) {
+        shipmentHeaderHistoryService.updateById(shipmentHeaderHistory);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "历史出库单-通过id删除")
+    @ApiOperation(value="历史出库单-通过id删除", notes="历史出库单-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+        shipmentHeaderHistoryService.delMain(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "历史出库单-批量删除")
+    @ApiOperation(value="历史出库单-批量删除", notes="历史出库单-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+        this.shipmentHeaderHistoryService.delBatchMain(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+
+	/*---------------------------------主表处理-end-------------------------------------*/
+
+
+    /*--------------------------------子表处理-历史出库单明细-begin----------------------------------------------*/
+	/**
+	 * 通过主表ID查询
+	 * @return
+	 */
+	//@AutoLog(value = "历史出库单明细-通过主表ID查询")
+	@ApiOperation(value="历史出库单明细-通过主表ID查询", notes="历史出库单明细-通过主表ID查询")
+	@GetMapping(value = "/listShipmentDetailHistoryByMainId")
+    public Result<IPage<ShipmentDetailHistory>> listShipmentDetailHistoryByMainId(ShipmentDetailHistory shipmentDetailHistory,
+                                                    @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                    @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                    HttpServletRequest req) {
+        QueryWrapper<ShipmentDetailHistory> queryWrapper = QueryGenerator.initQueryWrapper(shipmentDetailHistory, req.getParameterMap());
+        Page<ShipmentDetailHistory> page = new Page<ShipmentDetailHistory>(pageNo, pageSize);
+        IPage<ShipmentDetailHistory> pageList = shipmentDetailHistoryService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+
+
+    /**
+	 * 编辑
+	 * @param shipmentDetailHistory
+	 * @return
+	 */
+	@AutoLog(value = "历史出库单明细-编辑")
+	@ApiOperation(value="历史出库单明细-编辑", notes="历史出库单明细-编辑")
+	@RequestMapping(value = "/editShipmentDetailHistory", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> editShipmentDetailHistory(@RequestBody ShipmentDetailHistory shipmentDetailHistory) {
+		shipmentDetailHistoryService.updateById(shipmentDetailHistory);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 * 通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "历史出库单明细-通过id删除")
+	@ApiOperation(value="历史出库单明细-通过id删除", notes="历史出库单明细-通过id删除")
+	@DeleteMapping(value = "/deleteShipmentDetailHistory")
+	public Result<String> deleteShipmentDetailHistory(@RequestParam(name="id",required=true) String id) {
+		shipmentDetailHistoryService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 * 批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "历史出库单明细-批量删除")
+	@ApiOperation(value="历史出库单明细-批量删除", notes="历史出库单明细-批量删除")
+	@DeleteMapping(value = "/deleteBatchShipmentDetailHistory")
+	public Result<String> deleteBatchShipmentDetailHistory(@RequestParam(name="ids",required=true) String ids) {
+	    this.shipmentDetailHistoryService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+
+    /*--------------------------------子表处理-历史出库单明细-end----------------------------------------------*/
+
+
+
+
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/entity/ShipmentDetailHistory.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/entity/ShipmentDetailHistory.java
new file mode 100644
index 0000000..0807e55
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/entity/ShipmentDetailHistory.java
@@ -0,0 +1,134 @@
+package org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.jeecg.common.aspect.annotation.Dict;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 历史出库单明细
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("shipment_detail_history")
+@ApiModel(value="shipment_detail_history对象", description="历史出库单明细")
+public class ShipmentDetailHistory implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**id*/
+	@TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Integer id;
+	/**出库单ID*/
+    @ApiModelProperty(value = "出库单ID")
+    private Integer shipmentId;
+	/**出库单编码*/
+	@Excel(name = "出库单编码", width = 15)
+    @ApiModelProperty(value = "出库单编码")
+    private String shipmentCode;
+	/**仓库编码*/
+	@Excel(name = "仓库编码", width = 15)
+    @ApiModelProperty(value = "仓库编码")
+    private String warehouseCode;
+	/**货主编码*/
+	@Excel(name = "货主编码", width = 15)
+    @ApiModelProperty(value = "货主编码")
+    private String companyCode;
+	/**物料编码*/
+	@Excel(name = "物料编码", width = 15)
+    @ApiModelProperty(value = "物料编码")
+    private String materialCode;
+	/**物料名称*/
+	@Excel(name = "物料名称", width = 15)
+    @ApiModelProperty(value = "物料名称")
+    private String materialName;
+	/**物料规格*/
+	@Excel(name = "物料规格", width = 15)
+    @ApiModelProperty(value = "物料规格")
+    private String materialSpec;
+	/**物料单位*/
+	@Excel(name = "物料单位", width = 15)
+    @ApiModelProperty(value = "物料单位")
+    private String materialUnit;
+	/**单据数量*/
+	@Excel(name = "单据数量", width = 15)
+    @ApiModelProperty(value = "单据数量")
+    private java.math.BigDecimal qty;
+	/**已收数量*/
+	@Excel(name = "已收数量", width = 15)
+    @ApiModelProperty(value = "已收数量")
+    private java.math.BigDecimal taskQty;
+    /**库存状态*/
+    @Excel(name = "库存状态", width = 15)
+    @Dict(dicCode = "inventory_status")
+    @ApiModelProperty(value = "库存状态")
+    private String inventoryStatus;
+	/**批次*/
+	@Excel(name = "批次", width = 15)
+    @ApiModelProperty(value = "批次")
+    private String batch;
+	/**批号*/
+	@Excel(name = "批号", width = 15)
+    @ApiModelProperty(value = "批号")
+    private String lot;
+	/**项目号*/
+	@Excel(name = "项目号", width = 15)
+    @ApiModelProperty(value = "项目号")
+    private String project;
+    /**单据状态*/
+    @Excel(name = "单据状态", width = 15)
+    @Dict(dicCode = "shipment_status")
+    @ApiModelProperty(value = "单据状态")
+    private Integer status;
+	/**上游单号*/
+	@Excel(name = "上游单号", width = 15)
+    @ApiModelProperty(value = "上游单号")
+    private String referCode;
+	/**上游行号*/
+	@Excel(name = "上游行号", width = 15)
+    @ApiModelProperty(value = "上游行号")
+    private String referLineNum;
+	/**目标出入口*/
+	@Excel(name = "目标出入口", width = 15)
+    @ApiModelProperty(value = "目标出入口")
+    private String toPort;
+	/**备用字段1*/
+	@Excel(name = "备用字段1", width = 15)
+    @ApiModelProperty(value = "备用字段1")
+    private String userdef1;
+	/**备用字段2*/
+	@Excel(name = "备用字段2", width = 15)
+    @ApiModelProperty(value = "备用字段2")
+    private String userdef2;
+	/**备用字段3*/
+	@Excel(name = "备用字段3", width = 15)
+    @ApiModelProperty(value = "备用字段3")
+    private String userdef3;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/entity/ShipmentHeaderHistory.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/entity/ShipmentHeaderHistory.java
new file mode 100644
index 0000000..1d77b43
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/entity/ShipmentHeaderHistory.java
@@ -0,0 +1,107 @@
+package org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 历史出库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("shipment_header_history")
+@ApiModel(value="shipment_header_history对象", description="历史出库单")
+public class ShipmentHeaderHistory implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**id*/
+	@TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Integer id;
+	/**出库单编码*/
+    @Excel(name = "出库单编码", width = 15)
+    @ApiModelProperty(value = "出库单编码")
+    private String code;
+	/**仓库编码*/
+    @Excel(name = "仓库编码", width = 15)
+    @ApiModelProperty(value = "仓库编码")
+    private String warehouseCode;
+	/**货主编码*/
+    @Excel(name = "货主编码", width = 15)
+    @ApiModelProperty(value = "货主编码")
+    private String companyCode;
+	/**出库单类型*/
+    @Excel(name = "出库单类型", width = 15)
+    @ApiModelProperty(value = "出库单类型")
+    private String type;
+    /**头状态*/
+    @Excel(name = "头状态", width = 15, dicCode = "shipment_status")
+    @Dict(dicCode = "shipment_status")
+    @ApiModelProperty(value = "头状态")
+    private Integer firstStatus;
+    /**尾状态*/
+    @Excel(name = "尾状态", width = 15, dicCode = "shipment_status")
+    @Dict(dicCode = "shipment_status")
+    @ApiModelProperty(value = "尾状态")
+    private Integer lastStatus;
+	/**上游单号*/
+    @Excel(name = "上游单号", width = 15)
+    @ApiModelProperty(value = "上游单号")
+    private String referCode;
+	/**客户编码*/
+    @Excel(name = "客户编码", width = 15)
+    @ApiModelProperty(value = "客户编码")
+    private String customerCode;
+	/**总数量*/
+    @Excel(name = "总数量", width = 15)
+    @ApiModelProperty(value = "总数量")
+    private java.math.BigDecimal totalQty;
+	/**总行数*/
+    @Excel(name = "总行数", width = 15)
+    @ApiModelProperty(value = "总行数")
+    private Integer totalLines;
+	/**出库单备注*/
+    @Excel(name = "出库单备注", width = 15)
+    @ApiModelProperty(value = "出库单备注")
+    private String remark;
+	/**备用字段1*/
+    @Excel(name = "备用字段1", width = 15)
+    @ApiModelProperty(value = "备用字段1")
+    private String userdef1;
+	/**备用字段2*/
+    @Excel(name = "备用字段2", width = 15)
+    @ApiModelProperty(value = "备用字段2")
+    private String userdef2;
+	/**备用字段3*/
+    @Excel(name = "备用字段3", width = 15)
+    @ApiModelProperty(value = "备用字段3")
+    private String userdef3;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/ShipmentDetailHistoryMapper.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/ShipmentDetailHistoryMapper.java
new file mode 100644
index 0000000..73f9f13
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/ShipmentDetailHistoryMapper.java
@@ -0,0 +1,20 @@
+package org.jeecg.modules.wms.shipment.shipmentHeaderHistory.mapper;
+
+import java.util.List;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity.ShipmentDetailHistory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 历史出库单明细
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+public interface ShipmentDetailHistoryMapper extends BaseMapper<ShipmentDetailHistory> {
+
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+
+	public List<ShipmentDetailHistory> selectByMainId(@Param("mainId") String mainId);
+
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/ShipmentHeaderHistoryMapper.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/ShipmentHeaderHistoryMapper.java
new file mode 100644
index 0000000..3251796
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/ShipmentHeaderHistoryMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.wms.shipment.shipmentHeaderHistory.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity.ShipmentHeaderHistory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 历史出库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+public interface ShipmentHeaderHistoryMapper extends BaseMapper<ShipmentHeaderHistory> {
+
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/xml/ShipmentDetailHistoryMapper.xml b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/xml/ShipmentDetailHistoryMapper.xml
new file mode 100644
index 0000000..37c7470
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/xml/ShipmentDetailHistoryMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.wms.shipment.shipmentHeaderHistory.mapper.ShipmentDetailHistoryMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE
+		FROM  shipment_detail_history
+		WHERE
+			 shipment_id = #{mainId}
+	</delete>
+
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity.ShipmentDetailHistory">
+		SELECT *
+		FROM  shipment_detail_history
+		WHERE
+			 shipment_id = #{mainId}
+	</select>
+</mapper>
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/xml/ShipmentHeaderHistoryMapper.xml b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/xml/ShipmentHeaderHistoryMapper.xml
new file mode 100644
index 0000000..ce47bc9
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/mapper/xml/ShipmentHeaderHistoryMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.wms.shipment.shipmentHeaderHistory.mapper.ShipmentHeaderHistoryMapper">
+
+</mapper>
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/IShipmentDetailHistoryService.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/IShipmentDetailHistoryService.java
new file mode 100644
index 0000000..10364c0
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/IShipmentDetailHistoryService.java
@@ -0,0 +1,16 @@
+package org.jeecg.modules.wms.shipment.shipmentHeaderHistory.service;
+
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity.ShipmentDetailHistory;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 历史出库单明细
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+public interface IShipmentDetailHistoryService extends IService<ShipmentDetailHistory> {
+
+	public List<ShipmentDetailHistory> selectByMainId(String mainId);
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/IShipmentHeaderHistoryService.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/IShipmentHeaderHistoryService.java
new file mode 100644
index 0000000..99151a1
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/IShipmentHeaderHistoryService.java
@@ -0,0 +1,35 @@
+package org.jeecg.modules.wms.shipment.shipmentHeaderHistory.service;
+
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity.ShipmentDetailHistory;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity.ShipmentHeaderHistory;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.beans.factory.annotation.Autowired;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 历史出库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+public interface IShipmentHeaderHistoryService extends IService<ShipmentHeaderHistory> {
+
+	/**
+	 * 删除一对多
+	 */
+	public void delMain (String id);
+
+	/**
+	 * 批量删除一对多
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+
+
+	/**
+	 * 根据删除的出库单主表ID新增历史出库单记录
+	 * @param id
+	 */
+	void saveById(String id);
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/impl/ShipmentDetailHistoryServiceImpl.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/impl/ShipmentDetailHistoryServiceImpl.java
new file mode 100644
index 0000000..2c7be36
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/impl/ShipmentDetailHistoryServiceImpl.java
@@ -0,0 +1,27 @@
+package org.jeecg.modules.wms.shipment.shipmentHeaderHistory.service.impl;
+
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity.ShipmentDetailHistory;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.mapper.ShipmentDetailHistoryMapper;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.service.IShipmentDetailHistoryService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 历史出库单明细
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Service
+public class ShipmentDetailHistoryServiceImpl extends ServiceImpl<ShipmentDetailHistoryMapper, ShipmentDetailHistory> implements IShipmentDetailHistoryService {
+
+	@Autowired
+	private ShipmentDetailHistoryMapper shipmentDetailHistoryMapper;
+
+	@Override
+	public List<ShipmentDetailHistory> selectByMainId(String mainId) {
+		return shipmentDetailHistoryMapper.selectByMainId(mainId);
+	}
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/impl/ShipmentHeaderHistoryServiceImpl.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/impl/ShipmentHeaderHistoryServiceImpl.java
new file mode 100644
index 0000000..6522d8b
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/service/impl/ShipmentHeaderHistoryServiceImpl.java
@@ -0,0 +1,110 @@
+package org.jeecg.modules.wms.shipment.shipmentHeaderHistory.service.impl;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.aliyun.oss.ServiceException;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail;
+import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptDetailHistory;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptHeaderHistory;
+import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
+import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;
+import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService;
+import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity.ShipmentHeaderHistory;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.entity.ShipmentDetailHistory;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.mapper.ShipmentDetailHistoryMapper;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.mapper.ShipmentHeaderHistoryMapper;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.service.IShipmentDetailHistoryService;
+import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.service.IShipmentHeaderHistoryService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 历史出库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Service
+public class ShipmentHeaderHistoryServiceImpl extends ServiceImpl<ShipmentHeaderHistoryMapper, ShipmentHeaderHistory> implements IShipmentHeaderHistoryService {
+
+	@Autowired
+	private ShipmentHeaderHistoryMapper shipmentHeaderHistoryMapper;
+	@Autowired
+	private ShipmentDetailHistoryMapper shipmentDetailHistoryMapper;
+
+	@Autowired
+	private IShipmentHeaderService shipmentHeaderService;
+	@Autowired
+	private IShipmentDetailService shipmentDetailService;
+	@Autowired
+	private IShipmentDetailHistoryService shipmentDetailHistoryService;
+
+	@Override
+	@Transactional
+	public void delMain(String id) {
+		shipmentDetailHistoryMapper.deleteByMainId(id);
+		shipmentHeaderHistoryMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			shipmentDetailHistoryMapper.deleteByMainId(id.toString());
+			shipmentHeaderHistoryMapper.deleteById(id);
+		}
+	}
+
+	/**
+	 * 根据删除的出库单主表ID新增历史出库单记录
+	 * @param id
+	 */
+	@Override
+	public void saveById(String id) {
+		ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id);
+		ShipmentHeaderHistory shipmentHeaderHistory = new ShipmentHeaderHistory();
+		shipmentHeaderHistory.setCode(shipmentHeader.getCode());
+		shipmentHeaderHistory.setWarehouseCode(shipmentHeader.getWarehouseCode());
+		shipmentHeaderHistory.setCompanyCode(shipmentHeader.getCompanyCode());
+		shipmentHeaderHistory.setType(shipmentHeader.getType());
+		shipmentHeaderHistory.setFirstStatus(shipmentHeader.getFirstStatus());
+		shipmentHeaderHistory.setLastStatus(shipmentHeader.getLastStatus());
+		shipmentHeaderHistory.setReferCode(shipmentHeader.getReferCode());
+		shipmentHeaderHistory.setCustomerCode(shipmentHeader.getCompanyCode());
+		shipmentHeaderHistory.setTotalQty(shipmentHeader.getTotalQty());
+		shipmentHeaderHistory.setTotalLines(shipmentHeader.getTotalLines());
+		shipmentHeaderHistory.setRemark(shipmentHeader.getRemark());
+		shipmentHeaderHistory.setUserdef1(shipmentHeader.getUserdef1());
+		shipmentHeaderHistory.setUserdef2(shipmentHeader.getUserdef2());
+		shipmentHeaderHistory.setUserdef3(shipmentHeader.getUserdef3());
+		shipmentHeaderHistory.setCreateBy(shipmentHeader.getCreateBy());
+		shipmentHeaderHistory.setCreateTime(shipmentHeader.getCreateTime());
+		shipmentHeaderHistory.setUpdateBy(shipmentHeader.getUpdateBy());
+		shipmentHeaderHistory.setUpdateTime(shipmentHeader.getUpdateTime());
+
+		shipmentHeaderHistoryMapper.insert(shipmentHeaderHistory);
+		List<ShipmentDetailHistory> shipmentDetailHistoryList = new ArrayList<>();
+		List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(new LambdaQueryWrapper<ShipmentDetail>().eq(ShipmentDetail::getShipmentId, shipmentHeader.getId()));
+		for (ShipmentDetail detail : shipmentDetailList) {
+			ShipmentDetailHistory shipmentDetailHistory = new ShipmentDetailHistory();
+			BeanUtils.copyProperties(detail, shipmentDetailHistory);
+			shipmentDetailHistoryList.add(shipmentDetailHistory);
+		}
+		List<ShipmentDetailHistory> newList = shipmentDetailHistoryList.stream().peek(detail -> detail.setShipmentId(shipmentHeaderHistory.getId())).collect(Collectors.toList());
+		if (!shipmentDetailHistoryService.saveBatch(newList)){
+			throw new ServiceException("批量新增失败");
+		}
+	}
+
+}
diff --git a/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/vo/ShipmentHeaderHistoryPage.java b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/vo/ShipmentHeaderHistoryPage.java
new file mode 100644
index 0000000..ffff5b0
--- /dev/null
+++ b/jeecg-boot-master/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeaderHistory/vo/ShipmentHeaderHistoryPage.java
@@ -0,0 +1,114 @@
+package org.jeecg.modules.wms.shipment.shipmentHeaderHistory.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptDetailHistory;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 历史出库单
+ * @Author: jeecg-boot
+ * @Date:   2022-12-19
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="shipment_header_historyPage对象", description="历史出库单")
+public class ShipmentHeaderHistoryPage {
+
+	/**主键*/
+	@ApiModelProperty(value = "主键")
+    private String id;
+	/**出库单ID*/
+	@ApiModelProperty(value = "出库单ID")
+	private Integer shipmentId;
+	/**出库单编码*/
+	@Excel(name = "出库单编码", width = 15)
+	@ApiModelProperty(value = "出库单编码")
+	private String shipmentCode;
+	/**仓库编码*/
+	@Excel(name = "仓库编码", width = 15)
+	@ApiModelProperty(value = "仓库编码")
+    private String warehouseCode;
+	/**货主*/
+	@Excel(name = "货主", width = 15)
+	@ApiModelProperty(value = "货主")
+    private String companyCode;
+	/**出库单类型*/
+	@Excel(name = "出库单类型", width = 15)
+	@ApiModelProperty(value = "出库单类型")
+	private String type;
+	/**头状态*/
+	@Excel(name = "头状态", width = 15)
+	@ApiModelProperty(value = "头状态")
+    private Integer firstStatus;
+	/**尾状态*/
+	@Excel(name = "尾状态", width = 15)
+	@ApiModelProperty(value = "尾状态")
+    private Integer lastStatus;
+	/**上游单号*/
+	@Excel(name = "上游单号", width = 15)
+	@ApiModelProperty(value = "上游单号")
+    private String referCode;
+	/**供应商编码*/
+	@Excel(name = "供应商编码", width = 15)
+	@ApiModelProperty(value = "供应商编码")
+    private String supplierCode;
+	/**单据数量*/
+	@Excel(name = "单据数量", width = 15)
+	@ApiModelProperty(value = "单据数量")
+	private java.math.BigDecimal qty;
+	/**已收数量*/
+	@Excel(name = "已收数量", width = 15)
+	@ApiModelProperty(value = "已收数量")
+	private java.math.BigDecimal taskQty;
+	/**目标出出口*/
+	@Excel(name = "目标出入口", width = 15)
+	@ApiModelProperty(value = "目标出入口")
+	private String toPort;
+	/**客户编码*/
+	@Excel(name = "客户编码", width = 15)
+	@ApiModelProperty(value = "客户编码")
+	private String customerCode;
+	/**总行数*/
+	@Excel(name = "总行数", width = 15)
+	@ApiModelProperty(value = "总行数")
+    private Integer totallines;
+	/**出库单备注*/
+	@Excel(name = "出库单备注", width = 15)
+	@ApiModelProperty(value = "出库单备注")
+    private String remark;
+	/**备用字段1*/
+	@Excel(name = "备用字段1", width = 15)
+	@ApiModelProperty(value = "备用字段1")
+    private String userdef1;
+	/**备用字段2*/
+	@Excel(name = "备用字段2", width = 15)
+	@ApiModelProperty(value = "备用字段2")
+    private String userdef2;
+	/**备用字段3*/
+	@Excel(name = "备用字段3", width = 15)
+	@ApiModelProperty(value = "备用字段3")
+    private String userdef3;
+	/**创建人*/
+	@ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+	@ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+
+	@ExcelCollection(name="历史出库单明细")
+	@ApiModelProperty(value = "历史出库单明细")
+	private List<ReceiptDetailHistory> receiptDetailHistoryList;
+
+}
--
libgit2 0.22.2