diff --git a/ant-design-vue-jeecg/src/views/system/config/modules/LocationHighForm.vue b/ant-design-vue-jeecg/src/views/system/config/modules/LocationHighForm.vue
index 7ac6a3d..47537a3 100644
--- a/ant-design-vue-jeecg/src/views/system/config/modules/LocationHighForm.vue
+++ b/ant-design-vue-jeecg/src/views/system/config/modules/LocationHighForm.vue
@@ -15,7 +15,11 @@
           </a-col>
           <a-col :span="24">
             <a-form-model-item label="库位类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="locationTypeCode">
-              <a-input v-model="model.locationTypeCode" placeholder="请输入库位类型"></a-input>
+              <a-select
+                v-model="model.locationTypeCode"
+                :options="locationTypeList"
+                placeholder="请选择库位类型">
+              </a-select>
             </a-form-model-item>
           </a-col>
           <a-col :span="24">
@@ -52,7 +56,7 @@
 
 import {httpAction, getAction} from '@/api/manage'
 import {validateDuplicateValue} from '@/utils/util'
-import {getContainerTypeList, getZoneList} from "@api/api";
+import {getContainerTypeList, getLocationTypeList, getZoneList} from "@api/api";
 
 export default {
   name: 'LocationHighForm',
@@ -69,6 +73,7 @@ export default {
     return {
       model: {},
       zoneList: [],
+      locationTypeList: [],
       labelCol: {
         xs: {span: 24},
         sm: {span: 5},
@@ -86,7 +91,10 @@ export default {
           {required: true, message: '请输入名称!'},
         ],
         locationTypeCode: [
-          {required: true, message: '请输入库位类型!'},
+          {required: true, message: '请选择库位类型!'},
+        ],
+        zoneCode: [
+          {required: true, message: '请选择库区!'},
         ],
         high: [
           {required: true, message: '请输入高度值!'},
@@ -123,6 +131,13 @@ export default {
           this.zoneList = res.result
         }
       });
+      getLocationTypeList().then((res) => {
+        if (res.success) {
+          this.locationTypeList = res.result.map((item, index, arr) => {
+            return {label: item.name, value: item.code}
+          })
+        }
+      });
     },
     submitForm() {
       const that = this;
diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailList.vue
index b9f1c55..fa5e6e7 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailList.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailList.vue
@@ -79,8 +79,8 @@
 
         <span slot="action" slot-scope="text, record">
           <a v-has="'inventoryDetail:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
-          <a v-has="'inventoryDetail:addInventoryDetail'" @click="addInventoryDetail(record)">新增数量<a-divider type="vertical"/></a>
-          <a v-has="'inventoryDetail:reduceInventoryDetail'" @click="reduceInventoryDetail(record)">减少数量<a-divider type="vertical"/></a>
+          <a v-has="'inventoryDetail:addInventoryDetail'" v-if="(record.containerStatus == 'lock')" @click="addInventoryDetail(record)">新增数量<a-divider type="vertical"/></a>
+          <a v-has="'inventoryDetail:reduceInventoryDetail'" v-if="(record.containerStatus == 'lock')" @click="reduceInventoryDetail(record)">减少数量<a-divider type="vertical"/></a>
           <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
             <a v-has="'inventoryDetail:delete'">删除</a>
           </a-popconfirm>
diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
index 7602156..7582ac9 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
@@ -61,15 +61,15 @@
             </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.inventoryStatus"
-                                 dictCode="inventory_status"/>
+            <a-form-item label="物料编码">
+              <a-input placeholder="请输入物料编码" v-model="queryParam.materialCode"></a-input>
             </a-form-item>
           </a-col>
           <template v-if="toggleSearchStatus">
             <a-col :xl="6" :lg="7" :md="8" :sm="24">
-              <a-form-item label="物料编码">
-                <a-input placeholder="请输入物料编码" v-model="queryParam.materialCode"></a-input>
+              <a-form-item label="库存状态">
+                <j-dict-select-tag placeholder="请选择库存状态" v-model="queryParam.inventoryStatus"
+                                   dictCode="inventory_status"/>
               </a-form-item>
             </a-col>
             <a-col :xl="6" :lg="7" :md="8" :sm="24">
@@ -93,6 +93,11 @@
               </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.sn"></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>
@@ -306,6 +311,11 @@ export default {
           dataIndex: 'materialUnit'
         },
         {
+          title: '序列号',
+          align: "center",
+          dataIndex: 'sn'
+        },
+        {
           title: '库存状态',
           align: "center",
           dataIndex: 'inventoryStatus_dictText',
@@ -327,7 +337,7 @@ export default {
           dataIndex: 'shipmentQty'
         },
         {
-          title: '库存数量',
+          title: '库存总数',
           align: "center",
           dataIndex: 'inventoryQty'
         },
diff --git a/ant-design-vue-jeecg/src/views/system/inventory/modules/InventoryDetailModifyModal.vue b/ant-design-vue-jeecg/src/views/system/inventory/modules/InventoryDetailModifyModal.vue
index 8206249..163c1fb 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/modules/InventoryDetailModifyModal.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/modules/InventoryDetailModifyModal.vue
@@ -41,7 +41,7 @@ export default {
   data() {
     return {
       title: "操作",
-      width: 800,
+      width: 400,
       visible: false,
       model: {},
       flag: 0,
diff --git a/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue
index 79b5569..ea571bf 100644
--- a/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue
@@ -56,6 +56,11 @@
                 <a-input placeholder="请输入目标出入口" v-model="queryParam.toPortCode"></a-input>
               </a-form-item>
             </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="入库单ID">
+                <a-input placeholder="请输入入库单ID" v-model="queryParam.receiptId"></a-input>
+              </a-form-item>
+            </a-col>
             <a-col :xl="12" :lg="14" :md="16" :sm="24">
               <a-form-item label="创建日期">
                 <j-date :show-date="true" date-format="YYYY-MM-DD" placeholder="请选择开始时间"
diff --git a/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue
index ba685e0..5b7fe14 100644
--- a/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue
@@ -56,6 +56,11 @@
                 <a-input placeholder="请输入目标出入口" v-model="queryParam.toPortCode"></a-input>
               </a-form-item>
             </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="出库单ID">
+                <a-input placeholder="请输入出库单ID" v-model="queryParam.shipmentId"></a-input>
+              </a-form-item>
+            </a-col>
             <a-col :xl="12" :lg="14" :md="16" :sm="24">
               <a-form-item label="创建日期">
                 <j-date :show-date="true" date-format="YYYY-MM-DD" placeholder="请选择开始时间"
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationService.java
index 4666f31..714e487 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationService.java
@@ -5,14 +5,20 @@ import java.util.List;
 public interface LocationAllocationService {
 
     /**
-     * 获得库位分配的库位
+     * 库位分配
      */
     String allocation(int locationRule, List<String> locationTypeCodeList, int high, String zoneCode, List<Integer> raodWays, String warehouseCode,
         String containerCode, String materialAreaCode, String materialCode, boolean bypass);
 
+    /**
+     * 双伸位库位分配
+     */
     String doubleRk(String zoneCode, List<Integer> roadWays, int high, String warehouseCode, List<String> locationTypeCodeList, String materialAreaCode,
         String materialCode, boolean bypass);
 
+    /**
+     * 单伸位库位分配
+     */
     String singleRk(String zoneCode, List<Integer> roadWays, int high, String warehouseCode, List<String> locationTypeCodeList, String materialAreaCode,
         String materialCode);
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java
index 4ff19f8..30377b4 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java
@@ -28,10 +28,10 @@ import org.jeecg.utils.StringUtils;
 import org.jeecg.utils.constant.QuantityConstant;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
@@ -93,7 +93,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
             case QuantityConstant.SINGLE_FORK:
                 return locationAllocationService.singleRk(zoneCode, raodWays, high, warehouseCode, mergelocationTypeCodeList, materialAreaCode, materialCode);
         }
-        return null;
+        throw new JeecgBootException("分配库位时, 没有找到分配规则");
     }
 
     /**
@@ -103,7 +103,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
     @Transactional(rollbackFor = Exception.class)
     public String doubleRk(String zoneCode, List<Integer> roadWays, int high, String warehouseCode, List<String> locationTypeCodeList, String materialAreaCode,
         String materialCode, boolean bypass) {
-        if (roadWays == null || roadWays.size() < 1) {
+        if (CollectionUtils.isEmpty(roadWays)) {
             roadWays = locationService.getRoadWayByZoneCode(zoneCode, warehouseCode);
         }
         String value = parameterConfigurationService.getValueByCode(QuantityConstant.DOUBLE_FORK_RESERVE_LOCATION);
@@ -128,7 +128,6 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
             LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
             locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay)
                 .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high).eq(Location::getEnable, QuantityConstant.STATUS_ENABLE)
-                .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode)
                 .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING)
                 .orderByAsc(true, Location::getHigh).orderByAsc(true, Location::getLayer).orderByAsc(true, Location::getId);
             Page<Location> page = new Page<Location>(1, searchNumber, false);
@@ -154,7 +153,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
         IPage iPage = locationService.page(page, locationLambda);
         List<Location> locationList = iPage.getRecords();
         List<Location> removeLocaationList = new ArrayList<>();
-        if (locationList.size() > 0) {
+        if (CollectionUtils.isNotEmpty(locationList)) {
             for (Location location1 : locationList) {
                 // 旁边有任务的库位,不能用来分配库位
                 if (taskHeaderService.haveUncompleteTaskInNear(location1)) {
@@ -163,7 +162,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
             }
         }
         locationList.removeAll(removeLocaationList);
-        if (locationList.size() == 0) {
+        if (CollectionUtils.isEmpty(locationList)) {
             locationLambda = Wrappers.lambdaQuery();
             locationLambda.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay)
                 .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high).eq(Location::getEnable, QuantityConstant.STATUS_ENABLE)
@@ -174,7 +173,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
             iPage = locationService.page(page, locationLambda);
             locationList = iPage.getRecords();
             removeLocaationList = new ArrayList<>();
-            if (locationList != null && locationList.size() > 0) {
+            if (CollectionUtils.isNotEmpty(locationList)) {
                 for (Location location1 : locationList) {
                     if (taskHeaderService.haveUncompleteTaskInNear(location1)) {
                         removeLocaationList.add(location1);
@@ -183,8 +182,8 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
             }
             locationList.removeAll(removeLocaationList);
         }
-        if (locationList == null || locationList.size() == 0) {
-            return null;
+        if (CollectionUtils.isEmpty(locationList)) {
+            throw new JeecgBootException("分配库位时,没有高度值" + high + "的库位可分配");
         }
         Location location = locationList.stream().findFirst().orElse(null);
         return location.getCode();
@@ -197,7 +196,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
     @Transactional(rollbackFor = Exception.class)
     public String singleRk(String zoneCode, List<Integer> roadWays, int high, String warehouseCode, List<String> locationTypeCodeList, String materialAreaCode,
         String materialCode) {
-        if (roadWays == null || roadWays.size() < 1) {
+        if (CollectionUtils.isEmpty(roadWays)) {
             roadWays = locationService.getRoadWayByZoneCode(zoneCode, warehouseCode);
         }
         List<Integer> removeRoadWays = new ArrayList<>();
@@ -212,12 +211,12 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
             Page<Location> page = new Page<Location>(1, 10, false);
             IPage page1 = locationService.page(page, locationLambdaQueryWrapper);
             List<Location> totalLocationList = page1.getRecords();
-            if (totalLocationList.size() <= 0) {
+            if (CollectionUtils.isEmpty(totalLocationList)) {
                 removeRoadWays.add(roadWay);
             }
         }
         roadWays.removeAll(removeRoadWays);
-        if (roadWays == null || roadWays.size() == 0) {
+        if (CollectionUtils.isEmpty(roadWays)) {
             throw new JeecgBootException("分配库位时, 可用巷道为空");
         }
         Integer roadWay = locationAllocationService.getRoadWay(roadWays, materialCode, zoneCode, warehouseCode);
@@ -231,8 +230,8 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
         Page page = new Page<Location>(1, 1, 1, false);
         IPage iPage = locationService.page(page, locationLambdaQueryWrapper);
         List<Location> locationList = iPage.getRecords();
-        if (locationList == null || locationList.size() == 0) {
-            return null;
+        if (CollectionUtils.isEmpty(locationList)) {
+            throw new JeecgBootException("分配库位时,没有高度值" + high + "的库位可分配");
         }
         Location location = locationList.stream().findFirst().orElse(null);
         return location.getCode();
@@ -302,7 +301,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
         taskHeaderLambdaQueryWrapper.lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED).eq(TaskHeader::getZoneCode, zoneCode)
             .ne(TaskHeader::getToLocationCode, QuantityConstant.EMPTY_STRING);
         List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper);
-        if (taskHeaderList.size() != 0) {
+        if (CollectionUtils.isNotEmpty(taskHeaderList)) {
             List<Integer> roadWayList = taskHeaderList.stream().map(TaskHeader::getRoadWay).collect(toList());
             List<Integer> removeRoadWayList = new ArrayList<>();
             for (Integer roadWay : roadWays) {
@@ -319,7 +318,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
 
     @Override
     public Integer getRoadWayByMinMaterial(List<Integer> roadWays, String materialCode, String zoneCode, String warehouseCode) {
-        if (roadWays == null || roadWays.size() == 0) {
+        if (CollectionUtils.isEmpty(roadWays)) {
             throw new JeecgBootException("分配库位时, 巷道为空");
         }
         Collections.shuffle(roadWays);// 打乱巷道排序
@@ -329,7 +328,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService 
         }
         int min = Integer.MAX_VALUE;
         List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByMaterialCodeAndZoneCode(materialCode, zoneCode, warehouseCode);
-        if (inventoryDetailList.size() != 0) {
+        if (CollectionUtils.isNotEmpty(inventoryDetailList)) {
             List<Integer> roadWayList = inventoryDetailList.stream().map(InventoryDetail::getRoadWay).collect(toList());
             roadWayList.removeAll(Collections.singleton(null));
             for (Integer road : roadWays) {
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
index 0a09c47..cd1acd6 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
@@ -263,17 +263,17 @@ public class WcsServiceImpl implements WcsService {
             if (StringUtils.isNotEmpty(insideLocation.getContainerCode())) {
                 Location destinationLocation = locationService.getEmptyLocation(insideLocation);
                 if (destinationLocation == null) {
-                    throw new JeecgBootException("创建移库任务失败, 目标库位为空");
+                    throw new JeecgBootException("分配库位时,创建移库任务失败目标库位为空");
                 }
                 Result<TaskHeader> result = taskHeaderService.createTransferTask(insideLocation.getCode(), destinationLocation.getCode(), warehouseCode);
                 if (!result.isSuccess()) {
-                    throw new JeecgBootException("创建移库任务失败");
+                    throw new JeecgBootException("分配库位时,创建移库任务失败");
                 }
                 preTaskNo = result.getResult().getId();
                 taskHeader.setPreTaskNo(preTaskNo);
                 success = taskHeaderService.updatePreTaskNoById(preTaskNo, taskHeader.getId());
                 if (!success) {
-                    throw new JeecgBootException("更新任务状态失败");
+                    throw new JeecgBootException("分配库位时,更新任务状态失败");
                 }
             }
         } else {
@@ -297,7 +297,7 @@ public class WcsServiceImpl implements WcsService {
         taskHeader.setWeight(Integer.parseInt(warecellDomain.getWeight()));
         taskHeader.setToLocationCode(locationCode);
         if (!taskHeaderService.updateById(taskHeader)) {
-            throw new JeecgBootException("更新任务头表目标库位失败");
+            throw new JeecgBootException("分配库位时,更新任务头表目标库位失败");
         }
         WcsTask wcsTask = new WcsTask();
         wcsTask.setToLocationCode(locationCode);
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java
index 5385b7a..096c013 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java
@@ -38,6 +38,9 @@ public interface IInventoryDetailService extends IService<InventoryDetail> {
     // 求一种物料的库存之和(总数)
     BigDecimal getInventorySumQty(InventoryDetail inventoryDetail);
 
+    // 求一种物料的托盘库存之和(总数)
+    BigDecimal getContainerInventorySumQty(InventoryDetail inventoryDetail);
+
     // 求一种物料的库存之和(扣除了配盘数量)
     BigDecimal getSumQty(InventoryDetail inventoryDetail);
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java
index 22d8ab1..49d732c 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java
@@ -170,6 +170,21 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe
     }
 
     @Override
+    public BigDecimal getContainerInventorySumQty(InventoryDetail inventoryDetail) {
+        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
+        inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getInventoryStatus, inventoryDetail.getInventoryStatus())
+            .eq(InventoryDetail::getMaterialCode, inventoryDetail.getMaterialCode()).eq(InventoryDetail::getWarehouseCode, inventoryDetail.getWarehouseCode())
+            .eq(InventoryDetail::getContainerCode, inventoryDetail.getContainerCode());
+
+        List<InventoryDetail> inventoryDetailList = list(inventoryDetailLambdaQueryWrapper);
+        if (inventoryDetailList.size() == 0) {
+            return BigDecimal.ZERO;
+        }
+        BigDecimal totalQty = inventoryDetailList.stream().map(InventoryDetail::getQty).reduce(BigDecimal.ZERO, BigDecimal::add);
+        return totalQty;
+    }
+
+    @Override
     public BigDecimal getSumQty(InventoryDetail inventoryDetail) {
         LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
         inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getInventoryStatus, inventoryDetail.getInventoryStatus())
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/entity/InventoryTransaction.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/entity/InventoryTransaction.java
index bdca244..eca01fc 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/entity/InventoryTransaction.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/entity/InventoryTransaction.java
@@ -137,9 +137,13 @@ public class InventoryTransaction implements Serializable {
     @Excel(name = "出库数量", width = 15)
     @ApiModelProperty(value = "出库数量")
     private BigDecimal shipmentQty;
-    /** 库存数量 */
-    @Excel(name = "库存数量", width = 15)
-    @ApiModelProperty(value = "库存数量")
+    /** 托盘库存数量 */
+    @Excel(name = "托盘库存数量", width = 15)
+    @ApiModelProperty(value = "托盘库存数量")
+    private BigDecimal containerInventoryQty;
+    /** 库存总数 */
+    @Excel(name = "库存总数", width = 15)
+    @ApiModelProperty(value = "库存总数")
     private BigDecimal inventoryQty;
     /** 批次, 批次主要用于成品,比如以生产日期为批次 */
     @Excel(name = "批次", width = 15)
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java
index 01749fb..4b179b9 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java
@@ -53,6 +53,7 @@ import org.springframework.web.servlet.ModelAndView;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
@@ -106,6 +107,28 @@ public class TaskHeaderController extends HuahengBaseController {
         HuahengJwtUtil.setWarehouseCode(req, taskHeader);
         QueryWrapper<TaskHeader> queryWrapper = QueryGenerator.initQueryWrapper(taskHeader, req.getParameterMap());
         queryWrapper.orderByDesc("id");
+        LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = queryWrapper.lambda();
+        Integer shipmentId = taskHeader.getShipmentId();
+        Integer receiptId = taskHeader.getReceiptId();
+        if (shipmentId != null) {
+            List<TaskDetail> taskDetailList = taskDetailService.getTaskDetailListByShipmentId(shipmentId);
+            if (CollectionUtils.isNotEmpty(taskDetailList)) {
+                List<Integer> taskHeaderIdList = taskDetailList.stream().distinct().map(TaskDetail::getTaskHeaderId).collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(taskHeaderIdList)) {
+                    taskHeaderLambdaQueryWrapper.in(TaskHeader::getId, taskHeaderIdList);
+                }
+            }
+        }
+        if (receiptId != null) {
+            List<TaskDetail> taskDetailList = taskDetailService.getTaskDetailListByReceiptId(receiptId);
+            if (CollectionUtils.isNotEmpty(taskDetailList)) {
+                List<Integer> taskHeaderIdList = taskDetailList.stream().distinct().map(TaskDetail::getTaskHeaderId).collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(taskHeaderIdList)) {
+                    taskHeaderLambdaQueryWrapper.in(TaskHeader::getId, taskHeaderIdList);
+                }
+            }
+        }
+
         Page<TaskHeader> page = new Page<TaskHeader>(pageNo, pageSize);
         IPage<TaskHeader> pageList = taskHeaderService.page(page, queryWrapper);
         return Result.OK(pageList);
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java
index d4bba1f..f73bf1c 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java
@@ -9,6 +9,7 @@ import org.jeecg.common.aspect.annotation.Dict;
 import org.jeecgframework.poi.excel.annotation.Excel;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 
@@ -190,4 +191,12 @@ public class TaskHeader implements Serializable {
     /** 完成时间(完成任务时间) */
     @ApiModelProperty(value = "完成时间")
     private Date completeTime;
+    /** 出库单ID */
+    @TableField(exist = false)
+    @ApiModelProperty(value = "出库单ID")
+    private Integer shipmentId;
+    /** 入库单ID */
+    @TableField(exist = false)
+    @ApiModelProperty(value = "入库单ID")
+    private Integer receiptId;
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskDetailService.java
index 2eb87ec..51b7fd3 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskDetailService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskDetailService.java
@@ -1,10 +1,10 @@
 package org.jeecg.modules.wms.task.taskHeader.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.jeecg.modules.wms.config.location.entity.Location;
+import java.util.List;
+
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
 
-import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
  * @Description: 任务详情
@@ -22,4 +22,18 @@ public interface ITaskDetailService extends IService<TaskDetail> {
      * @return
      */
     List<TaskDetail> getTaskDetailListByTaskId(Integer id);
+
+    /**
+     * 根据出库单ID查询任务明细
+     * @param  shipmentId
+     * @return
+     */
+    List<TaskDetail> getTaskDetailListByShipmentId(Integer shipmentId);
+
+    /**
+     * 根据出库单ID查询任务明细
+     * @param  receiptId
+     * @return
+     */
+    List<TaskDetail> getTaskDetailListByReceiptId(Integer receiptId);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskDetailServiceImpl.java
index a522354..fca060b 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskDetailServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskDetailServiceImpl.java
@@ -1,21 +1,20 @@
 package org.jeecg.modules.wms.task.taskHeader.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.jeecg.modules.wms.config.location.entity.Location;
+import java.util.List;
+
+import javax.annotation.Resource;
+
 import org.jeecg.modules.wms.config.location.service.ILocationService;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
-import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
 import org.jeecg.modules.wms.task.taskHeader.mapper.TaskDetailMapper;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
-import org.jeecg.utils.constant.QuantityConstant;
-import org.springframework.stereotype.Service;
-import java.util.List;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 /**
  * @Description: 任务详情
@@ -46,4 +45,20 @@ public class TaskDetailServiceImpl extends ServiceImpl<TaskDetailMapper, TaskDet
         return taskDetailList;
     }
 
+    @Override
+    public List<TaskDetail> getTaskDetailListByShipmentId(Integer shipmentId) {
+        LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
+        taskDetailLambdaQueryWrapper.eq(TaskDetail::getShipmentId, shipmentId);
+        List<TaskDetail> taskDetailList = list(taskDetailLambdaQueryWrapper);
+        return taskDetailList;
+    }
+
+    @Override
+    public List<TaskDetail> getTaskDetailListByReceiptId(Integer receiptId) {
+        LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
+        taskDetailLambdaQueryWrapper.eq(TaskDetail::getReceiptId, receiptId);
+        List<TaskDetail> taskDetailList = list(taskDetailLambdaQueryWrapper);
+        return taskDetailList;
+    }
+
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
index b90d23c..2c4fe4a 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
@@ -1386,10 +1386,14 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             inventoryTransaction.setInventoryStatus(taskDetail.getInventoryStatus());
             inventoryTransaction.setReceiptQty(taskDetail.getQty());
             inventoryTransaction.setQty(taskDetail.getQty());
-            // 获得库存数量
+            // 获得库存总数
             BigDecimal inventoryQty = inventoryDetailService.getInventorySumQty(inventoryDetail);
+            // 获得物料在这个托盘上的库存数
+            BigDecimal containerInventoryQty = inventoryDetailService.getContainerInventorySumQty(inventoryDetail);
             inventoryQty = inventoryQty.add(taskDetail.getQty());
+            containerInventoryQty = containerInventoryQty.add(taskDetail.getQty());
             inventoryTransaction.setInventoryQty(inventoryQty);
+            inventoryTransaction.setContainerInventoryQty(containerInventoryQty);
             inventoryTransactionList.add(inventoryTransaction);
         }
 
@@ -1620,7 +1624,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             inventoryTransaction.setQty(taskDetail.getQty());
             inventoryTransaction.setShipmentQty(taskDetail.getQty());
             BigDecimal inventoryQty = inventoryDetailService.getInventorySumQty(inventoryDetail);
+            // 获得物料在这个托盘上的库存数
+            BigDecimal containerInventoryQty = inventoryDetailService.getContainerInventorySumQty(inventoryDetail);
             inventoryTransaction.setInventoryQty(inventoryQty);
+            inventoryTransaction.setContainerInventoryQty(containerInventoryQty);
             inventoryTransactionList.add(inventoryTransaction);
             shipmentIdList.add(taskDetail.getShipmentId());
         }
@@ -1714,7 +1721,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             inventoryTransaction.setQty(inventoryDetail.getQty());
             inventoryTransaction.setShipmentQty(inventoryDetail.getQty());
             BigDecimal inventoryQty = inventoryDetailService.getInventorySumQty(inventoryDetail);
+            // 获得物料在这个托盘上的库存数
+            BigDecimal containerInventoryQty = inventoryDetailService.getContainerInventorySumQty(inventoryDetail);
             inventoryTransaction.setInventoryQty(inventoryQty);
+            inventoryTransaction.setContainerInventoryQty(containerInventoryQty);
             inventoryTransactionList.add(inventoryTransaction);
             if (!inventoryDetailService.removeById(inventoryDetail)) {
                 throw new JeecgBootException("完成整盘出库任务,删除库存详情失败" + inventoryDetail.getId());