From 82c5c7f174dd68949df67d3c9c5da509a463a2ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Wed, 30 Jul 2025 01:52:37 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=9D=E5=AD=98=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=95=86=E5=93=81=EF=BC=8C2=E3=80=81=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E6=98=AF=E5=90=A6=E5=90=88=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shop/service/OrderBusinessService.java | 10 ++++++ .../gxwebsoft/shop/OrderValidationTest.java | 36 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/main/java/com/gxwebsoft/shop/service/OrderBusinessService.java b/src/main/java/com/gxwebsoft/shop/service/OrderBusinessService.java index abffdaa..7d3d3bb 100644 --- a/src/main/java/com/gxwebsoft/shop/service/OrderBusinessService.java +++ b/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())); diff --git a/src/test/java/com/gxwebsoft/shop/OrderValidationTest.java b/src/test/java/com/gxwebsoft/shop/OrderValidationTest.java index 343ee0a..a49c444 100644 --- a/src/test/java/com/gxwebsoft/shop/OrderValidationTest.java +++ b/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不能为空")); } }