更新tradeId为long,订单审核
This commit is contained in:
parent
0f1aa4cf83
commit
13b5d32cc6
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@ -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());
|
||||
}
|
||||
|
||||
@ -54,7 +54,7 @@ public class EbikePayment implements Serializable {
|
||||
/**
|
||||
* 支付交易用订单编号,重新请求时需要更新
|
||||
*/
|
||||
private String tradeId;
|
||||
private Long tradeId;
|
||||
|
||||
/**
|
||||
* 微信支付订单号, 仅支付成功有
|
||||
|
||||
@ -123,12 +123,12 @@ public class EbikeRefund implements Serializable {
|
||||
/**
|
||||
* 审核人
|
||||
*/
|
||||
private String reviewOperator;
|
||||
private Long reviewOperator;
|
||||
|
||||
/**
|
||||
* 退款人
|
||||
*/
|
||||
private String refundOperator;
|
||||
private Long refundOperator;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
|
||||
@ -75,7 +75,7 @@ public interface EbikeWxPayService {
|
||||
* @param operator 操作人id
|
||||
* @return 退款信息id
|
||||
*/
|
||||
EbikeWxHandleNotifyVo refund(EbikeRefundDto refundDto, String operator);
|
||||
EbikeWxHandleNotifyVo refund(EbikeRefundDto refundDto, Long operator);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算两个时间的时间差
|
||||
*
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ public class EbikePayment implements Serializable {
|
||||
/**
|
||||
* 支付交易用订单编号,重新请求时需要更新
|
||||
*/
|
||||
private String tradeId;
|
||||
private Long tradeId;
|
||||
|
||||
/**
|
||||
* 微信支付订单号, 仅支付成功有
|
||||
|
||||
@ -123,12 +123,12 @@ public class EbikeRefund implements Serializable {
|
||||
/**
|
||||
* 审核人
|
||||
*/
|
||||
private String reviewOperator;
|
||||
private Long reviewOperator;
|
||||
|
||||
/**
|
||||
* 退款人
|
||||
*/
|
||||
private String refundOperator;
|
||||
private Long refundOperator;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
|
||||
@ -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);
|
||||
|
||||
/**
|
||||
* 获取退款列表
|
||||
|
||||
@ -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);
|
||||
// 保存附件信息
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算两个时间的时间差
|
||||
*
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user