diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java
index 236a4fc..cd83864 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java
@@ -252,27 +252,8 @@ public class ShipmentHeaderController extends JeecgController<ShipmentHeader, IS
     @ApiOperation(value = "出库单详情-编辑", notes = "出库单详情-编辑")
     @RequiresPermissions("shipmentDetail:edit")
     @RequestMapping(value = "/editShipmentDetail", method = {RequestMethod.PUT, RequestMethod.POST})
-    public Result<String> editShipmentDetail(@RequestBody ShipmentDetail shipmentDetail) {
-        if (shipmentDetail == null) {
-            return Result.error("修改详情失败, 没有找到出库单详情");
-        }
-        ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentDetail.getShipmentId());
-        if (shipmentHeader == null) {
-            return Result.error("修改详情失败, 没有找到出库单");
-        }
-        if (shipmentHeader.getFirstStatus().intValue() != QuantityConstant.SHIPMENT_HEADER_BUILD) {
-            return Result.error("修改详情失败, 出库单必须是新建状态才能修改详情");
-        }
-        boolean success = shipmentDetailService.updateById(shipmentDetail);
-        if (!success) {
-            throw new JeecgBootException("修改详情失败");
-        }
-        success = shipmentHeaderService.updateShipmentHeader(shipmentDetail.getShipmentId());
-        if (!success) {
-            throw new JeecgBootException("修改详情时,更新出库单头数量失败");
-        }
-        LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(Collections.singletonList(shipmentDetail)));// 操作日志收集
-        return Result.OK("编辑成功!");
+    public Result<?> editShipmentDetail(@RequestBody ShipmentDetail shipmentDetail) {
+        return shipmentHeaderService.updateShipmentHeader(shipmentDetail);
     }
 
     /**
@@ -285,28 +266,8 @@ public class ShipmentHeaderController extends JeecgController<ShipmentHeader, IS
     @RequiresPermissions("shipmentDetail:delete")
     @DeleteMapping(value = "/deleteShipmentDetail")
     @OperationLog(bizId = "''", bizType = "'出库单追踪'", tag = "'详情删除'", extra = "#extraJsonString", msg = "''", recordReturnValue = true)
-    public Result<String> deleteShipmentDetail(@RequestParam(name = "id", required = true) String id) {
-        ShipmentDetail shipmentDetail = shipmentDetailService.getById(id);
-        if (shipmentDetail == null) {
-            return Result.error("删除失败, 没有找到出库单详情");
-        }
-        ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentDetail.getShipmentId());
-        if (shipmentHeader == null) {
-            return Result.error("删除失败, 没有找到出库单");
-        }
-        if (shipmentHeader.getFirstStatus().intValue() != QuantityConstant.SHIPMENT_HEADER_BUILD) {
-            return Result.error("删除失败, 出库单必须是新建状态才能删除详情");
-        }
-        boolean success = shipmentDetailService.removeById(id);
-        if (!success) {
-            throw new JeecgBootException("删除详情失败");
-        }
-        success = shipmentHeaderService.updateShipmentHeader(shipmentDetail.getShipmentId());
-        if (!success) {
-            throw new JeecgBootException("更新出库单头数量失败");
-        }
-        LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(Collections.singletonList(shipmentDetail)));// 操作日志收集
-        return Result.OK("删除成功!");
+    public Result<?> deleteShipmentDetail(@RequestParam(name = "id", required = true) String id) {
+        return shipmentHeaderService.deleteShipmentDetail(id);
     }
 
     /**
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java
index 9911e95..d90bcf6 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java
@@ -7,6 +7,7 @@ import java.util.List;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfig;
 import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfigDetail;
+import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;
 
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -50,4 +51,8 @@ public interface IShipmentHeaderService extends IService<ShipmentHeader> {
     Result autoShipmentAdvice(String shipmentCode, String warehouseCode);
 
     Result createShipment(WaveConfig waveConfig, List<WaveConfigDetail> waveConfigDetailList);
+
+    Result updateShipmentHeader(ShipmentDetail shipmentDetail);
+
+    Result deleteShipmentDetail(String shipmentDetailId);
 }
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 5cc02e8..a88d766 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
@@ -4,12 +4,14 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
+import com.alibaba.fastjson.JSON;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.wms.config.container.service.IContainerService;
@@ -256,6 +258,7 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean updateShipmentHeader(Integer shipmentId) {
         List<ShipmentDetail> shipmentDetailList = shipmentDetailService.getShipmentDetailListByShipmentId(shipmentId);
         ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentId);
@@ -607,6 +610,57 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result updateShipmentHeader(ShipmentDetail shipmentDetail) {
+        if (shipmentDetail == null) {
+            return Result.error("修改详情失败, 没有找到出库单详情");
+        }
+        ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentDetail.getShipmentId());
+        if (shipmentHeader == null) {
+            return Result.error("修改详情失败, 没有找到出库单");
+        }
+        if (shipmentHeader.getFirstStatus().intValue() != QuantityConstant.SHIPMENT_HEADER_BUILD) {
+            return Result.error("修改详情失败, 出库单必须是新建状态才能修改详情");
+        }
+        boolean success = shipmentDetailService.updateById(shipmentDetail);
+        if (!success) {
+            throw new JeecgBootException("修改详情失败");
+        }
+        success = shipmentHeaderService.updateShipmentHeader(shipmentDetail.getShipmentId());
+        if (!success) {
+            throw new JeecgBootException("修改详情时,更新出库单头数量失败");
+        }
+        LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(Collections.singletonList(shipmentDetail)));// 操作日志收集
+        return Result.OK("编辑成功!");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result deleteShipmentDetail(String shipmentDetailId) {
+        ShipmentDetail shipmentDetail = shipmentDetailService.getById(shipmentDetailId);
+        if (shipmentDetail == null) {
+            return Result.error("删除失败, 没有找到出库单详情");
+        }
+        ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentDetail.getShipmentId());
+        if (shipmentHeader == null) {
+            return Result.error("删除失败, 没有找到出库单");
+        }
+        if (shipmentHeader.getFirstStatus().intValue() != QuantityConstant.SHIPMENT_HEADER_BUILD) {
+            return Result.error("删除失败, 出库单必须是新建状态才能删除详情");
+        }
+        boolean success = shipmentDetailService.removeById(shipmentDetailId);
+        if (!success) {
+            throw new JeecgBootException("删除详情失败");
+        }
+        success = shipmentHeaderService.updateShipmentHeader(shipmentDetail.getShipmentId());
+        if (!success) {
+            throw new JeecgBootException("更新出库单头数量失败");
+        }
+        LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(Collections.singletonList(shipmentDetail)));// 操作日志收集
+        return Result.OK("删除成功!");
+    }
+
+    @Override
     public boolean updateById(ShipmentHeader shipmentHeader) {
         LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
         shipmentHeaderLambdaQueryWrapper.eq(ShipmentHeader::getId, shipmentHeader.getId())