Compare commits

...

7 Commits

Author SHA1 Message Date
7d2666128a refactor(pricing): 优化代金券可用性判断逻辑
All checks were successful
ZhenTu-BE/pipeline/head This commit looks good
- 移除了对 canClaimVoucher 方法的调用,暂时注释掉以简化逻辑
- 此修改可能会影响代金券领取功能
2025-09-03 14:35:10 +08:00
5c416f6c09 compatible 2025-09-03 14:35:00 +08:00
829ab50b03 feat(voucher): 优化优惠券打印逻辑
- 添加景区配置管理器验证逻辑,确保只有指定的代理可以打印优惠券
-优化代码结构,提高可读性和可维护性
2025-09-03 14:34:42 +08:00
03fd80a313 fix(order): 修复零元订单状态设置逻辑
- 将订单状态设置逻辑移出 promo code块
- 确保所有支付价格为零的订单都设置为已支付状态
2025-09-03 14:33:36 +08:00
cf829bec2f fix(voucher): 更新代金券状态逻辑
- 将更新条件从 status = 1 修改为 (status = 1 OR status =0)
- 这样可以同时更新未使用和已使用的代金券状态
2025-09-03 14:13:33 +08:00
cbeaee751f refactor(mobile): 移除 AppOrderV2Controller 中的缓存获取逻辑
- 删除了从 Redis 缓存获取价格计算结果的相关代码
- 优化了订单处理流程,不再依赖缓存数据
2025-09-03 14:12:50 +08:00
bea5255927 feat(order): 添加零金额订单处理逻辑
- 在 getPaymentParams 方法中增加对订单金额的检查- 如果订单金额为 0 或空,则自动将订单状态设置为已支付
- 更新数据库中的订单信息
- 返回一个特殊的 PaymentParamsResponse,表示免费订单
-非零金额订单则按原有流程处理
2025-09-03 08:31:45 +08:00
7 changed files with 33 additions and 20 deletions

View File

@@ -93,16 +93,6 @@ public class AppOrderV2Controller {
FaceRespVO face = faceResponse.getData();
Long scenicId = face.getScenicId();
// 先尝试从Redis缓存获取价格计算结果
PriceCalculationResult cachedResult = priceCacheService.getCachedPriceResult(
currentUserId, scenicId, request.getProducts());
if (cachedResult != null) {
log.info("命中价格缓存: userId={}, scenicId={}, finalAmount={}",
currentUserId, scenicId, cachedResult.getFinalAmount());
return ApiResponse.success(cachedResult);
}
request.getProducts().forEach(product -> {
switch (product.getProductType()) {
case VLOG_VIDEO:

View File

@@ -89,6 +89,7 @@ public class AppScenicController {
resp.setVideoSourcePackHint(scenicConfig.getVideoSourcePackHint());
resp.setImageSourcePackHint(scenicConfig.getImageSourcePackHint());
resp.setVoucherEnable(scenicConfig.getVoucherEnable());
resp.setEnableVoucher(scenicConfig.getVoucherEnable()); // compactible
return ApiResponse.success(resp);
}

View File

@@ -46,4 +46,5 @@ public class ScenicConfigResp {
private String imageSourcePackHint = "";
private String videoSourcePackHint = "";
private Boolean voucherEnable;
private Boolean enableVoucher;
}

View File

@@ -81,6 +81,14 @@ public class VoucherPrintServiceImpl implements VoucherPrintService {
// 验证faceId是否属于当前用户
validateFaceOwnership(request.getFaceId(), currentUserId);
ScenicConfigManager config = scenicRepository.getScenicConfigManager(face.getScenicId());
Long brokerId = config.getLong("voucher_broker_id");
if (brokerId != null) {
if (!request.getBrokerId().equals(brokerId)) {
return null;
}
}
// 使用Redis分布式锁防止重复打印
String lockKey = String.format(PRINT_LOCK_KEY, request.getFaceId(), request.getBrokerId(), request.getScenicId());
@@ -107,7 +115,7 @@ public class VoucherPrintServiceImpl implements VoucherPrintService {
if (availableVoucher == null) {
throw new BaseException("暂无可用优惠券");
}
// 生成流水号
String code = generateCode();

View File

@@ -63,7 +63,7 @@ public class VoucherServiceImpl implements IVoucherService {
// 检查券码状态和可用性
if (VoucherCodeStatus.UNCLAIMED.getCode().equals(voucherCodeEntity.getStatus())) {
// 未领取状态,检查是否可以领取
if (faceId != null && canClaimVoucher(faceId, voucherCodeEntity.getScenicId())) {
if (faceId != null) { // && canClaimVoucher(faceId, voucherCodeEntity.getScenicId())
voucherInfo.setAvailable(true);
} else {
voucherInfo.setAvailable(false);

View File

@@ -795,12 +795,12 @@ public class OrderServiceImpl implements OrderService {
order.setPrice(cachedResult.getFinalAmount());
// promo code
order.setPayPrice(cachedResult.getFinalAmount());
if (order.getPayPrice().equals(BigDecimal.ZERO)) {
order.setStatus(OrderStateEnum.PAID.getState());
order.setPayAt(new Date());
} else {
order.setStatus(OrderStateEnum.UNPAID.getState());
}
}
if (order.getPayPrice().equals(BigDecimal.ZERO)) {
order.setStatus(OrderStateEnum.PAID.getState());
order.setPayAt(new Date());
} else {
order.setStatus(OrderStateEnum.UNPAID.getState());
}
// coupon
@@ -843,10 +843,23 @@ public class OrderServiceImpl implements OrderService {
@Override
public ApiResponse<PaymentParamsResponse> getPaymentParams(Long orderId, Long userId, PaymentParamsRequest request) {
OrderEntity order = orderMapper.get(orderId);
// 检查订单金额是否为0
if (order.getPayPrice() == null || order.getPayPrice().compareTo(BigDecimal.ZERO) == 0) {
// 零金额订单:设置needPay为false,直接标记为已支付
order.setStatus(1); // 1表示已支付
order.setPayAt(new Date());
orderMapper.updateOrder(order);
// 返回免费订单响应
return ApiResponse.success(PaymentParamsResponse.free(orderId, orderId.toString()));
}
// 非零金额订单:按原流程处理
PaymentParamsResponse response = new PaymentParamsResponse();
response.setOrderId(orderId);
response.setOrderNo(orderId.toString());
OrderEntity order = orderMapper.get(orderId);
response.setNeedPay(true);
List<OrderItemEntity> orderItems = orderMapper.getOrderItems(orderId);
try {

View File

@@ -76,7 +76,7 @@
remark = #{remark},
update_time = NOW()
WHERE code = #{code}
AND status = 1
AND (status = 1 OR status = 0)
AND deleted = 0
</update>