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