From dd9ecb1c48cedf21c8c081993edc5be35e0b89d2 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: Fri, 9 May 2025 12:00:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=BB=9F=E8=AE=A1=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/bst/bonus/domain/Bonus.java | 2 ++ .../ruoyi/bst/bonus/domain/BonusQuery.java | 4 +++ .../ruoyi/bst/bonus/mapper/BonusMapper.xml | 25 +++++++++++++++++-- .../ruoyi/bst/bonus/service/BonusService.java | 10 +------- .../bonus/service/impl/BonusServiceImpl.java | 16 +++--------- .../service/impl/DeviceIotServiceImpl.java | 12 ++++----- .../ruoyi/bst/device/utils/DeviceUtil.java | 2 +- .../order/service/impl/OrderServiceImpl.java | 2 +- .../ruoyi/dashboard/constants/StatKeys.java | 2 ++ .../domain/revenueStat/RevenueStatQuery.java | 3 +-- .../domain/revenueStat/RevenueStatVO.java | 8 +++++- .../dashboard/service/DashboardService.java | 12 ++++++--- .../com/ruoyi/web/bst/BonusController.java | 10 -------- 13 files changed, 60 insertions(+), 48 deletions(-) diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/domain/Bonus.java b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/domain/Bonus.java index d01266c..3c5050a 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/domain/Bonus.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/domain/Bonus.java @@ -104,6 +104,8 @@ public class Bonus extends BaseEntity @ApiModelProperty("其他可见用户ID列表") private List viewUserIds; + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDateTime waitTime; public void addViewUserId(Long userId) { if (userId == null) { diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/domain/BonusQuery.java b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/domain/BonusQuery.java index c1e29c8..2a71885 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/domain/BonusQuery.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/bonus/domain/BonusQuery.java @@ -25,6 +25,10 @@ public class BonusQuery extends BonusVO { @ApiModelProperty("创建日期范围") @DateTimeFormat(pattern = "yyyy-MM-dd") private List createDateRange; + + @ApiModelProperty("结算日期范围") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private List waitDateRange; @ApiModelProperty("分成状态列表") private List statusList; 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 e56b87b..bb01ff5 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 @@ -34,7 +34,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bb.create_time, bb.area_id, bb.view_user_ids, - bb.channel_id + bb.channel_id, + bb.wait_time from @@ -68,6 +69,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and date(bb.create_time) >= #{query.createDateRange[0]} and date(bb.create_time) <= #{query.createDateRange[1]} + + and date(bb.wait_time) >= #{query.waitDateRange[0]} + and date(bb.wait_time) <= #{query.waitDateRange[1]} + and bb.status in @@ -117,6 +122,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" area_id, view_user_ids, channel_id, + wait_time, #{bstId}, @@ -139,6 +145,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{areaId}, #{viewUserIds,typeHandler=com.ruoyi.common.mybatis.typehandler.LongSplitListTypeHandler}, #{channelId}, + #{waitTime}, @@ -164,7 +171,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_time, area_id, view_user_ids, - channel_id + channel_id, + wait_time, values @@ -209,6 +217,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" default, #{i.channelId}, default, + #{i.waitTime}, + default, @@ -242,6 +252,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" area_id = #{data.areaId}, view_user_ids = #{data.viewUserIds,typeHandler=com.ruoyi.common.mybatis.typehandler.LongSplitListTypeHandler}, channel_id = #{data.channelId}, + wait_time = #{data.waitTime}, @@ -282,6 +293,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + WHEN #{item.id} THEN #{item.waitTime} + + + WHEN #{item.id} THEN bb.wait_time + + + bb.status = 'WAIT_DIVIDE', bb.wait_amount = bb.wait_amount + bb.invalid_amount, bb.invalid_amount = 0 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 c10d6c9..744c667 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 @@ -97,7 +97,7 @@ public interface BonusService { * @param bstId 业务ID * @return 结果 */ - public boolean prepayByBst(BonusBstType bstType, Long bstId); + public boolean prepayByBst(BonusBstType bstType, Long bstId, LocalDateTime waitTime); /** * 分成打款 @@ -144,12 +144,4 @@ public interface BonusService { */ public List preview(Long deviceId); - /** - * 预分成 - * - * @param id 分成明细ID - * @return 结果 - */ - public int prepayBonus(Long id); - } 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 c1d2073..4f2cbf3 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) { + public boolean prepayByBst(BonusBstType bstType, Long bstId, LocalDateTime waitTime) { if (bstType == null || bstId == null) { return false; } @@ -192,12 +192,12 @@ public class BonusServiceImpl implements BonusService { query.setBstType(bstType.getType()); query.setBstId(bstId); List list = this.selectBonusList(query); - int rows = prepay(list); + int rows = prepay(list, waitTime); return rows == list.size(); } // 预分成 - private int prepay(List list) { + private int prepay(List list, LocalDateTime waitTime) { if (CollectionUtils.isEmptyElement(list)) { return 0; } @@ -210,6 +210,7 @@ public class BonusServiceImpl implements BonusService { LocalDateTime now = LocalDateTime.now(); for (BonusVO bonus : list) { + bonus.setWaitTime(waitTime); // 设置预计分成时间 if (BonusArrivalType.userList().contains(bonus.getArrivalType())) { UserVO user = userList.stream().filter(item -> item.getUserId().equals(bonus.getArrivalId())) @@ -409,13 +410,4 @@ public class BonusServiceImpl implements BonusService { return bonusConverter.toBaseBonusListPlatform(device, partners, join); } - - @Override - public int prepayBonus(Long id) { - BonusVO bonus = this.selectBonusById(id); - if (bonus == null) { - return 0; - } - return prepay(Collections.singletonList(bonus)); - } } 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 7941c7a..9c4f0ce 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 @@ -359,12 +359,10 @@ public class DeviceIotServiceImpl implements DeviceIotService { // 监控设备 for (Long deviceId : idList) { try { - scheduledExecutorService.schedule(() -> { - // 获取设备最新信息 - DeviceVO device = deviceMapper.selectDeviceById(deviceId); - this.refresh(device, null); - this.monitor(device); - },0, TimeUnit.SECONDS); + // 获取设备最新信息 + DeviceVO device = deviceMapper.selectDeviceById(deviceId); + this.refresh(device, null); + this.monitor(device); } catch (Exception e) { log.error("监控设备id={}出错:{}", deviceId, e.getMessage()); } @@ -397,7 +395,7 @@ public class DeviceIotServiceImpl implements DeviceIotService { this.monitor(Collections.singletonList(deviceId)); this.asyncMonitorCount(deviceId, count - 1); } - }, count, TimeUnit.SECONDS); + }, 20 - count * 5, TimeUnit.SECONDS); } @Override diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java b/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java index 0f51f8b..978b671 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java @@ -30,7 +30,7 @@ public class DeviceUtil { if (coordinates != null && coordinates.size() >= 2) { device.setLongitude(coordinates.get(1)); device.setLatitude(coordinates.get(0)); - + // 只有定位是正常的才认为是有获取到定位 if (!MathUtils.equals(device.getLongitude(), BigDecimal.ZERO) && !MathUtils.equals(device.getLatitude(), BigDecimal.ZERO)) { device.setLastLocationTime(at); 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 49f31e1..9b3a16a 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 @@ -799,7 +799,7 @@ public class OrderServiceImpl implements OrderService { if (order == null) { return false; } - return bonusService.prepayByBst(BonusBstType.ORDER, orderId); + return bonusService.prepayByBst(BonusBstType.ORDER, orderId, order.getEndTime()); } @Override diff --git a/ruoyi-service/src/main/java/com/ruoyi/dashboard/constants/StatKeys.java b/ruoyi-service/src/main/java/com/ruoyi/dashboard/constants/StatKeys.java index dc66217..7666bdd 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/dashboard/constants/StatKeys.java +++ b/ruoyi-service/src/main/java/com/ruoyi/dashboard/constants/StatKeys.java @@ -13,6 +13,8 @@ public class StatKeys { public static final String ORDER_COUNT = "order_count"; // 订单支付金额 public static final String ORDER_PAY_AMOUNT = "order_pay_amount"; + // 订单结算支付金额 + public static final Object ORDER_FINISHED_PAY_AMOUNT = "order_finished_pay_amount"; // 订单退款金额 public static final String ORDER_REFUND_AMOUNT = "order_refund_amount"; // 待审核的订单 diff --git a/ruoyi-service/src/main/java/com/ruoyi/dashboard/domain/revenueStat/RevenueStatQuery.java b/ruoyi-service/src/main/java/com/ruoyi/dashboard/domain/revenueStat/RevenueStatQuery.java index ea64479..488c834 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/dashboard/domain/revenueStat/RevenueStatQuery.java +++ b/ruoyi-service/src/main/java/com/ruoyi/dashboard/domain/revenueStat/RevenueStatQuery.java @@ -91,7 +91,7 @@ public class RevenueStatQuery { query.setArrivalId(userId); query.setAreaId(areaId); query.setArrivalTypes(BonusArrivalType.userList()); - query.setCreateDateRange(dateRange); + query.setWaitDateRange(dateRange); return query; } @@ -189,7 +189,6 @@ public class RevenueStatQuery { query.setStatusList(OrderStatus.valid()); query.setRefundStatusList(RefundStatus.valid()); query.setRefundCreateDateRange(dateRange); - query.setBonusUserId(userId); query.setAreaId(areaId); query.setScope(scope); query.addAreaPermission(AreaJoinPermission.ORDER_VIEW.getCode()); diff --git a/ruoyi-service/src/main/java/com/ruoyi/dashboard/domain/revenueStat/RevenueStatVO.java b/ruoyi-service/src/main/java/com/ruoyi/dashboard/domain/revenueStat/RevenueStatVO.java index d766d01..1416e3c 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/dashboard/domain/revenueStat/RevenueStatVO.java +++ b/ruoyi-service/src/main/java/com/ruoyi/dashboard/domain/revenueStat/RevenueStatVO.java @@ -16,8 +16,14 @@ public class RevenueStatVO { private Integer orderUserCount; @ApiModelProperty("订单总金额") private BigDecimal orderActualTotalAmount; + @ApiModelProperty("订单支付金额") + private BigDecimal orderPayAmount; + @ApiModelProperty("订单结算支付金额") + private BigDecimal orderFinishedPayAmount; @ApiModelProperty("订单实收金额") - private BigDecimal orderActualAmount; + public BigDecimal getOrderActualAmount() { + return MathUtils.subtractDecimal(orderFinishedPayAmount, orderRefundAmount); + } @ApiModelProperty("订单骑行费") private BigDecimal orderRiddingFee; @ApiModelProperty("订单车损费") diff --git a/ruoyi-service/src/main/java/com/ruoyi/dashboard/service/DashboardService.java b/ruoyi-service/src/main/java/com/ruoyi/dashboard/service/DashboardService.java index da4e9ee..c4b5498 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/dashboard/service/DashboardService.java +++ b/ruoyi-service/src/main/java/com/ruoyi/dashboard/service/DashboardService.java @@ -148,8 +148,14 @@ public class DashboardService { // 订单总金额 if (keys.contains(StatKeys.ORDER_ACTUAL_AMOUNT)) { vo.setOrderActualTotalAmount(orderDashboard.selectSumOfActualTotalAmount(query.toOrderQueryForEnd())); - - vo.setOrderActualAmount(orderDashboard.selectSumOfActualAmount(query.toOrderQueryForEnd())); + } + // 订单结算支付金额 + if (keys.contains(StatKeys.ORDER_FINISHED_PAY_AMOUNT) || keys.contains(StatKeys.ORDER_ACTUAL_AMOUNT)) { + vo.setOrderFinishedPayAmount(orderDashboard.selectPayAmount(query.toOrderQueryForEnd())); + } + // 订单支付金额 + if (keys.contains(StatKeys.ORDER_PAY_AMOUNT)) { + vo.setOrderPayAmount(orderDashboard.selectPayAmount(query.toOrderQuery())); } // 订单骑行费 if (keys.contains(StatKeys.ORDER_RIDDING_FEE)) { @@ -172,7 +178,7 @@ public class DashboardService { vo.setOrderCount(orderDashboard.selectCount(query.toOrderQuery())); } // 订单退款金额 - if (keys.contains(StatKeys.ORDER_REFUND_AMOUNT)) { + if (keys.contains(StatKeys.ORDER_REFUND_AMOUNT) || keys.contains(StatKeys.ORDER_ACTUAL_AMOUNT)) { OrderRefundQuery refundQuery = query.toOrderRefundQuery(); refundQuery.setRefundType(RefundType.AUTO.getCode()); vo.setOrderAutoRefundAmount(orderDashboard.selectRefundAmount(refundQuery)); diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/BonusController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/BonusController.java index 764bbe1..1e37595 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/BonusController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/BonusController.java @@ -106,14 +106,4 @@ public class BonusController extends BaseController public AjaxResult pay(Long id) { return success(bonusService.payBonus(id)); } - - /** - * 预分成 - */ - @PreAuthorize("@ss.hasPermi('bst:bonus:prepay')") - @PutMapping("/prepay") - @Log(title = "预支付分成", businessType = BusinessType.OTHER, bizIdName = "arg0", bizType = LogBizType.BONUS ) - public AjaxResult prepay(Long id) { - return success(bonusService.prepayBonus(id)); - } }