You've already forked FrameTour-BE
refactor(order): 重构重复购买检查策略
- 移除SetIdDuplicateChecker和VideoIdDuplicateChecker两个具体策略类 - 更新DuplicateCheckStrategy枚举,将CHECK_BY_SET_ID和CHECK_BY_VIDEO_ID 替换为更通用的UNIQUE_RESOURCE和PARENT_RESOURCE策略 - 修改ProductTypeCapabilityManagementServiceImpl中的策略分配逻辑 - UNIQUE_RESOURCE适用于照片、视频等独立资源的重复购买检查 - PARENT_RESOURCE适用于套餐类商品的重复购买检查 - 打印类商品现在正确设置为允许重复购买且不检查 - 其他类别商品默认设置为不检查重复购买
This commit is contained in:
@@ -13,16 +13,27 @@ public enum DuplicateCheckStrategy {
|
||||
NO_CHECK("NO_CHECK", "不检查"),
|
||||
|
||||
/**
|
||||
* 按视频ID检查(VLOG_VIDEO)
|
||||
* 同一个视频不允许重复购买
|
||||
* 检查唯一资源
|
||||
* 检查用户是否已购买过相同的独立资源
|
||||
* 查询逻辑:WHERE product_type = ? AND product_id = ?
|
||||
*
|
||||
* 适用商品:
|
||||
* - VLOG_VIDEO:检查是否购买过同一个视频
|
||||
* - PHOTO:检查是否购买过同一张照片
|
||||
* - 未来的VIDEO片段:检查是否购买过同一段视频
|
||||
*/
|
||||
CHECK_BY_VIDEO_ID("CHECK_BY_VIDEO_ID", "按视频ID检查"),
|
||||
UNIQUE_RESOURCE("UNIQUE_RESOURCE", "唯一资源检查"),
|
||||
|
||||
/**
|
||||
* 按套餐ID检查(RECORDING_SET, PHOTO_SET)
|
||||
* 同一个套餐不允许重复购买
|
||||
* 检查父资源/套餐
|
||||
* 检查用户是否已购买过该类型的任何商品
|
||||
* 查询逻辑:WHERE product_type = ?
|
||||
*
|
||||
* 适用商品:
|
||||
* - RECORDING_SET:购买过任意录像集后不能再购买
|
||||
* - PHOTO_SET:购买过任意照片集后不能再购买
|
||||
*/
|
||||
CHECK_BY_SET_ID("CHECK_BY_SET_ID", "按套餐ID检查"),
|
||||
PARENT_RESOURCE("PARENT_RESOURCE", "父资源检查"),
|
||||
|
||||
/**
|
||||
* 自定义策略(通过扩展实现)
|
||||
|
||||
@@ -229,17 +229,33 @@ public class ProductTypeCapabilityManagementServiceImpl implements IProductTypeC
|
||||
capability.setDisplayName(productType.getDescription());
|
||||
capability.setCategory(productType.getCategoryCode());
|
||||
|
||||
// 根据分类设置默认的定价模式
|
||||
// 根据分类设置默认的定价模式和去重策略
|
||||
if (ProductCategory.PRINT == productType.getCategory()) {
|
||||
// 打印类:基于数量定价,允许重复购买
|
||||
capability.setPricingMode(PricingMode.QUANTITY_BASED.getCode());
|
||||
capability.setSupportsTierPricing(true);
|
||||
capability.setAllowDuplicatePurchase(true);
|
||||
capability.setDuplicateCheckStrategy(DuplicateCheckStrategy.NO_CHECK.getCode());
|
||||
} else {
|
||||
} else if (ProductCategory.PHOTO == productType.getCategory()
|
||||
|| ProductCategory.VIDEO == productType.getCategory()
|
||||
|| ProductCategory.VLOG == productType.getCategory()) {
|
||||
// 照片类、视频类、Vlog类:固定价格,检查唯一资源
|
||||
capability.setPricingMode(PricingMode.FIXED.getCode());
|
||||
capability.setSupportsTierPricing(false);
|
||||
capability.setAllowDuplicatePurchase(false);
|
||||
capability.setDuplicateCheckStrategy(DuplicateCheckStrategy.CHECK_BY_SET_ID.getCode());
|
||||
|
||||
// 判断是套餐类还是独立资源类
|
||||
if (productType.getCode().endsWith("_SET")) {
|
||||
capability.setDuplicateCheckStrategy(DuplicateCheckStrategy.PARENT_RESOURCE.getCode());
|
||||
} else {
|
||||
capability.setDuplicateCheckStrategy(DuplicateCheckStrategy.UNIQUE_RESOURCE.getCode());
|
||||
}
|
||||
} else {
|
||||
// 其他类:默认不检查
|
||||
capability.setPricingMode(PricingMode.FIXED.getCode());
|
||||
capability.setSupportsTierPricing(false);
|
||||
capability.setAllowDuplicatePurchase(true);
|
||||
capability.setDuplicateCheckStrategy(DuplicateCheckStrategy.NO_CHECK.getCode());
|
||||
}
|
||||
|
||||
// 优惠能力默认全部开启
|
||||
|
||||
Reference in New Issue
Block a user