From cd4e26608b01cbc376760d96e2eab5d0a796f0b0 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期二, 28 七月 2026 10:14:04 +0800
Subject: [PATCH] 合并监控
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 72 ++++++++++++++++--------------------
1 files changed, 32 insertions(+), 40 deletions(-)
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
index 9314981..5ca26f5 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -20,10 +20,12 @@
import com.ruoyi.chargingPile.api.domain.SiteMenu;
import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
import com.ruoyi.chargingPile.api.feignClient.*;
+import com.ruoyi.chargingPile.api.model.Partner;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.chargingPile.api.model.TParkingRecord;
+import com.ruoyi.chargingPile.api.model.TPartnerAppUser;
import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.dto.ChargingOrderGroup;
@@ -57,6 +59,7 @@
import com.ruoyi.order.export.PayOrderExport;
import com.ruoyi.order.export.EnterpriseChargingDetailExport;
import com.ruoyi.order.service.*;
+import com.ruoyi.order.support.FranchiseeUserStatistics;
import com.ruoyi.order.util.PreviousSixMonths;
import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService;
import com.ruoyi.order.vo.EndOfChargePageInfo;
@@ -230,20 +233,22 @@
@PostMapping("/app/franchisee/user")
public R<Map<String, Object>> franchiseeUser(@RequestBody(required = false) Map<String, Object> params) {
- List<TChargingOrder> orders = franchiseeOrders(params);
- Set<Long> users = orders.stream().map(TChargingOrder::getAppUserId).filter(Objects::nonNull).collect(Collectors.toSet());
- List<Integer> siteIds = franchiseeSiteIds(params);
+ Partner partner = franchiseePartner();
+ List<Integer> siteIds = partner == null ? Collections.emptyList() : franchiseeSiteIds(params, partner.getId());
LocalDateTime[] range = franchiseeRange(params);
- Set<Long> newUsers = new HashSet<>();
- if (!siteIds.isEmpty() && range[0] != null && range[1] != null) {
- List<TChargingOrder> allOrders = franchiseeOrders(siteIds, null, range[1]);
- Map<Long, LocalDateTime> firstOrder = new HashMap<>();
- for (TChargingOrder order : allOrders) {
- if (order.getAppUserId() == null || order.getEndTime() == null) continue;
- firstOrder.merge(order.getAppUserId(), order.getEndTime(), (oldTime, newTime) -> oldTime.isBefore(newTime) ? oldTime : newTime);
+ List<TChargingOrder> orders = franchiseeOrders(siteIds, range[0], range[1]).stream()
+ .filter(order -> Objects.equals(order.getStatus(), 5))
+ .collect(Collectors.toList());
+ Set<Long> users = orders.stream().map(TChargingOrder::getAppUserId).filter(Objects::nonNull).collect(Collectors.toSet());
+ List<TPartnerAppUser> relations = Collections.emptyList();
+ if (partner != null && partner.getId() != null) {
+ R<List<TPartnerAppUser>> relationResult = partnerClient.getBoundAppUserRelations(partner.getId());
+ if (relationResult != null && relationResult.getData() != null) {
+ relations = relationResult.getData();
}
- firstOrder.forEach((userId, firstTime) -> { if (!firstTime.isBefore(range[0])) newUsers.add(userId); });
}
+ FranchiseeUserStatistics.Result userStatistics = FranchiseeUserStatistics.calculate(
+ orders, relations, range[0], range[1]);
List<TAppUser> appUsers = Collections.emptyList();
if (!users.isEmpty()) {
@@ -262,9 +267,8 @@
Map<String, Object> evaluation = franchiseeEvaluation(siteIds);
Map<String, Object> result = new LinkedHashMap<>();
- Map<String, Object> summary = new LinkedHashMap<>(); summary.put("chargeUserCount", users.size()); summary.put("newUserCount", newUsers.size());
- result.put("summary", summary);
- result.put("userStats", franchiseeUserTrend(orders, newUsers, range));
+ result.put("summary", userStatistics.getSummary());
+ result.put("userStats", userStatistics.getTrend());
result.put("userTags", franchiseeUserTags(orders));
Map<Integer, String> vipNames = new HashMap<>();
R<List<TVip>> vipResult = vipClient.getAllVip();
@@ -319,40 +323,27 @@
}
private List<Integer> franchiseeSiteIds(Map<String, Object> params) {
- if (tokenService.getLoginUserApplet() == null || tokenService.getLoginUserApplet().getUserId() == null) return Collections.emptyList();
- Long appUserId = tokenService.getLoginUserApplet().getUserId();
- R<com.ruoyi.chargingPile.api.model.Partner> partnerResult = partnerClient.getPartnerByAppUserId(appUserId);
- com.ruoyi.chargingPile.api.model.Partner partner = partnerResult == null ? null : partnerResult.getData();
+ Partner partner = franchiseePartner();
if (partner == null || partner.getId() == null) return Collections.emptyList();
+ return franchiseeSiteIds(params, partner.getId());
+ }
+
+ private Partner franchiseePartner() {
+ if (tokenService.getLoginUserApplet() == null || tokenService.getLoginUserApplet().getUserId() == null) return null;
+ Long appUserId = tokenService.getLoginUserApplet().getUserId();
+ R<Partner> partnerResult = partnerClient.getPartnerByAppUserId(appUserId);
+ return partnerResult == null ? null : partnerResult.getData();
+ }
+
+ private List<Integer> franchiseeSiteIds(Map<String, Object> params, Integer partnerId) {
R<List<Site>> siteResult = siteClient.getSiteAll();
List<Site> sites = siteResult == null ? null : siteResult.getData();
- List<Integer> siteIds = sites == null ? new ArrayList<>() : sites.stream().filter(s -> Objects.equals(s.getPartnerId(), partner.getId())).map(Site::getId).collect(Collectors.toList());
+ List<Integer> siteIds = sites == null ? new ArrayList<>() : sites.stream().filter(s -> Objects.equals(s.getPartnerId(), partnerId)).map(Site::getId).collect(Collectors.toList());
Object requestedSite = params == null ? null : params.get("siteId");
if (requestedSite != null && !String.valueOf(requestedSite).isEmpty()) {
Integer siteId = Integer.valueOf(String.valueOf(requestedSite)); siteIds = siteIds.contains(siteId) ? Collections.singletonList(siteId) : Collections.singletonList(-1);
}
return siteIds;
- }
-
- private Map<String, Object> franchiseeUserTrend(List<TChargingOrder> orders, Set<Long> newUsers, LocalDateTime[] range) {
- LocalDate start = range[0] == null ? LocalDate.now() : range[0].toLocalDate();
- LocalDate end = range[1] == null ? start.plusDays(1) : range[1].toLocalDate();
- List<String> categories = new ArrayList<>();
- List<BigDecimal> chargeUsers = new ArrayList<>(), newUserCounts = new ArrayList<>();
- for (LocalDate day = start; day.isBefore(end); day = day.plusDays(1)) {
- LocalDateTime dayStart = day.atStartOfDay(), dayEnd = day.plusDays(1).atStartOfDay();
- Set<Long> dayUsers = orders.stream().filter(order -> order.getAppUserId() != null && order.getEndTime() != null
- && !order.getEndTime().isBefore(dayStart) && order.getEndTime().isBefore(dayEnd))
- .map(TChargingOrder::getAppUserId).collect(Collectors.toSet());
- long newCount = dayUsers.stream().filter(newUsers::contains).count();
- categories.add(day.toString().substring(5));
- chargeUsers.add(BigDecimal.valueOf(dayUsers.size()));
- newUserCounts.add(BigDecimal.valueOf(newCount));
- }
- Map<String, Object> chart = new LinkedHashMap<>(); chart.put("categories", categories);
- Map<String, Object> chargeSeries = new LinkedHashMap<>(); chargeSeries.put("name", "充电用户"); chargeSeries.put("data", chargeUsers);
- Map<String, Object> newSeries = new LinkedHashMap<>(); newSeries.put("name", "新增用户"); newSeries.put("data", newUserCounts);
- chart.put("series", Arrays.asList(chargeSeries, newSeries)); return chart;
}
private List<Map<String, Object>> franchiseeUserTags(List<TChargingOrder> orders) {
@@ -892,6 +883,7 @@
payOrderInfoDto.setThirdPayAmount(byId.getThirdPayAmount());
payOrderInfoDto.setBalanceRefundAmount(byId.getBalanceRefundAmount());
payOrderInfoDto.setThirdRefundAmount(byId.getThirdRefundAmount());
+ payOrderInfoDto.setRefundableAmount(chargingOrderService.getManualRefundableAmount(byId.getId()));
return R.ok(payOrderInfoDto);
case 2:
TShoppingOrder byId1 = shoppingOrderService.getById(orderId);
--
Gitblit v1.7.1