diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/operation/service/impl/OperationLogServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/operation/service/impl/OperationLogServiceImpl.java
index 3c17fb0..0bcc958 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/operation/service/impl/OperationLogServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/operation/service/impl/OperationLogServiceImpl.java
@@ -69,8 +69,11 @@ public class OperationLogServiceImpl extends ServiceImpl<OperationLogMapper, Ope
                         String message = "容器编码:{},物料编码:{},出库数量:{}";
                         operationLogList.addAll(
                             createOperationLogs(logDTO, ShipmentContainerDetail.class, "getShipmentCode", message, "getContainerCode", "getMaterialCode", "getQty"));
+                    } else if (logDTO.getTag().equals("出库任务生成")) {
+                        String message = "物料编码:{},出库数量:{}";
+                        operationLogList.addAll(createOperationLogs(logDTO, ShipmentContainerDetail.class, "getShipmentCode", message, "getMaterialCode", "getQty"));
                     } else if (logDTO.getTag().equals("详情出库")) {
-                        String message = "物料编码:{},收货数量:{}";
+                        String message = "物料编码:{},出库数量:{}";
                         operationLogList.addAll(createOperationLogs(logDTO, ShipmentDetail.class, "getShipmentCode", message, "getMaterialCode", "getTaskQty"));
                     } else if (logDTO.getTag().equals("详情配盘")) {
                         String message = "物料编码:{},数量:{},出库数量:{}";
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
index 1bf50d6..5bd50cf 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
@@ -146,8 +146,7 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl<ReceiptHeaderMapper, R
     @Override
     @Transactional
     @OperationLog(bizId = "#receiptHeader.getCode()", bizType = "'入库单追踪'", tag = "'入库完成'",
-        msg = "'上游单号:'+ #receiptHeader.getReferCode() + ',仓库编码:' + #receiptHeader.getWarehouseCode()", condition = "#minStatus == 800 && #maxStatus == 800",
-        recordReturnValue = true)
+        msg = "'上游单号:'+ #receiptHeader.getReferCode() + ',仓库编码:' + #receiptHeader.getWarehouseCode()", condition = "#minStatus == 800", recordReturnValue = true)
     public boolean updateReceiptHeaderStatus(Integer id) {
         LambdaQueryWrapper<ReceiptDetail> receiptDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
         receiptDetailLambdaQueryWrapper.eq(ReceiptDetail::getReceiptId, id);
@@ -178,10 +177,9 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl<ReceiptHeaderMapper, R
         receiptHeader.setFirstStatus(maxStatus);
         receiptHeader.setLastStatus(minStatus);
         if (!receiptHeaderService.updateById(receiptHeader)) {
-            throw new ServiceException("更新入库单:" + receiptHeader.getCode() + " 状态失败");
+            throw new ServiceException("更新入库单:" + receiptHeader.getCode() + " 头状态失败");
         }
         LogRecordContext.putVariable("minStatus", minStatus);
-        LogRecordContext.putVariable("maxStatus", maxStatus);
         LogRecordContext.putVariable("receiptHeader", receiptHeader);
         return true;
     }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
index 646cc62..64e5595 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
@@ -416,6 +416,8 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
 
     @Override
     @Transactional(rollbackFor = ServiceException.class)
+    @OperationLog(bizId = "''", bizType = "'出库单追踪'", tag = "'出库任务生成'", extra = "#extraJsonString", msg = "'任务ID:' + #taskHeaderId + ',目标出入口:' + #shipmentContainerHeader.getToPort()",
+    condition = "#shipmentContainerDetailList.size() > 0", recordReturnValue = true)
     public Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode, long shipmentOrder, int sequence, int sequenceNumber) {
         Integer preTaskNo = 0;
         if (shipmentContainerHeader == null) {
@@ -436,7 +438,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
         String toLocationCode = shipmentContainerHeader.getToLocationCode();
         String containerCode = shipmentContainerHeader.getContainerCode();
         if (StringUtils.isEmpty(fromLocationCode)) {
-            return Result.error("生成出库任务时, 出库组盘头没有起始库位号为空");
+            return Result.error("生成出库任务时, 出库组盘头没有起始库位号");
         }
         Location location = locationService.getLocationByCode(fromLocationCode, warehouseCode);
         if (location == null) {
@@ -557,6 +559,9 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
                 throw new ServiceException("生成出库任务时, 更新库存头失败");
             }
         }
+        LogRecordContext.putVariable("taskHeaderId", taskHeaderId);// 操作日志收集
+        LogRecordContext.putVariable("shipmentContainerDetailList", shipmentContainerDetailList);// 操作日志收集
+        LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(shipmentContainerDetailList));// 操作日志收集
         return Result.OK("生成出库任务成功");
     }
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
index 69dac3d..0fcd975 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
@@ -34,6 +34,7 @@ import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import cn.monitor4all.logRecord.annotation.OperationLog;
+import cn.monitor4all.logRecord.context.LogRecordContext;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -162,6 +163,8 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
     }
 
     @Override
+    @OperationLog(bizId = "#shipmentHeader.getCode()", bizType = "'出库单追踪'", tag = "'出库完成'",
+        msg = "'上游单号:'+ #shipmentHeader.getReferCode() + ',仓库编码:' + #shipmentHeader.getWarehouseCode()", condition = "#minStatus == 800", recordReturnValue = true)
     public boolean updateShipmentHeaderStatus(Integer shipmentId) {
         List<ShipmentDetail> shipmentDetailList = shipmentDetailService.getShipmentDetailListByShipmentId(shipmentId);
         ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentId);
@@ -171,8 +174,8 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
         int minStatus;
         int maxStatus;
         if (shipmentDetailList.size() == 0) {
-            minStatus = QuantityConstant.RECEIPT_HEADER_BUILD;
-            maxStatus = QuantityConstant.RECEIPT_HEADER_BUILD;
+            minStatus = QuantityConstant.SHIPMENT_HEADER_BUILD;
+            maxStatus = QuantityConstant.SHIPMENT_HEADER_BUILD;
         } else {
             minStatus = shipmentDetailList.get(0).getStatus();
             maxStatus = shipmentDetailList.get(0).getStatus();
@@ -186,11 +189,16 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
                 }
             }
         }
-
+        // 头状态是单据详情中最大的状态
+        // 尾状态是单据详情中最小的状态
         shipmentHeader.setFirstStatus(maxStatus);
         shipmentHeader.setLastStatus(minStatus);
-        boolean result = shipmentHeaderService.updateById(shipmentHeader);
-        return result;
+        if (!shipmentHeaderService.updateById(shipmentHeader)) {
+            throw new ServiceException("更新出库单:" + shipmentHeader.getCode() + " 头状态失败");
+        }
+        LogRecordContext.putVariable("minStatus", minStatus);
+        LogRecordContext.putVariable("shipmentHeader", shipmentHeader);
+        return true;
     }
 
     @Override
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java
index 0515966..e697f2a 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java
@@ -213,4 +213,24 @@ public interface ITaskHeaderService extends IService<TaskHeader> {
      * @return
      */
     Result handlePickupError(String taskNo);
+
+    Result completeReceiptTask(TaskHeader taskHeader);
+
+    Result completeShipmentTask(TaskHeader taskHeader);
+
+    Result completeCycleCountTask(TaskHeader taskHeader);
+
+    Result completeEmptyInTask(TaskHeader taskHeader);
+
+    Result completeEmptyOutTask(TaskHeader taskHeader);
+
+    Result completeTransferTask(TaskHeader taskHeader);
+
+    Result completeCheckOutTask(TaskHeader taskHeader);
+
+    Result completeOverStationTask(TaskHeader taskHeader);
+
+    Result completeManyEmptyInTask(TaskHeader taskHeader);
+
+    Result completeManyEmptyOutTask(TaskHeader taskHeader);
 }
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 e9d000b..34d02fd 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
@@ -864,35 +864,35 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             // 整盘入库、补充入库
             case QuantityConstant.TASK_TYPE_WHOLERECEIPT:
             case QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT:
-                result = completeReceiptTask(taskHeader);
+                result = taskHeaderService.completeReceiptTask(taskHeader);
                 break;
             case QuantityConstant.TASK_TYPE_WHOLESHIPMENT:
             case QuantityConstant.TASK_TYPE_SORTINGSHIPMENT:
-                result = completeShipmentTask(taskHeader);
+                result = taskHeaderService.completeShipmentTask(taskHeader);
                 break;
             case QuantityConstant.TASK_TYPE_CYCLECOUNT:
-                result = completeCycleCountTask(taskHeader);
+                result = taskHeaderService.completeCycleCountTask(taskHeader);
                 break;
             case QuantityConstant.TASK_TYPE_EMPTYRECEIPT:
-                result = completeEmptyInTask(taskHeader);
+                result = taskHeaderService.completeEmptyInTask(taskHeader);
                 break;
             case QuantityConstant.TASK_TYPE_EMPTYSHIPMENT:
-                result = completeEmptyOutTask(taskHeader);
+                result = taskHeaderService.completeEmptyOutTask(taskHeader);
                 break;
             case QuantityConstant.TASK_TYPE_TRANSFER:
-                result = completeTransferTask(taskHeader);
+                result = taskHeaderService.completeTransferTask(taskHeader);
                 break;
             case QuantityConstant.TASK_TYPE_CHECK_OUT:
-                result = completeCheckOutTask(taskHeader);
+                result = taskHeaderService.completeCheckOutTask(taskHeader);
                 break;
             case QuantityConstant.TASK_TYPE_OVER_STATION:
-                result = completeOverStationTask(taskHeader);
+                result = taskHeaderService.completeOverStationTask(taskHeader);
                 break;
             case QuantityConstant.TASK_TYPE_MANY_EMPTYRECEIPT:
-                result = completeManyEmptyInTask(taskHeader);
+                result = taskHeaderService.completeManyEmptyInTask(taskHeader);
                 break;
             case QuantityConstant.TASK_TYPE_MANY_EMPTYSHIPMENT:
-                result = completeManyEmptyOutTask(taskHeader);
+                result = taskHeaderService.completeManyEmptyOutTask(taskHeader);
                 break;
             default:
                 throw new ServiceException("不支持的任务类型" + taskType);
@@ -1094,6 +1094,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
      * @param  taskHeader 任务
      * @return            AjaxResult 完成入库任务结果
      */
+    @Override
     @Transactional(rollbackFor = Exception.class)
     @OperationLog(bizId = "''", bizType = "'入库单追踪'", tag = "'详情入库'", extra = "#extraJsonString", msg = "''", recordReturnValue = true)
     public Result completeReceiptTask(TaskHeader taskHeader) {
@@ -1253,7 +1254,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
      * @param  taskHeader 任务
      * @return            result 完成出库任务
      */
+    @Override
     @Transactional(rollbackFor = Exception.class)
+    @OperationLog(bizId = "''", bizType = "'出库单追踪'", tag = "'详情出库'", extra = "#extraJsonString", msg = "''", recordReturnValue = true)
     public Result completeShipmentTask(TaskHeader taskHeader) {
         if (taskHeader == null) {
             return Result.error("完成出库任务未找到,执行中止");
@@ -1363,10 +1366,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             }
             containerStatus = QuantityConstant.STATUS_CONTAINER_SOME;
         }
-        success = shipmentDetailService.updateBatchById(shipmentDetailList);
-        if (!success) {
-            throw new ServiceException("完成出库任务,更新出库详情失败");
-        }
         success = inventoryTransactionService.saveBatch(inventoryTransactionList);
         if (!success) {
             throw new ServiceException("完成出库任务,保存库存详情失败");
@@ -1415,10 +1414,18 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 throw new ServiceException("合并入库库存失败");
             }
         }
+        success = shipmentDetailService.updateBatchById(shipmentDetailList);
+        if (!success) {
+            throw new ServiceException("完成出库任务,更新出库详情失败");
+        }
         shipmentIdList = shipmentIdList.stream().distinct().collect(Collectors.toList());
         for (Integer shipmentId : shipmentIdList) {
-            shipmentHeaderService.updateShipmentHeaderStatus(shipmentId);
+            success = shipmentHeaderService.updateShipmentHeaderStatus(shipmentId);
+            if (!success) {
+                throw new ServiceException("完成出库任务,更新出库单头失败");
+            }
         }
+        LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(shipmentDetailList));
         return Result.ok("完成出库任务");
     }
 
@@ -1478,6 +1485,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
      * @param  taskHeader 任务
      * @return            Result 完成入库任务结果
      */
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeEmptyInTask(TaskHeader taskHeader) {
         String warehouseCode = taskHeader.getWarehouseCode();
@@ -1522,6 +1530,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
      * @param  taskHeader
      * @return
      */
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeCycleCountTask(TaskHeader taskHeader) {
         /*
@@ -1744,6 +1753,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
      * @param  taskHeader 任务
      * @return            Result 完成出库任务结果
      */
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeEmptyOutTask(TaskHeader taskHeader) {
         String warehouseCode = taskHeader.getWarehouseCode();
@@ -1798,6 +1808,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
      * @param  taskHeader 任务
      * @return            Result 完成移库任务结果
      */
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeTransferTask(TaskHeader taskHeader) {
         String warehouseCode = taskHeader.getWarehouseCode();
@@ -1906,6 +1917,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
      * @param  taskHeader 任务
      * @return            Result 完成出库查看任务结果
      */
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeCheckOutTask(TaskHeader taskHeader) {
         String warehouseCode = taskHeader.getWarehouseCode();
@@ -1975,6 +1987,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
      * @param  taskHeader 任务
      * @return            Result 完成跨站任务结果
      */
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeOverStationTask(TaskHeader taskHeader) {
         String warehouseCode = taskHeader.getWarehouseCode();
@@ -2022,6 +2035,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
      * @param  taskHeader 任务
      * @return            Result 完成空托盘组入库任务结果
      */
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeManyEmptyInTask(TaskHeader taskHeader) {
         String warehouseCode = taskHeader.getWarehouseCode();
@@ -2065,6 +2079,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
      * @param  taskHeader 任务
      * @return            Result 完成空托盘组出库任务结果
      */
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeManyEmptyOutTask(TaskHeader taskHeader) {
         String warehouseCode = taskHeader.getWarehouseCode();