feat(pricing): 添加券码管理和使用功能

- 新增券码批次配置和券码实体
- 实现券码创建、领取、使用等接口
- 添加券码状态和优惠类型枚举
- 优化价格计算逻辑,支持券码优惠
- 新增优惠检测和应用相关功能
This commit is contained in:
2025-08-21 09:35:08 +08:00
parent e9035af542
commit eb327723cd
52 changed files with 2572 additions and 455 deletions

View File

@@ -44,7 +44,7 @@ public interface PriceCouponClaimRecordMapper extends BaseMapper<PriceCouponClai
"WHERE id = #{id}")
int updateCouponStatus(@Param("id") Long id,
@Param("status") CouponStatus status,
@Param("useTime") java.time.LocalDateTime useTime,
@Param("useTime") java.util.Date useTime,
@Param("orderId") String orderId,
@Param("scenicId") String scenicId);

View File

@@ -0,0 +1,47 @@
package com.ycwl.basic.pricing.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ycwl.basic.pricing.entity.PriceVoucherBatchConfig;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 券码批次配置Mapper
*/
@Mapper
public interface PriceVoucherBatchConfigMapper extends BaseMapper<PriceVoucherBatchConfig> {
/**
* 根据景区ID和推客ID查询有效的批次列表
* @param scenicId 景区ID
* @param brokerId 推客ID
* @return 批次列表
*/
List<PriceVoucherBatchConfig> selectActiveBatchesByScenicAndBroker(@Param("scenicId") Long scenicId,
@Param("brokerId") Long brokerId);
/**
* 更新批次的已领取数量
* @param batchId 批次ID
* @param increment 增量(可为负数)
* @return 影响行数
*/
int updateClaimedCount(@Param("batchId") Long batchId, @Param("increment") Integer increment);
/**
* 更新批次的已使用数量
* @param batchId 批次ID
* @param increment 增量(可为负数)
* @return 影响行数
*/
int updateUsedCount(@Param("batchId") Long batchId, @Param("increment") Integer increment);
/**
* 获取批次统计信息
* @param batchId 批次ID
* @return 统计信息
*/
PriceVoucherBatchConfig selectBatchStats(@Param("batchId") Long batchId);
}

View File

@@ -0,0 +1,94 @@
package com.ycwl.basic.pricing.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ycwl.basic.pricing.entity.PriceVoucherCode;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
/**
* 券码Mapper
*/
@Mapper
public interface PriceVoucherCodeMapper extends BaseMapper<PriceVoucherCode> {
/**
* 根据券码查询券码信息
* @param code 券码
* @return 券码信息
*/
PriceVoucherCode selectByCode(@Param("code") String code);
/**
* 根据faceId和scenicId统计已领取的券码数量
* @param faceId 用户faceId
* @param scenicId 景区ID
* @return 数量
*/
Integer countByFaceIdAndScenicId(@Param("faceId") Long faceId, @Param("scenicId") Long scenicId);
/**
* 查询用户在指定景区的可用券码列表
* @param faceId 用户faceId
* @param scenicId 景区ID
* @return 券码列表
*/
List<PriceVoucherCode> selectAvailableVouchersByFaceIdAndScenicId(@Param("faceId") Long faceId,
@Param("scenicId") Long scenicId);
/**
* 根据批次ID获取可领取的券码(未领取状态)
* @param batchId 批次ID
* @param limit 限制数量
* @return 券码列表
*/
List<PriceVoucherCode> selectUnclaimedVouchersByBatchId(@Param("batchId") Long batchId,
@Param("limit") Integer limit);
/**
* 领取券码(更新状态为已领取)
* @param id 券码ID
* @param faceId 用户faceId
* @param claimedTime 领取时间
* @return 影响行数
*/
int claimVoucher(@Param("id") Long id,
@Param("faceId") Long faceId,
@Param("claimedTime") LocalDateTime claimedTime);
/**
* 使用券码(更新状态为已使用)
* @param code 券码
* @param usedTime 使用时间
* @param remark 使用备注
* @return 影响行数
*/
int useVoucher(@Param("code") String code,
@Param("usedTime") LocalDateTime usedTime,
@Param("remark") String remark);
/**
* 根据批次ID查询券码列表(支持分页)
* @param batchId 批次ID
* @return 券码列表
*/
List<PriceVoucherCode> selectByBatchId(@Param("batchId") Long batchId);
/**
* 查询用户的券码列表
* @param faceId 用户faceId
* @param scenicId 景区ID(可选)
* @return 券码列表
*/
List<PriceVoucherCode> selectUserVouchers(@Param("faceId") Long faceId,
@Param("scenicId") Long scenicId);
/**
* 根据批次ID查询第一个可用的券码
* @param batchId 批次ID
* @return 可用券码
*/
PriceVoucherCode findFirstAvailableByBatchId(@Param("batchId") Long batchId);
}