From 9c3aae72bb1faf4cedcc8f91b5a53f0bf2c4f91a Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期六, 18 七月 2026 15:06:19 +0800
Subject: [PATCH] 订单列表优化

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |  234 ++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 130 insertions(+), 104 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index e9311f9..c3585f3 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -2548,17 +2548,84 @@
 	
 	@Override
 	public TCharingOrderVO chargingOrder(ChargingOrderQuery dto) {
+		TCharingOrderVO summary = chargingOrderSummary(dto);
+		summary.setList(chargingOrderList(dto));
+		return summary;
+	}
+
+	@Override
+	public PageInfo<ChargingOrderVO> chargingOrderList(ChargingOrderQuery dto) {
+		String[] timeRange = parseChargingOrderTimeRange(dto);
+		String startTime1 = timeRange[0];
+		String startTime2 = timeRange[1];
+		String endTime1 = timeRange[2];
+		String endTime2 = timeRange[3];
+		PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
+		if (StringUtils.hasLength(dto.getPhone())) {
+			List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
+			if (data == null || data.isEmpty()) {
+				return pageInfo;
+			}
+			dto.setUserIds(data);
+		}
+		Long userId = tokenService.getLoginUser().getUserid();
+		SysUser sysUser = sysUserClient.getSysUser(userId).getData();
+		Integer roleType = sysUser.getRoleType();
+		setChargingOrderAuthSiteIds(dto, sysUser, userId, roleType);
+		List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
+		fillChargingOrderBalanceIncome(list);
+		fillChargingOrderShareIncome(list);
+		fillChargingOrderPageExtra(list, dto.getSiteIds(), sysUser, roleType);
+		pageInfo.setRecords(list);
+		return pageInfo;
+	}
+
+	@Override
+	public TCharingOrderVO chargingOrderSummary(ChargingOrderQuery dto) {
 		TCharingOrderVO tCharingOrderVO = new TCharingOrderVO();
-		List<TChargingGun> allGun = chargingGunClient.getAllGun().getData();
-		List<TChargingPile> allPile = chargingGunClient.getAllPile().getData();
-		List<Site> data9 = siteClient.getSiteAll().getData();
-		List<TAppUser> data6 = appUserClient.getAllUser().getData();
-		List<TAppUserCar> data4 = appUserCarClient.getAllCar().getData();
+		fillEmptyChargingOrderSummary(tCharingOrderVO);
+		String[] timeRange = parseChargingOrderTimeRange(dto);
+		String startTime1 = timeRange[0];
+		String startTime2 = timeRange[1];
+		String endTime1 = timeRange[2];
+		String endTime2 = timeRange[3];
+		if (StringUtils.hasLength(dto.getPhone())) {
+			List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
+			if (data == null || data.isEmpty()) {
+				return tCharingOrderVO;
+			}
+			dto.setUserIds(data);
+		}
+		Long userId = tokenService.getLoginUser().getUserid();
+		SysUser sysUser = sysUserClient.getSysUser(userId).getData();
+		setChargingOrderAuthSiteIds(dto, sysUser, userId, sysUser.getRoleType());
+		Map<String, Object> map = this.baseMapper.chargingOrderBaseSummary(dto, startTime1, startTime2, endTime1, endTime2);
+		if (null != map) {
+			tCharingOrderVO.setTotal(getSummaryDecimal(map, "total"));
+			tCharingOrderVO.setTime(getSummaryLong(map, "time"));
+			tCharingOrderVO.setIncome(getSummaryDecimal(map, "income"));
+			tCharingOrderVO.setElectronicMoney(getSummaryDecimal(map, "electronicMoney"));
+			tCharingOrderVO.setServiceMoney(getSummaryDecimal(map, "serviceMoney"));
+			tCharingOrderVO.setWechatIncome(getSummaryDecimal(map, "wechatIncome"));
+			tCharingOrderVO.setAlipayIncome(getSummaryDecimal(map, "alipayIncome"));
+			tCharingOrderVO.setWhitelistChargingIncome(getSummaryDecimal(map, "whitelistChargingIncome"));
+			tCharingOrderVO.setWhitelistRefund(getSummaryDecimal(map, "whitelistRefund"));
+		}
+		List<Long> summaryOrderIds = this.baseMapper.chargingOrderSummaryOrderIds(dto, startTime1, startTime2, endTime1, endTime2);
+		Map<String, Object> shareIncomeMap = getChargingOrderShareIncomeSummary(summaryOrderIds);
+		tCharingOrderVO.setPlatformIncomeTotal(getSummaryDecimal(shareIncomeMap, "platformIncomeTotal"));
+		tCharingOrderVO.setPartnerIncomeTotal(getSummaryDecimal(shareIncomeMap, "partnerIncomeTotal"));
+		Map<String, Object> balanceMap = getExchangeCodeBalanceSummary(summaryOrderIds);
+		tCharingOrderVO.setBalanceIncome(getSummaryDecimal(balanceMap, "balanceIncome"));
+		tCharingOrderVO.setBalanceGiftIncome(getSummaryDecimal(balanceMap, "balanceGiftIncome"));
+		return tCharingOrderVO;
+	}
+
+	private String[] parseChargingOrderTimeRange(ChargingOrderQuery dto) {
 		String startTime1 = null;
 		String startTime2 = null;
 		String endTime1 = null;
 		String endTime2 = null;
-		
 		if (StringUtils.hasLength(dto.getStartTime())) {
 			String[] split = dto.getStartTime().split(" - ");
 			startTime1 = split[0];
@@ -2569,115 +2636,76 @@
 			endTime1 = split[0];
 			endTime2 = split[1];
 		}
-		PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
-		
-		if (StringUtils.hasLength(dto.getPhone())) {
-			List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
-			if (data.isEmpty()) {
-				tCharingOrderVO.setList(pageInfo);
-				return tCharingOrderVO;
-			}
-			dto.setUserIds(data);
+		return new String[]{startTime1, startTime2, endTime1, endTime2};
+	}
+
+	private void fillChargingOrderPageExtra(List<ChargingOrderVO> list, List<Integer> siteIds, SysUser sysUser, Integer roleType) {
+		if (list == null || list.isEmpty()) {
+			return;
 		}
-		Long userId = tokenService.getLoginUser().getUserid();
-		// 查询当前登陆人按钮权限
-		SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
-		Integer roleType = sysUser.getRoleType();
-			setChargingOrderAuthSiteIds(dto, sysUser, userId, roleType);
-			List<Integer> siteIds = dto.getSiteIds();
-			List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
-			fillChargingOrderBalanceIncome(list);
-			fillChargingOrderShareIncome(list);
-			List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
+		List<Long> orderIds = list.stream().map(ChargingOrderVO::getId).filter(Objects::nonNull).collect(Collectors.toList());
+		List<Integer> pageSiteIds = list.stream().map(ChargingOrderVO::getSiteId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+		List<Integer> pageGunIds = list.stream().map(ChargingOrderVO::getChargingGunId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+		List<TChargingGun> pageGuns = pageGunIds.isEmpty() ? new ArrayList<>() : Optional.ofNullable(chargingGunClient.getChargingGunByIds(pageGunIds).getData()).orElse(new ArrayList<>());
+		Map<Integer, TChargingGun> gunMap = pageGuns.stream()
+				.filter(item -> item.getId() != null)
+				.collect(Collectors.toMap(TChargingGun::getId, item -> item, (a, b) -> a));
+		List<TChargingPile> pagePiles = pageSiteIds.isEmpty() ? new ArrayList<>() : Optional.ofNullable(chargingPileClient.getChargingPileBySiteIds(pageSiteIds).getData()).orElse(new ArrayList<>());
+		Map<Integer, TChargingPile> pileMap = pagePiles.stream()
+				.filter(item -> item.getId() != null)
+				.collect(Collectors.toMap(TChargingPile::getId, item -> item, (a, b) -> a));
+		List<Site> pageSites = pageSiteIds.isEmpty() ? new ArrayList<>() : Optional.ofNullable(siteClient.getSiteByIds(pageSiteIds).getData()).orElse(new ArrayList<>());
+		Map<Integer, Site> siteMap = pageSites.stream()
+				.filter(item -> item.getId() != null)
+				.collect(Collectors.toMap(Site::getId, item -> item, (a, b) -> a));
+		Map<Long, List<TChargingOrderAccountingStrategy>> strategyMap = orderIds.isEmpty() ? new HashMap<>() :
+				chargingOrderAccountingStrategyService.lambdaQuery()
+						.in(TChargingOrderAccountingStrategy::getChargingOrderId, orderIds)
+						.list()
+						.stream()
+						.collect(Collectors.groupingBy(TChargingOrderAccountingStrategy::getChargingOrderId));
+		Map<Integer, Boolean> authRecordMap = new HashMap<>();
+		if (roleType == 2 && siteIds != null) {
+			for (Integer siteId : siteIds) {
+				List<Boolean> permission = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData();
+				authRecordMap.put(siteId, permission != null && !permission.isEmpty() && Boolean.TRUE.equals(permission.get(0)));
+			}
+		}
 		for (ChargingOrderVO chargingOrderVO : list) {
-			if (roleType == 2) {
-				for (Integer siteId : siteIds) {
-					// 校验有没有这个站点的权限
-					List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData();
-					chargingOrderVO.setAuthRecord(t1.get(0));
-				}
+			if (roleType == 2 && chargingOrderVO.getSiteId() != null) {
+				chargingOrderVO.setAuthRecord(Boolean.TRUE.equals(authRecordMap.get(chargingOrderVO.getSiteId())));
 			}
 			chargingOrderVO.setCommissionAmount(chargingOrderVO.getRechargeAmount() != null ? chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")) : new BigDecimal("0"));
 			chargingOrderVO.setPlatFormMoney(chargingOrderVO.getRechargeAmount() != null ? chargingOrderVO.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2, BigDecimal.ROUND_DOWN) : new BigDecimal("0"));
 			chargingOrderVO.setUid(chargingOrderVO.getId() + "");
-			TChargingGun data3 = allGun.stream().filter(e -> e.getId().equals(chargingOrderVO.getChargingGunId())).findFirst().orElse(null);
-			TChargingPile data2 = allPile.stream().filter(e -> e.getId().equals(chargingOrderVO.getChargingPileId())).findFirst().orElse(null);
-			if (chargingOrderVO.getSiteId() != null) {
-				List<Integer> integers = new ArrayList<>();
-				integers.add(chargingOrderVO.getSiteId());
-				Site site = data9.stream().filter(e -> e.getId().equals(chargingOrderVO.getSiteId())).findFirst().orElse(null);
-				if (site != null) chargingOrderVO.setSiteName(site.getName());
+			Site site = siteMap.get(chargingOrderVO.getSiteId());
+			if (site != null) {
+				chargingOrderVO.setSiteName(site.getName());
 			}
-			if (data2 != null && data3 != null) {
-				chargingOrderVO.setTerminalName(data2.getName() + "-" + data3.getName());
+			TChargingGun gun = gunMap.get(chargingOrderVO.getChargingGunId());
+			TChargingPile pile = pileMap.get(chargingOrderVO.getChargingPileId());
+			if (pile != null && gun != null) {
+				chargingOrderVO.setTerminalName(pile.getName() + "-" + gun.getName());
 			}
-			// 充电订单 明细记录
-			List<TChargingOrderAccountingStrategy> chargingOrderId = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
+			List<TChargingOrderAccountingStrategy> strategies = strategyMap.getOrDefault(chargingOrderVO.getId(), new ArrayList<>());
 			if (chargingOrderVO.getStartTime() != null && chargingOrderVO.getEndTime() != null) {
-				LocalDateTime startTime = chargingOrderVO.getStartTime();
-				LocalDateTime endTime = chargingOrderVO.getEndTime();
-				// 计算时间差 单位秒
-				long between = ChronoUnit.SECONDS.between(startTime, endTime);
+				long between = ChronoUnit.SECONDS.between(chargingOrderVO.getStartTime(), chargingOrderVO.getEndTime());
 				chargingOrderVO.setChargingSecond(between);
-				
-				BigDecimal electronic_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-				chargingOrderVO.setElectrovalence(electronic_reduce);
-				BigDecimal service_reduce = chargingOrderId.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-				if (!chargingOrderVO.getOrderSource().equals(2)) {
-					chargingOrderVO.setServiceCharge(service_reduce);
+				BigDecimal electronicReduce = strategies.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				chargingOrderVO.setElectrovalence(electronicReduce);
+				BigDecimal serviceReduce = strategies.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				if (!Objects.equals(chargingOrderVO.getOrderSource(), 2)) {
+					chargingOrderVO.setServiceCharge(serviceReduce);
 					chargingOrderVO.setSharingAmount(BigDecimal.ZERO);
 				} else {
-					chargingOrderVO.setServiceCharge(service_reduce.multiply(new BigDecimal("0.8")));
-					chargingOrderVO.setSharingAmount(service_reduce.multiply(new BigDecimal("0.2")));
+					chargingOrderVO.setServiceCharge(serviceReduce.multiply(new BigDecimal("0.8")));
+					chargingOrderVO.setSharingAmount(serviceReduce.multiply(new BigDecimal("0.2")));
 				}
 			}
-			// 充电时段数
-			int size = chargingOrderId.size();
-			chargingOrderVO.setCount(size);
-			// 用户手机号
-			TAppUser data = data6.stream().filter(e -> e.getId().equals(chargingOrderVO.getAppUserId())).findFirst().orElse(null);
-			if (data != null) {
-				// 车牌号
-				chargingOrderVO.setPhone(data.getPhone());
-				List<Long> longs = new ArrayList<>();
-				if (chargingOrderVO.getAppUserCarId() != null) {
-					longs.add(chargingOrderVO.getAppUserCarId());
-					TAppUserCar tAppUserCar = data4.stream().filter(e -> e.getId().equals(chargingOrderVO.getAppUserCarId())).findFirst().orElse(null);
-					if (tAppUserCar != null) {
-						chargingOrderVO.setLicensePlate(tAppUserCar.getLicensePlate());
-					}
-				} else {
-					chargingOrderVO.setLicensePlate(chargingOrderVO.getPlateNum());
-				}
-				
-			}
+			chargingOrderVO.setCount(strategies.size());
+			chargingOrderVO.setLicensePlate(chargingOrderVO.getPlateNum());
 		}
-		fillEmptyChargingOrderSummary(tCharingOrderVO);
-		Map<String, Object> map = this.baseMapper.chargingOrderNolimit(dto, startTime1, startTime2, endTime1, endTime2);
-		if (null != map) {
-			tCharingOrderVO.setTotal(getSummaryDecimal(map, "total"));
-			tCharingOrderVO.setTime(getSummaryLong(map, "time"));
-			tCharingOrderVO.setIncome(getSummaryDecimal(map, "income"));
-			tCharingOrderVO.setElectronicMoney(getSummaryDecimal(map, "electronicMoney"));
-			tCharingOrderVO.setServiceMoney(getSummaryDecimal(map, "serviceMoney"));
-		}
-		Map<String, Object> fundMap = this.baseMapper.chargingOrderFundSummary(dto, startTime1, startTime2, endTime1, endTime2);
-		if (null != fundMap) {
-			tCharingOrderVO.setWechatIncome(getSummaryDecimal(fundMap, "wechatIncome"));
-			tCharingOrderVO.setAlipayIncome(getSummaryDecimal(fundMap, "alipayIncome"));
-			tCharingOrderVO.setWhitelistChargingIncome(getSummaryDecimal(fundMap, "whitelistChargingIncome"));
-			tCharingOrderVO.setWhitelistRefund(getSummaryDecimal(fundMap, "whitelistRefund"));
-		}
-		Map<String, Object> shareIncomeMap = getChargingOrderShareIncomeSummary(dto, startTime1, startTime2, endTime1, endTime2);
-		tCharingOrderVO.setPlatformIncomeTotal(getSummaryDecimal(shareIncomeMap, "platformIncomeTotal"));
-		tCharingOrderVO.setPartnerIncomeTotal(getSummaryDecimal(shareIncomeMap, "partnerIncomeTotal"));
-		Map<String, Object> balanceMap = getExchangeCodeBalanceSummary(dto, startTime1, startTime2, endTime1, endTime2);
-		tCharingOrderVO.setBalanceIncome(getSummaryDecimal(balanceMap, "balanceIncome"));
-		tCharingOrderVO.setBalanceGiftIncome(getSummaryDecimal(balanceMap, "balanceGiftIncome"));
-		pageInfo.setRecords(list);
-		tCharingOrderVO.setList(pageInfo);
-			return tCharingOrderVO;
-		}
+	}
 
 		/**
 		 * 填充充电桩订单列表余额收入,余额收入按真实充值余额统计,赠送余额单独展示。
@@ -2827,11 +2855,10 @@
 	/**
 	 * 汇总充电桩订单余额收入,兑换码使用记录的usedAmount包含赠送余额,SQL中需扣除giftUsedAmount。
 	 */
-	private Map<String, Object> getExchangeCodeBalanceSummary(ChargingOrderQuery dto, String startTime1, String startTime2, String endTime1, String endTime2) {
+	private Map<String, Object> getExchangeCodeBalanceSummary(List<Long> orderIds) {
 		Map<String, Object> totalMap = new HashMap<>();
 		totalMap.put("balanceIncome", BigDecimal.ZERO);
 		totalMap.put("balanceGiftIncome", BigDecimal.ZERO);
-		List<Long> orderIds = this.baseMapper.chargingOrderSummaryOrderIds(dto, startTime1, startTime2, endTime1, endTime2);
 		if (orderIds == null || orderIds.isEmpty()) {
 			return totalMap;
 		}
@@ -2851,11 +2878,10 @@
 		return totalMap;
 	}
 
-	private Map<String, Object> getChargingOrderShareIncomeSummary(ChargingOrderQuery dto, String startTime1, String startTime2, String endTime1, String endTime2) {
+	private Map<String, Object> getChargingOrderShareIncomeSummary(List<Long> orderIds) {
 		Map<String, Object> totalMap = new HashMap<>();
 		totalMap.put("platformIncomeTotal", BigDecimal.ZERO);
 		totalMap.put("partnerIncomeTotal", BigDecimal.ZERO);
-		List<Long> orderIds = this.baseMapper.chargingOrderSummaryOrderIds(dto, startTime1, startTime2, endTime1, endTime2);
 		if (orderIds == null || orderIds.isEmpty()) {
 			return totalMap;
 		}

--
Gitblit v1.7.1