Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
5aca99853c
@ -63,6 +63,14 @@ public interface OrdersFeignClient {
|
||||
@GetMapping("userOrders/refund")
|
||||
JsonResult<?> refund(@RequestParam("orderId")Long orderId);
|
||||
|
||||
/**
|
||||
* 订单发起退款申请
|
||||
* @param orderId 订单ID
|
||||
* @return @ {@code 200} 成功,{@code 500} 失败
|
||||
*/
|
||||
@GetMapping("userOrders/refundApply")
|
||||
JsonResult<?> refundApply(@RequestParam("orderId")Long orderId);
|
||||
|
||||
/**
|
||||
* 订单退款完成
|
||||
* @param orderId 订单ID
|
||||
@ -70,4 +78,20 @@ public interface OrdersFeignClient {
|
||||
*/
|
||||
@GetMapping("userOrders/doneRefund")
|
||||
JsonResult<?> doneRefund(@RequestParam("orderId")Long orderId);
|
||||
|
||||
/**
|
||||
* 订单退款驳回
|
||||
* @param orderId 订单ID
|
||||
* @return @ {@code 200} 成功,{@code 500} 失败
|
||||
*/
|
||||
@GetMapping("userOrders/rejectRefund")
|
||||
JsonResult<?> rejectRefund(@RequestParam("orderId")Long orderId);
|
||||
|
||||
/**
|
||||
* 订单退款失败
|
||||
* @param orderId 订单ID
|
||||
* @return @ {@code 200} 成功,{@code 500} 失败
|
||||
*/
|
||||
@GetMapping("userOrders/failRefund")
|
||||
JsonResult<?> failRefund(@RequestParam("orderId")Long orderId);
|
||||
}
|
||||
|
||||
@ -150,6 +150,18 @@ public class EbikeUserOrdersController {
|
||||
return JsonResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单退款申请。
|
||||
*
|
||||
* @param orderId 订单ID
|
||||
* @ {@code 200} 添加成功,{@code 500} 添加失败
|
||||
*/
|
||||
@GetMapping("refundApply")
|
||||
public JsonResult<?> refundApply(@RequestParam("orderId")Long orderId) {
|
||||
userOrdersService.refundApply(orderId);
|
||||
return JsonResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单退款。
|
||||
*
|
||||
@ -174,6 +186,30 @@ public class EbikeUserOrdersController {
|
||||
return JsonResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单退款驳回。
|
||||
*
|
||||
* @param orderId 订单ID
|
||||
* @ {@code 200} 添加成功,{@code 500} 添加失败
|
||||
*/
|
||||
@GetMapping("rejectRefund")
|
||||
public JsonResult<?> rejectRefund(@RequestParam("orderId")Long orderId) {
|
||||
userOrdersService.rejectRefund(orderId);
|
||||
return JsonResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单退款失败。
|
||||
*
|
||||
* @param orderId 订单ID
|
||||
* @ {@code 200} 添加成功,{@code 500} 添加失败
|
||||
*/
|
||||
@GetMapping("failRefund")
|
||||
public JsonResult<?> failRefund(@RequestParam("orderId")Long orderId) {
|
||||
userOrdersService.failRefund(orderId);
|
||||
return JsonResult.success();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检查车辆是否在运营区内。
|
||||
|
||||
@ -35,4 +35,16 @@ public interface OrderStatus {
|
||||
* 已退款
|
||||
*/
|
||||
int REFUNDED = 5;
|
||||
/**
|
||||
* 退款申请中
|
||||
*/
|
||||
int REFUND_APPLYING = 6;
|
||||
/**
|
||||
* 退款申请驳回
|
||||
*/
|
||||
int REFUND_REJECTED = 7;
|
||||
/**
|
||||
* 退款失败
|
||||
*/
|
||||
int REFUND_FAILED = 8;
|
||||
}
|
||||
|
||||
@ -87,6 +87,12 @@ public interface UserOrdersService extends IService<EbikeUserOrders> {
|
||||
*/
|
||||
void payment(ResFeignOrderPaymentDto paymentDto);
|
||||
|
||||
/**
|
||||
* 订单发起退款
|
||||
* @param orderId 订单ID
|
||||
*/
|
||||
void refundApply(Long orderId);
|
||||
|
||||
/**
|
||||
* 订单退款
|
||||
* @param orderId 订单ID
|
||||
@ -99,6 +105,18 @@ public interface UserOrdersService extends IService<EbikeUserOrders> {
|
||||
*/
|
||||
void doneRefund(Long orderId);
|
||||
|
||||
/**
|
||||
* 订单退款驳回
|
||||
* @param orderId 订单ID
|
||||
*/
|
||||
void rejectRefund(Long orderId);
|
||||
|
||||
/**
|
||||
* 订单退款失败
|
||||
* @param orderId 订单ID
|
||||
*/
|
||||
void failRefund(Long orderId);
|
||||
|
||||
/**
|
||||
* 获取订单详情
|
||||
* @param orderId 订单id
|
||||
|
||||
@ -302,6 +302,16 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
return redisUtil.isPointInParking(resGpsDto.getLongitude(), resGpsDto.getLatitude(), regionDto.getOperationRegionId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refundApply(Long orderId) {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
.where(EBIKE_USER_ORDERS.ORDER_ID.eq(orderId))
|
||||
.where(EBIKE_USER_ORDERS.STATUS.eq(OrderStatus.PAID));
|
||||
EbikeUserOrders userOrders = this.mapper.selectOneByQuery(queryWrapper);
|
||||
userOrders.setStatus(OrderStatus.REFUND_APPLYING);
|
||||
this.mapper.update(userOrders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refund(Long orderId) {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
@ -322,6 +332,26 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
this.mapper.update(userOrders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rejectRefund(Long orderId) {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
.where(EBIKE_USER_ORDERS.ORDER_ID.eq(orderId))
|
||||
.where(EBIKE_USER_ORDERS.STATUS.eq(OrderStatus.REFUNDING));
|
||||
EbikeUserOrders userOrders = this.mapper.selectOneByQuery(queryWrapper);
|
||||
userOrders.setStatus(OrderStatus.REFUND_REJECTED);
|
||||
this.mapper.update(userOrders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failRefund(Long orderId) {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||
.where(EBIKE_USER_ORDERS.ORDER_ID.eq(orderId))
|
||||
.where(EBIKE_USER_ORDERS.STATUS.eq(OrderStatus.REFUNDING));
|
||||
EbikeUserOrders userOrders = this.mapper.selectOneByQuery(queryWrapper);
|
||||
userOrders.setStatus(OrderStatus.REFUND_FAILED);
|
||||
this.mapper.update(userOrders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RspOrderDetailsInfo orderDetailsInfo(Long orderId) {
|
||||
return this.mapper.selectOneWithRelationsByIdAs(orderId, RspOrderDetailsInfo.class);
|
||||
|
||||
@ -68,12 +68,12 @@ public class EbikeWxPaymentController {
|
||||
* 退款申请
|
||||
*
|
||||
* @param refundDto 退款信息
|
||||
* @return 退款成功返回true,否则返回false
|
||||
* @return 退款成功返回主键id,否则返回失败
|
||||
*/
|
||||
@PostMapping("/refundApply")
|
||||
public JsonResult<?> refundApply(@RequestBody EbikeRefundDto refundDto) {
|
||||
String r = wxPayService.refundApply(refundDto.getOrderId(), refundDto.getReason());
|
||||
return r == null?JsonResult.failed("退款失败"):JsonResult.success(r);
|
||||
return r == null?JsonResult.failed("退款申请失败"):JsonResult.success((Object) r);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -85,12 +85,7 @@ public class EbikeWxPaymentController {
|
||||
@PostMapping("/refund")
|
||||
public JsonResult<?> refund(@RequestBody ReqRefundDto refundDto) {
|
||||
HandleNotifyResult r = wxPayService.refund(refundDto);
|
||||
if (r.isSuccess())
|
||||
return JsonResult.success();
|
||||
JSONObject error = JSONObject.parseObject(r.getMessage());
|
||||
if (error==null)
|
||||
return JsonResult.failed(r.getMessage());
|
||||
return JsonResult.failed("退款失败", error);
|
||||
return r.isSuccess()?JsonResult.success(true):JsonResult.failed(r.getMessage());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -17,7 +17,7 @@ import java.util.List;
|
||||
public class ReqRefundDto {
|
||||
|
||||
/**
|
||||
* 退款单号
|
||||
* 主键id
|
||||
*/
|
||||
private String refundId;
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ import java.util.List;
|
||||
public class ReqRefundProcessDto {
|
||||
|
||||
/**
|
||||
* 退款单号
|
||||
* 主键id
|
||||
*/
|
||||
private String refundId;
|
||||
|
||||
|
||||
@ -76,4 +76,19 @@ public class ResApplyRefundDto {
|
||||
*/
|
||||
private String applicant;
|
||||
|
||||
/**
|
||||
* 骑行设备编号
|
||||
*/
|
||||
private String ebikeCode;;
|
||||
|
||||
/**
|
||||
* 骑行开始时间
|
||||
*/
|
||||
private LocalDateTime startTime;
|
||||
|
||||
/**
|
||||
* 骑行开始时间
|
||||
*/
|
||||
private LocalDateTime endTime;
|
||||
|
||||
}
|
||||
|
||||
@ -86,4 +86,19 @@ public class ResCloseRefundDto {
|
||||
*/
|
||||
private String applicant;
|
||||
|
||||
/**
|
||||
* 骑行设备编号
|
||||
*/
|
||||
private String ebikeCode;;
|
||||
|
||||
/**
|
||||
* 骑行开始时间
|
||||
*/
|
||||
private LocalDateTime startTime;
|
||||
|
||||
/**
|
||||
* 骑行开始时间
|
||||
*/
|
||||
private LocalDateTime endTime;
|
||||
|
||||
}
|
||||
|
||||
@ -81,4 +81,19 @@ public class ResHandleRefundDto {
|
||||
*/
|
||||
private String applicant;
|
||||
|
||||
/**
|
||||
* 骑行设备编号
|
||||
*/
|
||||
private String ebikeCode;;
|
||||
|
||||
/**
|
||||
* 骑行开始时间
|
||||
*/
|
||||
private LocalDateTime startTime;
|
||||
|
||||
/**
|
||||
* 骑行开始时间
|
||||
*/
|
||||
private LocalDateTime endTime;
|
||||
|
||||
}
|
||||
|
||||
@ -106,4 +106,19 @@ public class ResProcessedRefundDto {
|
||||
*/
|
||||
private String applicant;
|
||||
|
||||
/**
|
||||
* 骑行设备编号
|
||||
*/
|
||||
private String ebikeCode;;
|
||||
|
||||
/**
|
||||
* 骑行开始时间
|
||||
*/
|
||||
private LocalDateTime startTime;
|
||||
|
||||
/**
|
||||
* 骑行开始时间
|
||||
*/
|
||||
private LocalDateTime endTime;
|
||||
|
||||
}
|
||||
|
||||
@ -34,6 +34,11 @@ public class EbikeRefund implements Serializable {
|
||||
@Id
|
||||
private String refundId;
|
||||
|
||||
/**
|
||||
* 退款单号
|
||||
*/
|
||||
private String refundOrder;
|
||||
|
||||
/**
|
||||
* 骑行订单号
|
||||
*/
|
||||
@ -116,4 +121,14 @@ public class EbikeRefund implements Serializable {
|
||||
*/
|
||||
private LocalDateTime processTime ;
|
||||
|
||||
/**
|
||||
* 审核人
|
||||
*/
|
||||
private String reviewOperator ;
|
||||
|
||||
/**
|
||||
* 退款人
|
||||
*/
|
||||
private String refundOperator ;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,136 @@
|
||||
package com.cdzy.payment.model.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 用户订单表 实体类。
|
||||
*
|
||||
* @author attiya
|
||||
* @since 2025-03-28
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("ebike_user_orders")
|
||||
public class EbikeUserOrders implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 分布式ID(雪花算法或业务前缀+序列)
|
||||
*/
|
||||
@Id
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 用户ID,关联用户表
|
||||
*/
|
||||
private String userId;
|
||||
|
||||
private String bikeId;
|
||||
|
||||
/**
|
||||
* 订单类型:1-单次骑行 2-骑行卡购买 3-会员卡续费
|
||||
*/
|
||||
private Integer orderType;
|
||||
|
||||
/**
|
||||
* 状态:0-进行中 1-已取消 2-待支付 3-已支付 4-退款中 5-已退款
|
||||
*/
|
||||
@Column(onInsertValue = "0")
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 订单总金额(单位:元)
|
||||
*/
|
||||
private BigDecimal totalAmount;
|
||||
|
||||
/**
|
||||
* 实付金额(扣除卡券优惠后)
|
||||
*/
|
||||
private BigDecimal actualAmount;
|
||||
|
||||
/**
|
||||
* 骑行开始时间(仅骑行订单有效)
|
||||
*/
|
||||
private LocalDateTime startTime;
|
||||
|
||||
/**
|
||||
* 骑行结束时间(仅骑行订单有效)
|
||||
*/
|
||||
private LocalDateTime endTime;
|
||||
|
||||
/**
|
||||
* 支付成功时间
|
||||
*/
|
||||
private LocalDateTime paymentTime;
|
||||
|
||||
/**
|
||||
* 支付方式:wechat/alipay/balance
|
||||
*/
|
||||
private String paymentMethod;
|
||||
|
||||
/**
|
||||
* 使用卡券ID集合(JSON数组)
|
||||
*/
|
||||
private String couponIds;
|
||||
|
||||
/**
|
||||
* 优惠明细(结构化存储,便于对账)
|
||||
*/
|
||||
private String discountDetails;
|
||||
|
||||
/**
|
||||
* 骑行设备编号(仅骑行订单有效)
|
||||
*/
|
||||
private String bikeCode;
|
||||
|
||||
/**
|
||||
* 地理位置GeoHash编码(用于区域优惠分析)
|
||||
*/
|
||||
private String geoHash;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createdAt;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@Column(onUpdateValue = "now()")
|
||||
private LocalDateTime updatedAt;
|
||||
|
||||
/**
|
||||
* 骑行起始点
|
||||
*/
|
||||
private String ridePoint;
|
||||
|
||||
/**
|
||||
* 骑行结束点
|
||||
*/
|
||||
private String returnPoint;
|
||||
|
||||
/**
|
||||
* 0-未临时锁车 -1临时锁车
|
||||
*/
|
||||
private Integer tempLock;
|
||||
|
||||
@Column(isLogicDelete = true,onInsertValue = "0")
|
||||
private Integer isDelete;
|
||||
|
||||
}
|
||||
@ -20,6 +20,7 @@ import java.util.List;
|
||||
|
||||
import static com.cdzy.payment.model.entity.table.EbikePaymentTableDef.EBIKE_PAYMENT;
|
||||
import static com.cdzy.payment.model.entity.table.EbikeRefundTableDef.EBIKE_REFUND;
|
||||
import static com.cdzy.payment.model.entity.table.EbikeUserOrdersTableDef.EBIKE_USER_ORDERS;
|
||||
import static com.cdzy.payment.model.entity.table.EbikeUserTableDef.EBIKE_USER;
|
||||
import static com.cdzy.payment.model.enums.RefundProcessState.*;
|
||||
import static com.mybatisflex.core.constant.FuncName.*;
|
||||
@ -41,7 +42,7 @@ public class EbikeRefundServiceImpl extends ServiceImpl<EbikeRefundMapper, Ebike
|
||||
boolean r = save(ebikeRefund);
|
||||
// 同步发起退款
|
||||
if(r)
|
||||
ordersFeignClient.refund(Long.valueOf(ebikeRefund.getOrderId()));
|
||||
ordersFeignClient.refundApply(Long.valueOf(ebikeRefund.getOrderId()));
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -61,21 +62,24 @@ public class EbikeRefundServiceImpl extends ServiceImpl<EbikeRefundMapper, Ebike
|
||||
// create_time到排序,取最新的一条
|
||||
QueryWrapper query = QueryWrapper.create()
|
||||
.where(EBIKE_REFUND.ORDER_ID.eq(orderId))
|
||||
.orderBy(EBIKE_REFUND.CREATE_TIME.desc())
|
||||
.limit(1);
|
||||
.orderBy(EBIKE_REFUND.CREATE_TIME.desc());
|
||||
return getOne(query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateRefundStatus(Refund refund) {
|
||||
EbikeRefund ebikeRefund = new EbikeRefund();
|
||||
ebikeRefund.setRefundId(refund.getOutRefundNo());
|
||||
EbikeRefund ebikeRefund = getByOrderId(refund.getOutTradeNo());
|
||||
ebikeRefund.setStatus(String.valueOf(refund.getStatus().ordinal()));
|
||||
if (Status.SUCCESS.equals(refund.getStatus())) {
|
||||
ebikeRefund.setRefundTime(LocalDateTime.now());
|
||||
ebikeRefund.setRefund(refund.getAmount().getRefund().doubleValue() / 100.0);
|
||||
// 退款成功, 更新订单状态
|
||||
ordersFeignClient.doneRefund(Long.valueOf(refund.getOutTradeNo()));
|
||||
}
|
||||
long orderId = Long.parseLong(refund.getOutTradeNo());
|
||||
// 更新订单退款状态
|
||||
switch (refund.getStatus()){
|
||||
case PROCESSING, CLOSED -> ordersFeignClient.refund(orderId);
|
||||
case SUCCESS -> ordersFeignClient.doneRefund(orderId);
|
||||
case ABNORMAL -> ordersFeignClient.failRefund(orderId);
|
||||
}
|
||||
return updateById(ebikeRefund);
|
||||
}
|
||||
@ -91,10 +95,12 @@ public class EbikeRefundServiceImpl extends ServiceImpl<EbikeRefundMapper, Ebike
|
||||
.when(PayMethod.balance.name()).then("余额").end().as("pay_method"),
|
||||
EBIKE_PAYMENT.PAYMENT_TIME.as("pay_time"), EBIKE_REFUND.REASON.as("apply_reason"),
|
||||
QueryMethods.case_(EBIKE_REFUND.SOURCE).when("0").then("用户")
|
||||
.when("1").then("客服").end().as("source"), EBIKE_USER.NICKNAME.as("applicant")
|
||||
.when("1").then("客服").end().as("source"), EBIKE_USER.NICKNAME.as("applicant"),
|
||||
EBIKE_USER_ORDERS.BIKE_CODE.as("ebike_code"),EBIKE_USER_ORDERS.START_TIME.as("start_time"), EBIKE_USER_ORDERS.END_TIME.as("end_time")
|
||||
)
|
||||
.leftJoin(EBIKE_PAYMENT).on(EBIKE_PAYMENT.ORDER_ID.eq(EBIKE_REFUND.ORDER_ID))
|
||||
.leftJoin(EBIKE_USER).on(EBIKE_USER.USER_ID.eq(EBIKE_PAYMENT.USER_ID))
|
||||
.leftJoin(EBIKE_USER_ORDERS).on(EBIKE_USER_ORDERS.ORDER_ID.eq(EBIKE_REFUND.ORDER_ID))
|
||||
.where(EBIKE_REFUND.PROCESS_STATE.eq(String.valueOf(applying.ordinal())));
|
||||
if(refundDto.getPhone() != null && !refundDto.getPhone().isEmpty())
|
||||
query.and(EBIKE_USER.MOBILE.like(refundDto.getPhone()));
|
||||
@ -124,10 +130,12 @@ public class EbikeRefundServiceImpl extends ServiceImpl<EbikeRefundMapper, Ebike
|
||||
.when("2").then("线下退款").end().as("refund_method"),
|
||||
EBIKE_PAYMENT.PAYMENT_TIME.as("pay_time"), EBIKE_REFUND.REASON.as("apply_reason"),
|
||||
QueryMethods.case_(EBIKE_REFUND.SOURCE).when("0").then("用户")
|
||||
.when("1").then("客服").end().as("source"), EBIKE_USER.NICKNAME.as("applicant")
|
||||
.when("1").then("客服").end().as("source"), EBIKE_USER.NICKNAME.as("applicant"),
|
||||
EBIKE_USER_ORDERS.BIKE_CODE.as("ebike_code"),EBIKE_USER_ORDERS.START_TIME.as("start_time"), EBIKE_USER_ORDERS.END_TIME.as("end_time")
|
||||
)
|
||||
.leftJoin(EBIKE_PAYMENT).on(EBIKE_PAYMENT.ORDER_ID.eq(EBIKE_REFUND.ORDER_ID))
|
||||
.leftJoin(EBIKE_USER).on(EBIKE_USER.USER_ID.eq(EBIKE_PAYMENT.USER_ID))
|
||||
.leftJoin(EBIKE_USER_ORDERS).on(EBIKE_USER_ORDERS.ORDER_ID.eq(EBIKE_REFUND.ORDER_ID))
|
||||
.where(EBIKE_REFUND.PROCESS_STATE.eq(String.valueOf(processing.ordinal())));
|
||||
if(refundDto.getPhone() != null && !refundDto.getPhone().isEmpty())
|
||||
query.and(EBIKE_USER.MOBILE.like(refundDto.getPhone()));
|
||||
@ -162,10 +170,12 @@ public class EbikeRefundServiceImpl extends ServiceImpl<EbikeRefundMapper, Ebike
|
||||
.when("2").then("线下退款").end().as("refund_method"),
|
||||
EBIKE_PAYMENT.PAYMENT_TIME.as("pay_time"), EBIKE_REFUND.REASON.as("apply_reason"),
|
||||
QueryMethods.case_(EBIKE_REFUND.SOURCE).when("0").then("用户")
|
||||
.when("1").then("客服").end().as("source"), EBIKE_USER.NICKNAME.as("applicant")
|
||||
.when("1").then("客服").end().as("source"), EBIKE_USER.NICKNAME.as("applicant"),
|
||||
EBIKE_USER_ORDERS.BIKE_CODE.as("ebike_code"),EBIKE_USER_ORDERS.START_TIME.as("start_time"), EBIKE_USER_ORDERS.END_TIME.as("end_time")
|
||||
)
|
||||
.leftJoin(EBIKE_PAYMENT).on(EBIKE_PAYMENT.ORDER_ID.eq(EBIKE_REFUND.ORDER_ID))
|
||||
.leftJoin(EBIKE_USER).on(EBIKE_USER.USER_ID.eq(EBIKE_PAYMENT.USER_ID))
|
||||
.leftJoin(EBIKE_USER).on(EBIKE_USER.USER_ID.eq(EBIKE_PAYMENT.USER_ID))
|
||||
.leftJoin(EBIKE_USER_ORDERS).on(EBIKE_USER_ORDERS.ORDER_ID.eq(EBIKE_REFUND.ORDER_ID))
|
||||
.where(EBIKE_REFUND.PROCESS_STATE.eq(String.valueOf(processed.ordinal())));
|
||||
if(refundDto.getPhone() != null && !refundDto.getPhone().isEmpty())
|
||||
query.and(EBIKE_USER.MOBILE.like(refundDto.getPhone()));
|
||||
@ -192,10 +202,12 @@ public class EbikeRefundServiceImpl extends ServiceImpl<EbikeRefundMapper, Ebike
|
||||
.when(PayMethod.balance.name()).then("余额").end().as("pay_method"),
|
||||
EBIKE_PAYMENT.PAYMENT_TIME.as("pay_time"), EBIKE_REFUND.REASON.as("apply_reason"),
|
||||
QueryMethods.case_(EBIKE_REFUND.SOURCE).when("0").then("用户")
|
||||
.when("1").then("客服").end().as("source"), EBIKE_USER.NICKNAME.as("applicant")
|
||||
.when("1").then("客服").end().as("source"), EBIKE_USER.NICKNAME.as("applicant"),
|
||||
EBIKE_USER_ORDERS.BIKE_CODE.as("ebike_code"),EBIKE_USER_ORDERS.START_TIME.as("start_time"), EBIKE_USER_ORDERS.END_TIME.as("end_time")
|
||||
)
|
||||
.leftJoin(EBIKE_PAYMENT).on(EBIKE_PAYMENT.ORDER_ID.eq(EBIKE_REFUND.ORDER_ID))
|
||||
.leftJoin(EBIKE_USER).on(EBIKE_USER.USER_ID.eq(EBIKE_PAYMENT.USER_ID))
|
||||
.leftJoin(EBIKE_USER_ORDERS).on(EBIKE_USER_ORDERS.ORDER_ID.eq(EBIKE_REFUND.ORDER_ID))
|
||||
.where(EBIKE_REFUND.PROCESS_STATE.eq(String.valueOf(closed.ordinal())));
|
||||
if(refundDto.getPhone() != null && !refundDto.getPhone().isEmpty())
|
||||
query.and(EBIKE_USER.MOBILE.like(refundDto.getPhone()));
|
||||
|
||||
@ -359,18 +359,17 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
String outRefundNo = StringUtils.generateSnowflakeId("refundId");
|
||||
ebikeRefund = new EbikeRefund();
|
||||
ebikeRefund.setCreateTime(LocalDateTime.now());
|
||||
ebikeRefund.setRefundId(outRefundNo);
|
||||
ebikeRefund.setRefundOrder(outRefundNo);
|
||||
ebikeRefund.setOrderId(outTradeNo);
|
||||
ebikeRefund.setCurrency(ebikePayment.getCurrency());
|
||||
ebikeRefund.setTotal(ebikePayment.getCostPrice());
|
||||
ebikeRefund.setRefundApply(ebikePayment.getTotal());
|
||||
ebikeRefund.setTransactionId(transactionId);
|
||||
ebikeRefund.setReason(reason);
|
||||
ebikeRefund.setStatus(String.valueOf(Status.PROCESSING.ordinal()));
|
||||
ebikeRefund.setProcessState(String.valueOf(RefundProcessState.applying.ordinal()));
|
||||
ebikeRefund.setSource(String.valueOf(RefoundApplySource.user.ordinal()));
|
||||
ebikeRefundService.saveRefundResult(ebikeRefund);
|
||||
return outRefundNo;
|
||||
return ebikeRefund.getRefundId();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -387,6 +386,11 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
if (String.valueOf(RefundProcessState.processing.ordinal()).equals(processDto.getOperate())) {
|
||||
ebikeRefund.setRefund(ebikeRefund.getRefundApply());
|
||||
ebikeRefund.setRefundMethod(processDto.getMethod());
|
||||
// 更新订单状态
|
||||
ordersFeignClient.refund(Long.valueOf(ebikeRefund.getOrderId()));
|
||||
}else if (String.valueOf(RefundProcessState.closed.ordinal()).equals(processDto.getOperate())) {
|
||||
// 更新订单状态
|
||||
ordersFeignClient.rejectRefund(Long.valueOf(ebikeRefund.getOrderId()));
|
||||
}
|
||||
return ebikeRefundService.updateById(ebikeRefund);
|
||||
}
|
||||
@ -406,6 +410,23 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
result_.setMessage(String.format("{%s}退款申请不存在", refundDto.getRefundId()));
|
||||
return result_;
|
||||
}
|
||||
// 检查退款状态
|
||||
if (String.valueOf(Status.SUCCESS.ordinal()).equals(ebikeRefund.getStatus())) {
|
||||
log.error("退款refund失败,{} 退款已经成功,不能重复退款", refundDto.getRefundId());
|
||||
result_.setMessage(String.format("{%s}退款已经成功,不能重复退款", refundDto.getRefundId()));
|
||||
return result_;
|
||||
}
|
||||
if (String.valueOf(Status.PROCESSING.ordinal()).equals(ebikeRefund.getStatus())) {
|
||||
log.error("退款refund失败,{} 退款中,不能重复退款", refundDto.getRefundId());
|
||||
result_.setMessage(String.format("{%s}退款中,不能重复退款", refundDto.getRefundId()));
|
||||
return result_;
|
||||
}
|
||||
if (String.valueOf(Status.CLOSED.ordinal()).equals(ebikeRefund.getStatus())||
|
||||
String.valueOf(Status.ABNORMAL.ordinal()).equals(ebikeRefund.getStatus())) {
|
||||
//重新发起
|
||||
String new_order = StringUtils.generateSnowflakeId("refundId");
|
||||
ebikeRefund.setRefundOrder(new_order);
|
||||
}
|
||||
// 查询支付记录
|
||||
String outTradeNo = ebikeRefund.getOrderId();
|
||||
EbikePayment ebikePayment = ebikePaymentService.getByOrderId(outTradeNo);
|
||||
@ -418,7 +439,7 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
CreateRequest request = new CreateRequest();
|
||||
request.setTransactionId(transactionId);
|
||||
request.setOutTradeNo(outTradeNo);
|
||||
request.setOutRefundNo(ebikeRefund.getRefundId());
|
||||
request.setOutRefundNo(ebikeRefund.getRefundOrder());
|
||||
request.setReason(ebikeRefund.getReason());
|
||||
request.setNotifyUrl(wxPayConfig.getRefundNotifyUrl());
|
||||
AmountReq amountReq = new AmountReq();
|
||||
@ -435,12 +456,11 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
ebikeRefund.setTotal(amount.getTotal());
|
||||
ebikeRefund.setStatus(String.valueOf(result.getStatus().ordinal()));
|
||||
ebikeRefund.setCurrency(amount.getCurrency());
|
||||
if (Status.SUCCESS.equals(result.getStatus())) {
|
||||
ebikeRefund.setRefund(result.getAmount().getRefund().doubleValue() / 100.0);
|
||||
ebikeRefund.setRefundTime(LocalDateTime.now());
|
||||
ebikeRefund.setRemark(refundDto.getRemark());
|
||||
ebikeRefund.setRefundTransactionId(result.getRefundId());
|
||||
}
|
||||
ebikeRefund.setRefund(result.getAmount().getRefund().doubleValue() / 100.0);
|
||||
ebikeRefund.setRefundTime(LocalDateTime.now());
|
||||
ebikeRefund.setRemark(refundDto.getRemark());
|
||||
ebikeRefund.setProcessState(String.valueOf(RefundProcessState.processed.ordinal()));
|
||||
ebikeRefund.setRefundTransactionId(result.getRefundId());
|
||||
ebikeRefundService.updateById(ebikeRefund);
|
||||
result_.setSuccess(true);
|
||||
result_.setMessage("退款成功");
|
||||
@ -451,7 +471,12 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
return result_;
|
||||
} catch (Exception e) {
|
||||
String err = logError("退款refund", e);
|
||||
result_.setMessage(err);
|
||||
try {
|
||||
JSONObject json = JSON.parseObject(err);
|
||||
result_.setMessage(json.getString("message"));
|
||||
}catch (Exception ex) {
|
||||
result_.setMessage(err);
|
||||
}
|
||||
return result_;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user