From 13b5d32cc6fbb811d1b4f268132464381adc4c77a6c5b4f04dd14e4226b5e6e0 Mon Sep 17 00:00:00 2001 From: yanglei Date: Fri, 14 Nov 2025 17:49:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0tradeId=E4=B8=BAlong,?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=AE=A1=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ebike/feign/clients/UserFeignClient.java | 10 +++++ .../model/dto/FeignEbikeRefundProcessDto.java | 9 +++- .../EbikeRefundReviewController.java | 42 +++++++++++++++++++ .../controller/EbikeWxPaymentController.java | 2 +- .../payment/model/entity/EbikePayment.java | 2 +- .../payment/model/entity/EbikeRefund.java | 4 +- .../payment/service/EbikeWxPayService.java | 2 +- .../service/impl/EbikeWxPayServiceImpl.java | 22 +++++----- .../java/com/cdzy/payment/task/WxPayTask.java | 4 +- .../com/cdzy/payment/utils/StringUtils.java | 11 +++++ .../controller/EbikeRefundController.java | 9 ++-- .../cdzy/user/model/entity/EbikePayment.java | 2 +- .../cdzy/user/model/entity/EbikeRefund.java | 4 +- .../cdzy/user/service/EbikeRefundService.java | 4 +- .../impl/EbikeFaultReportServiceImpl.java | 2 - .../user/service/impl/EbikeOrderImpl.java | 2 +- .../service/impl/EbikeRefundServiceImpl.java | 11 +++-- .../java/com/cdzy/user/utils/StringUtils.java | 11 +++++ ebike-user/src/main/resources/db/init.sql | 6 +-- .../cdzy/user/EbikeUserApplicationTests.java | 2 +- 20 files changed, 120 insertions(+), 41 deletions(-) rename ebike-user/src/main/java/com/cdzy/user/model/dto/EbikeRefundProcessDto.java => ebike-feign/src/main/java/com/ebike/feign/model/dto/FeignEbikeRefundProcessDto.java (74%) create mode 100644 ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeRefundReviewController.java diff --git a/ebike-feign/src/main/java/com/ebike/feign/clients/UserFeignClient.java b/ebike-feign/src/main/java/com/ebike/feign/clients/UserFeignClient.java index c1ce6e5..549e88e 100644 --- a/ebike-feign/src/main/java/com/ebike/feign/clients/UserFeignClient.java +++ b/ebike-feign/src/main/java/com/ebike/feign/clients/UserFeignClient.java @@ -3,6 +3,7 @@ package com.ebike.feign.clients; import com.cdzy.common.model.response.JsonResult; import com.ebike.feign.component.FeignTokenInterceptor; import com.ebike.feign.config.ExampleFeignConfiguration; +import com.ebike.feign.model.dto.FeignEbikeRefundProcessDto; import com.ebike.feign.model.dto.FeignOrderPaymentDto; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @@ -71,4 +72,13 @@ public interface UserFeignClient { */ @GetMapping("ebikeOrder/rejectRefund") JsonResult rejectRefund(@RequestParam("orderId") Long orderId); + + /** + * 审核退款申请 + * + * @param processDto 退款处理信息 + * @return 审核成功返回true,否则返回false + */ + @PostMapping("ebikeRefund/reviewRefund") + JsonResult reviewRefund(@RequestBody FeignEbikeRefundProcessDto processDto); } diff --git a/ebike-user/src/main/java/com/cdzy/user/model/dto/EbikeRefundProcessDto.java b/ebike-feign/src/main/java/com/ebike/feign/model/dto/FeignEbikeRefundProcessDto.java similarity index 74% rename from ebike-user/src/main/java/com/cdzy/user/model/dto/EbikeRefundProcessDto.java rename to ebike-feign/src/main/java/com/ebike/feign/model/dto/FeignEbikeRefundProcessDto.java index df6aa94..920be28 100644 --- a/ebike-user/src/main/java/com/cdzy/user/model/dto/EbikeRefundProcessDto.java +++ b/ebike-feign/src/main/java/com/ebike/feign/model/dto/FeignEbikeRefundProcessDto.java @@ -1,4 +1,4 @@ -package com.cdzy.user.model.dto; +package com.ebike.feign.model.dto; import lombok.Data; @@ -9,7 +9,12 @@ import lombok.Data; * @since 2025-10-17 14:36 */ @Data -public class EbikeRefundProcessDto { +public class FeignEbikeRefundProcessDto { + + /** + * 用户登录用户id + */ + private Long staffId; /** * 主键id diff --git a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeRefundReviewController.java b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeRefundReviewController.java new file mode 100644 index 0000000..d8df83d --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeRefundReviewController.java @@ -0,0 +1,42 @@ +package com.cdzy.operations.controller; + +import com.cdzy.common.enums.Code; +import com.cdzy.common.ex.EbikeException; +import com.cdzy.common.model.response.JsonResult; +import com.ebike.feign.clients.UserFeignClient; +import com.ebike.feign.model.dto.FeignEbikeRefundProcessDto; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author yanglei + * @since 2025-11-14 16:58 + */ + +@RestController +@RequestMapping("/ebikeRefundReview") +public class EbikeRefundReviewController { + + @Resource + private UserFeignClient userFeignClient; + + /** + * 审核退款申请 + * + * @param processDto 退款处理信息 + * @return 审核成功返回true,否则返回false + */ + @PostMapping("/reviewRefund") + public JsonResult reviewRefund(@RequestBody FeignEbikeRefundProcessDto processDto) { + JsonResult jsonResult = userFeignClient.reviewRefund(processDto); + if (jsonResult.getCode() != Code.SUCCESS) { + throw new EbikeException("调用审核退款申请失败"); + } + Boolean result = jsonResult.getData(); + return JsonResult.success(result); + } + +} diff --git a/ebike-payment/src/main/java/com/cdzy/payment/controller/EbikeWxPaymentController.java b/ebike-payment/src/main/java/com/cdzy/payment/controller/EbikeWxPaymentController.java index 190b797..b1c4e8e 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/controller/EbikeWxPaymentController.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/controller/EbikeWxPaymentController.java @@ -84,7 +84,7 @@ public class EbikeWxPaymentController { @PostMapping("/refund") public JsonResult refund(@RequestBody EbikeRefundDto refundDto) { // 获取审核人信息 - String loginId = (String) StpUtil.getLoginId(); + Long loginId = StpUtil.getLoginIdAsLong(); EbikeWxHandleNotifyVo r = wxPayService.refund(refundDto, loginId); return r.isSuccess() ? JsonResult.success(true) : JsonResult.failed(r.getMessage()); } diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikePayment.java b/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikePayment.java index aff68f5..36dcd8c 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikePayment.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikePayment.java @@ -54,7 +54,7 @@ public class EbikePayment implements Serializable { /** * 支付交易用订单编号,重新请求时需要更新 */ - private String tradeId; + private Long tradeId; /** * 微信支付订单号, 仅支付成功有 diff --git a/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikeRefund.java b/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikeRefund.java index e93c5f3..9124f69 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikeRefund.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/model/entity/EbikeRefund.java @@ -123,12 +123,12 @@ public class EbikeRefund implements Serializable { /** * 审核人 */ - private String reviewOperator; + private Long reviewOperator; /** * 退款人 */ - private String refundOperator; + private Long refundOperator; /** * 创建人 diff --git a/ebike-payment/src/main/java/com/cdzy/payment/service/EbikeWxPayService.java b/ebike-payment/src/main/java/com/cdzy/payment/service/EbikeWxPayService.java index 78b2910..5410593 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/service/EbikeWxPayService.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/service/EbikeWxPayService.java @@ -75,7 +75,7 @@ public interface EbikeWxPayService { * @param operator 操作人id * @return 退款信息id */ - EbikeWxHandleNotifyVo refund(EbikeRefundDto refundDto, String operator); + EbikeWxHandleNotifyVo refund(EbikeRefundDto refundDto, Long operator); /** diff --git a/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikeWxPayServiceImpl.java b/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikeWxPayServiceImpl.java index 958d9f6..e68f190 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikeWxPayServiceImpl.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/service/impl/EbikeWxPayServiceImpl.java @@ -116,7 +116,7 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService { if (Transaction.TradeStateEnum.NOTPAY.ordinal() == tradeStatus || Transaction.TradeStateEnum.USERPAYING.ordinal() == tradeStatus) { // 检查订单是否关闭 - Transaction t = queryOrderByOutTradeNo(ebikePayment.getTradeId()); + Transaction t = queryOrderByOutTradeNo(ebikePayment.getTradeId().toString()); if (t != null && Transaction.TradeStateEnum.CLOSED.equals(t.getTradeState())) { // 验证是否存在支付成功但状态未同步的情况 EbikeWxHandleNotifyVo hr = queryOrderStatusByOrderId(ebikePayment); @@ -126,13 +126,13 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService { } log.info("订单已经关闭,订单号:{}, 重新发起请求", orderId); ebikePayment.setTradeStatus(Transaction.TradeStateEnum.CLOSED.ordinal()); - ebikePayment.setTradeId(StringUtils.generateSnowflakeId("tradeId")); + ebikePayment.setTradeId(StringUtils.generateLongSnowflakeId("tradeId")); } else { log.info("订单正在支付中,订单号:{}", orderId); } } else if (Transaction.TradeStateEnum.CLOSED.ordinal() == tradeStatus) { log.info("订单已经关闭,订单号:{}, 重新发起请求", orderId); - ebikePayment.setTradeId(StringUtils.generateSnowflakeId("tradeId")); + ebikePayment.setTradeId(StringUtils.generateLongSnowflakeId("tradeId")); } // 处理异常状态 else { @@ -146,7 +146,7 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService { LocalDateTime now = LocalDateTime.now(); Duration duration = Duration.between(createTime, now); if (duration.getSeconds() > 7200) { - ebikePayment.setTradeId(StringUtils.generateSnowflakeId("tradeId")); + ebikePayment.setTradeId(StringUtils.generateLongSnowflakeId("tradeId")); ebikePayment.setCreateTime(now); } } @@ -178,7 +178,7 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService { EbikePaymentAmountVo amount = paymentVo.getAmount(); EbikePaymentDetailVo detail = paymentVo.getDetail(); - String tradeId = ebikePayment == null ? outTradeNo : ebikePayment.getTradeId(); + String tradeId = ebikePayment == null ? outTradeNo : ebikePayment.getTradeId().toString(); try { PrepayRequest request = new PrepayRequest(); request.setAppid(wxPayConfig.getAppId()); @@ -241,7 +241,7 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService { // 新增支付记录 ebikePayment = new EbikePayment(); ebikePayment.setOrderId(paymentVo.getOrderId()); - ebikePayment.setTradeId(tradeId); + ebikePayment.setTradeId(Long.valueOf(tradeId)); ebikePayment.setUserId(paymentVo.getUserId()); ebikePayment.setPaymentMethod(PaymentMethod.WECHAT); ebikePayment.setCostPrice(amount.getTotal()); @@ -252,7 +252,7 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService { ebikePaymentService.save(ebikePayment); } else { // 更新支付记录 - ebikePayment.setTradeId(tradeId); + ebikePayment.setTradeId(Long.valueOf(tradeId)); ebikePayment.setCreateTime(LocalDateTime.now()); ebikePayment.setPaymentMethod(PaymentMethod.WECHAT); ebikePayment.setCostPrice(amount.getTotal()); @@ -303,7 +303,7 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService { log.error("{}支付订单不存在!", orderId); return null; } - return queryOrderByOutTradeNo(ebikePayment.getTradeId()); + return queryOrderByOutTradeNo(ebikePayment.getTradeId().toString()); } @Override @@ -334,7 +334,7 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService { */ private EbikeWxHandleNotifyVo queryOrderStatusByOrderId(EbikePayment ebikePayment) { EbikeWxHandleNotifyVo result = new EbikeWxHandleNotifyVo(); - Transaction r = queryOrderByOutTradeNo(ebikePayment.getTradeId()); + Transaction r = queryOrderByOutTradeNo(ebikePayment.getTradeId().toString()); if (r != null && Transaction.TradeStateEnum.SUCCESS.equals(r.getTradeState())) { result.setMessage(String.format("订单%s支付成功", ebikePayment.getOrderId())); result.setSuccess(true); @@ -381,7 +381,7 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService { } @Override - public EbikeWxHandleNotifyVo refund(EbikeRefundDto refundDto, String operator) { + public EbikeWxHandleNotifyVo refund(EbikeRefundDto refundDto, Long operator) { EbikeWxHandleNotifyVo notifyVo = new EbikeWxHandleNotifyVo(); notifyVo.setSuccess(false); // 检查退款记录是否存在 @@ -414,7 +414,7 @@ public class EbikeWxPayServiceImpl implements EbikeWxPayService { // 发起退款 CreateRequest request = new CreateRequest(); request.setTransactionId(transactionId); - request.setOutTradeNo(ebikePayment.getTradeId()); + request.setOutTradeNo(ebikePayment.getTradeId().toString()); request.setOutRefundNo(ebikeRefund.getRefundOrderId()); request.setReason(ebikeRefund.getReason()); request.setNotifyUrl(wxPayConfig.getRefundNotifyUrl()); 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 index b268302..083b5f7 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/task/WxPayTask.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/task/WxPayTask.java @@ -48,7 +48,7 @@ public class WxPayTask { for (EbikePayment ebikePayment : ebikePaymentList) { log.warn("未支付的订单号 ===> {}", ebikePayment.getOrderId()); // 调用微信支付查询接口,查询支付状态 - Transaction transaction = wxPayService.queryOrderByOutTradeNo(ebikePayment.getTradeId()); + Transaction transaction = wxPayService.queryOrderByOutTradeNo(ebikePayment.getTradeId().toString()); // 3. 更新订单状态 if (transaction != null) { ebikePaymentService.updatePaymentStatus(transaction); @@ -67,7 +67,7 @@ public class WxPayTask { for (EbikePayment ebikePayment : ebikePaymentList) { log.warn("超时未支付的订单号 ===> {}", ebikePayment.getOrderId()); // 调用微信支付关闭接口,关闭订单 - boolean close = wxPayService.closeOrder(ebikePayment.getTradeId()); + boolean close = wxPayService.closeOrder(ebikePayment.getTradeId().toString()); if (close) { // 3. 更新订单状态 Transaction transaction = new Transaction(); diff --git a/ebike-payment/src/main/java/com/cdzy/payment/utils/StringUtils.java b/ebike-payment/src/main/java/com/cdzy/payment/utils/StringUtils.java index 9cee865..188941e 100644 --- a/ebike-payment/src/main/java/com/cdzy/payment/utils/StringUtils.java +++ b/ebike-payment/src/main/java/com/cdzy/payment/utils/StringUtils.java @@ -61,6 +61,17 @@ public class StringUtils { return String.valueOf(key); } + /** + * 生成雪花算法ID + * + * @param idFieldName 字段名 + */ + public static Long generateLongSnowflakeId(String idFieldName) { + // 获取名为 "snowFlakeId" 的生成器 + IKeyGenerator generator = KeyGeneratorFactory.getKeyGenerator("snowFlakeId"); + return (Long) generator.generate(null, idFieldName); + } + /** * 计算两个时间的时间差 * diff --git a/ebike-user/src/main/java/com/cdzy/user/controller/EbikeRefundController.java b/ebike-user/src/main/java/com/cdzy/user/controller/EbikeRefundController.java index d7b3a0e..b311318 100644 --- a/ebike-user/src/main/java/com/cdzy/user/controller/EbikeRefundController.java +++ b/ebike-user/src/main/java/com/cdzy/user/controller/EbikeRefundController.java @@ -1,9 +1,8 @@ package com.cdzy.user.controller; -import cn.dev33.satoken.stp.StpUtil; import com.cdzy.common.model.response.JsonResult; import com.cdzy.user.model.dto.EbikeOrderRefundDto; -import com.cdzy.user.model.dto.EbikeRefundProcessDto; +import com.ebike.feign.model.dto.FeignEbikeRefundProcessDto; import com.cdzy.user.model.dto.EbikeRefundQueryDto; import com.cdzy.user.model.dto.EbikeTreadRecordDto; import com.cdzy.user.model.vo.*; @@ -45,10 +44,8 @@ public class EbikeRefundController { * @return 审核成功返回true,否则返回false */ @PostMapping("/reviewRefund") - public JsonResult reviewRefund(@RequestBody EbikeRefundProcessDto processDto) { - // 获取审核人信息id - String loginId = (String) StpUtil.getLoginId(); - boolean result = ebikeRefundService.refundReview(processDto, loginId); + public JsonResult reviewRefund(@RequestBody FeignEbikeRefundProcessDto processDto) { + boolean result = ebikeRefundService.refundReview(processDto); return JsonResult.success(result); } diff --git a/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikePayment.java b/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikePayment.java index 650d659..3d254ff 100644 --- a/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikePayment.java +++ b/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikePayment.java @@ -54,7 +54,7 @@ public class EbikePayment implements Serializable { /** * 支付交易用订单编号,重新请求时需要更新 */ - private String tradeId; + private Long tradeId; /** * 微信支付订单号, 仅支付成功有 diff --git a/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikeRefund.java b/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikeRefund.java index f77c624..2a49328 100644 --- a/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikeRefund.java +++ b/ebike-user/src/main/java/com/cdzy/user/model/entity/EbikeRefund.java @@ -123,12 +123,12 @@ public class EbikeRefund implements Serializable { /** * 审核人 */ - private String reviewOperator; + private Long reviewOperator; /** * 退款人 */ - private String refundOperator; + private Long refundOperator; /** * 创建人 diff --git a/ebike-user/src/main/java/com/cdzy/user/service/EbikeRefundService.java b/ebike-user/src/main/java/com/cdzy/user/service/EbikeRefundService.java index 61746e7..94e4321 100644 --- a/ebike-user/src/main/java/com/cdzy/user/service/EbikeRefundService.java +++ b/ebike-user/src/main/java/com/cdzy/user/service/EbikeRefundService.java @@ -1,7 +1,7 @@ package com.cdzy.user.service; import com.cdzy.user.model.dto.EbikeOrderRefundDto; -import com.cdzy.user.model.dto.EbikeRefundProcessDto; +import com.ebike.feign.model.dto.FeignEbikeRefundProcessDto; import com.cdzy.user.model.dto.EbikeRefundQueryDto; import com.cdzy.user.model.dto.EbikeTreadRecordDto; import com.cdzy.user.model.entity.EbikeRefund; @@ -33,7 +33,7 @@ public interface EbikeRefundService extends IService { * @return 退款信息id * @operator 操作人id */ - boolean refundReview(EbikeRefundProcessDto processDto, String loginId); + boolean refundReview(FeignEbikeRefundProcessDto processDto); /** * 获取退款列表 diff --git a/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeFaultReportServiceImpl.java b/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeFaultReportServiceImpl.java index 360e158..969785a 100644 --- a/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeFaultReportServiceImpl.java +++ b/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeFaultReportServiceImpl.java @@ -51,7 +51,6 @@ public class EbikeFaultReportServiceImpl extends ServiceImpl im .orderId(order.getOrderId()) .costPrice(order.getTotalAmount()) .paymentMethod(EbikePaymentMethod.WECHAT) - .tradeId(StringUtils.generateSnowflakeId("tradeId")) + .tradeId(StringUtils.generateLongSnowflakeId("tradeId")) .currency("CNY") .userId(endDto.getUserId()) .operatorId(order.getOperatorId()) diff --git a/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeRefundServiceImpl.java b/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeRefundServiceImpl.java index 68aef3f..1a417f2 100644 --- a/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeRefundServiceImpl.java +++ b/ebike-user/src/main/java/com/cdzy/user/service/impl/EbikeRefundServiceImpl.java @@ -1,11 +1,12 @@ package com.cdzy.user.service.impl; +import com.cdzy.common.ex.EbikeException; import com.cdzy.user.enums.EbikeProcessStatus; import com.cdzy.user.enums.EbikeRefundSource; import com.cdzy.user.enums.EbikeRefundStatus; import com.cdzy.user.mapper.EbikeRefundMapper; import com.cdzy.user.model.dto.EbikeOrderRefundDto; -import com.cdzy.user.model.dto.EbikeRefundProcessDto; +import com.ebike.feign.model.dto.FeignEbikeRefundProcessDto; import com.cdzy.user.model.dto.EbikeRefundQueryDto; import com.cdzy.user.model.dto.EbikeTreadRecordDto; import com.cdzy.user.model.entity.EbikePayment; @@ -94,13 +95,17 @@ public class EbikeRefundServiceImpl extends ServiceImpl