koushanshan hace 1 año
padre
commit
4e7554215b

+ 13 - 0
src/main/java/com/dk/mdm/controller/sale/OrderController.java

@@ -174,4 +174,17 @@ public class OrderController {
     public ResponseResultVO<PageList> getOrderTrackReport(@RequestBody Map<String, Object> param) {
         return orderService.getOrderTrackReport(param);
     }
+
+
+    /**
+     * @desc : 作废
+     * @author : 付斌
+     * @date : 2024-03-08 16:36
+     */
+    @ApiOperation(value = "作废", notes = "作废")
+    @PostMapping({"one_key_invalid/{id}"})
+    public ResponseResultVO<?> oneKeyInvalid(@PathVariable String id) {
+        return orderService.oneKeyInvalid(id);
+    }
+
 }

+ 168 - 0
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleOrderService.java

@@ -25,6 +25,7 @@ import com.dk.mdm.model.pojo.ivt.Outbound;
 import com.dk.mdm.model.pojo.ivt.OutboundItem;
 import com.dk.mdm.model.pojo.sale.Order;
 import com.dk.mdm.model.pojo.sale.OrderItem;
+import com.dk.mdm.model.query.ivt.InboundItemQuery;
 import com.dk.mdm.model.query.ivt.InventoryQuery;
 import com.dk.mdm.model.query.ivt.OutboundItemQuery;
 import com.dk.mdm.model.query.ivt.OutboundQuery;
@@ -1891,6 +1892,173 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         }
     }
 
+
+    /**
+     * @desc   : 销售出库一键作废
+     * @date   : 2024/7/1 13:29
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public ResponseResultVO<?> oneKeySaleOutboundRepeal(String orderId) {
+        List<OutboundItemResponse> outboundItemResponses = outboundItemMapper.selectByCond(new OutboundItemQuery().setFromId(orderId));
+        if (outboundItemResponses != null && outboundItemResponses.size() > 0) {
+            Map<String, List<OutboundItemResponse>> outboundItemVOMap = outboundItemResponses.stream().collect(Collectors.groupingBy(OutboundItemResponse::getOutId));
+            for (String str : outboundItemVOMap.keySet()) {
+                //region  查询总单  查询明细
+                //根据id查询 此条出库单的数据还未更改前的数据
+                OutboundResponse outboundResponse = outboundMapper.selectById(str);
+                //根据总单id查询
+                List<OutboundItemResponse> outboundItemResponseList = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(outboundResponse.getOutId()));
+
+                //endregion
+
+                //region 已出库状态作废
+                if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                    //region 应收反记账
+                    if (outboundResponse.getReceivableId() != null) {
+                        accountService.reverseReceivable(outboundResponse.getOutId(), Constant.InventoryDocCode.OUTBOUND.getTableName());
+                    }
+                    //endregion
+
+                    //region 修改明细
+                    for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) {
+                        //region 将库存需要的参数赋值
+                        outboundItemResponse.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
+                        outboundItemResponse.setInventoryDocCode(Constant.InventoryDocCode.SALE_ORDER.getValue());
+                        outboundItemResponse.setOutQty(outboundItemResponse.getOutQty());
+                        outboundItemResponse.setOutAmt(outboundItemResponse.getOutAmt());
+                        //endregion
+
+                        //赋值  防止作废的单据查不到明细 故注掉下面代码
+//                OutboundItem outboundItem = new OutboundItem();
+//                outboundItem.setItemId(outboundItemResponse.getItemId());
+//                outboundItem.setFlgValid(false);
+//                //修改
+//                outboundItemMapper.update(outboundItem,
+//                        new UpdateWrapper<OutboundItem>().lambda()
+//                                .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
+//                );
+
+                        //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());
+                            //出库状态
+                            String orderOutStatus = this.setOutStatus(orderItemResponse.getOutingQty(),
+                                    orderItemResponse.getOutQty().add(orderItem.getOutQty()), orderItemResponse.getItemQty());
+                            orderItem.setOutStatus(orderOutStatus);
+                            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(outboundResponse.getOutId());
+                    outbound.setFlgValid(false);
+                    //修改
+                    outboundMapper.update(outbound,
+                            new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
+                    );
+                    //endregion
+
+                    //region 修改销售总单
+                    this.updateOrderMessageByRepeal(outboundResponse, outboundItemResponseList);
+                    //endregion
+
+                    //region 外协品新建外协入库单
+                    //筛选出skuId为空的 走外协品逻辑
+                    OutboundVO outboundVO = outboundConvert.convertResToVO(outboundResponse);
+                    List<OutboundItemResponse> outsideGoods = outboundItemResponseList.stream().filter(it -> it.getSkuId() == null).collect(Collectors.toList());
+                    List<OutboundItemVO> outsideGoodsVOList = outboundItemConvert.convertResListToVOList(outsideGoods);
+                    //删除外协品生产外协入库单
+                    this.deleteOutsideGoodsInto(outboundVO, outsideGoodsVOList);
+                    //endregion
+
+                    //region  修改库存
+                    //筛选出skuId不为空的 走库存
+                    List<OutboundItemResponse> invList = outboundItemResponseList.stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
+                    if (invList != null && invList.size() > 0) {
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("delOutDetail", invList);
+                        inventoryService.operatingInventoryInformation(map);
+                    }
+                    //endregion
+                }
+                //endregion
+
+                //region 出库中、待出库状态作废
+                if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus()) ||
+                        Constant.OutStatus.DAICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                    //region 修改明细
+                    for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) {
+                        //region 修改明细
+                        //赋值
+                        OutboundItem outboundItem = new OutboundItem();
+                        outboundItem.setItemId(outboundItemResponse.getItemId());
+                        outboundItem.setOutingQty(BigDecimal.ZERO);
+                        outboundItem.setOutingAmt(BigDecimal.ZERO);
+//                outboundItem.setFlgValid(false);
+                        //修改
+                        outboundItemMapper.update(outboundItem,
+                                new UpdateWrapper<OutboundItem>().lambda()
+                                        .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) {
+                                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                            }
+                        }
+                        //endregion
+                    }
+                    //endregion
+
+                    //region  修改出库总单
+                    Outbound outbound = new Outbound();
+                    outbound.setOutId(outboundResponse.getOutId());
+                    outbound.setOutingQty(BigDecimal.ZERO);
+                    outbound.setOutingAmt(BigDecimal.ZERO);
+                    outbound.setFlgValid(false);
+                    //修改
+                    outboundMapper.update(outbound,
+                            new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
+                    );
+                    //endregion
+
+                    //region 修改销售总单
+                    this.updateOrderMessageByRepeal(outboundResponse, outboundItemResponseList);
+                    //endregion
+                }
+                //endregion
+            }
+        }
+        return ResponseResultUtil.success();
+    }
+
     /**
      * @desc : 出库状态通用(目前本页面)
      * @date : 2024/3/9 8:59

+ 66 - 0
src/main/java/com/dk/mdm/service/sale/OrderService.java

@@ -938,4 +938,70 @@ public class OrderService extends BaseService<Order> {
         return ResponseResultUtil.success(data);
     }
 
+
+    /**
+     * @desc   : 一键作废
+     * @date   : 2024/7/1 13:26
+     * @author : 寇珊珊
+     */
+    public ResponseResultVO<?> oneKeyInvalid(String id) {
+        Order orderForUpdate = orderMapper.selectByIdForUpdate(id);
+        //region并发校验
+        if (!orderForUpdate.getFlgValid()) {
+            throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISFLGVALID_FALSE.getMessage());
+        }
+        //endregion
+
+        //region 作废
+        Order orderUpdate = new Order();
+        orderUpdate.setFlgValid(false).setOrderId(id);
+        super.update(orderUpdate, new UpdateWrapper<Order>().lambda().eq(Order::getOrderId,
+                UUID.fromString(orderUpdate.getOrderId())));
+        //endregion
+
+        //region  需要重新计算的资金账户
+        List<String> macList = new ArrayList<>();
+        // 收款明细
+        RecPay recPayForUpdate = recPayMapper.selectByBiznisIdForUpdate(id, false);
+        if (recPayForUpdate != null) {
+            // 将之前的明细全部删除
+            List<RecPayItem> recPayItemOriginalList = recPayItemMapper.selectByZIdForUpdate(recPayForUpdate.getRpId());
+            for (RecPayItem recPayItem : recPayItemOriginalList) {
+                //改为更新false
+                RecPayItem recPayItemNew = new RecPayItem();
+                recPayItemNew.setItemId(recPayItem.getItemId()).setFlgValid(false);
+                recPayItemService.updateByUuid(recPayItemNew);
+                // 删除账款明细
+                accountItemMapper.deleteById(recPayItem.getAccItemId());
+                // 删除账户流水
+                moneyAccountItemMapper.deleteByInvoiceId(recPayItem.getItemId());
+
+                if (!macList.contains(recPayItem.getMacId())) {
+                    macList.add(recPayItem.getMacId());
+                }
+            }
+
+            // 更新总账表的总收款额和可用额
+            accountService.updateReceiptLock(recPayForUpdate.getObjectId());
+
+            // 更新账户余额
+            for (String macId : macList) {
+                accountService.updateMac(macId);
+            }
+
+            // 作废
+            RecPay recPayUpdate = new RecPay();
+            recPayUpdate.setFlgValid(false).setRpId(recPayForUpdate.getRpId());
+            receiptService.updateByUuid(recPayUpdate);
+        }
+        //endregion
+
+        //region 作废出库单
+        outboundSaleOrderService.oneKeySaleOutboundRepeal(id);
+        //endregion
+
+        return ResponseResultUtil.success();
+    }
+
+
 }