mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 10:37:41 +08:00 
			
		
		
		
	mall + promotion:
1、增加获得符合条件的优惠劵
This commit is contained in:
		| @ -2,6 +2,8 @@ package cn.iocoder.yudao.module.promotion.controller.app.coupon; | |||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
|  | import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponMatchReqVO; | ||||||
|  | import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponMatchRespVO; | ||||||
| import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponPageReqVO; | import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponPageReqVO; | ||||||
| import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponRespVO; | import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon.AppCouponRespVO; | ||||||
| import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.template.AppCouponTemplatePageReqVO; | import cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.template.AppCouponTemplatePageReqVO; | ||||||
| @ -30,6 +32,38 @@ public class AppCouponController { | |||||||
|         return success(1L); |         return success(1L); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // TODO 芋艿:待实现 | ||||||
|  |     @GetMapping("/match-list") | ||||||
|  |     @Operation(summary = "获得匹配指定商品的优惠劵列表") | ||||||
|  |     public CommonResult<List<AppCouponMatchRespVO>> getMatchCouponList(AppCouponMatchReqVO matchReqVO) { | ||||||
|  |         List<AppCouponMatchRespVO> list = new ArrayList<>(); | ||||||
|  |         Random random = new Random(); | ||||||
|  |         for (int i = 0; i < 10; i++) { | ||||||
|  |             AppCouponMatchRespVO vo = new AppCouponMatchRespVO(); | ||||||
|  |             vo.setId(i + 1L); | ||||||
|  |             vo.setName("优惠劵" + (i + 1)); | ||||||
|  |             vo.setUsePrice(random.nextInt(100) * 100); | ||||||
|  |             vo.setValidStartTime(LocalDateTime.now().plusDays(random.nextInt(10))); | ||||||
|  |             vo.setValidEndTime(LocalDateTime.now().plusDays(random.nextInt(20) + 10)); | ||||||
|  |             vo.setDiscountType(random.nextInt(2) + 1); | ||||||
|  |             if (vo.getDiscountType() == 1) { | ||||||
|  |                 vo.setDiscountPercent(null); | ||||||
|  |                 vo.setDiscountPrice(random.nextInt(50) * 100); | ||||||
|  |                 vo.setDiscountLimitPrice(null); | ||||||
|  |             } else { | ||||||
|  |                 vo.setDiscountPercent(random.nextInt(90) + 10); | ||||||
|  |                 vo.setDiscountPrice(null); | ||||||
|  |                 vo.setDiscountLimitPrice(random.nextInt(200) * 100); | ||||||
|  |             } | ||||||
|  |             vo.setMatch(random.nextBoolean()); | ||||||
|  |             if (!vo.getMatch()) { | ||||||
|  |                 vo.setDescription("不符合条件噢"); | ||||||
|  |             } | ||||||
|  |             list.add(vo); | ||||||
|  |         } | ||||||
|  |         return success(list); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     // TODO 芋艿:待实现 |     // TODO 芋艿:待实现 | ||||||
|     @GetMapping("/page") |     @GetMapping("/page") | ||||||
|     @Operation(summary = "优惠劵列表", description = "我的优惠劵") |     @Operation(summary = "优惠劵列表", description = "我的优惠劵") | ||||||
|  | |||||||
| @ -0,0 +1,30 @@ | |||||||
|  | package cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon; | ||||||
|  |  | ||||||
|  | import io.swagger.v3.oas.annotations.media.Schema; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import javax.validation.constraints.NotEmpty; | ||||||
|  | import javax.validation.constraints.NotNull; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | @Schema(description = "用户 App - 优惠劵的匹配 Request VO") | ||||||
|  | @Data | ||||||
|  | public class AppCouponMatchReqVO { | ||||||
|  |  | ||||||
|  |     @Schema(description = "商品金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||||
|  |     @NotNull(message = "商品金额不能为空") | ||||||
|  |     private Integer price; | ||||||
|  |  | ||||||
|  |     @Schema(description = "商品 SPU 编号的数组", required = true, example = "[1, 2]") | ||||||
|  |     @NotEmpty(message = "商品 SPU 编号不能为空") | ||||||
|  |     private List<Long> spuIds; | ||||||
|  |  | ||||||
|  |     @Schema(description = "商品 SKU 编号的数组", required = true, example = "[1, 2]") | ||||||
|  |     @NotEmpty(message = "商品 SKU 编号不能为空") | ||||||
|  |     private List<Long> skuIds; | ||||||
|  |  | ||||||
|  |     @Schema(description = "分类编号的数组", required = true, example = "[10, 20]") | ||||||
|  |     @NotEmpty(message = "分类编号不能为空") | ||||||
|  |     private List<Long> categoryIds; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,16 @@ | |||||||
|  | package cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon; | ||||||
|  |  | ||||||
|  | import io.swagger.v3.oas.annotations.media.Schema; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | @Schema(description = "用户 App - 优惠劵 Response VO") | ||||||
|  | @Data | ||||||
|  | public class AppCouponMatchRespVO extends AppCouponRespVO { | ||||||
|  |  | ||||||
|  |     @Schema(description = "是否匹配", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") | ||||||
|  |     private Boolean match; | ||||||
|  |  | ||||||
|  |     @Schema(description = "匹配条件的提示", example = "所结算商品没有符合条件的商品") | ||||||
|  |     private String description; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -1,168 +0,0 @@ | |||||||
| package cn.iocoder.yudao.module.trade.controller.app.order.vo; |  | ||||||
|  |  | ||||||
| import io.swagger.v3.oas.annotations.media.Schema; |  | ||||||
| import lombok.AllArgsConstructor; |  | ||||||
| import lombok.Data; |  | ||||||
|  |  | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| @Schema(description = "用户 App - 订单获得创建信息 Response VO") |  | ||||||
| @Data |  | ||||||
| public class AppTradeOrderGetCreateInfoRespVO { |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 商品分组数组 |  | ||||||
|      */ |  | ||||||
|     private List<ItemGroup> itemGroups; |  | ||||||
|     /** |  | ||||||
|      * 费用 |  | ||||||
|      */ |  | ||||||
|     private Fee fee; |  | ||||||
|  |  | ||||||
| //    /** |  | ||||||
| //     * 优惠劵列表 TODO 芋艿,后续改改 |  | ||||||
| //     */ |  | ||||||
| //    private List<CouponCardAvailableRespDTO> coupons; |  | ||||||
|  |  | ||||||
|     @Schema(description = "商品分组") // 多个商品,参加同一个活动,从而形成分组 |  | ||||||
|     @Data |  | ||||||
|     public static class ItemGroup { |  | ||||||
|  |  | ||||||
| //        /** |  | ||||||
| //         * 优惠活动 |  | ||||||
| //         */ |  | ||||||
| //        private PromotionActivityRespDTO activity; // TODO 芋艿,偷懒 |  | ||||||
|         /** |  | ||||||
|          * 商品 SKU 数组 |  | ||||||
|          */ |  | ||||||
|         private List<Sku> items; |  | ||||||
|  |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Schema(description = "商品 SKU") |  | ||||||
|     @Data |  | ||||||
|     public static class Sku { |  | ||||||
|  |  | ||||||
|         // SKU 自带信息 |  | ||||||
|         @Schema(description = "SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |  | ||||||
|         private Integer id; |  | ||||||
|         /** |  | ||||||
|          * SPU 信息 |  | ||||||
|          */ |  | ||||||
|         private Spu spu; |  | ||||||
|         /** |  | ||||||
|          * 图片地址 |  | ||||||
|          */ |  | ||||||
|         private String picURL; |  | ||||||
| //        /** |  | ||||||
| //         * 属性数组 |  | ||||||
| //         */ |  | ||||||
| //        private List<ProductAttrKeyValueRespVO> attrs; // TODO 后面改下 |  | ||||||
|         /** |  | ||||||
|          * 价格,单位:分 |  | ||||||
|          */ |  | ||||||
|         private Integer price; |  | ||||||
|         /** |  | ||||||
|          * 库存数量 |  | ||||||
|          */ |  | ||||||
|         private Integer stock; |  | ||||||
|  |  | ||||||
|         // 非 SKU 自带信息 |  | ||||||
|  |  | ||||||
|         /** |  | ||||||
|          * 购买数量 |  | ||||||
|          */ |  | ||||||
|         private Integer buyQuantity; |  | ||||||
| //        /** |  | ||||||
| //         * 优惠活动 |  | ||||||
| //         */ |  | ||||||
| //        private PromotionActivityRespDTO activity; // TODO 芋艿,偷懒 |  | ||||||
|         /** |  | ||||||
|          * 原始单价,单位:分。 |  | ||||||
|          */ |  | ||||||
|         private Integer originPrice; |  | ||||||
|         /** |  | ||||||
|          * 购买单价,单位:分 |  | ||||||
|          */ |  | ||||||
|         private Integer buyPrice; |  | ||||||
|         /** |  | ||||||
|          * 最终价格,单位:分。 |  | ||||||
|          */ |  | ||||||
|         private Integer presentPrice; |  | ||||||
|         /** |  | ||||||
|          * 购买总金额,单位:分 |  | ||||||
|          * |  | ||||||
|          * 用途类似 {@link #presentTotal} |  | ||||||
|          */ |  | ||||||
|         private Integer buyTotal; |  | ||||||
|         /** |  | ||||||
|          * 优惠总金额,单位:分。 |  | ||||||
|          */ |  | ||||||
|         private Integer discountTotal; |  | ||||||
|         /** |  | ||||||
|          * 最终总金额,单位:分。 |  | ||||||
|          * |  | ||||||
|          * 注意,presentPrice * quantity 不一定等于 presentTotal 。 |  | ||||||
|          * 因为,存在无法整除的情况。 |  | ||||||
|          * 举个例子,presentPrice = 8.33 ,quantity = 3 的情况,presentTotal 有可能是 24.99 ,也可能是 25 。 |  | ||||||
|          * 所以,需要存储一个该字段。 |  | ||||||
|          */ |  | ||||||
|         private Integer presentTotal; |  | ||||||
|  |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Data |  | ||||||
|     public static class Spu { |  | ||||||
|  |  | ||||||
|         /** |  | ||||||
|          * SPU 编号 |  | ||||||
|          */ |  | ||||||
|         private Integer id; |  | ||||||
|  |  | ||||||
|         // ========== 基本信息 ========= |  | ||||||
|         /** |  | ||||||
|          * SPU 名字 |  | ||||||
|          */ |  | ||||||
|         private String name; |  | ||||||
|         /** |  | ||||||
|          * 分类编号 |  | ||||||
|          */ |  | ||||||
|         private Integer cid; |  | ||||||
|         /** |  | ||||||
|          * 商品主图地址 |  | ||||||
|          * |  | ||||||
|          * 数组,以逗号分隔 |  | ||||||
|          * |  | ||||||
|          * 建议尺寸:800*800像素,你可以拖拽图片调整顺序,最多上传15张 |  | ||||||
|          */ |  | ||||||
|         private List<String> picUrls; |  | ||||||
|  |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Schema(description = "费用(合计)") |  | ||||||
|     @Data |  | ||||||
|     @AllArgsConstructor |  | ||||||
|     public static class Fee { |  | ||||||
|  |  | ||||||
|         @Schema(description = "购买总价", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |  | ||||||
|         private Integer buyPrice; |  | ||||||
|         /** |  | ||||||
|          * 优惠总价 |  | ||||||
|          * |  | ||||||
|          * 注意,满多少元包邮,不算在优惠中。 |  | ||||||
|          */ |  | ||||||
|         private Integer discountTotal; |  | ||||||
|         /** |  | ||||||
|          * 邮费 |  | ||||||
|          */ |  | ||||||
|         private Integer postageTotal; |  | ||||||
|         /** |  | ||||||
|          * 最终价格 |  | ||||||
|          * |  | ||||||
|          * 计算公式 = 总价 - 优惠总价 + 邮费 |  | ||||||
|          */ |  | ||||||
|         private Integer presentTotal; |  | ||||||
|  |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV