更新tradeId为long,订单审核

This commit is contained in:
yanglei 2025-11-14 17:49:46 +08:00
parent 0f1aa4cf83
commit 13b5d32cc6
20 changed files with 120 additions and 41 deletions

View File

@ -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<Boolean> reviewRefund(@RequestBody FeignEbikeRefundProcessDto processDto);
}

View File

@ -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

View File

@ -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<Boolean> jsonResult = userFeignClient.reviewRefund(processDto);
if (jsonResult.getCode() != Code.SUCCESS) {
throw new EbikeException("调用审核退款申请失败");
}
Boolean result = jsonResult.getData();
return JsonResult.success(result);
}
}

View File

@ -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());
}

View File

@ -54,7 +54,7 @@ public class EbikePayment implements Serializable {
/**
* 支付交易用订单编号重新请求时需要更新
*/
private String tradeId;
private Long tradeId;
/**
* 微信支付订单号, 仅支付成功有

View File

@ -123,12 +123,12 @@ public class EbikeRefund implements Serializable {
/**
* 审核人
*/
private String reviewOperator;
private Long reviewOperator;
/**
* 退款人
*/
private String refundOperator;
private Long refundOperator;
/**
* 创建人

View File

@ -75,7 +75,7 @@ public interface EbikeWxPayService {
* @param operator 操作人id
* @return 退款信息id
*/
EbikeWxHandleNotifyVo refund(EbikeRefundDto refundDto, String operator);
EbikeWxHandleNotifyVo refund(EbikeRefundDto refundDto, Long operator);
/**

View File

@ -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());

View File

@ -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();

View File

@ -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);
}
/**
* 计算两个时间的时间差
*

View File

@ -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);
}

View File

@ -54,7 +54,7 @@ public class EbikePayment implements Serializable {
/**
* 支付交易用订单编号重新请求时需要更新
*/
private String tradeId;
private Long tradeId;
/**
* 微信支付订单号, 仅支付成功有

View File

@ -123,12 +123,12 @@ public class EbikeRefund implements Serializable {
/**
* 审核人
*/
private String reviewOperator;
private Long reviewOperator;
/**
* 退款人
*/
private String refundOperator;
private Long refundOperator;
/**
* 创建人

View File

@ -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<EbikeRefund> {
* @return 退款信息id
* @operator 操作人id
*/
boolean refundReview(EbikeRefundProcessDto processDto, String loginId);
boolean refundReview(FeignEbikeRefundProcessDto processDto);
/**
* 获取退款列表

View File

@ -51,7 +51,6 @@ public class EbikeFaultReportServiceImpl extends ServiceImpl<EbikeFaultReportMap
@Transactional
@Override
public void saveFaultReport(EbikeFaultReportDto ebikeFaultReportDto) {
//long userId = StpUtil.getLoginIdAsLong();
EbikeFaultReport userFaultReport = EbikeFaultReport.builder()
.operatorId(ebikeFaultReportDto.getOperatorId())
.bikeCode(ebikeFaultReportDto.getBikeCode())
@ -63,7 +62,6 @@ public class EbikeFaultReportServiceImpl extends ServiceImpl<EbikeFaultReportMap
.location(ebikeFaultReportDto.getLocation())
.orderCode(ebikeFaultReportDto.getOrderCode())
.workorderId(ebikeFaultReportDto.getWorkorderId())
//.createBy(userId)
.build();
this.save(userFaultReport);
// 保存附件信息

View File

@ -230,7 +230,7 @@ public class EbikeOrderImpl extends ServiceImpl<EbikeOrderMapper, EbikeOrder> 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())

View File

@ -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<EbikeRefundMapper, Ebike
}
@Override
public boolean refundReview(EbikeRefundProcessDto processDto, String loginId) {
public boolean refundReview(FeignEbikeRefundProcessDto processDto) {
Long staffId = processDto.getStaffId();
if (staffId == null) {
throw new EbikeException("操作员工Id不能为空");
}
EbikeRefund ebikeRefund = getById(processDto.getRefundId());
if (ebikeRefund == null) {
log.error("审核refundReview失败{} 退款申请不存在", processDto.getRefundId());
return false;
}
ebikeRefund.setReviewOperator(loginId);
ebikeRefund.setReviewOperator(staffId);
ebikeRefund.setProcessStatus(processDto.getOperate());
ebikeRefund.setProcessTime(LocalDateTime.now());
ebikeRefund.setRemark(processDto.getReason());

View File

@ -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);
}
/**
* 计算两个时间的时间差
*

View File

@ -275,7 +275,7 @@ CREATE TABLE "public"."ebike_payment" (
"user_id" int8 NOT NULL,
"order_id" int8 NOT NULL,
"operator_id" int8 NOT NULL,
"trade_id" varchar(64) COLLATE "pg_catalog"."default",
"trade_id" int8,
"transaction_id" varchar(64) COLLATE "pg_catalog"."default",
"payment_time" timestamp(6),
"payment_method" int2 NOT NULL,
@ -331,8 +331,8 @@ CREATE TABLE "public"."ebike_refund" (
"remark" varchar(200) COLLATE "pg_catalog"."default",
"process_time" timestamp(6),
"refund_transaction_id" varchar(64) COLLATE "pg_catalog"."default",
"review_operator" varchar(50) COLLATE "pg_catalog"."default",
"refund_operator" varchar(50) COLLATE "pg_catalog"."default",
"review_operator" int8,
"refund_operator" int8,
"create_by" int8,
"create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
"update_by" int8,

View File

@ -27,7 +27,7 @@ class EbikeUserApplicationTests {
.orderId(346502255632748545L)
.costPrice(BigDecimal.ONE)
.paymentMethod(EbikePaymentMethod.WECHAT)
.tradeId(String.valueOf(snowFlakeIDKeyGenerator.nextId()))
.tradeId(snowFlakeIDKeyGenerator.nextId())
.currency("CNY")
.userId(344326061705474047L)
.operatorId(11L)