From 53184270deb6b67a42c9ede26355fb77e895d94b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?=
<14103883+leaf-phos@user.noreply.gitee.com>
Date: Tue, 20 May 2025 17:12:30 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ruoyi/bst/bonus/mapper/BonusMapper.xml | 3 +-
.../ruoyi/bst/bonus/service/BonusService.java | 4 +-
.../service/impl/BonusConverterImpl.java | 4 +-
.../bonus/service/impl/BonusServiceImpl.java | 14 ++--
.../com/ruoyi/bst/bonus/utils/BonusUtil.java | 26 +++----
.../service/impl/DeviceIotServiceImpl.java | 10 +--
.../bst/order/domain/dto/OrderSeatDTO.java | 3 +
.../bst/order/domain/dto/OrderVerifyDTO.java | 4 -
.../bst/order/domain/enums/OrderStatus.java | 2 +-
.../ruoyi/bst/order/mapper/OrderMapper.java | 43 +++++------
.../ruoyi/bst/order/mapper/OrderMapper.xml | 15 ++--
.../order/service/impl/OrderServiceImpl.java | 73 ++++++++++---------
.../com/ruoyi/bst/order/utils/OrderUtil.java | 7 +-
.../orderDevice/mapper/OrderDeviceMapper.xml | 2 +-
.../com/ruoyi/web/app/AppOrderController.java | 3 +
15 files changed, 99 insertions(+), 114 deletions(-)
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/mapper/BonusMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/mapper/BonusMapper.xml
index d0f7df0..d669d9b 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/mapper/BonusMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/mapper/BonusMapper.xml
@@ -327,8 +327,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{item.id}
- and
- and bb.status in ('INVALID', 'VALID', 'WAIT_DIVIDE')
+ and bb.status = 'INVALID'
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/BonusService.java b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/BonusService.java
index e076869..5270ace 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/BonusService.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/BonusService.java
@@ -131,12 +131,10 @@ public interface BonusService {
* @param bstType 业务类型
* @param bstId 业务ID
* @param amount 退款金额
- * @param payAmount 原分成总金额
* @param reason 退款原因
* @return 结果
*/
- public boolean refundByBst(BonusBstType bstType, Long bstId, BigDecimal amount, BigDecimal payAmount,
- String reason);
+ public boolean refundByBst(BonusBstType bstType, Long bstId, BigDecimal amount, String reason);
/**
* 预览设备分成信息
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/impl/BonusConverterImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/impl/BonusConverterImpl.java
index 9332d43..02f4161 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/impl/BonusConverterImpl.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/impl/BonusConverterImpl.java
@@ -66,10 +66,8 @@ public class BonusConverterImpl implements BonusConverter {
// 获取基础分成列表
List result = toBaseBonusListPlatform(bo.getDevice(), bo.getPartners(), bo.getAreaJoin());
- // 设置分成金额
+ // 设置分成信息
Order order = bo.getOrder();
- BonusUtil.partAmount(result, order.getPayAmount());
-
ChannelVO channel = bo.getChannel();
// 设置其他基础数据
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/impl/BonusServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/impl/BonusServiceImpl.java
index 9867a43..b8e61c5 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/impl/BonusServiceImpl.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/service/impl/BonusServiceImpl.java
@@ -306,9 +306,8 @@ public class BonusServiceImpl implements BonusService {
}
@Override
- public boolean refundByBst(BonusBstType bstType, Long bstId, BigDecimal refundAmount, BigDecimal payAmount,
- String reason) {
- if (bstType == null || bstId == null || refundAmount == null || payAmount == null) {
+ public boolean refundByBst(BonusBstType bstType, Long bstId, BigDecimal refundAmount, String reason) {
+ if (bstType == null || bstId == null || refundAmount == null) {
return false;
}
// 查询分成列表
@@ -321,7 +320,7 @@ public class BonusServiceImpl implements BonusService {
}
// 退款
- return this.refund(list, refundAmount, payAmount, reason);
+ return this.refund(list, refundAmount, reason);
}
/**
@@ -329,20 +328,19 @@ public class BonusServiceImpl implements BonusService {
*
* @param bonusList
* @param refundAmount
- * @param payAmount
* @param reason
* @return
*/
- private boolean refund(List bonusList, BigDecimal refundAmount, BigDecimal payAmount, String reason) {
+ private boolean refund(List bonusList, BigDecimal refundAmount, String reason) {
if (CollectionUtils.isEmptyElement(bonusList)) {
return true;
}
- if (refundAmount == null || payAmount == null) {
+ if (refundAmount == null) {
return false;
}
// 构建退款列表
- List refundList = BonusUtil.buildRefundList(bonusList, refundAmount, payAmount);
+ List refundList = BonusUtil.buildRefundList(bonusList, refundAmount);
ServiceUtil.assertion(CollectionUtils.isEmptyElement(refundList), "退款金额分配出错");
// 执行退款逻辑
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/utils/BonusUtil.java b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/utils/BonusUtil.java
index 482a8a9..2a4376b 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/utils/BonusUtil.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/utils/BonusUtil.java
@@ -10,6 +10,7 @@ import com.ruoyi.bst.bonus.domain.Bonus;
import com.ruoyi.bst.bonus.domain.BonusVO;
import com.ruoyi.bst.bonus.domain.enums.BonusArrivalType;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.MathUtils;
import com.ruoyi.common.utils.ServiceUtil;
import com.ruoyi.common.utils.collection.CollectionUtils;
@@ -60,10 +61,7 @@ public class BonusUtil {
if (remainingDiff.compareTo(BigDecimal.ZERO) > 0) {
// 处理正数误差(少退了):需要增加退款金额
// 计算当前分成方的剩余可退金额
- BigDecimal availableRefund = originalBonus.getAmount()
- .subtract(originalBonus.getRefundAmount() == null ? BigDecimal.ZERO
- : originalBonus.getRefundAmount())
- .subtract(refundBonus.getRefundAmount());
+ BigDecimal availableRefund = MathUtils.subtractDecimal(originalBonus.getAmount(), originalBonus.getRefundAmount(), refundBonus.getRefundAmount());
// 如果剩余可退金额足够承担误差
if (availableRefund.compareTo(BigDecimal.ZERO) > 0) {
@@ -101,14 +99,10 @@ public class BonusUtil {
*
* @param bonusList 原始分成列表
* @param refundAmount 需要退款总金额
- * @param payAmount 原支付金额
* @return 退款列表
*/
- public static List buildRefundList(List bonusList, BigDecimal refundAmount, BigDecimal payAmount) {
- if (CollectionUtils.isEmptyElement(bonusList) || refundAmount == null || payAmount == null) {
- return Collections.emptyList();
- }
- if (payAmount.compareTo(BigDecimal.ZERO) == 0) {
+ public static List buildRefundList(List bonusList, BigDecimal refundAmount) {
+ if (CollectionUtils.isEmptyElement(bonusList) || refundAmount == null) {
return Collections.emptyList();
}
List refundList = new ArrayList<>();
@@ -120,16 +114,20 @@ public class BonusUtil {
}
// 计算该分成记录的可退金额 = 分配金额 - 已退金额
- BigDecimal availableRefund = bonus.getAmount()
- .subtract(bonus.getRefundAmount() == null ? BigDecimal.ZERO : bonus.getRefundAmount());
+ BigDecimal availableRefund = MathUtils.subtractDecimal(bonus.getAmount(), bonus.getRefundAmount());
if (availableRefund.compareTo(BigDecimal.ZERO) <= 0) {
continue; // 跳过已无可退金额的记录
}
- // 按原始比例计算本次应退金额 = 本次退款总额 * (原始分配金额/订单总额)
- BigDecimal proportion = bonus.getAmount().divide(payAmount, 6, RoundingMode.HALF_UP);
+ // 根据分成比例计算本次应退金额
+ BigDecimal proportion = bonus.getPoint();
BigDecimal shouldRefund = refundAmount.multiply(proportion).setScale(2, RoundingMode.HALF_UP);
+ // 如果计算出的应退金额为0,但原始分成金额大于0,则使用剩余可退金额和退款金额中的较小值
+ if (shouldRefund.compareTo(BigDecimal.ZERO) == 0 && bonus.getAmount().compareTo(BigDecimal.ZERO) > 0) {
+ shouldRefund = availableRefund.min(refundAmount);
+ }
+
// 实际退款金额取可退金额与应退金额的较小值
BigDecimal actualRefund = shouldRefund.min(availableRefund);
if (actualRefund.compareTo(BigDecimal.ZERO) <= 0) {
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java
index fd8034b..c5f7364 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java
@@ -529,15 +529,7 @@ public class DeviceIotServiceImpl implements DeviceIotService {
// 更新设备信息
DeviceUtil.setIotSysInfo(device, dto.getSys(), LocalDateTime.now(), true, DeviceLocationType.PHONE);
- boolean lock = redisLock.lock(RedisLockKey.DEVICE_UPDATE_IOT_LOCK, device.getMac(), 60L);
- if (lock) {
- int update = this.updateIot(device);
- if (update != 1) {
- log.error("更新设备信息失败: {}", device.getMac());
- }
- } else {
- log.info("设备{}更新太频繁,跳过本次更新", device.getMac());
- }
+ this.updateIot(device);
return 1;
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderSeatDTO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderSeatDTO.java
index efe7824..723ac12 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderSeatDTO.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderSeatDTO.java
@@ -19,5 +19,8 @@ public class OrderSeatDTO {
@ApiModelProperty("手机纬度")
private BigDecimal lat;
+
+ @ApiModelProperty("物联网是否必须成功")
+ private Boolean requiredIot;
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderVerifyDTO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderVerifyDTO.java
index 9b20b19..83e4b00 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderVerifyDTO.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/dto/OrderVerifyDTO.java
@@ -17,10 +17,6 @@ public class OrderVerifyDTO implements LogBizParam {
@ApiModelProperty("订单ID")
@NotNull(message = "订单ID不能为空")
private Long id;
-
- @ApiModelProperty("是否通过")
- @NotNull(message = "是否通过不能为空")
- private Boolean pass;
@ApiModelProperty("审核备注")
@Size(max = 200, message = "审核备注不能超过200个字符")
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/enums/OrderStatus.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/enums/OrderStatus.java
index 9d5d749..12409f8 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/enums/OrderStatus.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/enums/OrderStatus.java
@@ -46,7 +46,7 @@ public enum OrderStatus {
// 可以退款的订单状态
public static List canRefund() {
- return CollectionUtils.map(OrderStatus::getCode, FINISHED, REFUNDED, REJECTED, WAIT_VERIFY);
+ return CollectionUtils.map(OrderStatus::getCode, FINISHED, REFUNDED);
}
// 未支付的订单状态
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.java
index 2fccd6c..ca8888c 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/mapper/OrderMapper.java
@@ -71,7 +71,7 @@ public interface OrderMapper {
/**
* 根据查询条件更新订单
- *
+ *
* @param data 更新数据
* @param query 查询条件
* @return 结果
@@ -80,7 +80,7 @@ public interface OrderMapper {
/**
* 查询订单用户数量
- *
+ *
* @param query 查询条件
* @return 结果
*/
@@ -88,7 +88,7 @@ public interface OrderMapper {
/**
* 查询订单数量
- *
+ *
* @param query 查询条件
* @return 结果
*/
@@ -96,7 +96,7 @@ public interface OrderMapper {
/**
* 查询订单支付金额
- *
+ *
* @param query 查询条件
* @return 结果
*/
@@ -104,7 +104,7 @@ public interface OrderMapper {
/**
* 查询订单退款金额
- *
+ *
* @param query 查询条件
* @return 结果
*/
@@ -112,7 +112,7 @@ public interface OrderMapper {
/**
* 查询订单每日统计
- *
+ *
* @param query 查询条件
* @param keys 查询字段
* @return 结果
@@ -121,7 +121,7 @@ public interface OrderMapper {
/**
* 查询订单每日退款统计
- *
+ *
* @param query 查询条件
* @param keys 查询字段
* @return 结果
@@ -131,7 +131,7 @@ public interface OrderMapper {
/**
* 查询订单排行榜
- *
+ *
* @param query 查询条件
* @return 结果
*/
@@ -139,7 +139,7 @@ public interface OrderMapper {
/**
* 查询订单状态数量
- *
+ *
* @param query 查询条件
* @return 结果
*/
@@ -147,7 +147,7 @@ public interface OrderMapper {
/**
* 增加车损费
- *
+ *
* @param id
* @param deductionFee
* @return
@@ -156,24 +156,15 @@ public interface OrderMapper {
/**
* 根据查询条件查询订单ID列表
- *
+ *
* @param query 查询条件
* @return 订单ID列表
*/
List selectIdByQuery(@Param("query") OrderQuery query);
- /**
- * 扣减实收金额
- *
- * @param id
- * @param amount
- * @return
- */
- int subtractActualAmount(@Param("id") Long id, @Param("amount") BigDecimal amount);
-
/**
* 查询订单实收金额
- *
+ *
* @param query 查询条件
* @return 结果
*/
@@ -181,7 +172,7 @@ public interface OrderMapper {
/**
* 查询订单骑行费
- *
+ *
* @param query 查询条件
* @return 结果
*/
@@ -189,7 +180,7 @@ public interface OrderMapper {
/**
* 查询订单车损费
- *
+ *
* @param query 查询条件
* @return 结果
*/
@@ -197,7 +188,7 @@ public interface OrderMapper {
/**
* 查询订单调度费
- *
+ *
* @param query 查询条件
* @return 结果
*/
@@ -205,7 +196,7 @@ public interface OrderMapper {
/**
* 查询订单管理费
- *
+ *
* @param query 查询条件
* @return 结果
*/
@@ -213,7 +204,7 @@ public interface OrderMapper {
/**
* 查询订单总金额
- *
+ *
* @param query 查询条件
* @return 结果
*/
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 7c1ec1f..f0a9e84 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
@@ -581,27 +581,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
+
update bst_order bo
left join bst_pay bp on bp.id = bo.pay_id
set bo.deposit_deduction_amount = bo.deposit_deduction_amount + #{amount}
- where bo.id = #{id}
+ where bo.id = #{id}
and >= #{amount}
-
+
- bp.amount - IFNULL(bp.refunding, 0) - IFNULL(bp.refunded, 0) - IFNULL(bo.deposit_deduction_amount, 0) - IFNULL(bo.actual_deduction_fee, 0)
+ bp.amount - IFNULL(bp.refunding, 0) - IFNULL(bp.refunded, 0) - IFNULL(bo.deposit_deduction_amount, 0)
update bst_order bo
+ left join bst_pay bp on bp.id = bo.pay_id
set bo.deduction_fee = bo.deduction_fee + #{deductionFee},
bo.actual_deduction_fee = bo.actual_deduction_fee + #{deductionFee},
- bo.total_fee = bo.total_fee + #{deductionFee}
- where bo.id = #{id}
+ bo.total_fee = bo.total_fee + #{deductionFee},
+ bo.actual_amount = bo.actual_amount + #{deductionFee},
+ bo.deposit_deduction_amount = bo.deposit_deduction_amount + #{deductionFee}
+ where bo.id = #{id}
and >= #{deductionFee}
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 1cf2c93..11bcf4b 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
@@ -541,12 +541,16 @@ public class OrderServiceImpl implements OrderService {
// 处理订单完成
private void handleFinished(Long orderId) {
+ // 查询订单数据
+ OrderVO order = selectOrderById(orderId);
+ ServiceUtil.assertion(order == null, "ID为%s的订单完成失败", orderId);
+
// 预分成
- boolean bonus = this.prepayBonus(orderId);
+ boolean bonus = this.prepayBonus(order);
ServiceUtil.assertion(!bonus, "ID为%s的订单预分成失败", orderId);
// 剩余金额退款
- int refund = this.refundRemainAmount(orderId);
+ int refund = this.refundRemainAmount(order);
ServiceUtil.assertion(refund != 1, "ID为%s的订单退还剩余金额失败", orderId);
}
@@ -560,27 +564,27 @@ public class OrderServiceImpl implements OrderService {
}
// 设置订单实收金额
- private void setActualAmount(Order order, BigDecimal payAmount) {
+ private void setActualAmount(Order data, OrderVO old, BigDecimal payAmount) {
// 实收金额
BigDecimal remain = payAmount;
+ data.setActualAmount(payAmount);
// 骑行费实收
- order.setActualRidingFee(MathUtils.min(remain, order.getRidingFee()));
- remain = MathUtils.subtractDecimal(remain, order.getActualRidingFee());
+ data.setActualRidingFee(MathUtils.min(remain, old.getRidingFee()));
+ remain = MathUtils.subtractDecimal(remain, data.getActualRidingFee());
// 调度费实收
- order.setActualDispatchFee(MathUtils.min(remain, order.getDispatchFee()));
- remain = MathUtils.subtractDecimal(remain, order.getActualDispatchFee());
+ data.setActualDispatchFee(MathUtils.min(remain, old.getDispatchFee()));
+ remain = MathUtils.subtractDecimal(remain, data.getActualDispatchFee());
// 管理费实收
- order.setActualManageFee(MathUtils.min(remain, order.getManageFee()));
+ data.setActualManageFee(MathUtils.min(remain, old.getManageFee()));
}
- private int refundRemainAmount(Long orderId) {
- OrderVO order = selectOrderById(orderId);
+ private int refundRemainAmount(OrderVO order) {
if (order == null) {
return 0;
}
// 订单剩余金额退款
// 退款金额 = 押金支付金额 - 押金抵扣金额 - 车损费
- BigDecimal refund = MathUtils.subtractDecimal(order.getPayedAmount(), order.getDepositDeductionAmount(), order.getDeductionFee());
+ BigDecimal refund = MathUtils.subtractDecimal(order.getPayedAmount(), order.getDepositDeductionAmount(), order.getActualDeductionFee());
if (refund != null && refund.compareTo(BigDecimal.ZERO) > 0) {
return this.refund(order, refund, null, null, "系统", RefundType.AUTO.getCode());
}
@@ -609,23 +613,13 @@ public class OrderServiceImpl implements OrderService {
canRefundAmount);
// 退款原因
- String refundReason = null;
- if (RefundType.ADMIN.getCode().equals(type)) {
- refundReason = String.format("【管理员退款】%s订单%s退款 %s 元", userName, order.getNo(), amount);
- } else {
- refundReason = String.format("【自动退款】%s订单%s退款 %s 元", userName, order.getNo(), amount);
- }
- if (StringUtils.isNotBlank(reason)) {
- refundReason += ":" + reason;
- }
- String finalRefundReason = refundReason;
+ String refundReason = this.getRefundReason(reason, type, userName, order.getNo(), amount);
Integer result = transactionTemplate.execute(status -> {
// 分成退款
if (RefundType.ADMIN.getCode().equals(type)) {
- boolean bonusRefund = bonusService.refundByBst(BonusBstType.ORDER, order.getId(), amount,
- order.getPayAmount(), finalRefundReason);
+ boolean bonusRefund = bonusService.refundByBst(BonusBstType.ORDER, order.getId(), amount, refundReason);
ServiceUtil.assertion(!bonusRefund, "ID为%s的订单分成退款失败", order.getId());
}
@@ -633,7 +627,7 @@ public class OrderServiceImpl implements OrderService {
PayRefundDTO dto = new PayRefundDTO();
dto.setId(order.getPayId());
dto.setRefundAmount(amount);
- dto.setRefundReason(finalRefundReason);
+ dto.setRefundReason(refundReason);
dto.setUserId(userId);
dto.setUserName(userName);
dto.setType(type);
@@ -644,6 +638,20 @@ public class OrderServiceImpl implements OrderService {
}
+ // 获取退款原因
+ private String getRefundReason(String reason, String type, String userName, String orderNo, BigDecimal amount) {
+ String refundReason = null;
+ if (RefundType.ADMIN.getCode().equals(type)) {
+ refundReason = String.format("【管理员退款】%s订单%s退款 %s 元", userName, orderNo, amount);
+ } else {
+ refundReason = String.format("【自动退款】%s订单%s退款 %s 元", userName, orderNo, amount);
+ }
+ if (StringUtils.isNotBlank(reason)) {
+ refundReason += ":" + reason;
+ }
+ return refundReason;
+ }
+
@Override
public OrderFeeVO calcFee(OrderCalcFeeDTO dto) {
// 查询订单
@@ -835,7 +843,6 @@ public class OrderServiceImpl implements OrderService {
ServiceUtil.assertion(!OrderStatus.canVerify().contains(order.getStatus()), "ID为%s的订单当前状态不允许审核", dto.getId());
// 更新订单状态
- boolean pass = dto.getPass() != null && dto.getPass();
Integer result = transactionTemplate.execute(status -> {
// 更新订单状态
Order data = new Order();
@@ -857,9 +864,7 @@ public class OrderServiceImpl implements OrderService {
}
// 订单结束操作
- if (pass) {
- this.handleFinished(order.getId());
- }
+ this.handleFinished(order.getId());
return rows;
});
@@ -868,12 +873,11 @@ public class OrderServiceImpl implements OrderService {
return result == null ? 0 : result;
}
- private boolean prepayBonus(Long orderId) {
- OrderVO order = selectOrderById(orderId);
+ private boolean prepayBonus(OrderVO order) {
if (order == null) {
return false;
}
- return bonusService.prepayByBst(BonusBstType.ORDER, orderId, order.getActualAmount(), order.getEndTime());
+ return bonusService.prepayByBst(BonusBstType.ORDER, order.getId(), order.getActualAmount(), order.getEndTime());
}
@Override
@@ -911,7 +915,8 @@ public class OrderServiceImpl implements OrderService {
// 异步使用手机定位更新设备定位
this.handleDeviceLocationAsync(device, dto.getLon(), dto.getLat());
- return deviceIotService.unlockSeat(device, "订单打开坐垫锁:" + order.getNo(), false);
+ // 发送命令开锁
+ return deviceIotService.unlockSeat(device, "订单打开坐垫锁:" + order.getNo(), dto.getRequiredIot());
}
@Override
@@ -967,7 +972,7 @@ public class OrderServiceImpl implements OrderService {
data.setId(order.getId());
data.setPayType(payType.getCode());
// 计算实收金额
- this.setActualAmount(data, bo.getPayAmount());
+ this.setActualAmount(data, order, bo.getPayAmount());
// 根据是否需要审核,设置订单状态
if (order.getAreaReturnVerify() != null && order.getAreaReturnVerify() && bo.getNeedVerify()) {
data.setStatus(OrderStatus.WAIT_VERIFY.getCode());
@@ -996,8 +1001,6 @@ public class OrderServiceImpl implements OrderService {
return rows;
});
-
-
return result == null ? 0 : result;
}
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/utils/OrderUtil.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/utils/OrderUtil.java
index 56b4101..0fae332 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/utils/OrderUtil.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/utils/OrderUtil.java
@@ -141,7 +141,7 @@ public class OrderUtil {
vo.setMobileAreaSub(mobileAreaSub);
// 是否在停车点
boolean inParking = deviceAreaSub != null || mobileAreaSub != null;
- vo.setInParking(inParking);
+ vo.setInParking(inParking);
// 实际停车点
if (deviceAreaSub != null) {
@@ -177,6 +177,9 @@ public class OrderUtil {
return vo;
}
+ /**
+ * 计算可退款的押金金额
+ */
public static BigDecimal calcCanRefundAmount(OrderVO order) {
if (order == null) {
return BigDecimal.ZERO;
@@ -199,7 +202,7 @@ public class OrderUtil {
}
/**
- * 剩余可抵扣押金
+ * 剩余可抵扣押金
* @param order
* @return
*/
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/orderDevice/mapper/OrderDeviceMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/orderDevice/mapper/OrderDeviceMapper.xml
index e6ad75c..337c999 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/orderDevice/mapper/OrderDeviceMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/orderDevice/mapper/OrderDeviceMapper.xml
@@ -45,7 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
su.nick_name as order_user_name,
mch.nick_name as device_mch_name,
bm.name as device_model_name,
- bm.enable_seat as device_model_eanble_seat
+ bm.enable_seat as device_model_enable_seat
from bst_order_device bod
left join bst_order bo on bo.id = bod.order_id
left join bst_device bd on bd.id = bod.device_id
diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java
index 8eab379..8ca5bec 100644
--- a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java
+++ b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppOrderController.java
@@ -225,6 +225,9 @@ public class AppOrderController extends BaseController {
OrderVO order = orderService.selectOrderById(dto.getOrderId());
ServiceUtil.assertion(!orderValidator.isUser(order, getUserId()), "您无权操作ID为%s的订单打开坐垫锁", order.getId());
+ if (dto.getRequiredIot() == null) {
+ dto.setRequiredIot(false);
+ }
return success(orderService.seat(dto));
}