mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	Merge remote-tracking branch 'origin/develop' into develop
# Conflicts: # yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/DiscountActivityApi.java # yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/discount/DiscountActivityApiImpl.java # yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/discount/DiscountActivityConvert.java # yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/discount/DiscountProductMapper.java # yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityService.java # yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityServiceImpl.java # yudao-module-mall/yudao-module-promotion-biz/src/main/resources/mapper/discount/DiscountProductMapper.xml # yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDiscountActivityPriceCalculator.java
This commit is contained in:
		@@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.promotion.api.combination;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationValidateJoinRespDTO;
 | 
			
		||||
 | 
			
		||||
import jakarta.validation.Valid;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -33,13 +33,13 @@ public interface CombinationRecordApi {
 | 
			
		||||
    CombinationRecordCreateRespDTO createCombinationRecord(@Valid CombinationRecordCreateReqDTO reqDTO);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询拼团记录是否成功
 | 
			
		||||
     * 基于订单编号,查询拼团记录
 | 
			
		||||
     *
 | 
			
		||||
     * @param userId  用户编号
 | 
			
		||||
     * @param orderId 订单编号
 | 
			
		||||
     * @return 拼团是否成功
 | 
			
		||||
     * @return 拼团记录
 | 
			
		||||
     */
 | 
			
		||||
    boolean isCombinationRecordSuccess(Long userId, Long orderId);
 | 
			
		||||
    CombinationRecordRespDTO getCombinationRecordByOrderId(Long userId, Long orderId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 【下单前】校验是否满足拼团活动条件
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,110 @@
 | 
			
		||||
package cn.iocoder.yudao.module.promotion.api.combination.dto;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 拼团记录 Response DTO
 | 
			
		||||
 *
 | 
			
		||||
 * @author 芋道源码
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class CombinationRecordRespDTO {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 编号,主键自增
 | 
			
		||||
     */
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 拼团活动编号
 | 
			
		||||
     *
 | 
			
		||||
     * 关联 CombinationActivityDO 的 id 字段
 | 
			
		||||
     */
 | 
			
		||||
    private Long activityId;
 | 
			
		||||
    /**
 | 
			
		||||
     * 拼团商品单价
 | 
			
		||||
     *
 | 
			
		||||
     * 冗余 CombinationProductDO 的 combinationPrice 字段
 | 
			
		||||
     */
 | 
			
		||||
    private Integer combinationPrice;
 | 
			
		||||
    /**
 | 
			
		||||
     * SPU 编号
 | 
			
		||||
     */
 | 
			
		||||
    private Long spuId;
 | 
			
		||||
    /**
 | 
			
		||||
     * 商品名字
 | 
			
		||||
     */
 | 
			
		||||
    private String spuName;
 | 
			
		||||
    /**
 | 
			
		||||
     * 商品图片
 | 
			
		||||
     */
 | 
			
		||||
    private String picUrl;
 | 
			
		||||
    /**
 | 
			
		||||
     * SKU 编号
 | 
			
		||||
     */
 | 
			
		||||
    private Long skuId;
 | 
			
		||||
    /**
 | 
			
		||||
     * 购买的商品数量
 | 
			
		||||
     */
 | 
			
		||||
    private Integer count;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户编号
 | 
			
		||||
     */
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户昵称
 | 
			
		||||
     */
 | 
			
		||||
    private String nickname;
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户头像
 | 
			
		||||
     */
 | 
			
		||||
    private String avatar;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 团长编号
 | 
			
		||||
     */
 | 
			
		||||
    private Long headId;
 | 
			
		||||
    /**
 | 
			
		||||
     * 开团状态
 | 
			
		||||
     *
 | 
			
		||||
     * 关联 {@link CombinationRecordStatusEnum}
 | 
			
		||||
     */
 | 
			
		||||
    private Integer status;
 | 
			
		||||
    /**
 | 
			
		||||
     * 订单编号
 | 
			
		||||
     */
 | 
			
		||||
    private Long orderId;
 | 
			
		||||
    /**
 | 
			
		||||
     * 开团需要人数
 | 
			
		||||
     *
 | 
			
		||||
     * 关联 CombinationActivityDO 的 userSize 字段
 | 
			
		||||
     */
 | 
			
		||||
    private Integer userSize;
 | 
			
		||||
    /**
 | 
			
		||||
     * 已加入拼团人数
 | 
			
		||||
     */
 | 
			
		||||
    private Integer userCount;
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否虚拟成团
 | 
			
		||||
     */
 | 
			
		||||
    private Boolean virtualGroup;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 过期时间
 | 
			
		||||
     */
 | 
			
		||||
    private LocalDateTime expireTime;
 | 
			
		||||
    /**
 | 
			
		||||
     * 开始时间 (订单付款后开始的时间)
 | 
			
		||||
     */
 | 
			
		||||
    private LocalDateTime startTime;
 | 
			
		||||
    /**
 | 
			
		||||
     * 结束时间(成团时间/失败时间)
 | 
			
		||||
     */
 | 
			
		||||
    private LocalDateTime endTime;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.promotion.api.coupon;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponUseReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponValidReqDTO;
 | 
			
		||||
import jakarta.validation.Valid;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
@@ -15,6 +14,15 @@ import java.util.Map;
 | 
			
		||||
 */
 | 
			
		||||
public interface CouponApi {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得用户的优惠劵列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param userId 用户编号
 | 
			
		||||
     * @param status 优惠劵状态
 | 
			
		||||
     * @return 优惠劵列表
 | 
			
		||||
     */
 | 
			
		||||
    List<CouponRespDTO> getCouponListByUserId(Long userId, Integer status);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 使用优惠劵
 | 
			
		||||
     *
 | 
			
		||||
@@ -29,14 +37,6 @@ public interface CouponApi {
 | 
			
		||||
     */
 | 
			
		||||
    void returnUsedCoupon(Long id);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 校验优惠劵
 | 
			
		||||
     *
 | 
			
		||||
     * @param validReqDTO 校验请求
 | 
			
		||||
     * @return 优惠劵
 | 
			
		||||
     */
 | 
			
		||||
    CouponRespDTO validateCoupon(@Valid CouponValidReqDTO validReqDTO);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 【管理员】给指定用户批量发送优惠券
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,27 +0,0 @@
 | 
			
		||||
package cn.iocoder.yudao.module.promotion.api.coupon.dto;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import jakarta.validation.constraints.NotNull;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 优惠劵使用 Request DTO
 | 
			
		||||
 *
 | 
			
		||||
 * @author 芋道源码
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class CouponValidReqDTO {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 优惠劵编号
 | 
			
		||||
     */
 | 
			
		||||
    @NotNull(message = "优惠劵编号不能为空")
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户编号
 | 
			
		||||
     */
 | 
			
		||||
    @NotNull(message = "用户编号不能为空")
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -13,11 +13,11 @@ import java.util.List;
 | 
			
		||||
public interface DiscountActivityApi {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得商品匹配的的限时折扣信息
 | 
			
		||||
     * 获得 skuId 商品匹配的的限时折扣信息
 | 
			
		||||
     *
 | 
			
		||||
     * @param spuIds 商品 spu 编号数组
 | 
			
		||||
     * @param skuIds 商品 SKU 编号数组
 | 
			
		||||
     * @return 限时折扣信息
 | 
			
		||||
     */
 | 
			
		||||
    List<DiscountProductRespDTO> getMatchDiscountProductList(Collection<Long> spuIds);
 | 
			
		||||
    List<DiscountProductRespDTO> getMatchDiscountProductListBySkuIds(Collection<Long> skuIds);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.promotion.api.discount.dto;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 限时折扣活动商品 Response DTO
 | 
			
		||||
 *
 | 
			
		||||
@@ -44,5 +46,14 @@ public class DiscountProductRespDTO {
 | 
			
		||||
     * 活动标题
 | 
			
		||||
     */
 | 
			
		||||
    private String activityName;
 | 
			
		||||
    /**
 | 
			
		||||
     * 活动开始时间点
 | 
			
		||||
     */
 | 
			
		||||
    private LocalDateTime activityStartTime;
 | 
			
		||||
    /**
 | 
			
		||||
     * 活动结束时间点
 | 
			
		||||
     */
 | 
			
		||||
    private LocalDateTime activityEndTime;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.promotion.api.reward;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.api.reward.dto.RewardActivityMatchRespDTO;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -13,12 +13,11 @@ import java.util.List;
 | 
			
		||||
public interface RewardActivityApi {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得当前时间内开启的满减送活动
 | 
			
		||||
     * 获得 spuId 商品匹配的的满减送活动列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param status   状态
 | 
			
		||||
     * @param dateTime 当前时间,即筛选 <= dateTime 的满减送活动
 | 
			
		||||
     * @param spuIds   SPU 编号
 | 
			
		||||
     * @return 满减送活动列表
 | 
			
		||||
     */
 | 
			
		||||
    List<RewardActivityMatchRespDTO> getRewardActivityListByStatusAndNow(Integer status, LocalDateTime dateTime);
 | 
			
		||||
    List<RewardActivityMatchRespDTO> getMatchRewardActivityListBySpuIds(Collection<Long> spuIds);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,11 @@ import java.util.Map;
 | 
			
		||||
@Data
 | 
			
		||||
public class RewardActivityMatchRespDTO {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 匹配的 SPU 数组
 | 
			
		||||
     */
 | 
			
		||||
    private List<Long> spuIds;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 活动编号,主键自增
 | 
			
		||||
     */
 | 
			
		||||
@@ -100,6 +105,13 @@ public class RewardActivityMatchRespDTO {
 | 
			
		||||
         */
 | 
			
		||||
        private Map<Long, Integer> giveCouponTemplateCounts;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 规则描述
 | 
			
		||||
         *
 | 
			
		||||
         * 通过 {@link #limit}、{@link #discountPrice} 等字段进行拼接
 | 
			
		||||
         */
 | 
			
		||||
        private String description;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -20,8 +20,6 @@ public interface ErrorCodeConstants {
 | 
			
		||||
    ErrorCode BANNER_NOT_EXISTS = new ErrorCode(1_013_002_000, "Banner 不存在");
 | 
			
		||||
 | 
			
		||||
    // ========== Coupon 相关 1-013-003-000 ============
 | 
			
		||||
    ErrorCode COUPON_NO_MATCH_SPU = new ErrorCode(1_013_003_000, "优惠劵没有可使用的商品!");
 | 
			
		||||
    ErrorCode COUPON_NO_MATCH_MIN_PRICE = new ErrorCode(1_013_003_001, "所结算的商品中未满足使用的金额");
 | 
			
		||||
 | 
			
		||||
    // ========== 优惠劵模板 1-013-004-000 ==========
 | 
			
		||||
    ErrorCode COUPON_TEMPLATE_NOT_EXISTS = new ErrorCode(1_013_004_000, "优惠劵模板不存在");
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user