From 9f3969e5472503e5a03b2819167bdbf2d7a26028 Mon Sep 17 00:00:00 2001 From: zhangcheng <1679167928@qq.com> Date: Tue, 8 Aug 2023 09:55:19 +0800 Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E5=88=86=E5=87=BA=E5=BA=93/=E5=87=BA?= =?UTF-8?q?=E5=BA=93=E5=AE=8C=E6=88=90=E7=9A=84=E5=87=BA=E5=BA=93=E5=8D=95?= =?UTF-8?q?=20=E6=94=AF=E6=8C=81=E5=88=A0=E9=99=A4=EF=BC=8C=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E5=88=A0=E9=99=A4=E5=BA=93=E5=AD=98=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E3=80=81=E5=BA=93=E5=AD=98=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E5=9B=9E=E6=BB=9A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/constant/ShipmentOrderConstant.java | 6 +-- .../wms/service/InventoryMovementService.java | 1 + .../service/ShipmentOrderDetailService.java | 44 +++++++++-------- .../cyl/wms/service/ShipmentOrderService.java | 48 +++++++++++++++++-- 4 files changed, 72 insertions(+), 27 deletions(-) diff --git a/wms/src/main/java/com/cyl/wms/constant/ShipmentOrderConstant.java b/wms/src/main/java/com/cyl/wms/constant/ShipmentOrderConstant.java index 5f99f22..db4e6bf 100644 --- a/wms/src/main/java/com/cyl/wms/constant/ShipmentOrderConstant.java +++ b/wms/src/main/java/com/cyl/wms/constant/ShipmentOrderConstant.java @@ -2,11 +2,11 @@ package com.cyl.wms.constant; public interface ShipmentOrderConstant { - // 未入库 + // 未出库 int NOT_IN = 11; - // 部分入库 + // 部分出库 int PART_IN = 12; - // 全部入库 + // 全部出库 int ALL_IN = 13; // 作废 int DROP = 14; diff --git a/wms/src/main/java/com/cyl/wms/service/InventoryMovementService.java b/wms/src/main/java/com/cyl/wms/service/InventoryMovementService.java index 14e72d3..c81fe06 100644 --- a/wms/src/main/java/com/cyl/wms/service/InventoryMovementService.java +++ b/wms/src/main/java/com/cyl/wms/service/InventoryMovementService.java @@ -103,6 +103,7 @@ public class InventoryMovementService { PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize()); } QueryWrapper qw = new QueryWrapper<>(); + qw.orderByDesc("id"); qw.eq("del_flag", 0); String inventoryMovementNo = query.getInventoryMovementNo(); if (!StringUtils.isEmpty(inventoryMovementNo)) { diff --git a/wms/src/main/java/com/cyl/wms/service/ShipmentOrderDetailService.java b/wms/src/main/java/com/cyl/wms/service/ShipmentOrderDetailService.java index 098d6e2..4e61744 100644 --- a/wms/src/main/java/com/cyl/wms/service/ShipmentOrderDetailService.java +++ b/wms/src/main/java/com/cyl/wms/service/ShipmentOrderDetailService.java @@ -1,28 +1,26 @@ package com.cyl.wms.service; -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; -import java.time.LocalDateTime; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.cyl.wms.convert.ShipmentOrderDetailConvert; -import com.cyl.wms.domain.ReceiptOrderDetail; -import com.cyl.wms.pojo.vo.ReceiptOrderDetailVO; +import com.cyl.wms.domain.ShipmentOrder; +import com.cyl.wms.domain.ShipmentOrderDetail; +import com.cyl.wms.mapper.ShipmentOrderDetailMapper; +import com.cyl.wms.pojo.query.ShipmentOrderDetailQuery; import com.cyl.wms.pojo.vo.ShipmentOrderDetailVO; import com.github.pagehelper.PageHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import com.cyl.wms.mapper.ShipmentOrderDetailMapper; -import com.cyl.wms.domain.ShipmentOrderDetail; -import com.cyl.wms.pojo.query.ShipmentOrderDetailQuery; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.LinkedList; +import java.util.List; /** * 出库单详情Service业务层处理 * - * * @author zcc */ @Service @@ -46,7 +44,7 @@ public class ShipmentOrderDetailService { * 查询出库单详情列表 * * @param query 查询条件 - * @param page 分页条件 + * @param page 分页条件 * @return 出库单详情 */ public List selectList(ShipmentOrderDetailQuery query, Pageable page) { @@ -54,7 +52,7 @@ public class ShipmentOrderDetailService { PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize()); } QueryWrapper qw = new QueryWrapper<>(); - qw.eq("del_flag",0); + qw.eq("del_flag", 0); Long shipmentOrderId = query.getShipmentOrderId(); if (shipmentOrderId != null) { qw.eq("shipment_order_id", shipmentOrderId); @@ -79,17 +77,17 @@ public class ShipmentOrderDetailService { } - public List toVos(List items){ + public List toVos(List items) { List list = convert.dos2vos(items); - list.forEach(itemVO ->{ + list.forEach(itemVO -> { List place = new LinkedList<>(); - if(itemVO.getWarehouseId()!=null){ + if (itemVO.getWarehouseId() != null) { place.add(itemVO.getWarehouseId()); } - if(itemVO.getAreaId()!=null){ + if (itemVO.getAreaId() != null) { place.add(itemVO.getAreaId()); } - if(itemVO.getRackId()!=null){ + if (itemVO.getRackId() != null) { place.add(itemVO.getRackId()); } itemVO.setPlace(place); @@ -139,4 +137,12 @@ public class ShipmentOrderDetailService { Long[] ids = {id}; return shipmentOrderDetailMapper.updateDelFlagByIds(ids); } + + public void updateDelFlag(ShipmentOrder shipmentOrder) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .eq(ShipmentOrderDetail::getShipmentOrderId, shipmentOrder.getId()) + .set(ShipmentOrderDetail::getDelFlag, 1); + shipmentOrderDetailMapper.update(null, updateWrapper); + + } } diff --git a/wms/src/main/java/com/cyl/wms/service/ShipmentOrderService.java b/wms/src/main/java/com/cyl/wms/service/ShipmentOrderService.java index 372de8d..9d979ae 100644 --- a/wms/src/main/java/com/cyl/wms/service/ShipmentOrderService.java +++ b/wms/src/main/java/com/cyl/wms/service/ShipmentOrderService.java @@ -177,8 +177,46 @@ public class ShipmentOrderService { * @param ids 需要删除的出库单主键 * @return 结果 */ + @Transactional public int deleteByIds(Long[] ids) { - return shipmentOrderMapper.updateDelFlagByIds(ids); + int flag = 0; + for (Long id : ids) { + ShipmentOrder shipmentOrder = shipmentOrderMapper.selectById(id); + if (shipmentOrder == null) { + continue; + } + Integer shipmentOrderStatus = shipmentOrder.getShipmentOrderStatus(); + + // 1. 逻辑删除出库单 + flag += shipmentOrderMapper.updateDelFlagByIds(ids); + + // 2. 逻辑删除出库单详情 + shipmentOrderDetailService.updateDelFlag(shipmentOrder); + + if (shipmentOrderStatus != ShipmentOrderConstant.ALL_IN && shipmentOrderStatus != ShipmentOrderConstant.PART_IN) { + // 未出库的可以直接删除 + continue; + } + + // 3. 查询库存记录 + List inventoryHistories = inventoryHistoryService.selectByForm(shipmentOrder.getId(), shipmentOrder.getShipmentOrderType()); + + // 翻转库存记录的数量 + inventoryHistories.forEach(it -> { + it.setQuantity(it.getQuantity().negate()); + log.info("回滚库存:{} 数量:{}", it.getWarehouseId() + "_" + it.getAreaId() + "_" + it.getRackId() + "_" + it.getItemId(), it.getQuantity()); + }); + + // 4. 回滚库存 + inventoryService.batchUpdate1(inventoryHistories); + + // 5. 删除库存记录 + inventoryHistoryService.deleteByForm(shipmentOrder.getId(), shipmentOrder.getShipmentOrderType()); + + // todo 6. 回滚供应商流水 +// supplierTransactionService.deleteByForm(shipmentOrder.getId(), shipmentOrder.getReceiptOrderType()); + } + return flag; } /** @@ -213,7 +251,7 @@ public class ShipmentOrderService { QueryWrapper qw = new QueryWrapper<>(); qw.eq("shipment_order_id", order.getId()); - // 新旧入库单详情对比, 生成 库存记录修改 + // 新旧出库单详情对比, 生成 库存记录修改 List details = order.getDetails(); Map dbDetailMap = shipmentOrderDetailMapper.selectList(qw).stream().collect(Collectors.toMap(ShipmentOrderDetail::getId, it -> it)); List adds = new ArrayList<>(); @@ -279,15 +317,15 @@ public class ShipmentOrderService { order.setShipmentOrderStatus(statusList.iterator().next()); } else if (statusList.size() == 2) { if (statusList.contains(ShipmentOrderConstant.DROP) && statusList.contains(ShipmentOrderConstant.ALL_IN)) { - //此时单据状态只有报废和全部入库,则出库单状态为全部入库 + //此时单据状态只有报废和全部出库,则出库单状态为全部出库 order.setShipmentOrderStatus(ShipmentOrderConstant.ALL_IN); } else if (statusList.contains(ShipmentOrderConstant.PART_IN) || statusList.contains(ShipmentOrderConstant.ALL_IN)) { - //此时单据状态有两个,包含部分入库和全部入库都是部分入库 + //此时单据状态有两个,包含部分出库和全部出库都是部分出库 order.setShipmentOrderStatus(ShipmentOrderConstant.PART_IN); } } else if (statusList.contains(ShipmentOrderConstant.PART_IN) || statusList.contains(ShipmentOrderConstant.ALL_IN)) { - //此时单据状态有两个,包含部分入库和全部入库都是部分入库 + //此时单据状态有两个,包含部分出库和全部出库都是部分出库 order.setShipmentOrderStatus(ShipmentOrderConstant.PART_IN); }