feat(approval): 实现资产退货申请的审批通过逻辑
添加approveAssetApproval方法实现资产退货审批通过功能,包括: - 检查商品和格口库存是否充足 - 更新审批状态和审批人信息 - 更新商品和格口库存 - 更新关联订单商品状态
This commit is contained in:
parent
b96fd06aea
commit
59d8ff188a
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue