Просмотр исходного кода

销售出库调整,销售退货调整

koushanshan 1 год назад
Родитель
Сommit
28d50a9bf3

+ 4 - 1
src/main/java/com/dk/mdm/controller/ivt/outBound/OutboundSaleOrderController.java

@@ -2,6 +2,7 @@ package com.dk.mdm.controller.ivt.outBound;
 
 
 import com.dk.common.model.pojo.PageList;
+import com.dk.common.response.ResponseResultUtil;
 import com.dk.common.response.ResponseResultVO;
 import com.dk.common.service.BaseService;
 import com.dk.mdm.model.pojo.ivt.Outbound;
@@ -10,6 +11,7 @@ import com.dk.mdm.model.query.sale.OrderQuery;
 import com.dk.mdm.model.response.ivt.InboundResponse;
 import com.dk.mdm.model.response.ivt.OutboundResponse;
 import com.dk.mdm.model.response.sale.OrderResponse;
+import com.dk.mdm.model.vo.ivt.OutboundItemVO;
 import com.dk.mdm.model.vo.ivt.OutboundVO;
 import com.dk.mdm.service.ivt.outbound.OutboundSaleOrderService;
 import io.swagger.annotations.Api;
@@ -18,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 import java.util.Map;
 
 
@@ -44,7 +47,7 @@ public class OutboundSaleOrderController {
     )
     @PostMapping({"outbound_insert"})
     public ResponseResultVO<?> saleOrderOutboundInsert(@Valid @RequestBody OutboundVO outboundVO) {
-        return outboundSaleOrderService.saleOrderOutboundInsert(outboundVO,false);
+        return outboundSaleOrderService.saleOrderOutboundInsert(outboundVO, false);
     }
 
     /**

+ 12 - 0
src/main/java/com/dk/mdm/model/vo/ivt/OutboundItemVO.java

@@ -325,6 +325,18 @@ public class OutboundItemVO {
     @TableField(typeHandler = UuidTypeHandler.class)
     private String makeStaff;
 
+    @ApiModelProperty(value = "修改订单总单信息(存未修改时候的已出库数量)")
+    private  BigDecimal updateOrderOutQty;
+
+    @ApiModelProperty(value = "修改订单总单信息(存未修改时候的已出库金额)")
+    private  BigDecimal updateOrderOutAmt;
+
+    @ApiModelProperty(value = "修改订单总单信息(存未修改时候的出库中数量)")
+    private  BigDecimal updateOrderOutingQty;
+
+    @ApiModelProperty(value = "修改订单总单信息(存未修改时候的出库中金额)")
+    private  BigDecimal updateOrderOutingAmt;
+
 
 
     private static final long serialVersionUID = 1L;

+ 322 - 167
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleOrderService.java

@@ -132,8 +132,8 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
 
 
     /**
-     * @desc   : 校验库存是否存在
-     * @date   : 2024/6/11 10:55
+     * @desc : 校验库存是否存在
+     * @date : 2024/6/11 10:55
      * @author : 寇珊珊
      */
     @Transactional(
@@ -151,10 +151,10 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         }
         return inventoryResponse;
     }
-    
+
     /**
-     * @desc   : 先查库存后出库
-     * @date   : 2024/6/11 9:30
+     * @desc : 先查库存后出库
+     * @date : 2024/6/11 9:30
      * @author : 寇珊珊
      */
     @Transactional(rollbackFor = {Exception.class})
@@ -178,14 +178,14 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 outboundItemVO.setMakeStaff(outboundVO.getMakeStaff());
             }
             //销售出库新建
-            this.saleOrderOutboundInsert(outboundVO,true);
+            this.saleOrderOutboundInsert(outboundVO, true);
         }
         //先查库存锁表看能出库的数量有多少   可出库数量建一张已出库的单子并扣减库存,剩下的数量建一张出库中的单子
         else {
             //过滤外协品
             for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
                 //商品id不为空才校验库存    因为为空是外协品
-                if(outboundItemVO.getSkuId()!=null){
+                if (outboundItemVO.getSkuId() != null) {
                     //查询库存是否存在
                     InventoryResponse inventoryResponse = this.checkInventoryExist(outboundItemVO);
                     if (inventoryResponse != null) {
@@ -204,36 +204,36 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 }
             }
             //过滤出库存量足够的数据
-            List<OutboundItemVO> itemList = outboundVO.getItemList().stream().filter(it -> it.getNotEnoughInventoryQty()==null ).collect(Collectors.toList());
+            List<OutboundItemVO> itemList = outboundVO.getItemList().stream().filter(it -> it.getNotEnoughInventoryQty() == null).collect(Collectors.toList());
 
             //region  过滤出不够出库的每条明细数量  ------新建出库中数据
-            List<OutboundItemVO> outboundIngList = outboundVO.getItemList().stream().filter(it -> it.getNotEnoughInventoryQty()!=null && it.getNotEnoughInventoryQty().compareTo(BigDecimal.ZERO)>0).collect(Collectors.toList());
-            if(outboundIngList != null && outboundIngList.size()>0){
+            List<OutboundItemVO> outboundIngList = outboundVO.getItemList().stream().filter(it -> it.getNotEnoughInventoryQty() != null && it.getNotEnoughInventoryQty().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
+            if (outboundIngList != null && outboundIngList.size() > 0) {
                 //赋值箱片
                 for (OutboundItemVO outboundItemVO : outboundIngList) {
                     //箱
-                    outboundItemVO.setOutingBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(),RoundingMode.DOWN).toString()) );
+                    outboundItemVO.setOutingBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(), RoundingMode.DOWN).toString()));
                     //片
                     outboundItemVO.setOutingPiece(outboundItemVO.getOutingQty().remainder(outboundItemVO.getPackBox()));
                 }
                 outboundVO.setFlgAutoHandle(false);
                 outboundVO.setItemList(outboundIngList);
                 //销售出库新建
-                this.saleOrderOutboundInsert(outboundVO,true);
+                this.saleOrderOutboundInsert(outboundVO, true);
             }
             //endregion
 
             //region  库存够扣减的明细  -----------新建已出库数据并扣减库存
             //销售出库新建
-            if (itemList!=null && itemList.size() > 0) {
+            if (itemList != null && itemList.size() > 0) {
                 for (OutboundItemVO outboundItemVO : itemList) {
-                    if(outboundItemVO.getSkuId()!=null){ //过滤外协品 外协品没有箱片
+                    if (outboundItemVO.getSkuId() != null) { //过滤外协品 外协品没有箱片
                         //箱
-                        outboundItemVO.setOutBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(),RoundingMode.DOWN).toString()) );
+                        outboundItemVO.setOutBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(), RoundingMode.DOWN).toString()));
                         //片
                         outboundItemVO.setOutPiece(outboundItemVO.getOutingQty().remainder(outboundItemVO.getPackBox()));
                     }
-                 }
+                }
                 outboundVO.setFlgAutoHandle(true);
                 outboundVO.setItemList(itemList);
                 this.saleOrderOutboundInsert(outboundVO, true);
@@ -393,13 +393,13 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
      * @author : 寇珊珊
      */
     @Transactional(rollbackFor = {Exception.class})
-    public ResponseResultVO<?> saleOrderOutboundInsert(OutboundVO outboundVO,Boolean orderTransmitFlag) {
+    public ResponseResultVO<?> saleOrderOutboundInsert(OutboundVO outboundVO, Boolean orderTransmitFlag) {
         //region 如果没有客户id,要新建
 //        outboundVO = outCommon.insertCustomer(outboundVO);
         //endregion
 
         //region 查询当前公司的系统参数  自动办理信息  并赋值
-        if(!orderTransmitFlag){
+        if (!orderTransmitFlag) {
             Map<String, Object> map = new HashMap<>();
             map.put("cpId", outboundVO.getCpId());
             map.put("code", Constant.SystemConstant.IVT_001.getValue());
@@ -418,7 +418,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         BigDecimal sumIntoQty = BigDecimal.ZERO;
         //出库金额
         BigDecimal sumIntoPriceAmt = BigDecimal.ZERO;
-        if(orderTransmitFlag){
+        if (orderTransmitFlag) {
             sumIntoQty = outboundVO.getItemList().stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
             sumIntoPriceAmt = outboundVO.getItemList().stream().map(OutboundItemVO::getPriceOut).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
         }
@@ -504,7 +504,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
-            outboundItemVO.setItemId(null );
+            outboundItemVO.setItemId(null);
             //region 将库存需要的参数赋值
             outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
             outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.SALE_ORDER.getValue());
@@ -587,9 +587,9 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             //region 外协品新建外协入库单
             //筛选出skuId为空的 走外协品逻辑
             List<OutboundItemVO> outsideGoods = outboundVO.getItemList().stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
-           for(int i=0;i<outsideGoods.size();i++){
-              outsideGoods.get(i).setPriceOut( outsideGoods.get(i).getCostPrice()==null?BigDecimal.ZERO:outsideGoods.get(i).getCostPrice());
-           }
+            for (int i = 0; i < outsideGoods.size(); i++) {
+                outsideGoods.get(i).setPriceOut(outsideGoods.get(i).getCostPrice() == null ? BigDecimal.ZERO : outsideGoods.get(i).getCostPrice());
+            }
             //删除外协品生产外协入库单
             this.deleteOutsideGoodsInto(outboundVO, outsideGoods);
             //新建外协品生产外协入库单
@@ -599,7 +599,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             //region 库存
             //筛选出skuId不为空的 走库存
             List<OutboundItemVO> invList = outboundVO.getItemList().stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
-            if(invList!=null && invList.size() > 0){
+            if (invList != null && invList.size() > 0) {
                 Map<String, Object> invMap = new HashMap<>();
                 invMap.put("outDetail", invList);
                 inventoryService.operatingInventoryInformation(invMap);
@@ -646,11 +646,13 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //region 大编辑
         else {
             // region 更新客户信息
-            outboundVO = outCommon.insertCustomer(outboundVO);
+//            outboundVO = outCommon.insertCustomer(outboundVO);
             // endregion
 
             //region 根据id查询   并且明细数量金额  求和
             OutboundResponse outboundResponse = outboundMapper.selectById(outboundVO.getOutId());
+            //根据总单id查询
+            List<OutboundItemResponse> outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundResponse.getOutId()));
             BigDecimal sumQty = outboundVO.getItemList().stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
             BigDecimal sumAmt = outboundVO.getItemList().stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
             //endregion
@@ -669,6 +671,11 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     //根据id查询
                     OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
 
+                    //region 反写订单总单 数据需要  把查出来的已出库数量用别的变量存起来
+                    outboundItemVO.setUpdateOrderOutQty(outboundItemResponse.getOutQty());
+                    outboundItemVO.setUpdateOrderOutAmt(outboundItemResponse.getOutAmt());
+                    //endregion
+
                     //region  编辑明细
                     if (outboundItemVO.getItemId() != null) {
 
@@ -747,15 +754,12 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                         }
                     }
                     //endregion
+
                 }
                 //endregion
 
                 //region 删除明细
-                BigDecimal delOutQty = BigDecimal.ZERO;
-                BigDecimal delOutAmt = BigDecimal.ZERO;
                 if (outboundVO.getDeleteItemList() != null && outboundVO.getDeleteItemList().size() > 0) {
-                    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) {
                             //region 将库存需要的参数赋值
@@ -807,26 +811,8 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 //endregion
 
                 //region 修改销售总单
-                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());
-                    }
-                }
+
+                this.updateOrderMessageByEdit(outboundResponse, outboundVO.getItemList(), outboundVO.getDeleteItemList());
                 //endregion
 
                 //region  应收记账
@@ -842,7 +828,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 this.deleteOutsideGoodsInto(outboundVO, outsideGoods);
                 //新建外协品生产外协入库单
                 this.insertOutsideGoodsInto(outboundVO, outsideGoods);
-                if(outboundVO.getDeleteItemList() != null){
+                if (outboundVO.getDeleteItemList() != null) {
                     List<OutboundItemVO> delOutsideGoods = outboundVO.getDeleteItemList().stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
                     //删除外协品生产外协入库单
                     this.deleteOutsideGoodsInto(outboundVO, delOutsideGoods);
@@ -853,7 +839,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 //筛选出skuId不为空的 走库存
                 List<OutboundItemVO> invList = outboundVO.getItemList().stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
                 List<OutboundItemVO> invDelList = null;
-                if(outboundVO.getDeleteItemList() != null){
+                if (outboundVO.getDeleteItemList() != null) {
                     invDelList = outboundVO.getDeleteItemList().stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
                 }
                 if ((invList != null && invList.size() > 0) || (invDelList != null && invDelList.size() > 0)) {
@@ -878,6 +864,12 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
 
                     //region 编辑明细
                     if (outboundItemVO.getItemId() != null) {
+
+                        //region 反写订单总单 数据需要  把查出来的出库中数量用别的变量存起来
+                        outboundItemVO.setUpdateOrderOutingQty(outboundItemResponse.getOutingQty());
+                        outboundItemVO.setUpdateOrderOutingAmt(outboundItemResponse.getOutingAmt());
+                        //endregion
+
                         OutboundItem outboundItem = new OutboundItem();
                         outboundItem.setItemId(outboundItemResponse.getItemId());
                         outboundItem.setOutingQty(outboundItemResponse.getOutingQty());
@@ -892,6 +884,11 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
 
                     //region 新建明细
                     else {
+                        //region 反写订单总单 数据需要  把查出来的出库中数量用别的变量存起来
+                        outboundItemVO.setUpdateOrderOutingQty(outboundItemVO.getOutingQty());
+                        outboundItemVO.setUpdateOrderOutingAmt(outboundItemVO.getOutingAmt());
+                        //endregion
+
                         outboundItemVO
                                 .setOutId(outboundItemVO.getOutId())
                                 .setOutQty(BigDecimal.ZERO)
@@ -934,11 +931,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 //endregion
 
                 //region 删除明细
-                BigDecimal delOutQty = BigDecimal.ZERO;
-                BigDecimal delOutAmt = BigDecimal.ZERO;
                 if (outboundVO.getDeleteItemList() != null && outboundVO.getDeleteItemList().size() > 0) {
-                    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);
@@ -983,32 +976,109 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 );
                 //endregion
 
-                //region 修改采购总单
-                if (outboundVO.getFromId() != null) {
+                //region 修改销售总单
+                this.updateOrderMessageByEdit(outboundResponse, outboundVO.getItemList(), outboundVO.getDeleteItemList());
+                //endregion
+
+            }
+            //endregion
+        }
+        //endregion
+
+        return ResponseResultUtil.success(outboundVO);
+    }
+
+    /**
+     * @desc : 编辑销售出库修改销售订单信息
+     * @date : 2024/6/21 10:34
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public void updateOrderMessageByEdit(OutboundResponse outboundResponse, List<OutboundItemVO> itemList, List<OutboundItemVO> deleteItemList) {
+        //出库明细汇总
+        Map<String, List<OutboundItemVO>> orderOutItemVOListMap = itemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getFromId));
+        //出库明细删除汇总
+        Map<String, List<OutboundItemVO>> delOrderOutItemVOListMap = deleteItemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getFromId));
+        //出库明细汇总循环
+        for (String fromId : orderOutItemVOListMap.keySet()) {
+            //出库明细删除汇总循环
+            for (String delFromId : delOrderOutItemVOListMap.keySet()) {
+                //新建出库明细来源Id = 删除出库明细来源Id
+                if (fromId.equals(delFromId)) {
+                    //region  提取新建分组后的明细
+                    List<OutboundItemVO> orderOutItemVOListGroup = orderOutItemVOListMap.get(fromId);
+                    //分组后的明细 出库数量和金额总和
+                    BigDecimal orderSumQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal orderSumAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    //分组后的明细 原出库数量和金额总和
+                    BigDecimal updateOrderOutQty = BigDecimal.ZERO;
+                    BigDecimal updateOrderOutAmt = BigDecimal.ZERO;
+                    BigDecimal updateOrderOutingQty = BigDecimal.ZERO;
+                    BigDecimal updateOrderOutingAmt = BigDecimal.ZERO;
+                    //已出库
+                    if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                        updateOrderOutQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        updateOrderOutAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    }
+                    //出库中
+                    else {
+                        updateOrderOutingQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        updateOrderOutingAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    }
+                    //endregion
+
+                    //region 提取删除分组后的明细
+                    List<OutboundItemVO> delOrderOutItemVOListGroup = delOrderOutItemVOListMap.get(delFromId);
+                    BigDecimal orderDelOutQty = BigDecimal.ZERO;
+                    BigDecimal orderDelOutAmt = BigDecimal.ZERO;
+                    //已出库
+                    if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                        orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    }
+                    //出库中
+                    else if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus())) {
+                        orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    }
+                    //endregion
+
+                    //region  反写订单数据
                     //根据id查询
-                    OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
+                    OrderResponse orderResponse = orderMapper.selectById(fromId);
                     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));
+                    order.setOrderId(fromId);
+                    //已出库
+                    if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                        order.setOutQty(updateOrderOutQty.negate().add(orderSumQty).subtract(orderDelOutQty));
+                        order.setOutAmt(updateOrderOutAmt.negate().add(orderSumAmt).subtract(orderDelOutAmt));
+                        order.setOutingQty(orderDelOutQty);
+                        order.setOutingAmt(orderDelOutAmt);
+                        //出库状态
+                        String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
+                                orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
+                        order.setOutStatus(outStatus);
+                    }
+                    //出库中
+                    else if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus())) {
+                        order.setOutingQty(updateOrderOutingQty.negate().add(orderSumQty).subtract(orderDelOutQty));
+                        order.setOutingAmt(updateOrderOutingAmt.negate().add(orderSumQty).subtract(orderDelOutAmt));
+                        //出库状态
+                        String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
+                                orderResponse.getOutQty(), orderResponse.getSumQuantity());
+                        order.setOutStatus(outStatus);
+                    }
                     //出库状态
-                    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
                 }
-                //endregion
             }
-            //endregion
         }
-        //endregion
-
-        return ResponseResultUtil.success(outboundVO);
     }
 
     /**
@@ -1075,7 +1145,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             }
             //endregion
 
-            //region  修改库总单
+            //region  修改库总单
             Outbound outbound = new Outbound();
             outbound.setOutId(outboundResponse.getOutId());
             outbound.setFlgValid(false);
@@ -1086,28 +1156,9 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             //endregion
 
             //region 修改销售总单
-            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());
-                }
-            }
-
+            this.updateOrderMessageByRepeal(outboundResponse, outboundItemResponseList);
             //endregion
 
-
             //region 外协品新建外协入库单
             //筛选出skuId为空的 走外协品逻辑
             OutboundVO outboundVO = outboundConvert.convertResToVO(outboundResponse);
@@ -1120,7 +1171,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             //region  修改库存
             //筛选出skuId不为空的 走库存
             List<OutboundItemResponse> invList = outboundItemResponseList.stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
-            if(invList!=null && invList.size()>0) {
+            if (invList != null && invList.size() > 0) {
                 Map<String, Object> map = new HashMap<>();
                 map.put("delOutDetail", invList);
                 inventoryService.operatingInventoryInformation(map);
@@ -1183,32 +1234,77 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             //endregion
 
             //region 修改销售总单
-            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());
+            this.updateOrderMessageByRepeal(outboundResponse, outboundItemResponseList);
+            //endregion
+        }
+        //endregion
+
+        return ResponseResultUtil.success();
+    }
+
+    /**
+     * @desc : 作废销售出库修改销售订单信息
+     * @date : 2024/6/21 10:34
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public void updateOrderMessageByRepeal(OutboundResponse outboundResponse, List<OutboundItemResponse> itemList) {
+        //出库明细汇总
+        Map<String, List<OutboundItemResponse>> orderOutItemListMap = itemList.stream().collect(Collectors.groupingBy(OutboundItemResponse::getFromId));
+        //出库明细汇总循环
+        for (String fromId : orderOutItemListMap.keySet()) {
+            //region  提取新建分组后的明细
+            //分组后的明细 原出库数量和金额总和
+            List<OutboundItemResponse> orderOutItemListGroup = orderOutItemListMap.get(fromId);
+            BigDecimal updateOrderOutQty = BigDecimal.ZERO;
+            BigDecimal updateOrderOutAmt = BigDecimal.ZERO;
+            BigDecimal updateOrderOutingQty = BigDecimal.ZERO;
+            BigDecimal updateOrderOutingAmt = BigDecimal.ZERO;
+            //已出库
+            if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                updateOrderOutQty = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                updateOrderOutAmt = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            }
+            //出库中
+            else {
+                updateOrderOutingQty = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                updateOrderOutingAmt = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            }
+            //endregion
+
+            //region  反写订单数据
+            //根据id查询
+            OrderResponse orderResponse = orderMapper.selectById(fromId);
+            Order order = new Order();
+            order.setOrderId(fromId);
+            //已出库
+            if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                order.setOutQty(updateOrderOutQty.negate());
+                order.setOutAmt(updateOrderOutAmt.negate());
+                //出库状态
+                String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty(),
+                        orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
+                order.setOutStatus(orderOutStatus);
+            }
+            //出库中
+            else if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus())) {
+                order.setOutingQty(updateOrderOutingQty.negate());
+                order.setOutingAmt(updateOrderOutingAmt.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());
-                }
+            }
+            //修改
+            int countRow = orderMapper.updateById(order);
+            //数量超出
+            if (countRow == 0) {
+                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
             }
             //endregion
         }
-        //endregion
-
-        return ResponseResultUtil.success();
     }
 
-
     /**
      * @desc : 销售出库办理
      * @date : 2024/3/7 15:47
@@ -1244,6 +1340,11 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             }
             //endregion
 
+            //region 反写订单总单 数据需要  把查出来的出库中数量用别的变量存起来
+            outboundItemVO.setUpdateOrderOutingQty(outboundItemResponse.getOutingQty());
+            outboundItemVO.setUpdateOrderOutingAmt(outboundItemResponse.getOutingAmt());
+            //endregion
+
             //region  编辑明细
             if (outboundItemVO.getItemId() != null) {
                 outboundItemVO
@@ -1338,15 +1439,7 @@ 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 && outboundVO.getDeleteItemList().size() > 0) {
-            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) {
 
@@ -1410,27 +1503,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //endregion
 
         //region  修改销售订单订单
-        if (outboundVO.getFromId() != null) {
-            //根据id查询
-            OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
-            //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
-            Order order = new Order();
-            order.setOrderId(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().subtract(sumOutQty).add(delOutQty),
-                    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());
-            }
-        }
+        this.updateOrderMessageByHandle(outboundVO.getItemList(), outboundVO.getDeleteItemList());
         //endregion
 
         //region  应收记账
@@ -1438,10 +1511,10 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //endregion
 
         //region 库存明细处理
-        if(outboundVO.getItemList()!=null && outboundVO.getItemList().size()>0){
+        if (outboundVO.getItemList() != null && outboundVO.getItemList().size() > 0) {
             Map<String, Object> map = new HashMap<>(); // 定义map值 修改库存用
             // 获取外协数据
-            List<OutboundItemVO>  outsideGoods = outboundVO.getItemList().stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
+            List<OutboundItemVO> outsideGoods = outboundVO.getItemList().stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
             //新建外协品生产外协入库单
             this.insertOutsideGoodsInto(outboundVO, outsideGoods);
             // 获取商品明细数据
@@ -1450,7 +1523,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             // 赋值修改明细
             map.put("outDetail", invList);
             // 删除的商品
-            if(outboundVO.getDeleteItemList()!=null && outboundVO.getDeleteItemList().size()>0){
+            if (outboundVO.getDeleteItemList() != null && outboundVO.getDeleteItemList().size() > 0) {
                 // 获取外协删除数据
                 List<OutboundItemVO> invsideDelList = outboundVO.getDeleteItemList().stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
                 //删除外协品生产外协入库单
@@ -1468,6 +1541,66 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         return ResponseResultUtil.success(outboundVO);
     }
 
+    /**
+     * @desc : 办理销售出库修改销售订单信息
+     * @date : 2024/6/21 15:13
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public void updateOrderMessageByHandle(List<OutboundItemVO> itemList, List<OutboundItemVO> deleteItemList) {
+        //出库明细汇总
+        Map<String, List<OutboundItemVO>> orderOutItemVOListMap = itemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getFromId));
+        //出库明细删除汇总
+        Map<String, List<OutboundItemVO>> delOrderOutItemVOListMap = deleteItemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getFromId));
+        //出库明细汇总循环
+        for (String fromId : orderOutItemVOListMap.keySet()) {
+            //出库明细删除汇总循环
+            for (String delFromId : delOrderOutItemVOListMap.keySet()) {
+                //新建出库明细来源Id = 删除出库明细来源Id
+                if (fromId.equals(delFromId)) {
+                    //region  提取新建分组后的明细
+                    List<OutboundItemVO> orderOutItemVOListGroup = orderOutItemVOListMap.get(fromId);
+                    //分组后的明细 出库数量和金额总和
+                    BigDecimal orderSumQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal orderSumAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    //分组后的明细 原出库数量和金额总和
+                    BigDecimal updateOrderOutingQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal updateOrderOutingAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    //endregion
+
+                    //region 提取删除分组后的明细
+                    List<OutboundItemVO> delOrderOutItemVOListGroup = delOrderOutItemVOListMap.get(delFromId);
+                    BigDecimal orderDelOutingQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal orderDelOutingAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    //endregion
+
+                    //region 反写订单数据
+                    //根据id查询
+                    OrderResponse orderResponse = orderMapper.selectById(fromId);
+                    //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
+                    Order order = new Order();
+                    order.setOrderId(fromId);
+                    order.setOutQty(orderSumQty.subtract(orderDelOutQty));
+                    order.setOutAmt(orderSumAmt.subtract(orderDelOutAmt));
+                    order.setOutingQty((updateOrderOutingQty.add(orderDelOutingQty)).negate());
+                    order.setOutingAmt((updateOrderOutingAmt.add(orderDelOutingAmt)).negate());
+                    //出库状态
+                    String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty().subtract(orderSumQty).add(orderDelOutQty),
+                            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
+                }
+            }
+        }
+    }
 
     /**
      * @desc : 销售出库撤销
@@ -1480,6 +1613,10 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         OutboundResponse outboundResponse = outboundMapper.selectById(outboundVO.getOutId());
         //endregion
 
+        //region根据总单id查明细
+        List<OutboundItemResponse> outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundResponse.getOutId()));
+        //endregion
+
         //region    应收反记账
         if (outboundResponse.getReceivableId() != null) {
             accountService.reverseReceivable(outboundResponse.getOutId(), Constant.InventoryDocCode.OUTBOUND.getTableName());
@@ -1487,28 +1624,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //endregion
 
         //region 修改订单数据信息
-        if (outboundResponse.getFromId() != null) {
-            //赋值  (这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
-            Order order = new Order();
-            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(outboundResponse.getFromId());
-            //出库状态
-            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());
-            }
-
-        }
+        this.updateOrderMessageByCancel(outboundItemResponseList);
         //endregion
 
         //region 修改总单数据信息
@@ -1528,8 +1644,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //endregion
 
         //region 明细数据
-        //根据总单id查明细
-        List<OutboundItemResponse> outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundResponse.getOutId()));
         for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) {
             //region 修改销售订单明细数据信息
             if (outboundItemResponse.getFromItemId() != null) {
@@ -1596,16 +1710,59 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //region   调用库存
         //筛选出skuId不为空的 走库存
         List<OutboundItemResponse> invList = outboundItemResponseList.stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
-        if(invList!=null && invList.size()>0) {
+        if (invList != null && invList.size() > 0) {
             Map<String, Object> map = new HashMap<>();
             map.put("delOutDetail", invList);
             inventoryService.operatingInventoryInformation(map);
         }
         //endregion
+
         return ResponseResultUtil.success();
     }
 
     /**
+     * @desc : 撤销销售出库修改销售订单信息
+     * @date : 2024/6/21 16:00
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public void updateOrderMessageByCancel(List<OutboundItemResponse> itemList) {
+        //出库明细汇总
+        Map<String, List<OutboundItemResponse>> orderOutItemListMap = itemList.stream().collect(Collectors.groupingBy(OutboundItemResponse::getFromId));
+        //出库明细汇总循环
+        for (String fromId : orderOutItemListMap.keySet()) {
+
+            //region  提取新建分组后的明细
+            List<OutboundItemResponse> orderOutItemListGroup = orderOutItemListMap.get(fromId);
+            //分组后的明细 出库数量和金额总和
+            BigDecimal orderSumQty = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal orderSumAmt = orderOutItemListGroup.stream().map(OutboundItemResponse::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            //endregion
+
+            //region  反写订单数据
+            //根据id查询
+            OrderResponse orderResponse = orderMapper.selectById(fromId);
+            Order order = new Order();
+            order.setOrderId(fromId);
+            order.setOutingQty(orderSumQty);
+            order.setOutingAmt(orderSumAmt);
+            order.setOutQty(orderSumAmt.negate());
+            order.setOutAmt(orderSumAmt.negate());
+            //出库状态
+            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
+        }
+    }
+
+    /**
      * @desc : 出库状态通用(目前本页面)
      * @date : 2024/3/9 8:59
      * @author : 寇珊珊
@@ -1632,7 +1789,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         return outStatus;
     }
 
-
     /**
      * @desc : 上游单据入库状态通用(目前本页面)
      * @date : 2024/4/1 17:14
@@ -1660,7 +1816,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         return outStatus;
     }
 
-
     /**
      * @desc : 获取单据信息(编辑用)
      * @date : 2024/3/16 16:28

+ 55 - 57
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleReturnService.java

@@ -107,68 +107,66 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
      */
     @Transactional(rollbackFor = {Exception.class})
     public void updatePrimaryTotal(OutboundVO outboundVO, Boolean posNegFlag) {
-        if (outboundVO.getFromId() != null) {
-            //region 原入库单
-            Map<String, List<OutboundItemVO>> outboundItemVOListOutPri = outboundVO.getItemList().stream().collect(Collectors.groupingBy(OutboundItemVO::getSOutId));
-            for (String str : outboundItemVOListOutPri.keySet()) {
-                List<OutboundItemVO> outboundItemList = outboundItemVOListOutPri.get(str);
-                //region 汇总退货数量 金额
-                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.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.add(returnIngSumQty)).negate());
-                    outboundPri.setReturnAmt((returnSumAmt.add(returnIngSumAmt)).negate());
-                } else {
-                    outboundPri.setReturnQty(returnSumQty.add(returnIngSumQty));
-                    outboundPri.setReturnAmt(returnSumAmt.add(returnIngSumAmt));
-                }
-                outboundMapper.updateReturnMessage(outboundPri);
-            }
+        //region 原入库单
+        Map<String, List<OutboundItemVO>> outboundItemVOListOutPri = outboundVO.getItemList().stream().collect(Collectors.groupingBy(OutboundItemVO::getSOutId));
+        for (String str : outboundItemVOListOutPri.keySet()) {
+            List<OutboundItemVO> outboundItemList = outboundItemVOListOutPri.get(str);
+            //region 汇总退货数量 金额
+            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.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.add(returnIngSumQty)).negate());
+                outboundPri.setReturnAmt((returnSumAmt.add(returnIngSumAmt)).negate());
+            } else {
+                outboundPri.setReturnQty(returnSumQty.add(returnIngSumQty));
+                outboundPri.setReturnAmt(returnSumAmt.add(returnIngSumAmt));
+            }
+            outboundMapper.updateReturnMessage(outboundPri);
+        }
+        //endregion
 
-            //region 原销售订单
-            Map<String, List<OutboundItemVO>> outboundItemVOListOrderPri = outboundVO.getItemList().stream().collect(Collectors.groupingBy(OutboundItemVO::getSOrderId));
-            for (String str : outboundItemVOListOrderPri.keySet()) {
-                List<OutboundItemVO> outboundItemList = outboundItemVOListOrderPri.get(str);
-                //region 汇总退货数量 金额
-                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);
+        //region 原销售订单
+        Map<String, List<OutboundItemVO>> outboundItemVOListOrderPri = outboundVO.getItemList().stream().collect(Collectors.groupingBy(OutboundItemVO::getSOrderId));
+        for (String str : outboundItemVOListOrderPri.keySet()) {
+            List<OutboundItemVO> outboundItemList = outboundItemVOListOrderPri.get(str);
+            //region 汇总退货数量 金额
+            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.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.add(returnIngSumQty)).negate());
-                    orderPri.setReturnAmt((returnSumAmt.add(returnIngSumAmt)).negate());
-                } else {
-                    orderPri.setReturnQty(returnSumQty.add(returnIngSumQty));
-                    orderPri.setReturnAmt(returnSumAmt.add(returnIngSumAmt));
-                }
-                orderMapper.updateReturnMessage(orderPri);
-            }
             //endregion
+            //查询原单
+            OrderResponse orderResponse = orderMapper.selectById(str);
+            //校验数据
+            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.add(returnIngSumQty)).negate());
+                orderPri.setReturnAmt((returnSumAmt.add(returnIngSumAmt)).negate());
+            } else {
+                orderPri.setReturnQty(returnSumQty.add(returnIngSumQty));
+                orderPri.setReturnAmt(returnSumAmt.add(returnIngSumAmt));
+            }
+            orderMapper.updateReturnMessage(orderPri);
         }
+        //endregion
     }
 
     /**