koushanshan 2 лет назад
Родитель
Сommit
6cef44b865

+ 9 - 0
src/main/java/com/dk/mdm/infrastructure/convert/ivt/OutboundItemConvert.java

@@ -5,6 +5,8 @@ import com.dk.mdm.model.response.ivt.OutboundItemResponse;
 import com.dk.mdm.model.vo.ivt.OutboundItemVO;
 import org.mapstruct.Mapper;
 
+import java.util.List;
+
 /**
  * @desc   : OutboundItem转换类
  * @author : 付斌
@@ -26,4 +28,11 @@ public interface OutboundItemConvert {
      * @author : 寇珊珊
      */
     OutboundItemVO convertResToVO(OutboundItemResponse outboundItemResponse);
+
+    /**
+     * @desc   : 转换ResList为VOList
+     * @date   : 2024/3/29 11:10
+     * @author : 寇珊珊
+     */
+    List<OutboundItemVO> convertResListToVOList(List<OutboundItemResponse> outboundItemResponse);
 }

+ 154 - 82
src/main/java/com/dk/mdm/service/ivt/inbound/InboundPurchaseService.java

@@ -403,10 +403,15 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                     //region  销售明细
                     if (inboundItemVO.getFromItemId() != null) {
                         //根据id查询
+                        PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
                         PurchaseItem purchaseItem = new PurchaseItem();
                         purchaseItem.setItemId(inboundItemVO.getFromItemId());
                         purchaseItem.setIntoQty(inboundItemResponse.getIntoQty().negate().add(inboundItemVO.getIntoingQty()));
                         purchaseItem.setIntoAmt(inboundItemResponse.getIntoAmt().negate().add(inboundItemVO.getIntoingAmt()));
+                        //入库状态
+                        String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty(),
+                                purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
+                        purchaseItem.setIntoStatus(intoStatus);
                         int countRow = purchaseItemMapper.updateById(purchaseItem);
                         //数量超出
                         if (countRow == 0) {
@@ -421,8 +426,8 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                 BigDecimal delIntoQty = BigDecimal.ZERO;
                 BigDecimal delIntoAmt = BigDecimal.ZERO;
                 if (inboundVO.getDeleteItemList() != null) {
-                    delIntoQty = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-                    delIntoAmt = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    delIntoQty = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                    delIntoAmt = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
                     for (InboundItemVO inboundItemVO : inboundVO.getDeleteItemList()) {
                         if (inboundItemVO.getItemId() != null) {
                             InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
@@ -436,10 +441,17 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                         //region  销售明细
                         if (inboundItemVO.getFromItemId() != null) {
                             //根据id查询
+                            PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
                             PurchaseItem purchaseItem = new PurchaseItem();
                             purchaseItem.setItemId(inboundItemVO.getFromItemId());
-                            purchaseItem.setIntoQty(inboundItemVO.getIntoingQty().negate());
-                            purchaseItem.setIntoAmt(inboundItemVO.getIntoingAmt().negate());
+                            purchaseItem.setIntoQty(inboundItemVO.getIntoQty().negate());
+                            purchaseItem.setIntoAmt(inboundItemVO.getIntoAmt().negate());
+                            purchaseItem.setIntoingQty(inboundItemVO.getIntoQty());
+                            purchaseItem.setIntoingAmt(inboundItemVO.getIntoAmt());
+                            //入库状态
+                            String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
+                                    purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
+                            purchaseItem.setIntoStatus(intoStatus);
                             int countRow = purchaseItemMapper.updateById(purchaseItem);
                             //数量超出
                             if (countRow == 0) {
@@ -463,17 +475,27 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                 //endregion
 
                 //region 修改销售总单
-                Purchase purchase = new Purchase();
-                purchase.setPurId(inboundVO.getFromId());
-                purchase.setIntoQty(inboundResponse.getIntoQty().negate().add(sumQty).subtract(delIntoQty));
-                purchase.setIntoAmt(inboundResponse.getIntoAmt().negate().add(sumAmt).subtract(delIntoAmt));
-                //修改
-                int countRow = purchaseMapper.updateById(purchase);
-                //数量超出
-                if (countRow == 0) {
-                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
+                if (inboundVO.getFromId() != null) {
+                    //根据id查询
+                    PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
+                    Purchase purchase = new Purchase();
+                    purchase.setPurId(inboundVO.getFromId());
+                    purchase.setIntoQty(inboundResponse.getIntoQty().negate().add(sumQty).subtract(delIntoQty));
+                    purchase.setIntoAmt(inboundResponse.getIntoAmt().negate().add(sumAmt).subtract(delIntoAmt));
+                    purchase.setIntoingQty(delIntoQty);
+                    purchase.setIntoingAmt(delIntoAmt);
+                    //入库状态
+                    String intoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty().add(purchase.getIntoingQty()),
+                            purchaseResponse.getIntoQty().add(purchase.getIntoQty()), purchaseResponse.getSumQuantity());
+                    purchase.setIntoStatus(intoStatus);
+                    //修改
+                    int countRow = purchaseMapper.updateById(purchase);
+                    //数量超出
+                    if (countRow == 0) {
+                        throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
+                    }
+                    //endregion
                 }
-                //endregion
 
                 //region  账款
                 if (inboundVO.getReceivableId() != null) {
@@ -495,8 +517,6 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                 //region 修改明细
                 List<InboundItemVO> itemList = inboundVO.getItemList();
                 for (InboundItemVO inboundItemVO : itemList) {
-                    //根据id查询 获取到还未进行修改的数据
-                    InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVO.getItemId());
 
                     //region  不能新建
                     if (inboundItemVO.getFromItemId() == null) {
@@ -505,6 +525,9 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                     }
                     //endregion
 
+                    //根据id查询 获取到还未进行修改的数据
+                    InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVO.getItemId());
+
                     //region  编辑明细
                     if (inboundItemVO.getItemId() != null) {
                         InboundItem inboundItem = new InboundItem();
@@ -540,11 +563,16 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                     //region  销售明细
                     if (inboundItemVO.getFromItemId() != null) {
                         //根据id查询
+                        PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
                         PurchaseItem purchaseItem = new PurchaseItem();
                         purchaseItem.setItemId(inboundItemVO.getFromItemId());
                         //本次修改几个传几个(负数)  sql中是原数据+本次修改数据
                         purchaseItem.setIntoingQty(inboundItemResponse.getIntoingQty().negate().add(inboundItemVO.getIntoingQty()));
                         purchaseItem.setIntoingAmt(inboundItemResponse.getIntoingAmt().negate().add(inboundItemVO.getIntoingAmt()));
+                        //入库状态
+                        String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
+                                purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
+                        purchaseItem.setIntoStatus(intoStatus);
                         int countRow = purchaseItemMapper.updateById(purchaseItem);
                         //数量超出
                         if (countRow == 0) {
@@ -577,10 +605,15 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                         //region  销售明细
                         if (inboundItemVO.getFromItemId() != null) {
                             //根据id查询
+                            PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
                             PurchaseItem purchaseItem = new PurchaseItem();
                             purchaseItem.setItemId(inboundItemVO.getFromItemId());
-                            purchaseItem.setIntoQty(inboundItemVO.getIntoingQty().negate());
-                            purchaseItem.setIntoAmt(inboundItemVO.getIntoingAmt().negate());
+                            purchaseItem.setIntoingQty(inboundItemVO.getIntoingQty().negate());
+                            purchaseItem.setIntoingAmt(inboundItemVO.getIntoingAmt().negate());
+                            //入库状态
+                            String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
+                                    purchaseItemResponse.getIntoQty(), purchaseItemResponse.getItemQty());
+                            purchaseItem.setIntoStatus(intoStatus);
                             int countRow = purchaseItemMapper.updateById(purchaseItem);
                             //数量超出
                             if (countRow == 0) {
@@ -605,15 +638,23 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                 //endregion
 
                 //region 修改采购总单
-                Purchase purchase = new Purchase();
-                purchase.setPurId(inboundVO.getFromId());
-                purchase.setIntoingQty(inboundResponse.getIntoingQty().negate().add(sumQty).subtract(delIntoQty));
-                purchase.setIntoingAmt(inboundResponse.getIntoingAmt().negate().add(sumAmt).subtract(delIntoAmt));
-                //修改
-                int countRow = purchaseMapper.updateById(purchase);
-                //数量超出
-                if (countRow == 0) {
-                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
+                if (inboundVO.getFromId() != null) {
+                    //根据id查询
+                    PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
+                    Purchase purchase = new Purchase();
+                    purchase.setPurId(inboundVO.getFromId());
+                    purchase.setIntoingQty(inboundResponse.getIntoingQty().negate().add(sumQty).subtract(delIntoQty));
+                    purchase.setIntoingAmt(inboundResponse.getIntoingAmt().negate().add(sumAmt).subtract(delIntoAmt));
+                    //入库状态
+                    String intoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty().add(purchase.getIntoingQty()),
+                            purchaseResponse.getIntoQty(), purchaseResponse.getSumQuantity());
+                    purchase.setIntoStatus(intoStatus);
+                    //修改
+                    int countRow = purchaseMapper.updateById(purchase);
+                    //数量超出
+                    if (countRow == 0) {
+                        throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
+                    }
                 }
                 //endregion
             }
@@ -656,7 +697,7 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                 inboundItemResponse.setIntoAmt(inboundItemResponse.getIntoAmt().negate());
                 //endregion
 
-                //赋值
+                //region  编辑明细  赋值
                 InboundItem inboundItem = new InboundItem();
                 inboundItem.setItemId(inboundItemResponse.getItemId());
                 inboundItem.setFlgValid(false);
@@ -665,14 +706,20 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                         new UpdateWrapper<InboundItem>().lambda()
                                 .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
                 );
+                //endregion
 
                 //region  销售明细
                 if (inboundItemResponse.getFromItemId() != null) {
                     //根据id查询
+                    PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemResponse.getFromItemId());
                     PurchaseItem purchaseItem = new PurchaseItem();
                     purchaseItem.setItemId(inboundItemResponse.getFromItemId());
-                    purchaseItem.setIntoQty(BigDecimal.ZERO);
-                    purchaseItem.setIntoAmt(BigDecimal.ZERO);
+                    purchaseItem.setIntoQty(inboundItemResponse.getIntoQty().negate());
+                    purchaseItem.setIntoAmt(inboundItemResponse.getIntoAmt().negate());
+                    //入库状态
+                    String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty(),
+                            purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
+                    purchaseItem.setIntoStatus(intoStatus);
                     int countRow = purchaseItemMapper.updateById(purchaseItem);
                     //数量超出
                     if (countRow == 0) {
@@ -694,16 +741,25 @@ public class InboundPurchaseService extends BaseService<Inbound> {
             //endregion
 
             //region 修改销售总单
-            Purchase purchase = new Purchase();
-            purchase.setPurId(inboundResponse.getFromId());
-            purchase.setIntoQty(BigDecimal.ZERO);
-            purchase.setIntoQty(BigDecimal.ZERO);
-            //修改
-            int countRow = purchaseMapper.updateById(purchase);
-            //数量超出
-            if (countRow == 0) {
-                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
+            if (inboundResponse.getFromId() != null) {
+                //根据id查询
+                PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundResponse.getFromId());
+                Purchase purchase = new Purchase();
+                purchase.setPurId(inboundResponse.getFromId());
+                purchase.setIntoQty(inboundResponse.getIntoQty().negate());
+                purchase.setIntoQty(inboundResponse.getIntoAmt().negate());
+                //入库状态
+                String intoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty(),
+                        purchaseResponse.getIntoQty().add(purchase.getIntoQty()), purchaseResponse.getSumQuantity());
+                purchase.setIntoStatus(intoStatus);
+                //修改
+                int countRow = purchaseMapper.updateById(purchase);
+                //数量超出
+                if (countRow == 0) {
+                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
+                }
             }
+
             //endregion
 
             //region  账款
@@ -725,7 +781,7 @@ public class InboundPurchaseService extends BaseService<Inbound> {
         if (!inboundResponse.getFlgAutoHandle() && Constant.FlgHandleSetting.FALSE.getValue().equals(inboundResponse.getFlgHandleSetting())) {
             //region 修改明细
             for (InboundItemResponse inboundItemResponse : inboundItemResponseList) {
-                //赋值
+                //region 编辑明细 赋值
                 InboundItem inboundItem = new InboundItem();
                 inboundItem.setItemId(inboundItemResponse.getItemId());
                 inboundItem.setIntoingQty(BigDecimal.ZERO);
@@ -735,13 +791,20 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                         new UpdateWrapper<InboundItem>().lambda()
                                 .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
                 );
+                //endregion
+
                 //region  销售明细
                 if (inboundItemResponse.getFromItemId() != null) {
                     //根据id查询
+                    PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemResponse.getFromItemId());
                     PurchaseItem purchaseItem = new PurchaseItem();
                     purchaseItem.setItemId(inboundItemResponse.getFromItemId());
                     purchaseItem.setIntoingQty(inboundItemResponse.getIntoingQty().negate());
                     purchaseItem.setIntoingAmt(inboundItemResponse.getIntoingAmt().negate());
+                    //入库状态
+                    String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
+                            purchaseItemResponse.getIntoQty(), purchaseItemResponse.getItemQty());
+                    purchaseItem.setIntoStatus(intoStatus);
                     int countRow = purchaseItemMapper.updateById(purchaseItem);
                     //数量超出
                     if (countRow == 0) {
@@ -751,6 +814,7 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                 //endregion
             }
             //endregion
+
             //region  修改入库总单
             Inbound inbound = new Inbound();
             inbound.setIntoId(inboundResponse.getIntoId());
@@ -761,17 +825,27 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                     new UpdateWrapper<Inbound>().lambda().eq(Inbound::getIntoId, UUID.fromString(inbound.getIntoId()))
             );
             //endregion
+
             //region 修改销售总单
-            Purchase purchase = new Purchase();
-            purchase.setPurId(inboundResponse.getFromId());
-            purchase.setIntoingQty(inboundResponse.getIntoingQty().negate());
-            purchase.setIntoingAmt(inboundResponse.getIntoingAmt().negate());
-            //修改
-            int countRow = purchaseMapper.updateById(purchase);
-            //数量超出
-            if (countRow == 0) {
-                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
+            if (inboundResponse.getFromId() != null) {
+                //根据id查询
+                PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundResponse.getFromId());
+                Purchase purchase = new Purchase();
+                purchase.setPurId(inboundResponse.getFromId());
+                purchase.setIntoingQty(inboundResponse.getIntoingQty().negate());
+                purchase.setIntoingAmt(inboundResponse.getIntoingAmt().negate());
+                //入库状态
+                String intoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty().add(purchase.getIntoingQty()),
+                        purchaseResponse.getIntoQty(), purchaseResponse.getSumQuantity());
+                purchase.setIntoStatus(intoStatus);
+                //修改
+                int countRow = purchaseMapper.updateById(purchase);
+                //数量超出
+                if (countRow == 0) {
+                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
+                }
             }
+
             //endregion
         }
         //endregion
@@ -818,29 +892,8 @@ public class InboundPurchaseService extends BaseService<Inbound> {
             inboundItemResponse.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
             //endregion
 
-            //region 采购明细
-            //根据id查询
-            PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
-            //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
-            PurchaseItem purchaseItem = new PurchaseItem();
-            purchaseItem.setItemId(inboundItemVO.getFromItemId());
-            purchaseItem.setIntoingQty(inboundItemResponse.getIntoingQty().negate());
-            purchaseItem.setIntoingAmt(inboundItemResponse.getIntoingAmt().negate());
-            purchaseItem.setIntoQty(inboundItemVO.getIntoQty());
-            purchaseItem.setIntoAmt(inboundItemVO.getIntoAmt());
-            //入库状态
-            String purItemIntoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
-                    purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
-            purchaseItem.setIntoStatus(purItemIntoStatus);
-            int countRow = purchaseItemMapper.updateById(purchaseItem);
-            //数量超出
-            if (countRow == 0) {
-                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
-            }
-            //endregion
-
             //region 编辑入库明细
-            if(inboundItemVO.getItemId()!=null){
+            if (inboundItemVO.getItemId() != null) {
                 inboundItemVO
                         .setIntoQty(inboundItemResponse.getIntoQty().add(inboundItemVO.getIntoingQty()))
                         .setIntoAmt(inboundItemResponse.getIntoAmt().add(inboundItemVO.getIntoingAmt()))
@@ -863,7 +916,7 @@ public class InboundPurchaseService extends BaseService<Inbound> {
             //endregion
 
             //region 新建明细
-            else{
+            else {
                 inboundItemVO
                         .setIntoQty(inboundItemVO.getIntoingQty())
                         .setIntoAmt(inboundItemVO.getIntoingAmt())
@@ -883,6 +936,27 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                 inboundItemMapper.insert(inboundItem);
             }
             //endregion
+
+            //region 采购明细
+            //根据id查询
+            PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
+            //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
+            PurchaseItem purchaseItem = new PurchaseItem();
+            purchaseItem.setItemId(inboundItemVO.getFromItemId());
+            purchaseItem.setIntoingQty(inboundItemVO.getIntoQty().negate());
+            purchaseItem.setIntoingAmt(inboundItemVO.getIntoAmt().negate());
+            purchaseItem.setIntoQty(inboundItemVO.getIntoQty());
+            purchaseItem.setIntoAmt(inboundItemVO.getIntoAmt());
+            //入库状态
+            String purItemIntoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
+                    purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
+            purchaseItem.setIntoStatus(purItemIntoStatus);
+            int countRow = purchaseItemMapper.updateById(purchaseItem);
+            //数量超出
+            if (countRow == 0) {
+                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
+            }
+            //endregion
         }
         //endregion
 
@@ -892,7 +966,7 @@ public class InboundPurchaseService extends BaseService<Inbound> {
         BigDecimal delIntoQty = BigDecimal.ZERO;
         BigDecimal delIntoAmt = BigDecimal.ZERO;
         if (inboundVO.getDeleteItemList() != null) {
-            delIntoingAmt = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            delIntoingQty = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
             delIntoingAmt = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
             delIntoQty = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
             delIntoAmt = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -961,10 +1035,8 @@ public class InboundPurchaseService extends BaseService<Inbound> {
             purchase.setPurId(inboundVO.getFromId());
             purchase.setIntoQty(sumIntoQty.subtract(delIntoQty));
             purchase.setIntoAmt(sumIntoAmt.subtract(delIntoAmt));
-            if (inboundResponse != null) {
-                purchase.setIntoingQty(inboundResponse.getIntoingQty().negate().subtract(delIntoingQty));
-                purchase.setIntoingAmt(inboundResponse.getIntoingAmt().negate().subtract(delIntoingAmt));
-            }
+            purchase.setIntoingQty((inboundResponse.getIntoingQty().add(delIntoingQty)).negate());
+            purchase.setIntoingAmt((inboundResponse.getIntoingAmt().add(delIntoingAmt)).negate());
             //根据id查询
             PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
             //入库状态
@@ -1007,13 +1079,15 @@ public class InboundPurchaseService extends BaseService<Inbound> {
         //endregion
 
         //region 退账
-        if (inboundVO.getReceivableId() != null) {
+        if (inboundResponse.getReceivableId() != null) {
             accountService.reversePayable(inboundVO.getIntoId(), Constant.InventoryDocCode.INTOBOUND.getTableName());
         }
         //endregion
 
         //region 修改订单数据信息
         if (inboundResponse.getFromId() != null) {
+            //根据id查询
+            PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
             //赋值  (这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
             Purchase purchase = new Purchase();
             purchase.setPurId(inboundResponse.getFromId());
@@ -1021,8 +1095,6 @@ public class InboundPurchaseService extends BaseService<Inbound> {
             purchase.setIntoAmt(inboundResponse.getIntoAmt().negate());
             purchase.setIntoingQty(inboundResponse.getIntoQty());
             purchase.setIntoingAmt(inboundResponse.getIntoAmt());
-            //根据id查询
-            PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
             //入库状态
             String intoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty().add(purchase.getIntoingQty()),
                     purchaseResponse.getIntoQty().add(purchase.getIntoQty()), purchaseResponse.getSumQuantity());
@@ -1057,6 +1129,8 @@ public class InboundPurchaseService extends BaseService<Inbound> {
         for (InboundItemResponse inboundItemResponse : orderEntryItemResponsesList) {
             //region 修改采购明细数据信息
             if (inboundItemResponse.getFromItemId() != null) {
+                //根据id查询
+                PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemResponse.getFromItemId());
                 //赋值  (这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
                 PurchaseItem purchaseItem = new PurchaseItem();
                 purchaseItem.setItemId(inboundItemResponse.getFromItemId());
@@ -1064,8 +1138,6 @@ public class InboundPurchaseService extends BaseService<Inbound> {
                 purchaseItem.setIntoAmt(inboundItemResponse.getIntoAmt().negate());
                 purchaseItem.setIntoingQty(inboundItemResponse.getIntoQty());
                 purchaseItem.setIntoingAmt(inboundItemResponse.getIntoAmt());
-                //根据id查询
-                PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemResponse.getFromItemId());
                 //入库状态
                 String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
                         purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());

+ 2 - 4
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundCheckService.java

@@ -67,7 +67,7 @@ public class OutboundCheckService extends BaseService<Outbound> {
      * @author : 寇珊珊
      */
     @Transactional(rollbackFor = {Exception.class})
-    public ResponseResultVO<?> otherOutboundInsert(Map<String, Object> map) {
+    public OutboundVO otherOutboundInsert(Map<String, Object> map) {
         //region map转json
         JSONObject total = new JSONObject();
         JSONArray detail = new JSONArray();
@@ -153,9 +153,7 @@ public class OutboundCheckService extends BaseService<Outbound> {
         //1.入库需要的值 附上 掉用接口
         //2.接收接口返回体
 
-
-
-        return ResponseResultUtil.success(outboundVO);
+        return outboundVO;
     }
 
 }

+ 116 - 31
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundOtherService.java

@@ -15,6 +15,7 @@ import com.dk.mdm.infrastructure.convert.ivt.OutboundItemConvert;
 import com.dk.mdm.mapper.common.CommonMapper;
 import com.dk.mdm.mapper.ivt.OutboundItemMapper;
 import com.dk.mdm.mapper.ivt.OutboundMapper;
+import com.dk.mdm.model.pojo.ivt.InboundItem;
 import com.dk.mdm.model.pojo.ivt.Outbound;
 import com.dk.mdm.model.pojo.ivt.OutboundItem;
 import com.dk.mdm.model.query.ivt.OutboundItemQuery;
@@ -22,6 +23,7 @@ import com.dk.mdm.model.query.ivt.OutboundQuery;
 import com.dk.mdm.model.response.ivt.InboundResponse;
 import com.dk.mdm.model.response.ivt.OutboundItemResponse;
 import com.dk.mdm.model.response.ivt.OutboundResponse;
+import com.dk.mdm.model.vo.ivt.InboundItemVO;
 import com.dk.mdm.model.vo.ivt.OutboundItemVO;
 import com.dk.mdm.model.vo.ivt.OutboundVO;
 import com.dk.mdm.service.common.CommonService;
@@ -220,7 +222,7 @@ public class OutboundOtherService extends BaseService<Outbound> {
     public ResponseResultVO<?> otherOutboundUpdate(OutboundVO outboundVO) {
         //region 小编辑
         if (!outboundVO.getLimitEdit()) {
-            Outbound  outbound = new Outbound();
+            Outbound outbound = new Outbound();
             outbound.setOutId(outboundVO.getOutId());
             outbound.setRemarks(outboundVO.getRemarks());
             outbound.setAnnexPaths(outboundVO.getAnnexPaths());
@@ -229,7 +231,8 @@ public class OutboundOtherService extends BaseService<Outbound> {
                             .eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
             );
             for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
-                OutboundItem  outboundItem = new OutboundItem();
+
+                OutboundItem outboundItem = new OutboundItem();
                 outboundItem.setItemId(outboundItemVO.getItemId());
                 outboundItem.setRemarks(outboundItemVO.getRemarks());
                 outboundItemMapper.update(outboundItem,
@@ -267,18 +270,58 @@ public class OutboundOtherService extends BaseService<Outbound> {
                     outboundItemVO.setOutAmt(outboundItemVO.getOutAmt());
                     //endregion
 
-                    //赋值
-                    OutboundItem outboundItem = new OutboundItem();
-                    outboundItem.setItemId(outboundItemVO.getItemId());
-                    outboundItem.setOutQty(outboundItemVO.getOutingQty());
-                    outboundItem.setOutAmt(outboundItemVO.getOutingAmt());
-                    outboundItem.setCostPrice(outboundItemVO.getPriceOut());
-                    outboundItem.setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(6, BigDecimal.ROUND_HALF_UP));
-                    //修改
-                    outboundItemMapper.update(outboundItem,
-                            new UpdateWrapper<OutboundItem>().lambda()
-                                    .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
-                    );
+                    //region  编辑明细
+                    if (outboundItemVO.getItemId() != null) {
+                        OutboundItem outboundItem = new OutboundItem();
+                        outboundItem.setItemId(outboundItemVO.getItemId());
+                        outboundItem.setOutQty(outboundItemVO.getOutingQty());
+                        outboundItem.setOutAmt(outboundItemVO.getOutingAmt());
+                        outboundItem.setCostPrice(outboundItemVO.getPriceOut());
+                        outboundItem.setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(6, BigDecimal.ROUND_HALF_UP));
+                        //修改
+                        outboundItemMapper.update(outboundItem,
+                                new UpdateWrapper<OutboundItem>().lambda()
+                                        .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                        );
+                    }
+                    //endregion
+
+                    //region  新建
+                    else {
+                        outboundItemVO
+                                .setOutQty(outboundItemVO.getOutingQty())
+                                .setOutAmt(outboundItemVO.getOutingAmt())
+                                .setOutingQty(BigDecimal.ZERO)
+                                .setOutingAmt(BigDecimal.ZERO)
+                                .setCostPrice(outboundItemVO.getPriceOut())
+                                .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
+                        ;
+                        outboundItemVO.setOutId(outboundVO.getOutId());
+                        //入库状态
+                        outboundItemVO.setOutStatus(outboundVO.getOutStatus());
+                        outboundItemVO.setOutType(Constant.OutType.OTHER.getName());
+                        //实体转换
+                        OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                        outboundItemMapper.insert(outboundItem);
+                    }
+                    //endregion
+
+                }
+                //endregion
+
+                //region 删除明细
+                if (outboundVO.getDeleteItemList() != null) {
+                    for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) {
+                        if (outboundItemVO.getItemId() != null) {
+                            OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                            outboundItem.setFlgValid(false);
+                            //修改
+                            outboundItemMapper.update(outboundItem,
+                                    new UpdateWrapper<OutboundItem>().lambda()
+                                            .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                            );
+                        }
+                    }
                 }
                 //endregion
 
@@ -310,16 +353,54 @@ public class OutboundOtherService extends BaseService<Outbound> {
                 List<OutboundItemVO> itemList = outboundVO.getItemList();
                 for (OutboundItemVO outboundItemVO : itemList) {
                     //region 赋值明细
-                    OutboundItem outboundItem = new OutboundItem();
-                    outboundItem.setItemId(outboundItemVO.getItemId());
-                    outboundItem.setOutingQty(outboundItemVO.getOutingQty());
-                    outboundItem.setOutingAmt(outboundItemVO.getOutingAmt());
-                    //修改
-                    outboundItemMapper.update(outboundItem,
-                            new UpdateWrapper<OutboundItem>().lambda()
-                                    .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
-                    );
+                    if (outboundItemVO.getItemId() != null) {
+                        OutboundItem outboundItem = new OutboundItem();
+                        outboundItem.setItemId(outboundItemVO.getItemId());
+                        outboundItem.setOutingQty(outboundItemVO.getOutingQty());
+                        outboundItem.setOutingAmt(outboundItemVO.getOutingAmt());
+                        //修改
+                        outboundItemMapper.update(outboundItem,
+                                new UpdateWrapper<OutboundItem>().lambda()
+                                        .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                        );
+                    }
                     //endregion
+
+                    //region  新建
+                    else {
+                        outboundItemVO
+                                .setOutId(outboundItemVO.getOutId())
+                                .setOutQty(BigDecimal.ZERO)
+                                .setOutAmt(BigDecimal.ZERO)
+                                .setCostPrice(outboundItemVO.getPriceOut())
+                                .setCostAmt(outboundItemVO.getOutingQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
+                                .setOutType(Constant.OutType.OTHER.getName())
+                        ;
+                        //出库状态
+                        String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
+                        outboundItemVO.setOutStatus(outStatus);
+                        //实体转换
+                        OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                        //新建
+                        outboundItemMapper.insert(outboundItem);
+                    }
+                    //endregion
+                }
+                //endregion
+
+                //region 删除明细
+                if (outboundVO.getDeleteItemList() != null) {
+                    for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) {
+                        if (outboundItemVO.getItemId() != null) {
+                            OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                            outboundItem.setFlgValid(false);
+                            //修改
+                            outboundItemMapper.update(outboundItem,
+                                    new UpdateWrapper<OutboundItem>().lambda()
+                                            .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                            );
+                        }
+                    }
                 }
                 //endregion
 
@@ -458,13 +539,13 @@ public class OutboundOtherService extends BaseService<Outbound> {
             }
             //endregion
 
-            if (outboundItemVO.getItemId() != null) {
-                //region 将库存需要的参数赋值
-                outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
-                outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue());
-                //endregion
+            //region 将库存需要的参数赋值
+            outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
+            outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue());
+            //endregion
 
-                //编辑明细
+            //region  编辑明细
+            if (outboundItemVO.getItemId() != null) {
                 outboundItemVO
                         .setOutQty(outboundItemResponse.getOutQty().add(outboundItemVO.getOutingQty()))
                         .setOutAmt(outboundItemResponse.getOutAmt().add(outboundItemVO.getOutingAmt()))
@@ -483,8 +564,10 @@ public class OutboundOtherService extends BaseService<Outbound> {
                         new UpdateWrapper<OutboundItem>().lambda()
                                 .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
                 );
+
             }
             //endregion
+
             //region 新建明细
             else {
                 outboundItemVO
@@ -493,7 +576,10 @@ public class OutboundOtherService extends BaseService<Outbound> {
                         .setOutAmt(outboundItemVO.getOutingAmt())
                         .setCostPrice(outboundItemVO.getPriceOut())
                         .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
-                        .setOutType(Constant.OutType.OTHER.getName());
+                        .setOutType(Constant.OutType.OTHER.getName())
+                        .setOutingQty(BigDecimal.ZERO)
+                        .setOutingAmt(BigDecimal.ZERO)
+                ;
                 //出库状态
                 String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
                 outboundItemVO.setOutStatus(outStatus);
@@ -524,7 +610,6 @@ public class OutboundOtherService extends BaseService<Outbound> {
         //endregion
 
         //region 编辑总单
-        OutboundResponse outboundResponse = outboundMapper.selectById(outboundVO.getOutId());
         BigDecimal sumOutQty = outboundVO.getItemList().stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
         BigDecimal sumOutAmt = outboundVO.getItemList().stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
         outboundVO.setOutQty(sumOutQty);

+ 339 - 124
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleOrderService.java

@@ -23,6 +23,7 @@ import com.dk.mdm.mapper.sale.OrderMapper;
 import com.dk.mdm.model.pojo.ivt.Outbound;
 import com.dk.mdm.model.pojo.ivt.OutboundItem;
 import com.dk.mdm.model.pojo.mst.Customer;
+import com.dk.mdm.model.pojo.pur.PurchaseItem;
 import com.dk.mdm.model.pojo.sale.MultiOwner;
 import com.dk.mdm.model.pojo.sale.Order;
 import com.dk.mdm.model.pojo.sale.OrderItem;
@@ -32,6 +33,7 @@ import com.dk.mdm.model.response.ivt.OutboundItemResponse;
 import com.dk.mdm.model.response.ivt.OutboundResponse;
 import com.dk.mdm.model.response.sale.OrderItemResponse;
 import com.dk.mdm.model.response.sale.OrderResponse;
+import com.dk.mdm.model.vo.ivt.InboundItemVO;
 import com.dk.mdm.model.vo.ivt.OutboundItemVO;
 import com.dk.mdm.model.vo.ivt.OutboundVO;
 import com.dk.mdm.service.common.CommonService;
@@ -183,7 +185,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             }
             //入库状态
             String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
-                    orderResponse.getOutQty().add(order.getOutQty()),orderResponse.getSumQuantity());
+                    orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
             order.setOutStatus(outStatus);
             //修改
             int countRow = orderMapper.updateById(order);
@@ -254,7 +256,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 }
                 //入库状态
                 String outStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
-                        orderItemResponse.getOutQty().add(orderItem.getOutQty()),orderItemResponse.getItemQty());
+                        orderItemResponse.getOutQty().add(orderItem.getOutQty()), orderItemResponse.getItemQty());
                 orderItem.setOutStatus(outStatus);
                 //修改
                 int countRow = orderItemMapper.updateById(orderItem);
@@ -354,26 +356,58 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     outboundItemVO.setOutAmt(outboundItemVO.getOutAmt());
                     //endregion
 
-                    //赋值
-                    OutboundItem outboundItem = new OutboundItem();
-                    outboundItem.setItemId(outboundItemVO.getItemId());
-                    outboundItem.setOutQty(outboundItemVO.getOutingQty());
-                    outboundItem.setOutAmt(outboundItemVO.getOutingAmt());
-                    outboundItem.setCostPrice(outboundItemVO.getPriceOut());
-                    outboundItem.setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(6, BigDecimal.ROUND_HALF_UP));
-                    //修改
-                    outboundItemMapper.update(outboundItem,
-                            new UpdateWrapper<OutboundItem>().lambda()
-                                    .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
-                    );
+                    //region  编辑明细
+                    if (outboundItemVO.getItemId() != null) {
+                        OutboundItem outboundItem = new OutboundItem();
+                        outboundItem.setItemId(outboundItemVO.getItemId());
+                        outboundItem.setOutQty(outboundItemVO.getOutingQty());
+                        outboundItem.setOutAmt(outboundItemVO.getOutingAmt());
+                        outboundItem.setCostPrice(outboundItemVO.getPriceOut());
+                        outboundItem.setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(6, BigDecimal.ROUND_HALF_UP));
+                        //修改
+                        outboundItemMapper.update(outboundItem,
+                                new UpdateWrapper<OutboundItem>().lambda()
+                                        .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                        );
+                    }
+                    //endregion
+
+                    //region 新建明细
+                    else {
+                        outboundItemVO
+                                .setOutId(outboundItemVO.getOutId())
+                                .setOutQty(outboundItemVO.getOutingQty())
+                                .setOutAmt(outboundItemVO.getOutingAmt())
+                                .setOutingQty(BigDecimal.ZERO)
+                                .setOutingAmt(BigDecimal.ZERO)
+                                .setCostPrice(outboundItemVO.getPriceOut())
+                                .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
+                                .setOutType(Constant.OutType.SALE.getName())
+                        ;
+                        //出库状态
+                        String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
+                        outboundItemVO.setOutStatus(outStatus);
+                        //实体转换
+                        OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                        //新建
+                        outboundItemMapper.insert(outboundItem);
+                    }
+                    //endregion
 
                     //region  销售明细
                     if (outboundItemVO.getFromItemId() != null) {
                         //根据id查询
+                        OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemVO.getFromItemId());
                         OrderItem orderItem = new OrderItem();
                         orderItem.setItemId(outboundItemVO.getFromItemId());
                         orderItem.setOutQty(outboundItemResponse.getOutQty().negate().add(outboundItemVO.getOutingQty()));
                         orderItem.setOutAmt(outboundItemResponse.getOutAmt().negate().add(outboundItemVO.getOutingAmt()));
+                        orderItem.setOutingQty(outboundItemVO.getOutQty());
+                        orderItem.setOutingAmt(outboundItemVO.getOutAmt());
+                        //出库状态
+                        String outStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
+                                orderItemResponse.getOutQty().add(orderItem.getOutQty()), orderItemResponse.getItemQty());
+                        orderItem.setOutStatus(outStatus);
                         int countRow = orderItemMapper.updateById(orderItem);
                         //数量超出
                         if (countRow == 0) {
@@ -384,6 +418,47 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 }
                 //endregion
 
+                //region 删除明细
+                BigDecimal delOutQty = BigDecimal.ZERO;
+                BigDecimal delOutAmt = BigDecimal.ZERO;
+                if (outboundVO.getDeleteItemList() != null) {
+                    delOutQty = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                    delOutAmt = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) {
+                        if (outboundItemVO.getItemId() != null) {
+                            OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                            outboundItem.setFlgValid(false);
+                            //修改
+                            outboundItemMapper.update(outboundItem,
+                                    new UpdateWrapper<OutboundItem>().lambda()
+                                            .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                            );
+                        }
+                        //region  销售明细
+                        if (outboundItemVO.getFromItemId() != null) {
+                            //根据id查询
+                            OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemVO.getFromItemId());
+                            OrderItem orderItem = new OrderItem();
+                            orderItem.setItemId(outboundItemVO.getFromItemId());
+                            orderItem.setOutQty(outboundItemVO.getOutQty().negate());
+                            orderItem.setOutAmt(outboundItemVO.getOutAmt().negate());
+                            orderItem.setOutingQty(outboundItemVO.getOutQty());
+                            orderItem.setOutingAmt(outboundItemVO.getOutQty());
+                            //出库状态
+                            String outStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
+                                    orderItemResponse.getOutQty().add(orderItem.getOutQty()), orderItemResponse.getItemQty());
+                            orderItem.setOutStatus(outStatus);
+                            int countRow = orderItemMapper.updateById(orderItem);
+                            //数量超出
+                            if (countRow == 0) {
+                                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                            }
+                        }
+                        //endregion
+                    }
+                }
+                //endregion
+
                 //region  修改出库总单
                 Outbound outbound = new Outbound();
                 outbound.setOutId(outboundVO.getOutId());
@@ -395,17 +470,26 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 );
                 //endregion
 
-
                 //region 修改销售总单
-                Order order = new Order();
-                order.setOrderId(outboundVO.getFromId());
-                order.setOutQty(outboundResponse.getOutQty().negate().add(sumQty));
-                order.setOutAmt(outboundResponse.getOutAmt().negate().add(sumAmt));
-                //修改
-                int countRow = orderMapper.updateById(order);
-                //数量超出
-                if (countRow == 0) {
-                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                if (outboundVO.getFromId() != null) {
+                    //根据id查询
+                    OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
+                    Order order = new Order();
+                    order.setOrderId(outboundVO.getFromId());
+                    order.setOutQty(outboundResponse.getOutQty().negate().add(sumQty).subtract(delOutQty));
+                    order.setOutAmt(outboundResponse.getOutAmt().negate().add(sumAmt).subtract(delOutAmt));
+                    order.setOutingQty(delOutQty);
+                    order.setOutingAmt(delOutAmt);
+                    //出库状态
+                    String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
+                            orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
+                    order.setOutStatus(outStatus);
+                    //修改
+                    int countRow = orderMapper.updateById(order);
+                    //数量超出
+                    if (countRow == 0) {
+                        throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                    }
                 }
                 //endregion
 
@@ -429,8 +513,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 //region 修改明细
                 List<OutboundItemVO> itemList = outboundVO.getItemList();
                 for (OutboundItemVO outboundItemVO : itemList) {
-                    //根据id查询 获取到还未进行修改的数据
-                    OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
 
                     //region  不能新建
                     if (outboundItemVO.getFromItemId() == null) {
@@ -439,25 +521,55 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     }
                     //endregion
 
-                    //region 赋值明细
-                    OutboundItem outboundItem = new OutboundItem();
-                    outboundItem.setItemId(outboundItemResponse.getItemId());
-                    outboundItem.setOutingQty(outboundItemResponse.getOutingQty());
-                    outboundItem.setOutingAmt(outboundItemResponse.getOutingAmt());
-                    //修改
-                    outboundItemMapper.update(outboundItem,
-                            new UpdateWrapper<OutboundItem>().lambda()
-                                    .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
-                    );
+                    //根据id查询 获取到还未进行修改的数据
+                    OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
+
+                    //region 编辑明细
+                    if (outboundItemVO.getItemId() != null) {
+                        OutboundItem outboundItem = new OutboundItem();
+                        outboundItem.setItemId(outboundItemResponse.getItemId());
+                        outboundItem.setOutingQty(outboundItemResponse.getOutingQty());
+                        outboundItem.setOutingAmt(outboundItemResponse.getOutingAmt());
+                        //修改
+                        outboundItemMapper.update(outboundItem,
+                                new UpdateWrapper<OutboundItem>().lambda()
+                                        .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                        );
+                    }
+                    //endregion
+
+                    //region 新建明细
+                    else {
+                        outboundItemVO
+                                .setOutId(outboundItemVO.getOutId())
+                                .setOutQty(BigDecimal.ZERO)
+                                .setOutAmt(BigDecimal.ZERO)
+                                .setCostPrice(outboundItemVO.getPriceOut())
+                                .setCostAmt(outboundItemVO.getOutingQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
+                                .setOutType(Constant.OutType.SALE.getName())
+                        ;
+                        //出库状态
+                        String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
+                        outboundItemVO.setOutStatus(outStatus);
+                        //实体转换
+                        OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                        //新建
+                        outboundItemMapper.insert(outboundItem);
+                    }
                     //endregion
 
                     //region  销售明细
                     if (outboundItemVO.getFromItemId() != null) {
                         //根据id查询
+                        OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemVO.getFromItemId());
                         OrderItem orderItem = new OrderItem();
                         orderItem.setItemId(outboundItemVO.getFromItemId());
                         orderItem.setOutingQty(outboundItemResponse.getOutingQty().negate().add(outboundItemVO.getOutingQty()));
                         orderItem.setOutingAmt(outboundItemResponse.getOutingAmt().negate().add(outboundItemVO.getOutingAmt()));
+                        //出库状态
+                        String outStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
+                                orderItemResponse.getOutQty(), orderItemResponse.getItemQty());
+                        orderItem.setOutStatus(outStatus);
                         int countRow = orderItemMapper.updateById(orderItem);
                         //数量超出
                         if (countRow == 0) {
@@ -467,6 +579,47 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     //endregion
                 }
                 //endregion
+
+
+                //region 删除明细
+                BigDecimal delOutQty = BigDecimal.ZERO;
+                BigDecimal delOutAmt = BigDecimal.ZERO;
+                if (outboundVO.getDeleteItemList() != null) {
+                    delOutQty = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                    delOutAmt = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) {
+                        if (outboundItemVO.getItemId() != null) {
+                            OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                            outboundItem.setFlgValid(false);
+                            //修改
+                            outboundItemMapper.update(outboundItem,
+                                    new UpdateWrapper<OutboundItem>().lambda()
+                                            .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                            );
+                        }
+                        //region  销售明细
+                        if (outboundItemVO.getFromItemId() != null) {
+                            //根据id查询
+                            OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemVO.getFromItemId());
+                            OrderItem orderItem = new OrderItem();
+                            orderItem.setItemId(outboundItemVO.getFromItemId());
+                            orderItem.setOutingQty(outboundItemVO.getOutQty().negate());
+                            orderItem.setOutingAmt(outboundItemVO.getOutQty().negate());
+                            //出库状态
+                            String outStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
+                                    orderItemResponse.getOutQty(), orderItemResponse.getItemQty());
+                            orderItem.setOutStatus(outStatus);
+                            int countRow = orderItemMapper.updateById(orderItem);
+                            //数量超出
+                            if (countRow == 0) {
+                                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                            }
+                        }
+                        //endregion
+                    }
+                }
+                //endregion
+
                 //region  修改入库总单
                 Outbound outbound = new Outbound();
                 outbound.setOutId(outboundVO.getOutId());
@@ -477,16 +630,25 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                         new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
                 );
                 //endregion
+
                 //region 修改采购总单
-                Order order = new Order();
-                order.setOrderId(outboundVO.getFromId());
-                order.setOutingQty(outboundResponse.getOutingQty().negate().add(sumQty));
-                order.setOutingAmt(outboundResponse.getOutingAmt().negate().add(sumAmt));
-                //修改
-                int countRow = orderMapper.updateById(order);
-                //数量超出
-                if (countRow == 0) {
-                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                if (outboundVO.getFromId() != null) {
+                    //根据id查询
+                    OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
+                    Order order = new Order();
+                    order.setOrderId(outboundVO.getFromId());
+                    order.setOutingQty(outboundResponse.getOutingQty().negate().add(sumQty).subtract(delOutQty));
+                    order.setOutingAmt(outboundResponse.getOutingAmt().negate().add(sumAmt).subtract(delOutAmt));
+                    //出库状态
+                    String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
+                            orderResponse.getOutQty(), orderResponse.getSumQuantity());
+                    order.setOutStatus(outStatus);
+                    //修改
+                    int countRow = orderMapper.updateById(order);
+                    //数量超出
+                    if (countRow == 0) {
+                        throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                    }
                 }
                 //endregion
             }
@@ -542,12 +704,15 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 //region  销售明细
                 if (outboundItemResponse.getFromItemId() != null) {
                     //根据id查询
+                    OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemResponse.getFromItemId());
                     OrderItem orderItem = new OrderItem();
                     orderItem.setItemId(outboundItemResponse.getFromItemId());
-//                    orderItem.setOutQty(outboundItemResponse.getOutQty().negate());
-//                    orderItem.setOutAmt(outboundItemResponse.getOutAmt().negate());
-                    orderItem.setOutQty(BigDecimal.ZERO);
-                    orderItem.setOutAmt(BigDecimal.ZERO);
+                    orderItem.setOutQty(outboundItemResponse.getOutQty().negate());
+                    orderItem.setOutAmt(outboundItemResponse.getOutAmt().negate());
+                    //出库状态
+                    String orderOutStatus = this.setOutStatus(orderItemResponse.getOutingQty(),
+                            orderItemResponse.getOutQty().add(orderItem.getOutQty()), orderItemResponse.getItemQty());
+                    orderItem.setOutStatus(orderOutStatus);
                     int countRow = orderItemMapper.updateById(orderItem);
                     //数量超出
                     if (countRow == 0) {
@@ -569,18 +734,25 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             //endregion
 
             //region 修改销售总单
-            Order order = new Order();
-            order.setOrderId(outboundResponse.getFromId());
-//            order.setOutQty(outboundResponse.getOutQty().negate());
-//            order.setOutAmt(outboundResponse.getOutAmt().negate());
-            order.setOutQty(BigDecimal.ZERO);
-            order.setOutAmt(BigDecimal.ZERO);
-            //修改
-            int countRow = orderMapper.updateById(order);
-            //数量超出
-            if (countRow == 0) {
-                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+            if (outboundResponse.getFromId() != null) {
+                //根据id查询
+                OrderResponse orderResponse = orderMapper.selectById(outboundResponse.getFromId());
+                Order order = new Order();
+                order.setOrderId(outboundResponse.getFromId());
+                order.setOutQty(outboundResponse.getOutQty().negate());
+                order.setOutAmt(outboundResponse.getOutAmt().negate());
+                //出库状态
+                String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty(),
+                        orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
+                order.setOutStatus(orderOutStatus);
+                //修改
+                int countRow = orderMapper.updateById(order);
+                //数量超出
+                if (countRow == 0) {
+                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                }
             }
+
             //endregion
 
             //region  入账
@@ -614,13 +786,19 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                                 .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
                 );
                 //endregion
+
                 //region  销售明细
                 if (outboundItemResponse.getFromItemId() != null) {
                     //根据id查询
+                    OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemResponse.getFromItemId());
                     OrderItem orderItem = new OrderItem();
                     orderItem.setItemId(outboundItemResponse.getFromItemId());
                     orderItem.setOutingQty(outboundItemResponse.getOutingQty().negate());
                     orderItem.setOutingAmt(outboundItemResponse.getOutingAmt().negate());
+                    //出库状态
+                    String orderOutStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
+                            orderItemResponse.getOutQty(), orderItemResponse.getItemQty());
+                    orderItem.setOutStatus(orderOutStatus);
                     int countRow = orderItemMapper.updateById(orderItem);
                     //数量超出
                     if (countRow == 0) {
@@ -643,15 +821,23 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             //endregion
 
             //region 修改销售总单
-            Order order = new Order();
-            order.setOrderId(outboundResponse.getFromId());
-            order.setOutingQty(outboundResponse.getOutingQty().negate());
-            order.setOutingAmt(outboundResponse.getOutingAmt().negate());
-            //修改
-            int countRow = orderMapper.updateById(order);
-            //数量超出
-            if (countRow == 0) {
-                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+            if (outboundResponse.getFromId() != null) {
+                //根据id查询
+                OrderResponse orderResponse = orderMapper.selectById(outboundResponse.getFromId());
+                Order order = new Order();
+                order.setOrderId(outboundResponse.getFromId());
+                order.setOutingQty(outboundResponse.getOutingQty().negate());
+                order.setOutingAmt(outboundResponse.getOutingAmt().negate());
+                //出库状态
+                String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
+                        orderResponse.getOutQty(), orderResponse.getSumQuantity());
+                order.setOutStatus(orderOutStatus);
+                //修改
+                int countRow = orderMapper.updateById(order);
+                //数量超出
+                if (countRow == 0) {
+                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                }
             }
             //endregion
         }
@@ -686,8 +872,10 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                         ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
             }
             //endregion
+
             //明细根据id查询
             OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
+
             //region 校验数量是否超出
             if (outboundItemVO.getOutingQty().compareTo(outboundItemResponse.getOutingQty()) > 0) {
                 throw new BaseBusinessException(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getCode(),
@@ -700,42 +888,66 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             outboundItemResponse.setInventoryDocCode(Constant.InventoryDocCode.SALE_ORDER.getValue());
             //endregion
 
-            //region  出库明细
-            //编辑明细
-            outboundItemVO
-                    .setOutQty(outboundItemResponse.getOutQty().add(outboundItemVO.getOutingQty()))
-                    .setOutAmt(outboundItemResponse.getOutAmt().add(outboundItemVO.getOutingAmt()))
-                    .setOutingQty(BigDecimal.ZERO)
-                    .setOutAmt(BigDecimal.ZERO)
-                    .setCostPrice(outboundItemVO.getPriceOut())
-                    .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
-            ;
-            //出库状态
-            String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
-            outboundItemVO.setOutStatus(outStatus);
-            //实体转换
-            OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
-            //修改
-            outboundItemMapper.update(outboundItem,
-                    new UpdateWrapper<OutboundItem>().lambda()
-                            .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
-            );
+            //region  编辑明细
+            if (outboundItemVO.getFromItemId() != null) {
+                outboundItemVO
+                        .setOutQty(outboundItemResponse.getOutQty().add(outboundItemVO.getOutingQty()))
+                        .setOutAmt(outboundItemResponse.getOutAmt().add(outboundItemVO.getOutingAmt()))
+                        .setOutingQty(BigDecimal.ZERO)
+                        .setOutAmt(BigDecimal.ZERO)
+                        .setCostPrice(outboundItemVO.getPriceOut())
+                        .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
+                ;
+                //出库状态
+                String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
+                outboundItemVO.setOutStatus(outStatus);
+                //实体转换
+                OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                //修改
+                outboundItemMapper.update(outboundItem,
+                        new UpdateWrapper<OutboundItem>().lambda()
+                                .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                );
+            }
+
+            //endregion
+
+            //region  新建明细
+            else {
+                outboundItemVO
+                        .setOutId(outboundItemVO.getOutId())
+                        .setOutQty(outboundItemVO.getOutingQty())
+                        .setOutAmt(outboundItemVO.getOutingAmt())
+                        .setCostPrice(outboundItemVO.getPriceOut())
+                        .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
+                        .setOutType(Constant.OutType.SALE.getName())
+                        .setOutingQty(BigDecimal.ZERO)
+                        .setOutingAmt(BigDecimal.ZERO)
+                ;
+                //出库状态
+                String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
+                outboundItemVO.setOutStatus(outStatus);
+                //实体转换
+                OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                //新建
+                outboundItemMapper.insert(outboundItem);
+            }
             //endregion
 
             //region  销售订单明细
             if (outboundItemVO.getFromItemId() != null) {
+                //根据id查询
+                OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemVO.getFromItemId());
                 //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
                 OrderItem orderItem = new OrderItem();
                 orderItem.setItemId(outboundItemVO.getFromItemId());
-                orderItem.setOutingQty(outboundItemVO.getOutingQty());
-                orderItem.setOutingAmt(outboundItemVO.getOutingAmt());
+                orderItem.setOutingQty(outboundItemVO.getOutQty().negate());
+                orderItem.setOutingAmt(outboundItemVO.getOutAmt().negate());
                 orderItem.setOutQty(outboundItemVO.getOutQty());
                 orderItem.setOutAmt(outboundItemVO.getOutAmt());
-                //根据id查询
-                OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemVO.getFromItemId());
                 //出库状态
                 String orderOutStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
-                        orderItemResponse.getOutQty().add(orderItem.getOutQty()),orderItemResponse.getItemQty());
+                        orderItemResponse.getOutQty().add(orderItem.getOutQty()), orderItemResponse.getItemQty());
                 orderItem.setOutStatus(orderOutStatus);
                 //修改
                 int countRow = orderItemMapper.updateById(orderItem);
@@ -750,7 +962,15 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //endregion
 
         //region 删除明细
+        BigDecimal delOutingQty = BigDecimal.ZERO;
+        BigDecimal delOutingAmt = BigDecimal.ZERO;
+        BigDecimal delOutQty = BigDecimal.ZERO;
+        BigDecimal delOutAmt = BigDecimal.ZERO;
         if (outboundVO.getDeleteItemList() != null) {
+            delOutingQty = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            delOutingAmt = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            delOutQty = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            delOutAmt = outboundVO.getDeleteItemList().stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
             for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) {
                 if (outboundItemVO.getItemId() != null) {
                     OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
@@ -763,7 +983,8 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 }
                 //region  销售退货明细
                 if (outboundItemVO.getFromItemId() != null) {
-                    //region 销售退货订单明细
+                    //根据id查询
+                    OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemVO.getFromItemId());
                     //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
                     OrderItem orderItem = new OrderItem();
                     orderItem.setItemId(outboundItemVO.getFromItemId());
@@ -771,11 +992,9 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     orderItem.setOutingAmt(outboundItemVO.getOutingAmt().negate());
                     orderItem.setOutQty(outboundItemVO.getOutQty().negate());
                     orderItem.setOutAmt(outboundItemVO.getOutAmt().negate());
-                    //根据id查询
-                    OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemVO.getFromItemId());
                     //出库状态
                     String outStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
-                            orderItemResponse.getOutQty().add(orderItem.getOutQty()),orderItemResponse.getItemQty());
+                            orderItemResponse.getOutQty().add(orderItem.getOutQty()), orderItemResponse.getItemQty());
                     orderItem.setOutStatus(outStatus);
                     //修改
                     int countRow = orderItemMapper.updateById(orderItem);
@@ -783,7 +1002,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     if (countRow == 0) {
                         throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
                     }
-                    //endregion
                 }
                 //endregion
             }
@@ -811,20 +1029,18 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
 
         //region  修改销售退货订单
         if (outboundVO.getFromId() != null) {
+            //根据id查询
+            OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
             //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
             Order order = new Order();
             order.setOrderId(outboundVO.getFromId());
-            if (outboundResponse != null) {
-                order.setOutingQty(outboundResponse.getOutingQty().negate());
-                order.setOutingAmt(outboundResponse.getOutingAmt().negate());
-            }
-            order.setOutQty(sumOutQty.negate());
-            order.setOutAmt(sumOutAmt.negate());
-            //根据id查询
-            OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
+            order.setOutQty(sumOutQty.subtract(delOutQty));
+            order.setOutAmt(sumOutAmt.subtract(delOutAmt));
+            order.setOutingQty((outboundResponse.getOutingQty().add(delOutingQty)).negate());
+            order.setOutingAmt((outboundResponse.getOutingAmt().add(delOutingAmt)).negate());
             //出库状态
             String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
-                    orderResponse.getOutQty().add(order.getOutQty()),orderResponse.getSumQuantity());
+                    orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
             order.setOutStatus(orderOutStatus);
             //修改
             int countRow = orderMapper.updateById(order);
@@ -869,16 +1085,16 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         if (outboundResponse.getFromId() != null) {
             //赋值  (这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
             Order order = new Order();
-            order.setOrderId(outboundVO.getFromId());
-            order.setOutingQty(outboundVO.getOutingQty());
-            order.setOutingAmt(outboundVO.getOutingAmt());
-            order.setOutQty(outboundVO.getOutQty().negate());
-            order.setOutAmt(outboundVO.getOutAmt().negate());
+            order.setOrderId(outboundResponse.getFromId());
+            order.setOutingQty(outboundResponse.getOutQty());
+            order.setOutingAmt(outboundResponse.getOutAmt());
+            order.setOutQty(outboundResponse.getOutQty().negate());
+            order.setOutAmt(outboundResponse.getOutAmt().negate());
             //根据id查询
             OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
             //出库状态
             String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
-                    orderResponse.getOutQty().add(order.getOutQty()),orderResponse.getSumQuantity());
+                    orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
             order.setOutStatus(outStatus);
             //修改
             int countRow = orderMapper.updateById(order);
@@ -912,18 +1128,18 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) {
             //region 修改销售退货明细数据信息
             if (outboundItemResponse.getFromItemId() != null) {
+                //根据id查询
+                OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemResponse.getFromItemId());
                 //赋值  (这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
                 OrderItem orderItem = new OrderItem();
                 orderItem.setItemId(outboundItemResponse.getFromItemId());
                 orderItem.setOutQty(outboundItemResponse.getOutQty().negate());
                 orderItem.setOutAmt(outboundItemResponse.getOutAmt().negate());
-                orderItem.setOutingQty(outboundItemResponse.getOutingQty());
-                orderItem.setOutingAmt(outboundItemResponse.getOutingAmt());
-                //根据id查询
-                OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemResponse.getFromItemId());
+                orderItem.setOutingQty(outboundItemResponse.getOutQty());
+                orderItem.setOutingAmt(outboundItemResponse.getOutAmt());
                 //出库状态
                 String outStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
-                        orderItemResponse.getOutQty().add(orderItem.getOutQty()),orderItemResponse.getItemQty());
+                        orderItemResponse.getOutQty().add(orderItem.getOutQty()), orderItemResponse.getItemQty());
                 orderItem.setOutStatus(outStatus);
                 //修改
                 int countRow = orderItemMapper.updateById(orderItem);
@@ -1000,15 +1216,15 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
 
 
     /**
-     * @desc   : 上游单据入库状态通用(目前本页面)
-     * @date   : 2024/4/1 17:14
+     * @desc : 上游单据入库状态通用(目前本页面)
+     * @date : 2024/4/1 17:14
      * @author : 寇珊珊
      */
-    public String setOutStatus(BigDecimal intoingQty, BigDecimal intoQty,BigDecimal sumQty) {
+    public String setOutStatus(BigDecimal intoingQty, BigDecimal intoQty, BigDecimal sumQty) {
         //入库状态
         String intoStatus = null;
         //入库中+已入库 小于 总数
-        if (intoingQty.add(intoingQty).compareTo(sumQty) < 0 ) {
+        if (intoingQty.add(intoingQty).compareTo(sumQty) < 0) {
             //入库中
             intoStatus = Constant.IntoStatus.RUKUZHONG.getName();
         }
@@ -1026,7 +1242,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
     }
 
 
-
     /**
      * @desc : 获取单据信息(编辑用)
      * @date : 2024/3/16 16:28

+ 311 - 91
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleReturnService.java

@@ -7,6 +7,7 @@ import com.dk.common.infrastructure.constant.Constant;
 import com.dk.common.infrastructure.enums.ErrorCodeEnum;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.common.model.pojo.PageList;
+import com.dk.common.response.ResponseCodeEnum;
 import com.dk.common.response.ResponseResultUtil;
 import com.dk.common.response.ResponseResultVO;
 import com.dk.common.service.BaseService;
@@ -39,10 +40,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -107,24 +105,26 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
         for (String str : outboundItemVOListOutPri.keySet()) {
             List<OutboundItemVO> outboundItemList = outboundItemVOListOutPri.get(str);
             //region 汇总退货数量 金额
-            BigDecimal returnSumQty = outboundItemList.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-            BigDecimal returnSumAmt = outboundItemList.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal returnSumQty = outboundItemList.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal returnSumAmt = outboundItemList.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal returnIngSumQty = outboundItemList.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal returnIngSumAmt = outboundItemList.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
             //endregion
             //查询原单
             OutboundResponse outboundResponse = outboundMapper.selectById(str);
             //校验数据
-            if (returnSumQty.compareTo(outboundResponse.getOutQty()) > 0) {
+            if (returnSumQty.add(returnIngSumQty).compareTo(outboundResponse.getOutQty()) > 0) {
                 throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getCode(),
                         ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getMessage());
             }
             Outbound outboundPri = new Outbound();
             outboundPri.setOutId(str);
             if (posNegFlag) {
-                outboundPri.setReturnQty(returnSumQty.negate());
-                outboundPri.setReturnAmt(returnSumAmt.negate());
+                outboundPri.setReturnQty((returnSumQty.add(returnIngSumQty)).negate());
+                outboundPri.setReturnAmt((returnSumAmt.add(returnIngSumAmt)).negate());
             } else {
-                outboundPri.setReturnQty(returnSumQty);
-                outboundPri.setReturnAmt(returnSumAmt);
+                outboundPri.setReturnQty(returnSumQty.add(returnIngSumQty));
+                outboundPri.setReturnAmt(returnSumAmt.add(returnIngSumAmt));
             }
             outboundMapper.updateReturnMessage(outboundPri);
         }
@@ -135,24 +135,27 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
         for (String str : outboundItemVOListOrderPri.keySet()) {
             List<OutboundItemVO> outboundItemList = outboundItemVOListOrderPri.get(str);
             //region 汇总退货数量 金额
-            BigDecimal returnSumQty = outboundItemList.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-            BigDecimal returnSumAmt = outboundItemList.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal returnSumQty = outboundItemList.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal returnSumAmt = outboundItemList.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal returnIngSumQty = outboundItemList.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal returnIngSumAmt = outboundItemList.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+
             //endregion
             //查询原单
             OrderResponse orderResponse = orderMapper.selectById(str);
             //校验数据
-            if (returnSumQty.compareTo(orderResponse.getOutQty()) > 0) {
+            if (returnSumQty.add(returnIngSumQty).compareTo(orderResponse.getOutQty()) > 0) {
                 throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getCode(),
                         ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getMessage());
             }
             Order orderPri = new Order();
             orderPri.setOrderId(str);
             if (posNegFlag) {
-                orderPri.setReturnQty(returnSumQty.negate());
-                orderPri.setReturnAmt(returnSumAmt.negate());
+                orderPri.setReturnQty((returnSumQty.add(returnIngSumQty)).negate());
+                orderPri.setReturnAmt((returnSumAmt.add(returnIngSumAmt)).negate());
             } else {
-                orderPri.setReturnQty(returnSumQty);
-                orderPri.setReturnAmt(returnSumAmt);
+                orderPri.setReturnQty(returnSumQty.add(returnIngSumQty));
+                orderPri.setReturnAmt(returnSumAmt.add(returnIngSumAmt));
             }
             orderMapper.updateReturnMessage(orderPri);
         }
@@ -162,12 +165,14 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
     /**
      * @desc : 修改原明细(订单,出库)
      * posNegFlag :正负标识  true:正数,false:负数
+     * isOutEdit:取入库中还是已入库数量  true 取已入库  false 取 入库中
      * 默认传值过来的是负数
      * @date : 2024/3/29 10:46
      * @author : 寇珊珊
      */
     @Transactional(rollbackFor = {Exception.class})
-    public void updatePrimaryDetail(OutboundItemVO outboundItemVO, Boolean posNegFlag) {
+    public void updatePrimaryDetail(OutboundItemVO outboundItemVO, Boolean posNegFlag, Boolean isOutEdit) {
+
         //region  反写出库明细
         if (outboundItemVO.getSOutItemId() != null) {
             OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getSOutItemId());
@@ -181,11 +186,11 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             OutboundItem outboundItemPri = new OutboundItem();
             outboundItemPri.setItemId(outboundItemVO.getSOutItemId());
             if (posNegFlag) {
-                outboundItemPri.setReturnQty(outboundItemVO.getOutingQty().negate());
-                outboundItemPri.setReturnAmt(outboundItemVO.getOutingAmt().negate());
+                outboundItemPri.setReturnQty(isOutEdit ? outboundItemVO.getOutQty().negate() : outboundItemVO.getOutingQty().negate());
+                outboundItemPri.setReturnAmt(isOutEdit ? outboundItemVO.getOutAmt().negate() : outboundItemVO.getOutingAmt().negate());
             } else {
-                outboundItemPri.setReturnQty(outboundItemVO.getOutingQty());
-                outboundItemPri.setReturnAmt(outboundItemVO.getOutingAmt());
+                outboundItemPri.setReturnQty(isOutEdit ? outboundItemVO.getOutQty() : outboundItemVO.getOutingQty());
+                outboundItemPri.setReturnAmt(isOutEdit ? outboundItemVO.getOutAmt() : outboundItemVO.getOutingAmt());
             }
             outboundItemMapper.updateReturnMessage(outboundItemPri);
             //endregion
@@ -217,6 +222,61 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
         //endregion
     }
 
+    /**
+     * @desc : 回滚原总单和明细信息(订单,出库单)
+     * @date : 2024/4/3 17:01
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public void rollBackTotalAndDetail(List<OutboundItemVO> deleteItemList) {
+        //出库单
+        Map<String, List<OutboundItemVO>> collect = deleteItemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getSOutId));
+        for (String outId : collect.keySet()) {
+            List<OutboundItemVO> outboundItemVOList = collect.get(outId);
+            BigDecimal delOutQty = outboundItemVOList.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal delOutAmt = outboundItemVOList.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal delOutingQty = outboundItemVOList.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal delOutingAmt = outboundItemVOList.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            //总单
+            Outbound outboundPri = new Outbound();
+            outboundPri.setOutId(outId);
+            outboundPri.setReturnQty((delOutQty.add(delOutingQty)).negate());
+            outboundPri.setReturnAmt(delOutAmt.add(delOutingAmt).negate());
+            outboundMapper.updateReturnMessage(outboundPri);
+            //明细
+            for (OutboundItemVO outboundItemVO : outboundItemVOList) {
+                OutboundItem outboundItemPri = new OutboundItem();
+                outboundItemPri.setItemId(outboundItemVO.getItemId());
+                outboundItemPri.setReturnQty(outboundItemVO.getOutingQty());
+                outboundItemPri.setReturnAmt(outboundItemVO.getOutingAmt());
+                outboundItemMapper.updateReturnMessage(outboundItemPri);
+            }
+        }
+        //订单
+        Map<String, List<OutboundItemVO>> orderCollect = deleteItemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getSOrderId));
+        for (String orderId : orderCollect.keySet()) {
+            List<OutboundItemVO> outboundItemVOList = orderCollect.get(orderId);
+            BigDecimal delOutQty = outboundItemVOList.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal delOutAmt = outboundItemVOList.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal delOutingQty = outboundItemVOList.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal delOutingAmt = outboundItemVOList.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            //总单
+            Order orderPri = new Order();
+            orderPri.setOrderId(orderId);
+            orderPri.setReturnQty((delOutQty.add(delOutingQty)).negate());
+            orderPri.setReturnAmt(delOutAmt.add(delOutingAmt).negate());
+            orderMapper.updateReturnMessage(orderPri);
+            //明细
+            for (OutboundItemVO outboundItemVO : outboundItemVOList) {
+                OrderItem orderItemPri = new OrderItem();
+                orderItemPri.setItemId(outboundItemVO.getItemId());
+                orderItemPri.setReturnQty(outboundItemVO.getOutingQty());
+                orderItemPri.setReturnAmt(outboundItemVO.getOutingAmt());
+                orderItemMapper.updateReturnMessage(orderItemPri);
+            }
+        }
+    }
+
 
     /**
      * @desc : 销售退货出库新建
@@ -298,6 +358,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
             outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.SALE_RETURN.getValue());
             //endregion
+
             //region  新建明细
             //总单id
             outboundItemVO.setOutId(outboundVO.getOutId());
@@ -313,10 +374,20 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                         .setCostPrice(outboundItemVO.getPriceOut())
                         .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
                 ;
+
+                //region  反写出库明细 反写订单明细
+                this.updatePrimaryDetail(outboundItemVO, true, true);
+                //endregion
+
             } else {
                 outboundItemVO
                         .setOutQty(BigDecimal.ZERO)
                         .setOutAmt(BigDecimal.ZERO);
+
+                //region  反写出库明细 反写订单明细
+                this.updatePrimaryDetail(outboundItemVO, true, false);
+                //endregion
+
             }
             //入库状态
             outboundItemVO.setOutStatus(outboundVO.getOutStatus());
@@ -325,9 +396,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             outboundItemMapper.insert(outboundItem);
             //endregion
 
-            //region  反写出库明细 反写订单明细
-            this.updatePrimaryDetail(outboundItemVO, true);
-            //endregion
+
         }
         //endregion
 
@@ -377,6 +446,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             }
         }
         //endregion
+
         //region 大编辑
         else {
             //region 明细数量金额  求和
@@ -393,15 +463,13 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                 }
                 //endregion
 
-                //region  反写出库总单 反写订单总单
-                this.updatePrimaryTotal(outboundVO, false);
+                //region  反写出库总单和明细 反写订单总单和明细
+                this.rollBackTotalAndDetail(outboundVO.getItemList());
                 //endregion
 
                 //region 修改明细
                 List<OutboundItemVO> itemList = outboundVO.getItemList();
                 for (OutboundItemVO outboundItemVO : itemList) {
-                    //根据id查询
-                    OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
 
                     //region  不能新建
                     if (outboundItemVO.getSOrderItemId() == null) {
@@ -410,6 +478,9 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                     }
                     //endregion
 
+                    //根据id查询
+                    OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
+
                     //region 将库存需要的参数赋值
                     outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
                     outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.SALE_RETURN.getValue());
@@ -421,22 +492,65 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                     outboundItemVO.setOutAmt(outboundItemVO.getOutAmt());
                     //endregion
 
-                    //region 明细赋值
-                    OutboundItem outboundItem = new OutboundItem();
-                    outboundItem.setItemId(outboundItemVO.getItemId());
-                    outboundItem.setOutQty(outboundItemVO.getOutingQty());
-                    outboundItem.setOutAmt(outboundItemVO.getOutingAmt());
-                    outboundItem.setCostPrice(outboundItemVO.getPriceOut());
-                    outboundItem.setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(6, BigDecimal.ROUND_HALF_UP));
-                    //修改
-                    outboundItemMapper.update(outboundItem,
-                            new UpdateWrapper<OutboundItem>().lambda()
-                                    .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
-                    );
+                    //region 编辑明细赋值
+                    if (outboundItemVO.getItemId() != null) {
+                        OutboundItem outboundItem = new OutboundItem();
+                        outboundItem.setItemId(outboundItemVO.getItemId());
+                        outboundItem.setOutQty(outboundItemVO.getOutingQty());
+                        outboundItem.setOutAmt(outboundItemVO.getOutingAmt());
+                        outboundItem.setCostPrice(outboundItemVO.getPriceOut());
+                        outboundItem.setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(6, BigDecimal.ROUND_HALF_UP));
+                        //修改
+                        outboundItemMapper.update(outboundItem,
+                                new UpdateWrapper<OutboundItem>().lambda()
+                                        .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                        );
+                    }
+                    //endregion
+
+                    //region 新建明细
+                    else {
+                        outboundItemVO
+                                .setOutId(outboundItemVO.getOutId())
+                                .setOutQty(outboundItemVO.getOutingQty())
+                                .setOutAmt(outboundItemVO.getOutingAmt())
+                                .setOutingQty(BigDecimal.ZERO)
+                                .setOutingAmt(BigDecimal.ZERO)
+                                .setCostPrice(outboundItemVO.getPriceOut())
+                                .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
+                                .setOutType(Constant.OutType.SALE_RETURN.getName())
+                        ;
+                        //出库状态
+                        String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
+                        outboundItemVO.setOutStatus(outStatus);
+                        //实体转换
+                        OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                        //新建
+                        outboundItemMapper.insert(outboundItem);
+                    }
                     //endregion
 
                     //region  反写出库明细 反写订单明细
-                    this.updatePrimaryDetail(outboundItemVO, false);
+                    this.updatePrimaryDetail(outboundItemVO, true,true);
+                    //endregion
+                }
+                //endregion
+
+                //region 删除明细
+                if (outboundVO.getDeleteItemList() != null) {
+                    for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) {
+                        if (outboundItemVO.getItemId() != null) {
+                            OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                            outboundItem.setFlgValid(false);
+                            //修改
+                            outboundItemMapper.update(outboundItem,
+                                    new UpdateWrapper<OutboundItem>().lambda()
+                                            .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                            );
+                        }
+                    }
+                    //region  反写出库总单和明细 反写订单总单和明细
+                    this.rollBackTotalAndDetail(outboundVO.getDeleteItemList());
                     //endregion
                 }
                 //endregion
@@ -452,6 +566,10 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                 );
                 //endregion
 
+                //region  反写出库总单 反写订单总单
+                this.updatePrimaryTotal(outboundVO, true);
+                //endregion
+
                 //region  账款
                 if (outboundVO.getReceivableId() != null) {
                     accountService.reversePayable(outboundVO.getOutId(), Constant.InventoryDocCode.OUTBOUND.getTableName());
@@ -469,6 +587,11 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             //region 自动办理参数false  出库中编辑
             //自动办理标识为false 并且 自动办理参数为false  出库中
             if (!outboundVO.getFlgAutoHandle() && Constant.FlgHandleSetting.FALSE.getValue().equals(outboundVO.getFlgHandleSetting())) {
+
+                //region  反写出库总单和明细 反写订单总单和明细
+                this.rollBackTotalAndDetail(outboundVO.getItemList());
+                //endregion
+
                 //region 修改明细
                 List<OutboundItemVO> itemList = outboundVO.getItemList();
                 for (OutboundItemVO outboundItemVO : itemList) {
@@ -479,19 +602,66 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                     }
                     //endregion
 
-                    //region 赋值明细
-                    OutboundItem outboundItem = new OutboundItem();
-                    outboundItem.setItemId(outboundItemVO.getItemId());
-                    outboundItem.setOutingQty(outboundItemVO.getOutingQty());
-                    outboundItem.setOutingAmt(outboundItemVO.getOutingAmt());
-                    //修改
-                    outboundItemMapper.update(outboundItem,
-                            new UpdateWrapper<OutboundItem>().lambda()
-                                    .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
-                    );
+                    //region 编辑明细
+                    if (outboundItemVO.getItemId() != null) {
+                        OutboundItem outboundItem = new OutboundItem();
+                        outboundItem.setItemId(outboundItemVO.getItemId());
+                        outboundItem.setOutingQty(outboundItemVO.getOutingQty());
+                        outboundItem.setOutingAmt(outboundItemVO.getOutingAmt());
+                        //修改
+                        outboundItemMapper.update(outboundItem,
+                                new UpdateWrapper<OutboundItem>().lambda()
+                                        .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                        );
+                    }
+                    //endregion
+
+                    //region 新建明细
+                    else {
+                        outboundItemVO
+                                .setOutId(outboundItemVO.getOutId())
+                                .setOutQty(BigDecimal.ZERO)
+                                .setOutAmt(BigDecimal.ZERO)
+                                .setCostPrice(outboundItemVO.getPriceOut())
+                                .setCostAmt(outboundItemVO.getOutingQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
+                                .setOutType(Constant.OutType.SALE_RETURN.getName())
+                        ;
+                        //出库状态
+                        String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
+                        outboundItemVO.setOutStatus(outStatus);
+                        //实体转换
+                        OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                        //新建
+                        outboundItemMapper.insert(outboundItem);
+                    }
+                    //endregion
+
+                    //region  反写出库明细 反写订单明细
+                    this.updatePrimaryDetail(outboundItemVO, true,false);
                     //endregion
                 }
                 //endregion
+
+                //region 删除明细
+                if (outboundVO.getDeleteItemList() != null) {
+                    for (OutboundItemVO outboundItemVO : outboundVO.getDeleteItemList()) {
+                        if (outboundItemVO.getItemId() != null) {
+                            OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                            outboundItem.setFlgValid(false);
+                            //修改
+                            outboundItemMapper.update(outboundItem,
+                                    new UpdateWrapper<OutboundItem>().lambda()
+                                            .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                            );
+                        }
+                    }
+
+                    //region  反写出库总单和明细 反写订单总单和明细
+                    this.rollBackTotalAndDetail(outboundVO.getItemList());
+                    //endregion
+                }
+                //endregion
+
                 //region  修改出库总单
                 Outbound outbound = new Outbound();
                 outbound.setOutId(outboundVO.getOutId());
@@ -502,6 +672,10 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                         new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
                 );
                 //endregion
+
+                //region  反写出库总单 反写订单总单
+                this.updatePrimaryTotal(outboundVO, true);
+                //endregion
             }
             //endregion
         }
@@ -532,9 +706,9 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             }
             //endregion
 
-            //region  反写出库总单 反写订单总单
-            OutboundVO outboundVO = outboundConvert.convertResToVO(outboundResponse);
-            this.updatePrimaryTotal(outboundVO, false);
+            //region  回滚原总单和明细信息(订单,出库单)
+            List<OutboundItemVO> outboundItemVOList = outboundItemConvert.convertResListToVOList(outboundItemResponseList);
+            this.rollBackTotalAndDetail(outboundItemVOList);
             //endregion
 
             //region 修改明细
@@ -556,11 +730,6 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                                 .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
                 );
                 //endregion
-
-                //region  反写出库明细 反写订单明细
-                OutboundItemVO outboundItemVO = outboundItemConvert.convertResToVO(outboundItemResponse);
-                this.updatePrimaryDetail(outboundItemVO, false);
-                //endregion
             }
             //endregion
 
@@ -574,6 +743,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             );
             //endregion
 
+
             //region  入账
             if (outboundResponse.getReceivableId() != null) {
                 accountService.reversePayable(outboundResponse.getOutId(), Constant.InventoryDocCode.OUTBOUND.getTableName());
@@ -592,9 +762,9 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
         //自动办理标识为false 并且 自动办理参数为false  出库中
         if (!outboundResponse.getFlgAutoHandle() && Constant.FlgHandleSetting.FALSE.getValue().equals(outboundResponse.getFlgHandleSetting())) {
 
-            //region  反写出库总单 反写订单总单
-            OutboundVO outboundVO = outboundConvert.convertResToVO(outboundResponse);
-            this.updatePrimaryTotal(outboundVO, false);
+            //region  回滚原总单和明细信息(订单,出库单)
+            List<OutboundItemVO> outboundItemVOList = outboundItemConvert.convertResListToVOList(outboundItemResponseList);
+            this.rollBackTotalAndDetail(outboundItemVOList);
             //endregion
 
             //region 修改明细
@@ -611,10 +781,6 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                 );
                 //endregion
 
-                //region  反写出库明细 反写订单明细
-                OutboundItemVO outboundItemVO = outboundItemConvert.convertResToVO(outboundItemResponse);
-                this.updatePrimaryDetail(outboundItemVO, false);
-                //endregion
             }
             //endregion
 
@@ -642,16 +808,29 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
      */
     @Transactional(rollbackFor = {Exception.class})
     public ResponseResultVO<?> saleReturnHandleOutbound(OutboundVO outboundVO) {
-        //region 查询出库总单数据信息
-        OutboundResponse outboundResponse = outboundMapper.selectById(outboundVO.getOutId());
-        //endregion
-
-        //region 编辑明细
         //校验明细
         if (outboundVO.getItemList().size() == 0) {
             throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
         }
+
+        //region 查询出库总单数据信息
+        OutboundResponse outboundResponse = outboundMapper.selectById(outboundVO.getOutId());
+        //endregion
+
+        //region  回滚原总单和明细信息(订单,出库单)
+        List<OutboundItemVO> outboundItemVOList  = new ArrayList<>();
+        for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
+            if(outboundItemVO.getItemId()!=null){
+                OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
+                OutboundItemVO outboundItemVO1 = outboundItemConvert.convertResToVO(outboundItemResponse);
+                outboundItemVOList.add(outboundItemVO1);
+            }
+        }
+        this.rollBackTotalAndDetail(outboundItemVOList);
+        //endregion
+
+        //region 编辑明细
         for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
             //region  不能新建
             if (outboundItemVO.getSOrderItemId() == null) {
@@ -675,24 +854,52 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             //endregion
 
             //region 编辑明细
-            outboundItemVO
-                    .setOutQty(outboundItemResponse.getOutQty().add(outboundItemVO.getOutingQty()))
-                    .setOutAmt(outboundItemResponse.getOutAmt().add(outboundItemVO.getOutingAmt()))
-                    .setOutingQty(outboundItemResponse.getOutingQty().subtract(outboundItemVO.getOutingQty()))
-                    .setOutAmt(outboundItemResponse.getOutingAmt().subtract(outboundItemVO.getOutingAmt()))
-                    .setCostPrice(outboundItemVO.getPriceOut())
-                    .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
-            ;
-            //出库状态
-            String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
-            outboundItemVO.setOutStatus(outStatus);
-            //实体转换
-            OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
-            //修改
-            outboundItemMapper.update(outboundItem,
-                    new UpdateWrapper<OutboundItem>().lambda()
-                            .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
-            );
+            if (outboundItemVO.getItemId() != null) {
+                outboundItemVO
+                        .setOutQty(outboundItemResponse.getOutQty().add(outboundItemVO.getOutingQty()))
+                        .setOutAmt(outboundItemResponse.getOutAmt().add(outboundItemVO.getOutingAmt()))
+                        .setOutingQty(outboundItemResponse.getOutingQty().subtract(outboundItemVO.getOutingQty()))
+                        .setOutingAmt(outboundItemResponse.getOutingAmt().subtract(outboundItemVO.getOutingAmt()))
+                        .setCostPrice(outboundItemVO.getPriceOut())
+                        .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
+                ;
+                //出库状态
+                String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
+                outboundItemVO.setOutStatus(outStatus);
+                //实体转换
+                OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                //修改
+                outboundItemMapper.update(outboundItem,
+                        new UpdateWrapper<OutboundItem>().lambda()
+                                .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+                );
+            }
+            //endregion
+
+            //region  新建明细
+            else {
+                outboundItemVO
+                        .setOutId(outboundItemVO.getOutId())
+                        .setOutQty(outboundItemVO.getOutingQty())
+                        .setOutAmt(outboundItemVO.getOutingAmt())
+                        .setCostPrice(outboundItemVO.getPriceOut())
+                        .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
+                        .setOutType(Constant.OutType.SALE_RETURN.getName())
+                        .setOutingQty(BigDecimal.ZERO)
+                        .setOutingAmt(BigDecimal.ZERO)
+                ;
+                //出库状态
+                String outStatus = this.setOutStatus(outboundItemVO.getOutingQty(), outboundItemVO.getOutQty());
+                outboundItemVO.setOutStatus(outStatus);
+                //实体转换
+                OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+                //新建
+                outboundItemMapper.insert(outboundItem);
+            }
+            //endregion
+
+            //region  反写出库明细 反写订单明细
+            this.updatePrimaryDetail(outboundItemVO, true,true);
             //endregion
         }
         //endregion
@@ -710,6 +917,9 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                     );
                 }
             }
+            //region  回滚原总单和明细信息(订单,出库单)
+            this.rollBackTotalAndDetail(outboundVO.getDeleteItemList());
+            //endregion
         }
         //endregion
 
@@ -732,6 +942,10 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
         );
         //endregion
 
+        //region  反写出库总单 反写订单总单
+        this.updatePrimaryTotal(outboundVO, true);
+        //endregion
+
         //region 入账
         accountService.reversePayable(outboundResponse.getOutId(), Constant.InventoryDocCode.OUTBOUND.getTableName());
         //endregion
@@ -809,6 +1023,12 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
         }
         //endregion
 
+        //region  回滚原总单和明细信息(订单,出库单)
+        List<OutboundItemVO> outboundItemVOList = outboundItemConvert.convertResListToVOList(outboundItemResponseList);
+        this.rollBackTotalAndDetail(outboundItemVOList);
+        //endregion
+
+
         //region   调用库存
 //                Map<String, Object> map = new HashMap<>();
 //                map.put("outDetail",outboundItemResponseList);