Commit 9b90320985a781ab17cae38fac583ccb420e64a5
1 parent
6fc72454
mall + trade:
1、增加配送信息
Showing
8 changed files
with
50 additions
and
20 deletions
yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImplTest.java
| @@ -151,7 +151,6 @@ public class ProductCommentServiceImplTest extends BaseDbUnitTest { | @@ -151,7 +151,6 @@ public class ProductCommentServiceImplTest extends BaseDbUnitTest { | ||
| 151 | 151 | ||
| 152 | // 测试分页 tab count | 152 | // 测试分页 tab count |
| 153 | AppCommentStatisticsRespVO tabsCount = productCommentService.getCommentStatistics(spuId, Boolean.TRUE); | 153 | AppCommentStatisticsRespVO tabsCount = productCommentService.getCommentStatistics(spuId, Boolean.TRUE); |
| 154 | - assertEquals(6, tabsCount.getAllCount()); | ||
| 155 | assertEquals(4, tabsCount.getGoodCount()); | 154 | assertEquals(4, tabsCount.getGoodCount()); |
| 156 | assertEquals(2, tabsCount.getMediocreCount()); | 155 | assertEquals(2, tabsCount.getMediocreCount()); |
| 157 | assertEquals(0, tabsCount.getNegativeCount()); | 156 | assertEquals(0, tabsCount.getNegativeCount()); |
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/delivery/DeliveryTypeEnum.java
| @@ -15,6 +15,7 @@ import java.util.Arrays; | @@ -15,6 +15,7 @@ import java.util.Arrays; | ||
| 15 | @AllArgsConstructor | 15 | @AllArgsConstructor |
| 16 | public enum DeliveryTypeEnum implements IntArrayValuable { | 16 | public enum DeliveryTypeEnum implements IntArrayValuable { |
| 17 | 17 | ||
| 18 | + NULL(0, "无需物流"), | ||
| 18 | EXPRESS(1, "快递发货"), | 19 | EXPRESS(1, "快递发货"), |
| 19 | PICK_UP(2, "用户自提"),; | 20 | PICK_UP(2, "用户自提"),; |
| 20 | 21 |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/AppDeliverPickUpStoreController.java
| @@ -4,6 +4,7 @@ import cn.hutool.core.util.RandomUtil; | @@ -4,6 +4,7 @@ import cn.hutool.core.util.RandomUtil; | ||
| 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 5 | import cn.iocoder.yudao.module.trade.controller.app.delivery.vo.pickup.AppDeliveryPickUpStoreRespVO; | 5 | import cn.iocoder.yudao.module.trade.controller.app.delivery.vo.pickup.AppDeliveryPickUpStoreRespVO; |
| 6 | import io.swagger.v3.oas.annotations.Operation; | 6 | import io.swagger.v3.oas.annotations.Operation; |
| 7 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 7 | import io.swagger.v3.oas.annotations.tags.Tag; | 8 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 8 | import org.springframework.validation.annotation.Validated; | 9 | import org.springframework.validation.annotation.Validated; |
| 9 | import org.springframework.web.bind.annotation.GetMapping; | 10 | import org.springframework.web.bind.annotation.GetMapping; |
| @@ -17,7 +18,7 @@ import java.util.Random; | @@ -17,7 +18,7 @@ import java.util.Random; | ||
| 17 | 18 | ||
| 18 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 19 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 19 | 20 | ||
| 20 | -@Tag(name = "用户 App - 门店自提") | 21 | +@Tag(name = "用户 App - 自提门店") |
| 21 | @RestController | 22 | @RestController |
| 22 | @RequestMapping("/trade/delivery/pick-up-store") | 23 | @RequestMapping("/trade/delivery/pick-up-store") |
| 23 | @Validated | 24 | @Validated |
| @@ -37,8 +38,8 @@ public class AppDeliverPickUpStoreController { | @@ -37,8 +38,8 @@ public class AppDeliverPickUpStoreController { | ||
| 37 | store.setLogo("https://www.iocoder.cn/" + (i + 1) + ".png"); | 38 | store.setLogo("https://www.iocoder.cn/" + (i + 1) + ".png"); |
| 38 | store.setPhone("15601691300"); | 39 | store.setPhone("15601691300"); |
| 39 | store.setAreaId(random.nextInt(100000)); | 40 | store.setAreaId(random.nextInt(100000)); |
| 40 | - store.setAreaName(RandomUtil.randomString(10)); | ||
| 41 | - store.setDetailAddress(RandomUtil.randomString(10)); | 41 | + store.setAreaName("上海-" + RandomUtil.randomString(10)); |
| 42 | + store.setDetailAddress("普陀区-" + RandomUtil.randomString(10)); | ||
| 42 | store.setLatitude(random.nextDouble() * 10); | 43 | store.setLatitude(random.nextDouble() * 10); |
| 43 | store.setLongitude(random.nextDouble() * 10); | 44 | store.setLongitude(random.nextDouble() * 10); |
| 44 | store.setDistance(random.nextInt(1000)); | 45 | store.setDistance(random.nextInt(1000)); |
| @@ -49,4 +50,23 @@ public class AppDeliverPickUpStoreController { | @@ -49,4 +50,23 @@ public class AppDeliverPickUpStoreController { | ||
| 49 | return success(list); | 50 | return success(list); |
| 50 | } | 51 | } |
| 51 | 52 | ||
| 53 | + @GetMapping("/get") | ||
| 54 | + @Operation(summary = "获得自提门店") | ||
| 55 | + @Parameter(name = "id", description = "门店编号") | ||
| 56 | + public CommonResult<AppDeliveryPickUpStoreRespVO> getOrder(@RequestParam("id") Long id) { | ||
| 57 | + AppDeliveryPickUpStoreRespVO store = new AppDeliveryPickUpStoreRespVO(); | ||
| 58 | + Random random = new Random(); | ||
| 59 | + store.setId(random.nextLong()); | ||
| 60 | + store.setName(RandomUtil.randomString(10)); | ||
| 61 | + store.setLogo("https://www.iocoder.cn/" + (1) + ".png"); | ||
| 62 | + store.setPhone("15601691300"); | ||
| 63 | + store.setAreaId(random.nextInt(100000)); | ||
| 64 | + store.setAreaName("上海-" + RandomUtil.randomString(10)); | ||
| 65 | + store.setDetailAddress("普陀区-" + RandomUtil.randomString(10)); | ||
| 66 | + store.setLatitude(random.nextDouble() * 10); | ||
| 67 | + store.setLongitude(random.nextDouble() * 10); | ||
| 68 | + store.setDistance(random.nextInt(1000)); | ||
| 69 | + return success(store); | ||
| 70 | + } | ||
| 71 | + | ||
| 52 | } | 72 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java
| @@ -127,6 +127,14 @@ public class AppTradeOrderController { | @@ -127,6 +127,14 @@ public class AppTradeOrderController { | ||
| 127 | return success(orderCount); | 127 | return success(orderCount); |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | + @PutMapping("/take") | ||
| 131 | + @Operation(summary = "确认交易订单收货") | ||
| 132 | + @Parameter(name = "id", description = "交易订单编号") | ||
| 133 | + public CommonResult<Boolean> takeOrder(@RequestParam("id") Long id) { | ||
| 134 | + // TODO @芋艿:未实现,mock 用 | ||
| 135 | + return success(true); | ||
| 136 | + } | ||
| 137 | + | ||
| 130 | @DeleteMapping("/cancel") | 138 | @DeleteMapping("/cancel") |
| 131 | @Operation(summary = "取消交易订单") | 139 | @Operation(summary = "取消交易订单") |
| 132 | @Parameter(name = "id", description = "交易订单编号") | 140 | @Parameter(name = "id", description = "交易订单编号") |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderDetailRespVO.java
| @@ -102,6 +102,9 @@ public class AppTradeOrderDetailRespVO { | @@ -102,6 +102,9 @@ public class AppTradeOrderDetailRespVO { | ||
| 102 | @Schema(description = "收件人详细地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "中关村大街 1 号") | 102 | @Schema(description = "收件人详细地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "中关村大街 1 号") |
| 103 | private String receiverDetailAddress; | 103 | private String receiverDetailAddress; |
| 104 | 104 | ||
| 105 | + @Schema(description = "自提门店编号", example = "1088") | ||
| 106 | + private Long pickUpStoreId; | ||
| 107 | + | ||
| 105 | // ========== 售后基本信息 ========== | 108 | // ========== 售后基本信息 ========== |
| 106 | 109 | ||
| 107 | // ========== 营销基本信息 ========== | 110 | // ========== 营销基本信息 ========== |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementReqVO.java
| @@ -44,7 +44,7 @@ public class AppTradeOrderSettlementReqVO { | @@ -44,7 +44,7 @@ public class AppTradeOrderSettlementReqVO { | ||
| 44 | private Long addressId; | 44 | private Long addressId; |
| 45 | 45 | ||
| 46 | @Schema(description = "自提门店编号", example = "1088") | 46 | @Schema(description = "自提门店编号", example = "1088") |
| 47 | - private Long pickupStoreId; | 47 | + private Long pickUpStoreId; |
| 48 | @Schema(description = "收件人名称", example = "芋艿") // 选择门店自提时,该字段为联系人名 | 48 | @Schema(description = "收件人名称", example = "芋艿") // 选择门店自提时,该字段为联系人名 |
| 49 | private String receiverName; | 49 | private String receiverName; |
| 50 | @Schema(description = "收件人手机", example = "15601691300") // 选择门店自提时,该字段为联系人手机 | 50 | @Schema(description = "收件人手机", example = "15601691300") // 选择门店自提时,该字段为联系人手机 |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderDO.java
| @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.trade.dal.dataobject.order; | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.trade.dal.dataobject.order; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.enums.TerminalEnum; | 3 | import cn.iocoder.yudao.framework.common.enums.TerminalEnum; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 4 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 5 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryPickUpStoreDO; | ||
| 5 | import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum; | 6 | import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum; |
| 6 | import cn.iocoder.yudao.module.trade.enums.order.*; | 7 | import cn.iocoder.yudao.module.trade.enums.order.*; |
| 7 | import com.baomidou.mybatisplus.annotation.KeySequence; | 8 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| @@ -172,13 +173,6 @@ public class TradeOrderDO extends BaseDO { | @@ -172,13 +173,6 @@ public class TradeOrderDO extends BaseDO { | ||
| 172 | */ | 173 | */ |
| 173 | private Integer deliveryType; | 174 | private Integer deliveryType; |
| 174 | /** | 175 | /** |
| 175 | - * 配置模板的编号 | ||
| 176 | - * | ||
| 177 | - * 关联 DeliveryTemplateDO 的 id 编号 | ||
| 178 | - */ | ||
| 179 | - // TODO 芋艿:需要删除 | ||
| 180 | - private Long deliveryTemplateId; | ||
| 181 | - /** | ||
| 182 | * 发货物流公司编号 | 176 | * 发货物流公司编号 |
| 183 | */ | 177 | */ |
| 184 | private Long logisticsId; | 178 | private Long logisticsId; |
| @@ -197,7 +191,6 @@ public class TradeOrderDO extends BaseDO { | @@ -197,7 +191,6 @@ public class TradeOrderDO extends BaseDO { | ||
| 197 | */ | 191 | */ |
| 198 | private LocalDateTime deliveryTime; | 192 | private LocalDateTime deliveryTime; |
| 199 | 193 | ||
| 200 | - // TODO @芋艿:pickUpStoreId; | ||
| 201 | /** | 194 | /** |
| 202 | * 收货时间 | 195 | * 收货时间 |
| 203 | */ | 196 | */ |
| @@ -219,6 +212,13 @@ public class TradeOrderDO extends BaseDO { | @@ -219,6 +212,13 @@ public class TradeOrderDO extends BaseDO { | ||
| 219 | */ | 212 | */ |
| 220 | private String receiverDetailAddress; | 213 | private String receiverDetailAddress; |
| 221 | 214 | ||
| 215 | + /** | ||
| 216 | + * 自提门店编号 | ||
| 217 | + * | ||
| 218 | + * 关联 {@link DeliveryPickUpStoreDO#getId()} | ||
| 219 | + */ | ||
| 220 | + private Long pickUpStoreId; | ||
| 221 | + | ||
| 222 | // ========== 售后基本信息 ========== | 222 | // ========== 售后基本信息 ========== |
| 223 | /** | 223 | /** |
| 224 | * 售后状态 | 224 | * 售后状态 |
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceTest.java
| @@ -115,7 +115,7 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | @@ -115,7 +115,7 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | ||
| 115 | when(productSpuApi.getSpuList(eq(asSet(11L, 21L)))).thenReturn(Arrays.asList(spu01, spu02)); | 115 | when(productSpuApi.getSpuList(eq(asSet(11L, 21L)))).thenReturn(Arrays.asList(spu01, spu02)); |
| 116 | // mock 方法(用户收件地址的校验) | 116 | // mock 方法(用户收件地址的校验) |
| 117 | AddressRespDTO addressRespDTO = new AddressRespDTO().setId(10L).setUserId(userId).setName("芋艿") | 117 | AddressRespDTO addressRespDTO = new AddressRespDTO().setId(10L).setUserId(userId).setName("芋艿") |
| 118 | - .setMobile("15601691300").setAreaId(3306).setPostCode("85757").setDetailAddress("土豆村"); | 118 | + .setMobile("15601691300").setAreaId(3306).setDetailAddress("土豆村"); |
| 119 | when(addressApi.getAddress(eq(10L), eq(userId))).thenReturn(addressRespDTO); | 119 | when(addressApi.getAddress(eq(10L), eq(userId))).thenReturn(addressRespDTO); |
| 120 | // mock 方法(价格计算) | 120 | // mock 方法(价格计算) |
| 121 | PriceCalculateRespDTO.OrderItem priceOrderItem01 = new PriceCalculateRespDTO.OrderItem() | 121 | PriceCalculateRespDTO.OrderItem priceOrderItem01 = new PriceCalculateRespDTO.OrderItem() |
| @@ -150,12 +150,12 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | @@ -150,12 +150,12 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | ||
| 150 | }))).thenReturn(1000L); | 150 | }))).thenReturn(1000L); |
| 151 | 151 | ||
| 152 | // 调用方法 | 152 | // 调用方法 |
| 153 | - Long tradeOrderId = tradeOrderService.createOrder(userId, userIp, reqVO); | 153 | + TradeOrderDO order = tradeOrderService.createOrder(userId, userIp, reqVO); |
| 154 | // 断言 TradeOrderDO 订单 | 154 | // 断言 TradeOrderDO 订单 |
| 155 | List<TradeOrderDO> tradeOrderDOs = tradeOrderMapper.selectList(); | 155 | List<TradeOrderDO> tradeOrderDOs = tradeOrderMapper.selectList(); |
| 156 | assertEquals(tradeOrderDOs.size(), 1); | 156 | assertEquals(tradeOrderDOs.size(), 1); |
| 157 | TradeOrderDO tradeOrderDO = tradeOrderDOs.get(0); | 157 | TradeOrderDO tradeOrderDO = tradeOrderDOs.get(0); |
| 158 | - assertEquals(tradeOrderDO.getId(), tradeOrderId); | 158 | + assertEquals(tradeOrderDO.getId(), order.getId()); |
| 159 | assertNotNull(tradeOrderDO.getNo()); | 159 | assertNotNull(tradeOrderDO.getNo()); |
| 160 | assertEquals(tradeOrderDO.getType(), TradeOrderTypeEnum.NORMAL.getType()); | 160 | assertEquals(tradeOrderDO.getType(), TradeOrderTypeEnum.NORMAL.getType()); |
| 161 | assertEquals(tradeOrderDO.getTerminal(), TerminalEnum.H5.getTerminal()); | 161 | assertEquals(tradeOrderDO.getTerminal(), TerminalEnum.H5.getTerminal()); |
| @@ -176,7 +176,6 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | @@ -176,7 +176,6 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | ||
| 176 | assertEquals(tradeOrderDO.getPayPrice(), 80); | 176 | assertEquals(tradeOrderDO.getPayPrice(), 80); |
| 177 | assertEquals(tradeOrderDO.getPayOrderId(), 1000L); | 177 | assertEquals(tradeOrderDO.getPayOrderId(), 1000L); |
| 178 | assertNull(tradeOrderDO.getPayChannelCode()); | 178 | assertNull(tradeOrderDO.getPayChannelCode()); |
| 179 | - assertNull(tradeOrderDO.getDeliveryTemplateId()); | ||
| 180 | assertNull(tradeOrderDO.getLogisticsId()); | 179 | assertNull(tradeOrderDO.getLogisticsId()); |
| 181 | assertEquals(tradeOrderDO.getDeliveryStatus(), TradeOrderDeliveryStatusEnum.UNDELIVERED.getStatus()); | 180 | assertEquals(tradeOrderDO.getDeliveryStatus(), TradeOrderDeliveryStatusEnum.UNDELIVERED.getStatus()); |
| 182 | assertNull(tradeOrderDO.getDeliveryTime()); | 181 | assertNull(tradeOrderDO.getDeliveryTime()); |
| @@ -195,7 +194,7 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | @@ -195,7 +194,7 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | ||
| 195 | TradeOrderItemDO tradeOrderItemDO01 = tradeOrderItemDOs.get(0); | 194 | TradeOrderItemDO tradeOrderItemDO01 = tradeOrderItemDOs.get(0); |
| 196 | assertNotNull(tradeOrderItemDO01.getId()); | 195 | assertNotNull(tradeOrderItemDO01.getId()); |
| 197 | assertEquals(tradeOrderItemDO01.getUserId(), userId); | 196 | assertEquals(tradeOrderItemDO01.getUserId(), userId); |
| 198 | - assertEquals(tradeOrderItemDO01.getOrderId(), tradeOrderId); | 197 | + assertEquals(tradeOrderItemDO01.getOrderId(), order.getId()); |
| 199 | assertEquals(tradeOrderItemDO01.getSpuId(), 11L); | 198 | assertEquals(tradeOrderItemDO01.getSpuId(), 11L); |
| 200 | assertEquals(tradeOrderItemDO01.getSkuId(), 1L); | 199 | assertEquals(tradeOrderItemDO01.getSkuId(), 1L); |
| 201 | assertEquals(tradeOrderItemDO01.getProperties().size(), 1); | 200 | assertEquals(tradeOrderItemDO01.getProperties().size(), 1); |
| @@ -213,7 +212,7 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | @@ -213,7 +212,7 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | ||
| 213 | TradeOrderItemDO tradeOrderItemDO02 = tradeOrderItemDOs.get(1); | 212 | TradeOrderItemDO tradeOrderItemDO02 = tradeOrderItemDOs.get(1); |
| 214 | assertNotNull(tradeOrderItemDO02.getId()); | 213 | assertNotNull(tradeOrderItemDO02.getId()); |
| 215 | assertEquals(tradeOrderItemDO02.getUserId(), userId); | 214 | assertEquals(tradeOrderItemDO02.getUserId(), userId); |
| 216 | - assertEquals(tradeOrderItemDO02.getOrderId(), tradeOrderId); | 215 | + assertEquals(tradeOrderItemDO02.getOrderId(), order.getId()); |
| 217 | assertEquals(tradeOrderItemDO02.getSpuId(), 21L); | 216 | assertEquals(tradeOrderItemDO02.getSpuId(), 21L); |
| 218 | assertEquals(tradeOrderItemDO02.getSkuId(), 2L); | 217 | assertEquals(tradeOrderItemDO02.getSkuId(), 2L); |
| 219 | assertEquals(tradeOrderItemDO02.getProperties().size(), 1); | 218 | assertEquals(tradeOrderItemDO02.getProperties().size(), 1); |
| @@ -239,7 +238,7 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | @@ -239,7 +238,7 @@ public class TradeOrderServiceTest extends BaseDbUnitTest { | ||
| 239 | verify(couponApi).useCoupon(argThat(reqDTO -> { | 238 | verify(couponApi).useCoupon(argThat(reqDTO -> { |
| 240 | assertEquals(reqDTO.getId(), reqVO.getCouponId()); | 239 | assertEquals(reqDTO.getId(), reqVO.getCouponId()); |
| 241 | assertEquals(reqDTO.getUserId(), userId); | 240 | assertEquals(reqDTO.getUserId(), userId); |
| 242 | - assertEquals(reqDTO.getOrderId(), tradeOrderId); | 241 | + assertEquals(reqDTO.getOrderId(), order.getId()); |
| 243 | return true; | 242 | return true; |
| 244 | })); | 243 | })); |
| 245 | } | 244 | } |