Refactor order creation with Builder pattern and type-safe enums

- Replace 20+ parameter method calls with Builder pattern in WxCustomController
- Add RewardType and CommodityType enums with database compatibility
- Update DTOs and service layer for enum conversion
- Fix all test cases with proper enum usage
- Ensure backward compatibility through service layer conversion
This commit is contained in:
irving
2025-09-06 23:20:44 -04:00
parent 295400b83e
commit 5a50114b59
7 changed files with 203 additions and 15 deletions

View File

@@ -25,7 +25,7 @@ class OrderCreationRequestTest {
// 构建商品信息
CommodityInfo commodityInfo = CommodityInfo.builder()
.commodityId("commodity_001")
.commodityType("1")
.commodityType(OrderConstant.CommodityType.SERVICE)
.commodityPrice(new BigDecimal("100.00"))
.serviceDuration("60")
.commodityName("陪聊服务")
@@ -48,7 +48,7 @@ class OrderCreationRequestTest {
.orderStatus(OrderConstant.OrderStatus.PENDING)
.orderType(OrderConstant.OrderType.NORMAL)
.placeType(OrderConstant.PlaceType.SPECIFIED)
.rewardType("0")
.rewardType(OrderConstant.RewardType.BALANCE)
.isFirstOrder(true)
.commodityInfo(commodityInfo)
.paymentInfo(paymentInfo)

View File

@@ -77,11 +77,12 @@ class PlayOrderInfoServiceTest {
.orderStatus(OrderConstant.OrderStatus.PENDING)
.orderType(OrderConstant.OrderType.NORMAL)
.placeType(OrderConstant.PlaceType.SPECIFIED)
.rewardType("0")
.rewardType(OrderConstant.RewardType.BALANCE)
.isFirstOrder(true)
.commodityInfo(CommodityInfo.builder()
.commodityId("commodity_001")
.commodityName("测试商品")
.commodityType(OrderConstant.CommodityType.SERVICE)
.commodityPrice(BigDecimal.valueOf(100.00))
.serviceDuration("60")
.commodityNumber("1")
@@ -130,10 +131,12 @@ class PlayOrderInfoServiceTest {
.orderStatus(OrderConstant.OrderStatus.PENDING)
.orderType(OrderConstant.OrderType.NORMAL)
.placeType(OrderConstant.PlaceType.RANDOM)
.rewardType(OrderConstant.RewardType.NOT_APPLICABLE)
.isFirstOrder(false)
.commodityInfo(CommodityInfo.builder()
.commodityId("service_001")
.commodityName("陪聊服务")
.commodityType(OrderConstant.CommodityType.SERVICE)
.commodityPrice(BigDecimal.valueOf(50.00))
.serviceDuration("30")
.build())
@@ -174,11 +177,12 @@ class PlayOrderInfoServiceTest {
.orderStatus(OrderConstant.OrderStatus.PENDING)
.orderType(OrderConstant.OrderType.NORMAL)
.placeType(OrderConstant.PlaceType.REWARD)
.rewardType("1")
.rewardType(OrderConstant.RewardType.GIFT)
.isFirstOrder(false)
.commodityInfo(CommodityInfo.builder()
.commodityId("gift_001")
.commodityName("虚拟礼物")
.commodityType(OrderConstant.CommodityType.GIFT)
.commodityPrice(BigDecimal.valueOf(20.00))
.build())
.paymentInfo(PaymentInfo.builder()
@@ -218,10 +222,12 @@ class PlayOrderInfoServiceTest {
.orderStatus(OrderConstant.OrderStatus.PENDING)
.orderType(OrderConstant.OrderType.NORMAL)
.placeType(OrderConstant.PlaceType.RANDOM) // 随机单但没有要求
.rewardType(OrderConstant.RewardType.NOT_APPLICABLE)
.isFirstOrder(false)
.commodityInfo(CommodityInfo.builder()
.commodityId("service_001")
.commodityName("服务")
.commodityType(OrderConstant.CommodityType.SERVICE)
.commodityPrice(BigDecimal.valueOf(50.00))
.build())
.paymentInfo(PaymentInfo.builder()
@@ -257,10 +263,12 @@ class PlayOrderInfoServiceTest {
.orderStatus(OrderConstant.OrderStatus.PENDING)
.orderType(OrderConstant.OrderType.NORMAL)
.placeType(OrderConstant.PlaceType.SPECIFIED)
.rewardType(OrderConstant.RewardType.NOT_APPLICABLE)
.isFirstOrder(false)
.commodityInfo(CommodityInfo.builder()
.commodityId("commodity_002")
.commodityName("优惠商品")
.commodityType(OrderConstant.CommodityType.SERVICE)
.commodityPrice(BigDecimal.valueOf(200.00))
.build())
.paymentInfo(PaymentInfo.builder()
@@ -311,11 +319,12 @@ class PlayOrderInfoServiceTest {
.orderStatus(OrderConstant.OrderStatus.PENDING)
.orderType(OrderConstant.OrderType.NORMAL)
.placeType(OrderConstant.PlaceType.SPECIFIED)
.rewardType("0")
.rewardType(OrderConstant.RewardType.BALANCE)
.isFirstOrder(true)
.commodityInfo(CommodityInfo.builder()
.commodityId("commodity_003")
.commodityName("复杂商品")
.commodityType(OrderConstant.CommodityType.SERVICE)
.commodityPrice(BigDecimal.valueOf(300.00))
.serviceDuration("120")
.commodityNumber("1")
@@ -378,11 +387,12 @@ class PlayOrderInfoServiceTest {
.orderStatus(OrderConstant.OrderStatus.PENDING)
.orderType(OrderConstant.OrderType.NORMAL)
.placeType(OrderConstant.PlaceType.SPECIFIED)
.rewardType("0")
.rewardType(OrderConstant.RewardType.BALANCE)
.isFirstOrder(true) // 首单
.commodityInfo(CommodityInfo.builder()
.commodityId("commodity_revenue")
.commodityName("收入测试商品")
.commodityType(OrderConstant.CommodityType.SERVICE)
.commodityPrice(BigDecimal.valueOf(200.00))
.serviceDuration("90")
.build())