|
@@ -41,6 +41,7 @@ import com.cyksj.model.manage.request.ReqSetLogisticsPost;
|
|
|
import com.cyksj.model.manage.views.GroupsRelationView;
|
|
import com.cyksj.model.manage.views.GroupsRelationView;
|
|
|
import com.cyksj.model.request.ChangeRelationReq;
|
|
import com.cyksj.model.request.ChangeRelationReq;
|
|
|
import com.cyksj.model.request.ClickOutReq;
|
|
import com.cyksj.model.request.ClickOutReq;
|
|
|
|
|
+import com.cyksj.model.request.OrderBalanceRefundReq;
|
|
|
import com.cyksj.model.request.OrderRefundReq;
|
|
import com.cyksj.model.request.OrderRefundReq;
|
|
|
import com.cyksj.redis.RedisService;
|
|
import com.cyksj.redis.RedisService;
|
|
|
import com.cyksj.service.coupon.CouponFontService;
|
|
import com.cyksj.service.coupon.CouponFontService;
|
|
@@ -165,6 +166,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
|
|
|
|
|
|
|
|
private final GroupRelationFrontService groupRelationFrontService;
|
|
private final GroupRelationFrontService groupRelationFrontService;
|
|
|
|
|
|
|
|
|
|
+ private final UserMapper userMapper;
|
|
|
private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
|
|
private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -985,6 +987,57 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
|
|
|
orderDonMapper.updateById(orderDon);
|
|
orderDonMapper.updateById(orderDon);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void clearBalanceToRefundMoney(OrderBalanceRefundReq refundReq) throws Exception {
|
|
|
|
|
+ Long refundOrderId = refundReq.getRefundOrderId();
|
|
|
|
|
+ BigDecimal refundMoney = refundReq.getRefundMoney();
|
|
|
|
|
+ RefundOrderDon refundOrderDon = refundOrderDonMapper.selectById(refundOrderId);
|
|
|
|
|
+ if (!"balance".equals(refundOrderDon.getRefundMethod())) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("该记录不是余额退款类型");
|
|
|
|
|
+ }
|
|
|
|
|
+ Long orderId = refundOrderDon.getOrderId();
|
|
|
|
|
+ OrderDon orderDon = orderDonMapper.selectById(orderId);
|
|
|
|
|
+ if (orderDon.getMoney().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("该记录对应的订单无实际支付金额");
|
|
|
|
|
+ }
|
|
|
|
|
+ BigDecimal refundFee = refundOrderDon.getRefundFee();
|
|
|
|
|
+ //默认退全部余额
|
|
|
|
|
+ if (refundMoney != null) {
|
|
|
|
|
+ refundFee = refundMoney;
|
|
|
|
|
+ }
|
|
|
|
|
+ BigDecimal money = orderDon.getMoney();
|
|
|
|
|
+ //若退款余额 大于退款金额 将退款余额至为 退款金额
|
|
|
|
|
+ if (refundFee.compareTo(money) > 0) {
|
|
|
|
|
+ refundFee = money;
|
|
|
|
|
+ }
|
|
|
|
|
+ User user = userMapper.selectById(orderDon.getUserId());
|
|
|
|
|
+ if (user.getBalance().compareTo(refundFee) < 0) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("用户余额不足,无法扣除对应退款余额");
|
|
|
|
|
+ }
|
|
|
|
|
+ int update = userMapper.update(null, Wrappers.lambdaUpdate(User.class)
|
|
|
|
|
+ .set(User::getBalance, user.getBalance().subtract(refundFee))
|
|
|
|
|
+ .eq(User::getId, user.getId())
|
|
|
|
|
+ .eq(User::getBalance, user.getBalance()));
|
|
|
|
|
+ if (update == 0) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("扣除用户退款余额失败,请重试...");
|
|
|
|
|
+ }
|
|
|
|
|
+ OrderRefundReq orderRefundReq = new OrderRefundReq();
|
|
|
|
|
+ orderRefundReq.setOrderId(orderId);
|
|
|
|
|
+ orderRefundReq.setRefundMoney(refundFee);
|
|
|
|
|
+ orderRefundReq.setRefundType("money");
|
|
|
|
|
+
|
|
|
|
|
+ String outNo = centerRefund(orderRefundReq, orderDon);
|
|
|
|
|
+
|
|
|
|
|
+ orderDon.setRefundBalance(orderDon.getRefundBalance().subtract(refundFee));
|
|
|
|
|
+ BigDecimal orderRefundMoney = Optional.ofNullable(orderDon.getRefundMoney()).orElse(BigDecimal.ZERO);
|
|
|
|
|
+ orderDon.setRefundMoney(orderRefundMoney.add(refundFee));
|
|
|
|
|
+ orderDonMapper.updateById(orderDon);
|
|
|
|
|
+
|
|
|
|
|
+ refundOrderDon.setOutRefundNo(outNo);
|
|
|
|
|
+ refundOrderDon.setIsClearBalance(true);
|
|
|
|
|
+ refundOrderDonMapper.updateById(refundOrderDon);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 寻找该车队空余车位
|
|
* 寻找该车队空余车位
|
|
|
*/
|
|
*/
|