From 59d8ff188a20e075f5629daea2409a0c587fa257 Mon Sep 17 00:00:00 2001 From: dzq Date: Mon, 9 Jun 2025 16:18:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(approval):=20=E5=AE=9E=E7=8E=B0=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E9=80=80=E8=B4=A7=E7=94=B3=E8=AF=B7=E7=9A=84=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E9=80=9A=E8=BF=87=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加approveAssetApproval方法实现资产退货审批通过功能,包括: - 检查商品和格口库存是否充足 - 更新审批状态和审批人信息 - 更新商品和格口库存 - 更新关联订单商品状态 --- .../api/controller/ApprovalApiController.java | 2 +- .../ReturnApprovalApplicationService.java | 80 ++++++++++++++++++- 2 files changed, 77 insertions(+), 5 deletions(-) diff --git a/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java b/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java index d85e6df..275d41d 100644 --- a/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java +++ b/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java @@ -93,7 +93,7 @@ public class ApprovalApiController { try { if (command.getStatus() == 2) { - approvalApplicationService.approveApproval(command); + approvalApplicationService.approveAssetApproval(command); } else if (command.getStatus() == 3) { approvalApplicationService.rejectApproval(command); } else { diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java index 52ac106..b986f4f 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java @@ -39,15 +39,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; +import java.util.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; /** @@ -237,8 +235,82 @@ public class ReturnApprovalApplicationService { } + /** + * 审批通过资产退货申请 + * @param command 更新退货审批命令,包含审批ID、审批人信息等 + * @throws RuntimeException 如果商品库存不足 + */ public void approveAssetApproval(UpdateReturnApprovalCommand command) { + // 加载退货审批模型 + ReturnApprovalModel model = modelFactory.loadById(command.getApprovalId()); + // 获取关联的订单商品列表 + List shopOrderGoodsList = shopOrderGoodsService.selectOrderGoodsByApprovalId(model.getApprovalId()); + + // 设置审批人信息 + if (StringUtils.isNotBlank(command.getAuditName())) { + model.setAuditName(command.getAuditName()); + } else if (StringUtils.isNotBlank(command.getUserid())) { + QyUserEntity qyUserEntity = qyUserService.getUserByUserIdAndCorpid(command.getUserid(), command.getCorpid()); + if (null != qyUserEntity) { + model.setAuditName(qyUserEntity.getName()); + } + } + + // 初始化商品和格口模型列表 + List goodsModelList = new ArrayList<>(); + List cabinetCellModelList = new ArrayList<>(); + + // 遍历订单商品,检查并更新库存 + for (ShopOrderGoodsEntity shopOrderGoods : shopOrderGoodsList) { + // 获取或创建商品模型 + GoodsModel goodsModel = goodsModelList.stream() + .filter(g -> g.getGoodsId().equals(shopOrderGoods.getGoodsId())) + .findFirst().orElse(null); + if (goodsModel == null) { + goodsModel = goodsModelFactory.loadById(shopOrderGoods.getGoodsId()); + goodsModelList.add(goodsModel); + } + + // 获取或创建格口模型 + CabinetCellModel cabinetCellModel = cabinetCellModelList.stream() + .filter(c -> c.getCellId().equals(shopOrderGoods.getCellId())) + .findFirst().orElse(null); + if (cabinetCellModel == null) { + cabinetCellModel = cabinetCellModelFactory.loadById(shopOrderGoods.getCellId()); + cabinetCellModelList.add(cabinetCellModel); + } + + // 检查商品和格口库存是否充足 + if (goodsModel.getStock().compareTo(shopOrderGoods.getQuantity()) < 0 || + cabinetCellModel.getStock().compareTo(shopOrderGoods.getQuantity()) < 0) { + throw new RuntimeException("商品库存不足"); + } + + // 更新商品和格口库存 + goodsModel.setStock(goodsModel.getStock() - shopOrderGoods.getQuantity()); + cabinetCellModel.setStock(cabinetCellModel.getStock() - shopOrderGoods.getQuantity()); + } + + // 更新审批状态为通过 + model.validateApprovalStatus(); + model.setAuditImages(command.getAuditImages()); + model.setAuditRemark(command.getAuditRemark()); + model.setApprovalTime(new Date()); + model.setStatus(2); // 2表示审核通过状态 + model.updateById(); + + // 更新关联订单商品状态为已完成退货 + shopOrderGoodsList.forEach(shopOrderGoods -> { + shopOrderGoods.setStatus(4); // 4表示已完成退货 + shopOrderGoods.updateById(); + }); + + // 批量更新商品库存 + goodsModelList.forEach(GoodsModel::updateById); + + // 批量更新格口库存 + cabinetCellModelList.forEach(CabinetCellModel::updateById); } /**