diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java
index e4c888d..92e5b5e 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java
@@ -59,5 +59,10 @@ public class OrderVO extends Order {
private LocalDateTime payTime;
@ApiModelProperty("支付渠道名称")
private String payChannelName;
+ @ApiModelProperty("自动退款金额")
+ private BigDecimal payAutoRefund;
+ @ApiModelProperty("管理员退款金额")
+ private BigDecimal payAdminRefund;
+
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderRefundDTO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderRefundDTO.java
index 18b5ed0..fc94adb 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderRefundDTO.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderRefundDTO.java
@@ -33,6 +33,9 @@ public class OrderRefundDTO implements LogBizParam {
@ApiModelProperty("操作人名称")
private String userName;
+ @ApiModelProperty("退款方式(1-自动退款,2-管理员退款)")
+ private String type;
+
@Override
public Object logBizId() {
return orderId;
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml
index 5a72333..d338f84 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.xml
@@ -61,6 +61,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bp.refunding as pay_refunding,
bp.pay_time as pay_time,
bp.channel_name as pay_channel_name,
+ bp.auto_refund as pay_auto_refund,
+ bp.admin_refund as pay_admin_refund,
bod.device_id,
bod.device_mac,
bod.device_sn,
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java
index 3042fb8..44af5d3 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java
@@ -66,6 +66,7 @@ import com.ruoyi.bst.pay.domain.enums.PayBstType;
import com.ruoyi.bst.pay.domain.vo.DoPayVO;
import com.ruoyi.bst.pay.service.PayConverter;
import com.ruoyi.bst.pay.service.PayService;
+import com.ruoyi.bst.refund.domain.enums.RefundType;
import com.ruoyi.bst.sms.service.SmsService;
import com.ruoyi.common.core.domain.vo.UserVO;
import com.ruoyi.common.core.redis.RedisLock;
@@ -497,8 +498,7 @@ public class OrderServiceImpl implements OrderService
// 订单剩余金额退款
BigDecimal refund = MathUtils.subtractDecimal(order.getPayAmount(), order.getTotalFee());
if (refund != null && refund.compareTo(BigDecimal.ZERO) > 0) {
- String reason = "【自动退款】订单剩余金额退款" + order.getNo();
- return this.refund(order, refund, reason, null, "系统");
+ return this.refund(order, refund, null, null, "系统", RefundType.AUTO.getCode());
}
return 1;
@@ -513,7 +513,7 @@ public class OrderServiceImpl implements OrderService
* @param userName 操作人名称
* @return 结果
*/
- private int refund(OrderVO order, BigDecimal amount, String reason, Long userId, String userName) {
+ private int refund(OrderVO order, BigDecimal amount, String reason, Long userId, String userName, String type) {
ServiceUtil.assertion(order == null, "参数错误,order不允许为空");
ServiceUtil.assertion(!OrderStatus.canRefund().contains(order.getStatus()), "ID为%s的订单当前状态不允许退款", order.getId());
ServiceUtil.assertion(amount == null || amount.compareTo(BigDecimal.ZERO) <= 0, "参数错误,退款金额不允许为空且必须大于0");
@@ -521,18 +521,32 @@ public class OrderServiceImpl implements OrderService
BigDecimal canRefundAmount = OrderUtil.calcCanRefundAmount(order);
ServiceUtil.assertion(canRefundAmount.compareTo(amount) < 0, "ID为%s的订单可退款金额不足,当前可退款金额为%s元", order.getId(), canRefundAmount);
+
+ // 退款原因
+ if (RefundType.ADMIN.getCode().equals(type)) {
+ reason = String.format("【管理员退款】%s订单%s退款 %s 元", userName, order.getNo(), amount);
+ } else {
+ reason = String.format("【自动退款】%s订单%s退款 %s 元", userName, order.getNo(), amount);
+ }
+ if (StringUtils.isNotBlank(reason)) {
+ reason += ":" + reason;
+ }
+ String refundReason = reason;
+
Integer result = transactionTemplate.execute(status -> {
+
// 分成退款
- boolean bonusRefund = bonusService.refundByBst(BonusBstType.ORDER, order.getId(), amount, order.getPayAmount(), reason);
+ boolean bonusRefund = bonusService.refundByBst(BonusBstType.ORDER, order.getId(), amount, order.getPayAmount(), refundReason);
ServiceUtil.assertion(!bonusRefund, "ID为%s的订单分成退款失败", order.getId());
// 支付退款
PayRefundDTO dto = new PayRefundDTO();
dto.setId(order.getPayId());
dto.setRefundAmount(amount);
- dto.setRefundReason(reason);
+ dto.setRefundReason(refundReason);
dto.setUserId(userId);
dto.setUserName(userName);
+ dto.setType(type);
return payService.refund(dto);
});
@@ -588,8 +602,7 @@ public class OrderServiceImpl implements OrderService
public int refund(OrderRefundDTO dto) {
OrderVO order = this.selectOrderById(dto.getOrderId());
- // 退款
- return this.refund(order, dto.getAmount(), dto.getReason(), dto.getUserId(), dto.getUserName());
+ return this.refund(order, dto.getAmount(), dto.getReason(), dto.getUserId(), dto.getUserName(), dto.getType());
}
@Override
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/pay/domain/Pay.java b/ruoyi-service/src/main/java/com/ruoyi/bst/pay/domain/Pay.java
index ce3e0f5..d0947ee 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/pay/domain/Pay.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/pay/domain/Pay.java
@@ -100,6 +100,14 @@ public class Pay extends BaseEntity implements Payable
@ApiModelProperty("运营区ID")
private Long areaId;
+ @Excel(name = "自动退款金额", readConverterExp = "元=")
+ @ApiModelProperty("自动退款金额")
+ private BigDecimal autoRefund;
+
+ @Excel(name = "管理员退款金额", readConverterExp = "元=")
+ @ApiModelProperty("管理员退款金额")
+ private BigDecimal adminRefund;
+
/**
* 获取价格(分)
*/
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/pay/domain/dto/PayRefundDTO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/pay/domain/dto/PayRefundDTO.java
index e4a3a11..c6fb33e 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/pay/domain/dto/PayRefundDTO.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/pay/domain/dto/PayRefundDTO.java
@@ -27,4 +27,7 @@ public class PayRefundDTO {
@ApiModelProperty("退款操作人名称")
private String userName;
+ @ApiModelProperty("退款方式(1-自动退款,2-管理员退款)")
+ private String type;
+
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/pay/mapper/PayMapper.java b/ruoyi-service/src/main/java/com/ruoyi/bst/pay/mapper/PayMapper.java
index e188cb9..1fdfc27 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/pay/mapper/PayMapper.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/pay/mapper/PayMapper.java
@@ -83,7 +83,7 @@ public interface PayMapper
* @param amount 退款金额
* @return 结果
*/
- int addRefundingAmount(@Param("id") Long id, @Param("amount") BigDecimal amount);
+ int addRefundingAmount(@Param("id") Long id, @Param("amount") BigDecimal amount, @Param("type") String type);
/**
* 记录退款金额
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/pay/mapper/PayMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/pay/mapper/PayMapper.xml
index 97f6f01..ca1b243 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/pay/mapper/PayMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/pay/mapper/PayMapper.xml
@@ -28,7 +28,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bp.expire_time,
bp.app_name,
bp.channel_name,
- bp.area_id
+ bp.area_id,
+ bp.auto_refund,
+ bp.admin_refund
from bst_pay bp
@@ -95,6 +97,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
app_name,
channel_name,
area_id,
+ auto_refund,
+ admin_refund,
#{no},
@@ -117,6 +121,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{appName},
#{channelName},
#{areaId},
+ #{autoRefund},
+ #{adminRefund},
@@ -160,6 +166,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
app_name = #{data.appName},
channel_name = #{data.channelName},
area_id = #{data.areaId},
+ auto_refund = #{data.autoRefund},
+ admin_refund = #{data.adminRefund},
@@ -176,7 +184,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update bst_pay
- set refunding = refunding + #{amount}
+
+ refunding = refunding + #{amount},
+
+ auto_refund = auto_refund + #{amount},
+
+
+ admin_refund = admin_refund + #{amount},
+
+
where id = #{id} and amount >= refunded + refunding + #{amount}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/pay/service/impl/PayServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/pay/service/impl/PayServiceImpl.java
index 55eaf40..6a97541 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/pay/service/impl/PayServiceImpl.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/pay/service/impl/PayServiceImpl.java
@@ -489,7 +489,7 @@ public class PayServiceImpl implements PayService {
}
// 增加退款中金额
- int addRefunding = payMapper.addRefundingAmount(dto.getId(), dto.getRefundAmount());
+ int addRefunding = payMapper.addRefundingAmount(dto.getId(), dto.getRefundAmount(), dto.getType());
ServiceUtil.assertion(addRefunding != 1, "记录退款中的金额失败");
// 创建退款订单
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/refund/domain/Refund.java b/ruoyi-service/src/main/java/com/ruoyi/bst/refund/domain/Refund.java
index 98b5ef4..2c84b4b 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/refund/domain/Refund.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/refund/domain/Refund.java
@@ -49,4 +49,7 @@ public class Refund extends BaseEntity
@ApiModelProperty("退款操作人名称")
private String userName;
+ @Excel(name = "退款方式", readConverterExp = "1=自动退款,2=管理员退款")
+ @ApiModelProperty("退款方式(1-自动退款 2-管理员退款)")
+ private String type;
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/refund/domain/enums/RefundType.java b/ruoyi-service/src/main/java/com/ruoyi/bst/refund/domain/enums/RefundType.java
new file mode 100644
index 0000000..f038484
--- /dev/null
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/refund/domain/enums/RefundType.java
@@ -0,0 +1,15 @@
+package com.ruoyi.bst.refund.domain.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum RefundType {
+ AUTO("1", "自动退款"),
+ ADMIN("2", "管理员退款");
+
+ private final String code;
+ private final String name;
+
+}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/refund/mapper/RefundMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/refund/mapper/RefundMapper.xml
index eccd08f..411ad59 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/refund/mapper/RefundMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/refund/mapper/RefundMapper.xml
@@ -17,6 +17,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
br.reason,
br.user_id,
br.user_name,
+ br.type,
bp.channel_id,
bp.app_id,
bp.no as pay_no,
@@ -45,6 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and bp.bst_type = #{query.payBstType}
and bp.area_id = #{query.payAreaId}
and bp.channel_id = #{query.channelId}
+ and br.type = #{query.type}
and date(br.create_time) >= #{query.createDateRange[0]}
and date(br.create_time) <= #{query.createDateRange[1]}
@@ -82,6 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
reason,
user_id,
user_name,
+ type,
#{no},
@@ -92,6 +95,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{reason},
#{userId},
#{userName},
+ #{type},
@@ -112,6 +116,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
reason = #{data.reason},
user_id = #{data.userId},
user_name = #{data.userName},
+ type = #{data.type},
diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java
index b4ec5ae..9ada92d 100644
--- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java
+++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/OrderController.java
@@ -17,7 +17,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import com.aliyun.core.utils.StringUtils;
import com.ruoyi.bst.areaJoin.domain.enums.AreaJoinPermission;
import com.ruoyi.bst.order.domain.OrderQuery;
import com.ruoyi.bst.order.domain.OrderVO;
@@ -29,6 +28,7 @@ import com.ruoyi.bst.order.domain.vo.OrderEndVO;
import com.ruoyi.bst.order.service.OrderAssembler;
import com.ruoyi.bst.order.service.OrderService;
import com.ruoyi.bst.order.service.OrderValidator;
+import com.ruoyi.bst.refund.domain.enums.RefundType;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
@@ -131,12 +131,9 @@ public class OrderController extends BaseController
if (!orderValidator.canOperate(dto.getOrderId())) {
return error("您无权退款ID为" + dto.getOrderId() + "的订单");
}
- String userName = getNickName();
dto.setUserId(getUserId());
- dto.setUserName(userName);
- if (StringUtils.isBlank(dto.getReason())) {
- dto.setReason("管理员【" + userName + "】退款");
- }
+ dto.setUserName(getNickName());
+ dto.setType(RefundType.ADMIN.getCode());
return toAjax(orderService.refund(dto));
}