diff --git a/ebike-payment/src/main/java/com/cdzy/payment/enums/DetailType.java b/ebike-payment/src/main/java/com/cdzy/payment/enums/DetailType.java deleted file mode 100644 index 1ddc3c3..0000000 --- a/ebike-payment/src/main/java/com/cdzy/payment/enums/DetailType.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.cdzy.payment.enums; - -/** - * @author: yanglei - * @since: 2025-10-17 15:10 - */ - -public interface DetailType { - /** - * 骑行时长费 - */ - int RIDE_DURATION_FEE = 1; - /** - * 运营区调度费用 - */ - int OPERATION_AREA_DISPATCH_FEE = 2; - /** - * 停车区调度费用 - */ - int PARKING_AREA_DISPATCH_FEE = 3; - /** - * 高峰时段出行费用 - */ - int PEAK_HOUR_FEE = 4; - /** - * 高峰日出行费用 - */ - int PEAK_DAY_FEE = 5; - /** - * 起步费用 - */ - int START_FEE = 6; -} diff --git a/ebike-payment/src/main/java/com/cdzy/payment/enums/HandleStatus.java b/ebike-payment/src/main/java/com/cdzy/payment/enums/HandleStatus.java deleted file mode 100644 index 5969620..0000000 --- a/ebike-payment/src/main/java/com/cdzy/payment/enums/HandleStatus.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.cdzy.payment.enums; - -/** - * 故障处理状态枚举 - * - * @author: yanglei - * @since: 2025-10-17 15:12 - */ - -public interface HandleStatus { - - /** - * 待处理 - */ - int PENDING = 0; - - /** - * 处理中 - */ - int PROCESSING = 1; - - /** - * 处理完 - */ - int COMPLETED = 2; -} diff --git a/ebike-payment/src/main/java/com/cdzy/payment/enums/OrderStatus.java b/ebike-payment/src/main/java/com/cdzy/payment/enums/OrderStatus.java deleted file mode 100644 index 3d9fcc2..0000000 --- a/ebike-payment/src/main/java/com/cdzy/payment/enums/OrderStatus.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.cdzy.payment.enums; - -/** - * 订单状态枚举 - * - * @author: yanglei - * @since: 2025-10-17 15:09 - */ - -public interface OrderStatus { - - /** - * 进行中 - */ - int IN_PROGRESS = 0; - - /** - * 已取消 - */ - int CANCELED = 1; - - /** - * 待支付 - */ - int PENDING_PAYMENT = 2; - - /** - * 已支付 - */ - int PAID = 3; - - /** - * 退款中 - */ - int REFUNDING = 4; - - /** - * 已退款 - */ - int REFUNDED = 5; - - /** - * 退款申请中 - */ - int REFUND_APPLYING = 6; - - /** - * 退款驳回 - */ - int REFUND_REJECTED = 7; - - /** - * 退款失败 - */ - int REFUND_FAILED = 8; -} diff --git a/ebike-payment/src/main/java/com/cdzy/payment/enums/OrderType.java b/ebike-payment/src/main/java/com/cdzy/payment/enums/OrderType.java deleted file mode 100644 index 876f8c4..0000000 --- a/ebike-payment/src/main/java/com/cdzy/payment/enums/OrderType.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.cdzy.payment.enums; - -/** - * 订单类型枚举 - * - * @author: yanglei - * @since: 2025-10-17 15:09 - */ - -public interface OrderType { - - /** 单次骑行 */ - int SINGLE_RIDE = 1; - - /** 骑行卡购买 */ - int RIDE_CARD_PURCHASE = 2; - - /** 会员卡续费 */ - int MEMBER_CARD_RENEW = 3; -} diff --git a/ebike-payment/src/main/java/com/cdzy/payment/enums/ProcessStatus.java b/ebike-payment/src/main/java/com/cdzy/payment/enums/ProcessStatus.java deleted file mode 100644 index 455ec28..0000000 --- a/ebike-payment/src/main/java/com/cdzy/payment/enums/ProcessStatus.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.cdzy.payment.enums; - -/** - * 审核状态枚举 - * - * @author: yanglei - * @since: 2025-10-17 15:11 - */ - -public interface ProcessStatus { - /** - * 申请中 - */ - int APPLYING = 0; - /** - * 处理中 - */ - int PROCESSING = 1; - /** - * 已处理 - */ - int PROCESSED = 2; - /** - * 已关闭 - */ - int CLOSED = 3; - -} diff --git a/ebike-payment/src/main/java/com/cdzy/payment/enums/RefundMethod.java b/ebike-payment/src/main/java/com/cdzy/payment/enums/RefundMethod.java deleted file mode 100644 index 3695e76..0000000 --- a/ebike-payment/src/main/java/com/cdzy/payment/enums/RefundMethod.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.cdzy.payment.enums; - -/** - * 退款方式枚举 - * - * @author: yanglei - * @since: 2025-10-17 15:11 - */ - -public interface RefundMethod { - - /** - * 原路返回 - */ - int ORIGINAL = 0; - - /** - * 余额 - */ - int BALANCE = 1; - - /** - * 线下退款 - */ - int OFFLINE = 2; -} diff --git a/ebike-payment/src/main/java/com/cdzy/payment/enums/TradeStatus.java b/ebike-payment/src/main/java/com/cdzy/payment/enums/TradeStatus.java deleted file mode 100644 index f49e87b..0000000 --- a/ebike-payment/src/main/java/com/cdzy/payment/enums/TradeStatus.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.cdzy.payment.enums; - -/** - * @author: yanglei - * @since: 2025-10-17 15:10 - */ - -public interface TradeStatus { - - /** - * 支付成功 - */ - int SUCCESS = 0; - /** - * 退款 - */ - int REFUNDED = 1; - /** - * 未支付 - */ - int UNPAID = 2; - /** - * 关闭 - */ - int CLOSED = 3; - /** - * 取消 - */ - int CANCELED = 4; - /** - * 支付中 - */ - int PAYING = 5; - /** - * 支付错误 - */ - int ERROR = 6; - /** - * 接受 - */ - int ACCEPTED = 7; -} diff --git a/ebike-payment/src/main/java/com/cdzy/payment/task/WxPayScheduledManager.java b/ebike-payment/src/main/java/com/cdzy/payment/task/WxPayScheduledManager.java new file mode 100644 index 0000000..c97fbb4 --- /dev/null +++ b/ebike-payment/src/main/java/com/cdzy/payment/task/WxPayScheduledManager.java @@ -0,0 +1,58 @@ +package com.cdzy.payment.task; + +import com.cdzy.payment.config.WxPayConfig; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Component; + +/** + * 微信支付定时作业调度器 + * + * @author: yanglei + * @since: 2025-10-22 16:11 + */ +@Slf4j +@Component +public class WxPayScheduledManager { + + @Resource + private WxPayConfig wxPayConfig; + + @Resource + private ThreadPoolTaskScheduler threadPoolTaskScheduler; + + @Resource + private WxPayTask wxPayTask; + + @PostConstruct + public void init() { + String payCron = wxPayConfig.getPaySchedule(); + String refundCron = wxPayConfig.getRefundSchedule(); + + // 注册支付状态检查任务 + scheduleTask("CheckOrderStatus", wxPayTask::checkOrderStatus, payCron); + + // 注册退款状态检查任务 + scheduleTask("CheckRefundStatus", wxPayTask::checkRefundStatus, refundCron); + } + + private void scheduleTask(String taskName, Runnable task, String cronExpression) { + if (cronExpression == null || cronExpression.trim().isEmpty()) { + log.warn("定时任务 [{}] 未配置Cron表达式,跳过注册", taskName); + return; + } + threadPoolTaskScheduler.schedule(() -> { + try { + log.debug("执行定时任务: {}", taskName); + task.run(); + } catch (Exception e) { + log.error("定时任务执行异常: {}", taskName, e); + } + }, new CronTrigger(cronExpression)); + + log.info("已注册定时任务: {}, Cron表达式: {}", taskName, cronExpression); + } +} \ No newline at end of file diff --git a/ebike-payment/src/main/java/com/cdzy/payment/task/WxPayTask.java b/ebike-payment/src/main/java/com/cdzy/payment/task/WxPayTask.java new file mode 100644 index 0000000..d4555a6 --- /dev/null +++ b/ebike-payment/src/main/java/com/cdzy/payment/task/WxPayTask.java @@ -0,0 +1,100 @@ +package com.cdzy.payment.task; + +import com.cdzy.payment.config.WxPayConfig; +import com.cdzy.payment.model.entity.EbikePayment; +import com.cdzy.payment.model.entity.EbikeRefund; +import com.cdzy.payment.service.EbikePaymentService; +import com.cdzy.payment.service.EbikeRefundService; +import com.cdzy.payment.service.WxPayService; +import com.wechat.pay.java.service.payments.model.Transaction; +import com.wechat.pay.java.service.refund.model.Refund; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 用户订单支付任务。检测支付状态,更新订单状态。 + * + * @author: yanglei + * @since: 2025-10-22 16:09 + */ +@Slf4j +@Service +public class WxPayTask { + + @Resource + private WxPayConfig wxPayConfig; + + @Resource + private WxPayService wxPayService; + + @Resource + private EbikePaymentService ebikePaymentService; + + @Resource + private EbikeRefundService ebikeRefundService; + + + /** + * 查询创建未超过24小时,并且未支付的订单 + */ + public void checkOrderStatus() { + log.info("checkOrderStatus 执行......"); + // 1. 查询未支付的订单 + List ebikePaymentList = ebikePaymentService.getNoPayOrderByDuration(wxPayConfig.getExpireMinute()); + // 2. 遍历订单,查询支付状态 + for (EbikePayment ebikePayment : ebikePaymentList) { + log.warn("未支付的订单号 ===> {}", ebikePayment.getOrderId()); + // 调用微信支付查询接口,查询支付状态 + Transaction transaction = wxPayService.queryOrderByOutTradeNo(ebikePayment.getTradeId()); + // 3. 更新订单状态 + if (transaction != null) { + ebikePaymentService.updatePaymentStatus(transaction); + } + } + } + + /** + * 查询创建超过24小时,并且未支付的订单 + */ + public void closeOrder() { + log.info("closeOrder 执行......"); + // 1. 查询未支付的超时订单 + List ebikePaymentList = ebikePaymentService.getExpireOrderByDuration(wxPayConfig.getExpireMinute()); + // 2. 遍历订单,关闭订单 + for (EbikePayment ebikePayment : ebikePaymentList) { + log.warn("超时未支付的订单号 ===> {}", ebikePayment.getOrderId()); + // 调用微信支付关闭接口,关闭订单 + boolean close = wxPayService.closeOrder(ebikePayment.getTradeId()); + if (close) { + // 3. 更新订单状态 + Transaction transaction = new Transaction(); + transaction.setTradeState(Transaction.TradeStateEnum.CLOSED); + transaction.setTradeStateDesc("订单关闭"); + ebikePaymentService.updatePaymentStatus(transaction); + } + } + } + + /** + * 查询创建未超过24小时,并且未成功的退款单 + */ + public void checkRefundStatus() { + log.info("checkRefundStatus 执行......"); + + // 1. 查询未成功的退款单 + List ebikeRefundList = ebikeRefundService.getNoSuccessRefundOrderByDuration(wxPayConfig.getExpireMinute()); + // 2. 遍历退款单,查询退款状态 + for (EbikeRefund ebikeRefund : ebikeRefundList) { + log.warn("超时未退款的退款单号 ===> {}", ebikeRefund.getRefundId()); + // 调用微信退款查询接口,查询退款状态 + Refund refund = wxPayService.queryRefundByOutTradeNo(ebikeRefund.getRefundOrder()); + if (refund != null) { + // 3. 更新退款单状态 + ebikeRefundService.updateRefundStatus(refund); + } + } + } +} diff --git a/ebike-user/src/main/java/com/cdzy/user/enums/RealNameAttestationStatus.java b/ebike-user/src/main/java/com/cdzy/user/enums/RealNameAttestationStatus.java index 2dc5a73..71ca032 100644 --- a/ebike-user/src/main/java/com/cdzy/user/enums/RealNameAttestationStatus.java +++ b/ebike-user/src/main/java/com/cdzy/user/enums/RealNameAttestationStatus.java @@ -1,6 +1,8 @@ package com.cdzy.user.enums; /** + * 实名认证的状态 + * * @author: yanglei * @since: 2025-10-16 11:10 */