feat(approval): 实现资产退货申请的审批通过逻辑

添加approveAssetApproval方法实现资产退货审批通过功能,包括:
- 检查商品和格口库存是否充足
- 更新审批状态和审批人信息
- 更新商品和格口库存
- 更新关联订单商品状态
This commit is contained in:
dzq 2025-06-09 16:18:21 +08:00
parent b96fd06aea
commit 59d8ff188a
2 changed files with 77 additions and 5 deletions
agileboot-api/src/main/java/com/agileboot/api/controller
agileboot-domain/src/main/java/com/agileboot/domain/shop/approval

View File

@ -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 {

View File

@ -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<ShopOrderGoodsEntity> 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<GoodsModel> goodsModelList = new ArrayList<>();
List<CabinetCellModel> 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);
}
/**