From 907f8421d36050ab7a24d4c151e04cbb4244305c Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期四, 30 七月 2026 16:16:25 +0800
Subject: [PATCH] 各类修复

---
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java |   42 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
index 53b2834..50ef6bd 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -23,6 +23,7 @@
 import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.dto.ChargingPercentBack;
 import com.ruoyi.chargingPile.dto.BatchSetSiteAccountingStrategyDTO;
+import com.ruoyi.chargingPile.dto.ChargingPileFilterOptionsDTO;
 import com.ruoyi.chargingPile.dto.SiteExcelDTO;
 import com.ruoyi.chargingPile.dto.SiteImportResultDTO;
 import com.ruoyi.common.core.dto.ChargingOrderGroup;
@@ -159,7 +160,10 @@
 			accountingStrategyId = site.getAccountingStrategyId();
 		}
 		TChargingPile one = chargingPileService.getById(chargingGun.getChargingPileId());
-		TAccountingStrategy byId1 = accountingStrategyService.getById(accountingStrategyId);
+		TAccountingStrategy byId1 = resolveAccountingStrategy(accountingStrategyId, site);
+		if (Objects.isNull(byId1)) {
+			return R.fail("电站未配置有效的计费模板");
+		}
 		List<TAccountingStrategyDetail> list = accountingStrategyDetailService.lambdaQuery().eq(TAccountingStrategyDetail::getAccountingStrategyId, byId1.getId()).list();
 		list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59"));
 		for (TAccountingStrategyDetail tAccountingStrategyDetail : list) {
@@ -228,7 +232,10 @@
 		if(null == accountingStrategyId){
 			accountingStrategyId = site.getAccountingStrategyId();
 		}
-		TAccountingStrategy byId1 = accountingStrategyService.getById(accountingStrategyId);
+		TAccountingStrategy byId1 = resolveAccountingStrategy(accountingStrategyId, site);
+		if (Objects.isNull(byId1)) {
+			return R.fail("电站未配置有效的计费模板");
+		}
 		List<TAccountingStrategyDetail> list = accountingStrategyDetailService.lambdaQuery().eq(TAccountingStrategyDetail::getAccountingStrategyId, byId1.getId()).list();
 		list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59"));
 		for (TAccountingStrategyDetail tAccountingStrategyDetail : list) {
@@ -291,6 +298,16 @@
 		siteInfoVO.setReservationAheadMinute(site.getReservationAheadMinute());
 		siteInfoVO.setVinFlag(one.getVinFlag());
 		return R.ok(siteInfoVO);
+	}
+
+	TAccountingStrategy resolveAccountingStrategy(Integer accountingStrategyId, Site site) {
+		TAccountingStrategy strategy = accountingStrategyId == null
+				? null : accountingStrategyService.getById(accountingStrategyId);
+		if (strategy == null && site != null && site.getAccountingStrategyId() != null
+				&& !Objects.equals(accountingStrategyId, site.getAccountingStrategyId())) {
+			strategy = accountingStrategyService.getById(site.getAccountingStrategyId());
+		}
+		return strategy;
 	}
 	
 	@RequiresPermissions(value = {"/systemUserManagement/update", "/site", "/platformRevenueAnalysis", "/chargingOperationAnalysis",
@@ -504,6 +521,13 @@
 	public AjaxResult<List<Site>> getSiteListGun(){
 		return AjaxResult.success(siteService.getSiteListGun());
 	}
+
+	@RequiresPermissions(value = {"/chargingPile", "/chargingPile/select"}, logical = Logical.OR)
+	@GetMapping("/chargingPileFilterOptions")
+	@ApiOperation(value = "获取充电桩筛选级联选项", tags = {"管理后台-充电桩管理"})
+	public AjaxResult<ChargingPileFilterOptionsDTO> getChargingPileFilterOptions() {
+		return AjaxResult.success(ChargingPileFilterOptionsDTO.fromSites(siteService.getSiteOptions()));
+	}
 	
 	
 	@RequiresPermissions(value = {"/parkingLot/add", "/parkingLot/select", "/parkingLot/update"}, logical = Logical.OR)
@@ -544,11 +568,15 @@
 //		Map<String, Double> distance = GeodesyUtil.getDistance(query.getLat() + "," + query.getLon(), siteDetailVO.getLat() + "," + siteDetailVO.getLon());
 //		siteDetailVO.setDistance(distance.get("WGS84"));
 		// 查询绑定车牌提示文案
-		TParkingLot parkingLot = parkingLotService.getOne(Wrappers.lambdaQuery(TParkingLot.class)
-				.eq(TParkingLot::getSiteId, query.getSiteId()));
-		if(Objects.nonNull(parkingLot)){
-			siteDetailVO.setRemark(parkingLot.getRemark());
-		}
+		// 一个站点允许绑定多个停车场,不能使用 getOne,否则多条数据会直接抛异常。
+		// 详情页只展示一条绑定车牌提示,取最新配置的非空提示。
+		parkingLotService.list(Wrappers.lambdaQuery(TParkingLot.class)
+					.eq(TParkingLot::getSiteId, query.getSiteId()))
+				.stream()
+				.filter(Objects::nonNull)
+				.filter(item -> StringUtils.isNotEmpty(item.getRemark()))
+				.max(Comparator.comparingInt(item -> Objects.isNull(item.getId()) ? 0 : item.getId()))
+				.ifPresent(item -> siteDetailVO.setRemark(item.getRemark()));
 		return AjaxResult.success(siteDetailVO);
 	}
 	

--
Gitblit v1.7.1