diff --git a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/pay/tm/vo/TmTradeInfo.java b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/pay/tm/vo/TmTradeInfo.java
index aa7d822..b7cb413 100644
--- a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/pay/tm/vo/TmTradeInfo.java
+++ b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/pay/tm/vo/TmTradeInfo.java
@@ -9,7 +9,7 @@ public class TmTradeInfo {
/**
* 太米系统流水Id
*/
- private Integer id;
+ private String id;
/**
* 第三方内部流水号
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 b199ede..d0f7df0 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
@@ -9,7 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- bb.invalid_amount + bb.wait_amount + bb.payed_amount + bb.refund_amount = bb.amount
+ bb.wait_amount + bb.payed_amount + bb.refund_amount = bb.amount
@@ -277,7 +277,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and bb.status = 'INVALID'
and
-
+
update bst_bonus bb
@@ -301,9 +301,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- bb.status = 'WAIT_DIVIDE',
- bb.wait_amount = bb.wait_amount + bb.invalid_amount,
- bb.invalid_amount = 0
+
+
+
+ WHEN #{item.id} THEN #{item.waitAmount}
+
+
+ WHEN #{item.id} THEN bb.wait_amount
+
+
+
+
+
+
+ WHEN #{item.id} THEN #{item.amount}
+
+
+ WHEN #{item.id} THEN bb.amount
+
+
+
+ bb.status = 'WAIT_DIVIDE'
where bb.id in
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 744c667..e076869 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
@@ -95,9 +95,11 @@ public interface BonusService {
*
* @param bstType 业务类型
* @param bstId 业务ID
+ * @param totalAmount 总金额
+ * @param waitTime 待分成的时间
* @return 结果
*/
- public boolean prepayByBst(BonusBstType bstType, Long bstId, LocalDateTime waitTime);
+ public boolean prepayByBst(BonusBstType bstType, Long bstId, BigDecimal totalAmount, LocalDateTime waitTime);
/**
* 分成打款
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 032403a..9332d43 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
@@ -79,7 +79,6 @@ public class BonusConverterImpl implements BonusConverter {
bonus.setBstType(BonusBstType.ORDER.getType());
bonus.setBstId(order.getId());
bonus.setStatus(BonusStatus.INVALID.getStatus());
- bonus.setInvalidAmount(bonus.getAmount());
bonus.setToBalance(true);
bonus.setAreaId(order.getAreaId());
if (channel != null) {
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 dccbe94..9867a43 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
@@ -182,7 +182,7 @@ public class BonusServiceImpl implements BonusService {
}
@Override
- public boolean prepayByBst(BonusBstType bstType, Long bstId, LocalDateTime waitTime) {
+ public boolean prepayByBst(BonusBstType bstType, Long bstId, BigDecimal totalAmount, LocalDateTime waitTime) {
if (bstType == null || bstId == null) {
return false;
}
@@ -192,16 +192,19 @@ public class BonusServiceImpl implements BonusService {
query.setBstType(bstType.getType());
query.setBstId(bstId);
List list = this.selectBonusList(query);
- int rows = prepay(list, waitTime);
+ int rows = prepay(list, totalAmount, waitTime);
return rows == list.size();
}
// 预分成
- private int prepay(List list, LocalDateTime waitTime) {
+ private int prepay(List list, BigDecimal totalAmount, LocalDateTime waitTime) {
if (CollectionUtils.isEmptyElement(list)) {
return 0;
}
+ // 计算分成金额
+ BonusUtil.partAmount(list, totalAmount);
+
// 获取用户列表
List userList = userService.selectByIds(list.stream()
.filter(item -> BonusArrivalType.userList().contains(item.getArrivalType()))
@@ -210,6 +213,7 @@ public class BonusServiceImpl implements BonusService {
LocalDateTime now = LocalDateTime.now();
for (BonusVO bonus : list) {
+ bonus.setWaitAmount(bonus.getAmount());
bonus.setWaitTime(waitTime);
// 设置预计分成时间
if (BonusArrivalType.userList().contains(bonus.getArrivalType())) {
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml
index 58cc941..4190d97 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml
@@ -134,6 +134,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and bd.location_type = #{query.locationType}
and bd.order_device_id = #{query.orderDeviceId}
and bm.enable_seat = #{query.modelEnableSeat}
+ and bd.software_version like concat('%', #{query.softwareVersion}, '%')
and (
bd.sn like concat('%', #{query.keyword}, '%')
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/Order.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/Order.java
index 0f63637..0d4fd31 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/Order.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/domain/Order.java
@@ -54,28 +54,28 @@ public class Order extends BaseEntity {
@ApiModelProperty("支付金额")
private BigDecimal payAmount;
- @Excel(name = "订单总金额")
- @ApiModelProperty("订单总金额")
+ @Excel(name = "应收总金额")
+ @ApiModelProperty("应收总金额")
private BigDecimal totalFee;
@Excel(name = "押金")
@ApiModelProperty("押金")
private BigDecimal depositFee;
- @Excel(name = "调度费")
- @ApiModelProperty("调度费(停车点外)")
+ @Excel(name = "应收调度费")
+ @ApiModelProperty("应收调度费(停车点外)")
private BigDecimal dispatchFee;
- @Excel(name = "管理费")
- @ApiModelProperty("管理费(运营区外)")
+ @Excel(name = "应收管理费")
+ @ApiModelProperty("应收管理费(运营区外)")
private BigDecimal manageFee;
- @Excel(name = "骑行费")
- @ApiModelProperty("骑行费")
+ @Excel(name = "应收骑行费")
+ @ApiModelProperty("应收骑行费")
private BigDecimal ridingFee;
- @Excel(name = "车损费")
- @ApiModelProperty("车损费")
+ @Excel(name = "应收车损费")
+ @ApiModelProperty("应收车损费")
private BigDecimal deductionFee;
@Excel(name = "备注")
@@ -190,6 +190,9 @@ public class Order extends BaseEntity {
@ApiModelProperty("审核备注")
private String verifyRemark;
+ @ApiModelProperty("实收金额")
+ private BigDecimal actualAmount;
+
@Excel(name = "实收骑行费")
@ApiModelProperty("实收骑行费")
private BigDecimal actualRidingFee;
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 ac482c2..749d93f 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
@@ -71,10 +71,6 @@ public class OrderVO extends Order implements IotDevice {
@ApiModelProperty("管理员退款金额")
private BigDecimal payAdminRefund;
- // 实收金额 = 最小值(支付金额,结算金额) - 退款金额 - 退款中金额
- @ApiModelProperty("实收金额")
- private BigDecimal actualAmount;
-
// 剩余可抵扣押金
@ApiModelProperty("剩余可抵扣押金")
private BigDecimal depositDeductRemain;
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 76d41ab..7c1ec1f 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
@@ -60,12 +60,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bo.actual_dispatch_fee,
bo.actual_manage_fee,
bo.actual_deduction_fee,
+ bo.actual_amount,
bo.suit_deposit_deduction,
bo.version,
bo.pay_type,
bo.deposit_deduction_amount,
bo.ride_pay_id,
- as actual_amount,
as deposit_deduct_remain,
ba.name as area_name,
su.nick_name as user_name,
@@ -264,6 +264,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
pay_type,
deposit_deduction_amount,
ride_pay_id,
+ actual_amount,
#{no},
@@ -315,6 +316,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{payType},
#{depositDeductionAmount},
#{ridePayId},
+ #{actualAmount},
@@ -376,6 +378,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
pay_type = #{data.payType},
deposit_deduction_amount = #{data.depositDeductionAmount},
ride_pay_id = #{data.ridePayId},
+ actual_amount = #{data.actualAmount},
@@ -484,7 +487,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select
bo.area_id,
ba.name as area_name,
- sum(if(bo.status = 'PROCESSING', 0, )) as actual_amount,
+ sum(bo.actual_amount) as actual_amount,
count(bo.id) as `count`,
sum(if(bo.status = 'PROCESSING', 1, 0)) as processing_count
from
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderPayHandlerImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderPayHandlerImpl.java
index 8d0f4f0..3ca8d17 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderPayHandlerImpl.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/order/service/impl/OrderPayHandlerImpl.java
@@ -6,7 +6,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
-import com.ruoyi.bst.bonus.domain.enums.BonusBstType;
import com.ruoyi.bst.bonus.service.BonusService;
import com.ruoyi.bst.device.domain.enums.DeviceUnLockType;
import com.ruoyi.bst.device.domain.vo.DeviceIotVO;
@@ -85,10 +84,6 @@ public class OrderPayHandlerImpl implements PayHandler {
int rows = orderMapper.updateByQuery(data, query);
ServiceUtil.assertion(rows != 1, "更新ID为%s的订单失败", order.getId());
- // 分成出账
- boolean valid = bonusService.validByBst(BonusBstType.ORDER, order.getId());
- ServiceUtil.assertion(!valid, "ID为%s的订单分成出账失败", order.getId());
-
// 开始使用订单设备
int start = orderDeviceService.start(orderDevice);
ServiceUtil.assertion(start != 1, "开始使用ID为%s的订单设备失败", orderDevice.getId());
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 a9f8ffa..1cf2c93 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
@@ -255,7 +255,6 @@ public class OrderServiceImpl implements OrderService {
ServiceUtil.assertion(dto == null || dto.getDeviceId() == null, "参数错误");
// 加锁,防止设备重复下单
- // TODO 可以考虑加锁60秒,存储车辆、用户ID,60秒内只允许同一个用户下单。
Long lockKey = dto.getDeviceId();
boolean lock = redisLock.lock(RedisLockKey.ORDER_CREATE, lockKey);
ServiceUtil.assertion(!lock, "当前车辆使用的人太多了,请稍后再试");
@@ -457,6 +456,11 @@ public class OrderServiceImpl implements OrderService {
int finish = orderDeviceService.finish(orderDevice, dto.getPicture(), inParkingVO);
ServiceUtil.assertion(finish != 1, "结束ID为%s的订单设备失败", orderDevice.getId());
+ // 自动押金抵扣
+ if (order.getSuitDepositDeduction() != null && order.getSuitDepositDeduction()) {
+ this.autoDeduct(order);
+ }
+
// 设备上锁(必须放最后,因为会操作设备)
DeviceIotVO lock = deviceIotService.lock(orderDevice.getDeviceId(), isAdmin,
"订单结束上锁:" + orderDevice.getOrderNo(), dto.getRequiredIot());
@@ -466,10 +470,6 @@ public class OrderServiceImpl implements OrderService {
return rows;
});
- if (order.getSuitDepositDeduction() != null && order.getSuitDepositDeduction()) {
- this.autoDeduct(order);
- }
-
return vo;
}
@@ -540,14 +540,14 @@ public class OrderServiceImpl implements OrderService {
}
// 处理订单完成
- private void handleFinished(OrderVO order) {
+ private void handleFinished(Long orderId) {
// 预分成
- boolean bonus = this.prepayBonus(order.getId());
- ServiceUtil.assertion(!bonus, "ID为%s的订单预分成失败", order.getId());
+ boolean bonus = this.prepayBonus(orderId);
+ ServiceUtil.assertion(!bonus, "ID为%s的订单预分成失败", orderId);
// 剩余金额退款
- int refund = this.refundRemainAmount(order);
- ServiceUtil.assertion(refund != 1, "ID为%s的订单退还剩余金额失败", order.getId());
+ int refund = this.refundRemainAmount(orderId);
+ ServiceUtil.assertion(refund != 1, "ID为%s的订单退还剩余金额失败", orderId);
}
// 设置订单费用
@@ -573,7 +573,8 @@ public class OrderServiceImpl implements OrderService {
order.setActualManageFee(MathUtils.min(remain, order.getManageFee()));
}
- private int refundRemainAmount(OrderVO order) {
+ private int refundRemainAmount(Long orderId) {
+ OrderVO order = selectOrderById(orderId);
if (order == null) {
return 0;
}
@@ -696,7 +697,6 @@ public class OrderServiceImpl implements OrderService {
@Override
public int refund(OrderRefundDTO dto) {
OrderVO order = this.selectOrderById(dto.getOrderId());
-
return this.refund(order, dto.getAmount(), dto.getReason(), dto.getUserId(), dto.getUserName(), dto.getType());
}
@@ -858,7 +858,7 @@ public class OrderServiceImpl implements OrderService {
// 订单结束操作
if (pass) {
- this.handleFinished(order);
+ this.handleFinished(order.getId());
}
return rows;
@@ -873,7 +873,7 @@ public class OrderServiceImpl implements OrderService {
if (order == null) {
return false;
}
- return bonusService.prepayByBst(BonusBstType.ORDER, orderId, order.getEndTime());
+ return bonusService.prepayByBst(BonusBstType.ORDER, orderId, order.getActualAmount(), order.getEndTime());
}
@Override
@@ -990,7 +990,7 @@ public class OrderServiceImpl implements OrderService {
// 订单结束操作
if (OrderStatus.FINISHED.getCode().equals(data.getStatus())) {
- this.handleFinished(order);
+ this.handleFinished(order.getId());
}
return rows;