From da9b7a52dbc6fcd2173efef90528d8fccc322554 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期五, 17 七月 2026 16:22:40 +0800
Subject: [PATCH] P1问题fix

---
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java |   75 +++++++++++++++++++++++++++++++++++--
 1 files changed, 70 insertions(+), 5 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 3154286..9a2e3c7 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
@@ -21,6 +21,9 @@
 import com.ruoyi.chargingPile.api.vo.*;
 import com.ruoyi.chargingPile.api.domain.SiteMenu;
 import com.ruoyi.chargingPile.dto.ChargingPercentBack;
+import com.ruoyi.chargingPile.dto.BatchSetSiteAccountingStrategyDTO;
+import com.ruoyi.chargingPile.dto.SiteExcelDTO;
+import com.ruoyi.chargingPile.dto.SiteImportResultDTO;
 import com.ruoyi.common.core.dto.ChargingOrderGroup;
 import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
 import com.ruoyi.chargingPile.service.*;
@@ -28,6 +31,7 @@
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.core.utils.ServletUtils;
 import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
@@ -55,9 +59,11 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.time.LocalTime;
 import java.time.temporal.ChronoUnit;
@@ -144,6 +150,7 @@
 		SiteInfoVO siteInfoVO = new SiteInfoVO();
 		TChargingGun chargingGun = chargingGunService.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getFullNumber, number));
 		Site site = siteService.getById(chargingGun.getSiteId());
+		siteInfoVO.setMemberDiscountFlag(site.getMemberDiscountFlag());
 		Integer accountingStrategyId = chargingGun.getAccountingStrategyId();
 		if(null == accountingStrategyId){
 			accountingStrategyId = site.getAccountingStrategyId();
@@ -157,9 +164,10 @@
 			if(DateUtils.string2LocalTime(tAccountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0
 					&& DateUtils.string2LocalTime(tAccountingStrategyDetail.getEndTime() + ("23:59:59".equals(tAccountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){
 				siteInfoVO.setElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP));
+				siteInfoVO.setVipElectrovalence(siteInfoVO.getElectrovalence());
 				// 获取当前登录用户id
 				String token = SecurityUtils.getToken(ServletUtils.getRequest());
-				if(StringUtils.isNotEmpty(token)){
+				if(Integer.valueOf(1).equals(site.getMemberDiscountFlag()) && StringUtils.isNotEmpty(token)){
 					Long userId = tokenService.getLoginUserApplet().getUserId();
 					// 根据id查询用户信息
 					TAppUser appUser = appUserClient.getUserById(userId).getData();
@@ -210,6 +218,7 @@
 		TChargingPile one = chargingPileService.lambdaQuery().eq(TChargingPile::getCode, number).one();
 		TChargingGun chargingGun = chargingGunService.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, one.getId()).last(" limit 0, 1"));
 		Site site = siteService.getById(chargingGun.getSiteId());
+		siteInfoVO.setMemberDiscountFlag(site.getMemberDiscountFlag());
 		Integer accountingStrategyId = chargingGun.getAccountingStrategyId();
 		if(null == accountingStrategyId){
 			accountingStrategyId = site.getAccountingStrategyId();
@@ -222,9 +231,10 @@
 			if(DateUtils.string2LocalTime(tAccountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0
 					&& DateUtils.string2LocalTime(tAccountingStrategyDetail.getEndTime() + ("23:59:59".equals(tAccountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){
 				siteInfoVO.setElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP));
+				siteInfoVO.setVipElectrovalence(siteInfoVO.getElectrovalence());
 				// 获取当前登录用户id
 				String token = SecurityUtils.getToken(ServletUtils.getRequest());
-				if(StringUtils.isNotEmpty(token)){
+				if(Integer.valueOf(1).equals(site.getMemberDiscountFlag()) && StringUtils.isNotEmpty(token)){
 					Long userId = tokenService.getLoginUserApplet().getUserId();
 					// 根据id查询用户信息
 					TAppUser appUser = appUserClient.getUserById(userId).getData();
@@ -245,7 +255,7 @@
 					}
 				}
 
-				if(Objects.nonNull(byId1.getDiscount())){
+				if(Integer.valueOf(1).equals(site.getMemberDiscountFlag()) && Objects.nonNull(byId1.getDiscount())){
 					siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP));
 				}else {
 					siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP));
@@ -535,6 +545,55 @@
 	public AjaxResult<Map<String,ChargingGunCountVO>> getChargingGunCount1(@RequestParam(value = "siteId")@ApiParam(value = "站点id", required = true)Integer siteId){
 		return AjaxResult.success(chargingGunService.getChargingGunCount(siteId));
 	}
+
+	@RequiresPermissions(value = {"/site/add"}, logical = Logical.OR)
+	@GetMapping("/importTemplate")
+	@ApiOperation(value = "下载站点导入模板", tags = {"管理后台-站点管理"})
+	public void importTemplate(HttpServletResponse response) {
+		ExcelUtil<SiteExcelDTO> util = new ExcelUtil<>(SiteExcelDTO.class);
+		util.importTemplateExcel(response, "站点导入模板",
+				"填写说明:所在区域填写区县行政区划代码;带*字段为必填;合作商、服务商、场地方和计费模板填写系统中的完整名称。") ;
+	}
+
+	@RequiresPermissions(value = {"/site/add"}, logical = Logical.OR)
+	@PostMapping("/import")
+	@Log(title = "【站点管理】导入站点", businessType = BusinessType.IMPORT, operatorType = OperatorType.MANAGE)
+	@ApiOperation(value = "导入站点", tags = {"管理后台-站点管理"})
+	public AjaxResult importSites(@RequestParam("file") MultipartFile file,
+			@RequestParam(value = "cover", defaultValue = "false") Boolean cover) throws Exception {
+		SiteImportResultDTO result = siteService.importSites(file, cover);
+		if (Boolean.TRUE.equals(result.getNeedConfirm())) {
+			return AjaxResult.error("发现重复站点编号,请确认是否覆盖", result);
+		}
+		if (result.getErrorCount() != null && result.getErrorCount() > 0) {
+			return AjaxResult.error("导入失败,请检查错误信息", result);
+		}
+		return AjaxResult.success("导入成功", result);
+	}
+
+	@RequiresPermissions(value = {"/site/export", "/site"}, logical = Logical.OR)
+	@PutMapping("/export")
+	@Log(title = "【站点管理】导出站点", businessType = BusinessType.EXPORT, operatorType = OperatorType.MANAGE)
+	@ApiOperation(value = "导出站点", tags = {"管理后台-站点管理"})
+	public void exportSites(@RequestBody GetSiteList query, HttpServletResponse response) {
+		List<Site> sites = siteService.listSitesForExport(query);
+		Set<Integer> partnerIds = sites.stream()
+				.flatMap(site -> Arrays.asList(site.getPartnerId(), site.getVenuePartnerId()).stream())
+				.filter(Objects::nonNull)
+				.collect(Collectors.toSet());
+		Map<Integer, String> partnerNames = partnerIds.isEmpty() ? Collections.emptyMap()
+				: partnerService.listByIds(partnerIds).stream()
+				.collect(Collectors.toMap(Partner::getId, Partner::getName, (a, b) -> a));
+		Set<Integer> strategyIds = sites.stream().map(Site::getAccountingStrategyId)
+				.filter(Objects::nonNull).collect(Collectors.toSet());
+		Map<Integer, String> strategyNames = strategyIds.isEmpty() ? Collections.emptyMap()
+				: accountingStrategyService.listByIds(strategyIds).stream()
+				.collect(Collectors.toMap(TAccountingStrategy::getId, TAccountingStrategy::getName, (a, b) -> a));
+		List<SiteExcelDTO> rows = sites.stream().map(site -> SiteExcelDTO.from(site,
+				partnerNames.get(site.getPartnerId()), partnerNames.get(site.getVenuePartnerId()),
+				strategyNames.get(site.getAccountingStrategyId()))).collect(Collectors.toList());
+		new ExcelUtil<>(SiteExcelDTO.class).exportExcel(response, rows, "站点数据");
+	}
 	
 	@RequiresPermissions(value = {"/site/add"}, logical = Logical.OR)
 	@ResponseBody
@@ -632,8 +691,14 @@
 	@PostMapping("/batchSetAccountingStrategy")
 	@ApiOperation(value = "批量设置站点计费策略", tags = {"管理后台-站点管理"})
 	@Log(title = "【站点管理】批量设置站点计费策略", businessType = BusinessType.UPDATE)
-	public AjaxResult batchSetAccountingStrategy(@RequestParam("ids") List<Integer> ids, @RequestParam("accountingStrategyId") Integer accountingStrategyId){
-		siteService.batchSetAccountingStrategy(ids, accountingStrategyId);
+	public AjaxResult batchSetAccountingStrategy(@RequestBody BatchSetSiteAccountingStrategyDTO request){
+		if (request == null || CollectionUtils.isEmpty(request.getIds())) {
+			return AjaxResult.error("请选择要设置计费策略的站点");
+		}
+		if (request.getAccountingStrategyId() == null) {
+			return AjaxResult.error("请选择计费模板");
+		}
+		siteService.batchSetAccountingStrategy(request.getIds(), request.getAccountingStrategyId());
 		return AjaxResult.success();
 	}
 	

--
Gitblit v1.7.1