refactor(asset): 重构资产审批流程,分离审批商品信息

将审批商品信息从审批流程中分离出来,使用单独的模型和表进行存储
更新测试数据以匹配新的商品ID和名称
This commit is contained in:
dzq 2025-06-07 10:39:47 +08:00
parent 163dfeb3e8
commit d451a93a4e
2 changed files with 37 additions and 16 deletions

View File

@ -22,8 +22,8 @@ public class AssetApiControllerTest {
public void testPushExternalGoods() throws UnsupportedEncodingException {
// 1.构建测试商品数据
PostAssetGoodsCommand.GoodsInfo goodsInfo = new PostAssetGoodsCommand.GoodsInfo();
goodsInfo.setExternalGoodsId(1003L);
goodsInfo.setGoodsName("测试笔记本电脑3");
goodsInfo.setExternalGoodsId(1004L);
goodsInfo.setGoodsName("测试笔记本电脑4");
goodsInfo.setPrice(new BigDecimal("5999.00"));
goodsInfo.setStock(10);
goodsInfo.setAutoApproval(0);
@ -83,6 +83,11 @@ public class AssetApiControllerTest {
goodsInfo.setApplyQuantity(2);
approvalCommand.getGoodsInfoList().add(goodsInfo);
goodsInfo = new PostAssetApprovalCommand.ApprovalGoodsInfo();
goodsInfo.setExternalGoodsId(1004L);
goodsInfo.setApplyQuantity(5);
approvalCommand.getGoodsInfoList().add(goodsInfo);
// 2.构造请求体
Map<String, String> params = new HashMap<>();
params.put("timestamp", String.valueOf(System.currentTimeMillis()));

View File

@ -13,6 +13,9 @@ import com.agileboot.domain.qywx.user.db.QyUserService;
import com.agileboot.domain.shop.approval.command.AddReturnApprovalCommand;
import com.agileboot.domain.shop.approval.model.ReturnApprovalModel;
import com.agileboot.domain.shop.approval.model.ReturnApprovalModelFactory;
import com.agileboot.domain.shop.approvalGoods.command.AddApprovalGoodsCommand;
import com.agileboot.domain.shop.approvalGoods.model.ApprovalGoodsModel;
import com.agileboot.domain.shop.approvalGoods.model.ApprovalGoodsModelFactory;
import com.agileboot.domain.shop.goods.db.ShopGoodsEntity;
import com.agileboot.domain.shop.goods.db.ShopGoodsService;
import com.agileboot.domain.shop.goods.model.GoodsModel;
@ -36,6 +39,7 @@ public class AssetApplicationService {
private final AuthCorpInfoApplicationService authCorpInfoApplicationService;
private final AccessTokenApplicationService accessTokenApplicationService;
private final QyUserService qyUserService;
private final ApprovalGoodsModelFactory approvalGoodsModelFactory;
public void pushExternalGoods(PostAssetGoodsCommand postAssetGoodsCommand) {
if (postAssetGoodsCommand == null || postAssetGoodsCommand.getGoodsInfoList() == null || postAssetGoodsCommand.getGoodsInfoList().isEmpty()) {
@ -105,9 +109,19 @@ public class AssetApplicationService {
throw new IllegalArgumentException("Corpid cannot be null");
}
AddReturnApprovalCommand returnApprovalCommand = new AddReturnApprovalCommand();
BeanUtils.copyProperties(postAssetApprovalCommand, returnApprovalCommand);
if (returnApprovalCommand.getApprovalType() == null) {
returnApprovalCommand.setApprovalType(1);
}
ReturnApprovalModel returnApprovalModel = returnApprovalModelFactory.create();
returnApprovalModel.initBaseEntity();
returnApprovalModel.loadAddCommand(returnApprovalCommand);
List<ApprovalGoodsModel> approvalGoodsModels = new ArrayList<>();
for (PostAssetApprovalCommand.ApprovalGoodsInfo command : postAssetApprovalCommand.getGoodsInfoList()) {
if (command.getApplyQuantity() == null || command.getApplyQuantity() <= 0) {
throw new IllegalArgumentException("ApplyQuantity must be greater than 0");
}
@ -120,21 +134,23 @@ public class AssetApplicationService {
throw new IllegalArgumentException("Insufficient stock");
}
AddReturnApprovalCommand returnApprovalCommand = new AddReturnApprovalCommand();
BeanUtils.copyProperties(postAssetApprovalCommand, returnApprovalCommand);
BeanUtils.copyProperties(command, returnApprovalCommand);
returnApprovalCommand.setGoodsId(shopGoodsEntity.getGoodsId());
returnApprovalCommand.setGoodsPrice(shopGoodsEntity.getPrice());
if (returnApprovalCommand.getApprovalType() == null) {
returnApprovalCommand.setApprovalType(1);
}
ReturnApprovalModel returnApprovalModel = returnApprovalModelFactory.create();
returnApprovalModel.initBaseEntity();
returnApprovalModel.loadAddCommand(returnApprovalCommand);
returnApprovalCommand.insert();
AddApprovalGoodsCommand approvalGoodsCommand = new AddApprovalGoodsCommand();
approvalGoodsCommand.initBaseEntity();
BeanUtils.copyProperties(postAssetApprovalCommand, approvalGoodsCommand);
BeanUtils.copyProperties(command, approvalGoodsCommand);
BeanUtils.copyProperties(shopGoodsEntity, approvalGoodsCommand);
ApprovalGoodsModel approvalGoodsModel = approvalGoodsModelFactory.create();
approvalGoodsModel.loadAddCommand(approvalGoodsCommand);
approvalGoodsModels.add(approvalGoodsModel);
}
returnApprovalModel.insert();
approvalGoodsModels.stream()
.peek(approvalGoodsModel -> approvalGoodsModel.setApprovalId(returnApprovalModel.getApprovalId()))
.forEach(ApprovalGoodsModel::insert);
ShopGoodsEntity firstGoods = shopGoodsService.getGoodsByExternalGoodsId(postAssetApprovalCommand.getCorpid(), postAssetApprovalCommand.getGoodsInfoList().get(0).getExternalGoodsId());
// 发送审核消息
try {