feat(approval): 实现资产退货申请的审批通过逻辑
添加approveAssetApproval方法实现资产退货审批通过功能,包括: - 检查商品和格口库存是否充足 - 更新审批状态和审批人信息 - 更新商品和格口库存 - 更新关联订单商品状态
This commit is contained in:
parent
b96fd06aea
commit
59d8ff188a
|
@ -93,7 +93,7 @@ public class ApprovalApiController {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (command.getStatus() == 2) {
|
if (command.getStatus() == 2) {
|
||||||
approvalApplicationService.approveApproval(command);
|
approvalApplicationService.approveAssetApproval(command);
|
||||||
} else if (command.getStatus() == 3) {
|
} else if (command.getStatus() == 3) {
|
||||||
approvalApplicationService.rejectApproval(command);
|
approvalApplicationService.rejectApproval(command);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -39,15 +39,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.lang3.exception.ExceptionUtils;
|
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -237,8 +235,82 @@ public class ReturnApprovalApplicationService {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批通过资产退货申请
|
||||||
|
* @param command 更新退货审批命令,包含审批ID、审批人信息等
|
||||||
|
* @throws RuntimeException 如果商品库存不足
|
||||||
|
*/
|
||||||
public void approveAssetApproval(UpdateReturnApprovalCommand command) {
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue