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

This commit is contained in:
2025-07-30 01:44:27 +08:00
parent d3904420a9
commit 1cf66427f6
3 changed files with 217 additions and 2 deletions

View File

@@ -198,8 +198,36 @@ public class OrderBusinessService {
shopOrder.setComments(orderConfig.getDefaultConfig().getDefaultComments());
}
// 设置默认支付状态
shopOrder.setPayStatus(false);
// 设置价格相关字段(解决数据库字段没有默认值的问题)
if (shopOrder.getPayPrice() == null) {
shopOrder.setPayPrice(shopOrder.getTotalPrice()); // 实际付款默认等于订单总额
}
if (shopOrder.getPrice() == null) {
shopOrder.setPrice(shopOrder.getTotalPrice()); // 用于统计的价格默认等于订单总额
}
if (shopOrder.getReducePrice() == null) {
shopOrder.setReducePrice(BigDecimal.ZERO); // 减少金额默认为0
}
if (shopOrder.getMoney() == null) {
shopOrder.setMoney(shopOrder.getTotalPrice()); // 用于积分赠送的价格默认等于订单总额
}
// 设置默认状态
shopOrder.setPayStatus(false); // 未付款
shopOrder.setOrderStatus(0); // 未使用
shopOrder.setDeliveryStatus(10); // 未发货
shopOrder.setIsInvoice(0); // 未开发票
shopOrder.setIsSettled(0); // 未结算
shopOrder.setCheckBill(0); // 未对账
shopOrder.setVersion(0); // 当前版本
// 设置默认支付类型(如果没有指定)
if (shopOrder.getPayType() == null) {
shopOrder.setPayType(1); // 默认微信支付
}
return shopOrder;
}
@@ -213,6 +241,8 @@ public class OrderBusinessService {
BigDecimal testAmount = orderConfig.getTestAccount().getTestPayAmount();
shopOrder.setPrice(testAmount);
shopOrder.setTotalPrice(testAmount);
shopOrder.setPayPrice(testAmount); // 确保实际付款也设置为测试金额
shopOrder.setMoney(testAmount); // 确保积分计算金额也设置为测试金额
log.info("应用测试账号规则,用户:{},测试金额:{}", loginUser.getPhone(), testAmount);
}

View File

@@ -5,6 +5,7 @@ import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.shop.config.OrderConfigProperties;
import com.gxwebsoft.shop.dto.OrderCreateRequest;
import com.gxwebsoft.shop.entity.ShopGoods;
import com.gxwebsoft.shop.entity.ShopOrder;
import com.gxwebsoft.shop.service.OrderBusinessService;
import com.gxwebsoft.shop.service.ShopGoodsService;
import com.gxwebsoft.shop.service.ShopOrderGoodsService;
@@ -240,4 +241,39 @@ class OrderValidationTest {
assertTrue(cause instanceof BusinessException);
assertTrue(cause.getMessage().contains("订单金额计算错误"));
}
@Test
void testBuildShopOrder_RequiredFields() throws Exception {
// Mock 配置
OrderConfigProperties.DefaultConfig defaultConfig = new OrderConfigProperties.DefaultConfig();
defaultConfig.setDefaultComments("默认备注");
when(orderConfig.getDefaultConfig()).thenReturn(defaultConfig);
// 使用反射调用 buildShopOrder 方法
java.lang.reflect.Method buildMethod = OrderBusinessService.class
.getDeclaredMethod("buildShopOrder", OrderCreateRequest.class, User.class);
buildMethod.setAccessible(true);
ShopOrder result = (ShopOrder) buildMethod.invoke(orderBusinessService, testRequest, testUser);
// 验证必需字段都已设置
assertNotNull(result.getPayPrice(), "payPrice 不能为空");
assertNotNull(result.getPrice(), "price 不能为空");
assertNotNull(result.getReducePrice(), "reducePrice 不能为空");
assertNotNull(result.getMoney(), "money 不能为空");
assertNotNull(result.getPayStatus(), "payStatus 不能为空");
assertNotNull(result.getOrderStatus(), "orderStatus 不能为空");
assertNotNull(result.getDeliveryStatus(), "deliveryStatus 不能为空");
assertNotNull(result.getPayType(), "payType 不能为空");
// 验证默认值
assertEquals(testRequest.getTotalPrice(), result.getPayPrice());
assertEquals(testRequest.getTotalPrice(), result.getPrice());
assertEquals(BigDecimal.ZERO, result.getReducePrice());
assertEquals(testRequest.getTotalPrice(), result.getMoney());
assertEquals(false, result.getPayStatus());
assertEquals(Integer.valueOf(0), result.getOrderStatus());
assertEquals(Integer.valueOf(10), result.getDeliveryStatus());
assertEquals(Integer.valueOf(1), result.getPayType());
}
}