diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/domain/vo/Test.java b/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/domain/vo/Test.java
new file mode 100644
index 0000000..2ca7316
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/domain/vo/Test.java
@@ -0,0 +1,23 @@
+package com.huaheng.pc.inventory.inventoryTransaction.domain.vo;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.io.IOException;
+import java.io.StringReader;
+
+public class Test {
+    public static InventoryRankVO deserializeInventoryRankVO(String jsonString) throws IOException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        return objectMapper.readValue(new StringReader(jsonString), InventoryRankVO.class);
+    }
+
+    public static void main(String[] args) throws IOException {
+        String jsonString = "{\"materialCode\":\"SW035-S-02T25\",\"inQty\":88,\"outQty\":396,\"materialName\":\"内胎\",\"materialSpec\":\"焊接件\",\"materialUnit\":\"件\"}";
+
+        InventoryRankVO inventoryRankVO = deserializeInventoryRankVO(jsonString);
+
+        System.out.println("Material Code: " + inventoryRankVO.getMaterialCode());
+        System.out.println("In Quantity: " + inventoryRankVO.getInQty());
+        System.out.println("Out Quantity: " + inventoryRankVO.getOutQty());
+    }
+}
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java
index b402ce8..f8d0b9a 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java
@@ -572,14 +572,17 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             }
 
             List<InventoryDetail> inventoryList = shippingCombinationService.getInventorys(item, true, false, false);
-            //去除已锁的库存
+            //去除已锁的库存列表
             ArrayList<InventoryDetail> removeInventoryList = new ArrayList<>();
+            //获取未完成的任务列表
             List<TaskHeader> taskHeaderList = taskHeaderService.getUnCompleteTaskList();
+            //获取未完成的入库组盘列表
             List<ReceiptContainerHeader> receiptContainerHeaderList = receiptContainerHeaderService.getUnCompleteCombineList();
             boolean lock = false;
             for (InventoryDetail inventoryDetail : inventoryList) {
                 Container container = containerService.getOne(new LambdaQueryWrapper<Container>().eq(Container::getCode, inventoryDetail.getContainerCode()));
                 if (QuantityConstant.STATUS_CONTAINER_LOCK.equals(container.getStatus())) {
+                    //托盘锁定的
                     removeInventoryList.add(inventoryDetail);
                     lock = true;
                 }
@@ -603,14 +606,14 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
                 return AjaxResult.error("'物料名称:" + item.getMaterialName() + ",物料编码:" + item.getMaterialCode() + "' 所在托盘全部处于锁定状态,请完成或取消任务后再进行组盘");
             }
 
-            //if (inventoryList.isEmpty() && item.getWaveId() != 0) {
-            //    Wave wave = waveService.getById(item.getWaveId());
-            //    wave.setStatus(QuantityConstant.WAVE_STATUS_ERROR);
-            //    wave.setCurrentWaveStep(QuantityConstant.WAVE_STEP_ERROR);
-            //    wave.setLastWaveStep(QuantityConstant.WAVE_STEP_BUILD);
-            //    waveService.updateById(wave);
-            //    throw new ServiceException("主单为" + item.getShipmentCode() + "子单id为" + item.getId() + "的单据没有库存,波次失败");
-            //}
+            if (inventoryList.isEmpty() && item.getWaveId() != 0) {
+                Wave wave = waveService.getById(item.getWaveId());
+                wave.setStatus(QuantityConstant.WAVE_STATUS_ERROR);
+                wave.setCurrentWaveStep(QuantityConstant.WAVE_STEP_ERROR);
+                wave.setLastWaveStep(QuantityConstant.WAVE_STEP_BUILD);
+                waveService.updateById(wave);
+                throw new ServiceException("主单为" + item.getShipmentCode() + "子单id为" + item.getId() + "的单据没有库存,波次失败");
+            }
             if (inventoryList.isEmpty()) {
                 num = num + 1;
             } else {
@@ -620,16 +623,16 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
                         break;
                     }
 
-                    if (inventory.getLocationCode().startsWith("K05") || inventory.getLocationCode().startsWith("K06") ||
-                            inventory.getLocationCode().startsWith("K07") || inventory.getLocationCode().startsWith("K08")) {
-                        String value = configService.getKey("shipmentTaskBy5RoadLimit");
-                        if (StringUtils.isNotEmpty(value)) {
-                            if (taskHeaderService.getShipmentTaskBy5Road() > Integer.parseInt(value)) {
-                                throw new ServiceException("5号巷道不能存在超过" + value + "个组盘和任务");
-                            }
-                        }
-
-                    }
+                    //if (inventory.getLocationCode().startsWith("K05") || inventory.getLocationCode().startsWith("K06") ||
+                    //        inventory.getLocationCode().startsWith("K07") || inventory.getLocationCode().startsWith("K08")) {
+                    //    String value = configService.getKey("shipmentTaskBy5RoadLimit");
+                    //    if (StringUtils.isNotEmpty(value)) {
+                    //        if (taskHeaderService.getShipmentTaskBy5Road() > Integer.parseInt(value)) {
+                    //            throw new ServiceException("5号巷道不能存在超过" + value + "个组盘和任务");
+                    //        }
+                    //    }
+                    //
+                    //}
                     BigDecimal inventoryQty = inventory.getQty().subtract(inventory.getTaskQty());
                     ShipmentCombinationModel shipmentCombination = new ShipmentCombinationModel();
                     shipmentCombination.setInventoryDetailId(inventory.getId());
@@ -642,8 +645,10 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
                     } else {
                         shipmentCombination.setShipQty(inventoryQty);
                     }
-                    ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.combination(shipmentCombination, isAutoShipment);
-                    list.add(shipmentContainerHeader.getId());
+                    if (shipmentCombination.getShipQty().compareTo(new BigDecimal(0)) > 0) {
+                        ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.combination(shipmentCombination, isAutoShipment);
+                        list.add(shipmentContainerHeader.getId());
+                    }
                     shipmentQty = shipmentQty.subtract(shipmentCombination.getShipQty());
                 }
             }
diff --git a/src/main/java/com/huaheng/pc/system/user/controller/UserController.java b/src/main/java/com/huaheng/pc/system/user/controller/UserController.java
index ee7280e..a94181c 100644
--- a/src/main/java/com/huaheng/pc/system/user/controller/UserController.java
+++ b/src/main/java/com/huaheng/pc/system/user/controller/UserController.java
@@ -109,10 +109,10 @@ public class UserController extends BaseController {
         if (StringUtils.isNotNull(user.getId()) && User.unAdmin(user.getId())) {
             return error("不允许修改超级管理员用户");
         }
-        List<Integer> roleList = user.getRoleIds();
-        if (roleList != null && roleList.size() > 1) {
-            return error("一个用户不允许有多个角色");
-        }
+        //List<Integer> roleList = user.getRoleIds();
+        //if (roleList != null && roleList.size() > 1) {
+        //    return error("一个用户不允许有多个角色");
+        //}
         AjaxResult ajaxResult = toAjax(userService.insertUser(user));
         return ajaxResult;
     }
@@ -142,10 +142,10 @@ public class UserController extends BaseController {
         if (StringUtils.isNotNull(user.getId()) && User.unAdmin(user.getId())) {
             return error("不允许修改超级管理员用户");
         }
-        List<Integer> roleList = user.getRoleIds();
-        if (roleList != null && roleList.size() > 1) {
-            return error("一个用户不允许有多个角色");
-        }
+        //List<Integer> roleList = user.getRoleIds();
+        //if (roleList != null && roleList.size() > 1) {
+        //    return error("一个用户不允许有多个角色");
+        //}
         AjaxResult ajaxResult = toAjax(userService.updateUser(user));
 
         if (ShiroUtils.getLoginName().equals(user.getUserName())) {
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java
index f265180..670b957 100644
--- a/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java
@@ -366,7 +366,9 @@ public class ShipmentTaskService {
                 if (inventoryDetails != null && !inventoryDetails.isEmpty()) {
                     for (InventoryDetail inventoryDetail : inventoryDetails) {
                         inventoryDetail.setLocationCode(task.getToLocation());
-                        inventoryDetailService.updateById(inventoryDetail);
+                        if (!inventoryDetailService.updateById(inventoryDetail)) {
+                            throw new ServiceException("完成出库任务,库存修改目标库位时失败" + inventoryDetail.getId());
+                        }
                     }
                 }
             }
@@ -376,7 +378,7 @@ public class ShipmentTaskService {
         for (TaskDetail taskDetail : taskDetails) {
             if (taskDetail.getStatus() < QuantityConstant.TASK_STATUS_RUNNING) {
                 materialCodes.add(taskDetail.getMaterialCode());
-                //获取出库子货箱
+                //获取出库组盘明细
                 ShipmentContainerDetail shipmentContainerDetail = shipmentContainerDetailService.getById(taskDetail.getAllocationId());
                 //获取对应库存记录
                 InventoryDetail inventoryDetail = inventoryDetailService.getById(taskDetail.getToInventoryId());