Browse Source

1、保存订单商品,2、验证参数是否合法

main
科技小王子 4 weeks ago
parent
commit
82c5c7f174
  1. 10
      src/main/java/com/gxwebsoft/shop/service/OrderBusinessService.java
  2. 36
      src/test/java/com/gxwebsoft/shop/OrderValidationTest.java

10
src/main/java/com/gxwebsoft/shop/service/OrderBusinessService.java

@ -183,11 +183,21 @@ public class OrderBusinessService {
// 复制请求参数到订单对象
BeanUtils.copyProperties(request, shopOrder);
// 确保租户ID正确设置(关键字段,影响微信支付证书路径)
shopOrder.setTenantId(loginUser.getTenantId());
// 验证关键字段
if (shopOrder.getTenantId() == null) {
throw new BusinessException("租户ID不能为空,这会导致微信支付证书路径错误");
}
// 设置用户相关信息
shopOrder.setUserId(loginUser.getUserId());
shopOrder.setOpenid(loginUser.getOpenid());
shopOrder.setPayUserId(loginUser.getUserId());
log.debug("构建订单对象 - 租户ID:{},用户ID:{}", shopOrder.getTenantId(), shopOrder.getUserId());
// 生成订单号
if (shopOrder.getOrderNo() == null) {
shopOrder.setOrderNo(Long.toString(IdUtil.getSnowflakeNextId()));

36
src/test/java/com/gxwebsoft/shop/OrderValidationTest.java

@ -275,5 +275,41 @@ class OrderValidationTest {
assertEquals(Integer.valueOf(0), result.getOrderStatus());
assertEquals(Integer.valueOf(10), result.getDeliveryStatus());
assertEquals(Integer.valueOf(1), result.getPayType());
// 验证关键字段 - 租户ID(影响微信支付证书路径)
assertNotNull(result.getTenantId(), "tenantId 不能为空");
assertEquals(testRequest.getTenantId(), result.getTenantId(), "tenantId 必须正确设置");
}
@Test
void testBuildShopOrder_TenantIdValidation() throws Exception {
// 创建一个新的请求对象,租户ID为空
OrderCreateRequest requestWithoutTenant = new OrderCreateRequest();
requestWithoutTenant.setType(0);
requestWithoutTenant.setTitle("测试订单");
requestWithoutTenant.setTotalPrice(new BigDecimal("99.00"));
requestWithoutTenant.setTenantId(null); // 设置为空
// 准备商品项
OrderCreateRequest.OrderGoodsItem goodsItem = new OrderCreateRequest.OrderGoodsItem();
goodsItem.setGoodsId(10018);
goodsItem.setQuantity(1);
requestWithoutTenant.setGoodsItems(Arrays.asList(goodsItem));
// 使用反射调用 buildShopOrder 方法
java.lang.reflect.Method buildMethod = OrderBusinessService.class
.getDeclaredMethod("buildShopOrder", OrderCreateRequest.class, User.class);
buildMethod.setAccessible(true);
// 执行验证 - 应该抛出异常
Exception exception = assertThrows(Exception.class, () -> {
buildMethod.invoke(orderBusinessService, requestWithoutTenant, testUser);
});
// 检查是否是 InvocationTargetException 包装的 BusinessException
assertTrue(exception instanceof java.lang.reflect.InvocationTargetException);
Throwable cause = exception.getCause();
assertTrue(cause instanceof BusinessException);
assertTrue(cause.getMessage().contains("租户ID不能为空"));
}
}

Loading…
Cancel
Save