longz
2026-08-07 d7d4ae6cfb28adf7ef92f44332ff492f0cc7069c
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -18,6 +18,7 @@
import com.ruoyi.chargingPile.dto.ChargingGunCountMonitoring;
import com.ruoyi.chargingPile.dto.ChargingGunMonitoring;
import com.ruoyi.chargingPile.dto.GetChargingGunMonitoring;
import com.ruoyi.chargingPile.dto.ChargingPileBatchBuildDTO;
import com.ruoyi.chargingPile.dto.ChargingPileImportDTO;
import com.ruoyi.chargingPile.dto.ChargingPileImportResultDTO;
import com.ruoyi.chargingPile.export.ChargingPileExport;
@@ -48,7 +49,6 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.multipart.MultipartFile;
@@ -59,7 +59,10 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -182,46 +185,76 @@
   @RequiresPermissions(value = {"/chargingPile/export", "/chargingPile"}, logical = Logical.OR)
   @ResponseBody
   @PutMapping("/export")
   @Log(title = "??????????????", businessType = BusinessType.EXPORT,operatorType = OperatorType.MANAGE)
   @ApiOperation(value = "???????", tags = {"????-?????"})
    @Log(title = "【充电桩信息】导出充电桩数据", businessType = BusinessType.EXPORT,operatorType = OperatorType.MANAGE)
    @ApiOperation(value = "导出充电桩数据", tags = {"管理后台-充电桩信息"})
   public void export(@RequestBody PageChargingPileList page, HttpServletResponse response){
      List<PageChargingPileListDTO> records = chargingPileService.listChargingPileForExport(page);
      List<ChargingPileExport> exports = records.stream().map(record -> {
         ChargingPileExport export = new ChargingPileExport();
         BeanUtils.copyProperties(record, export);
         return export;
      }).collect(Collectors.toList());
      ExcelUtil<ChargingPileExport> util = new ExcelUtil<>(ChargingPileExport.class);
      util.exportExcel(response, exports, "?????");
         List<PageChargingPileListDTO> records = chargingPileService.listChargingPileForExport(page);
         Set<Integer> pileIds = records.stream()
               .map(PageChargingPileListDTO::getId)
               .filter(id -> id != null)
               .collect(Collectors.toSet());
         Map<Integer, TChargingPile> pileMap = pileIds.isEmpty()
               ? Collections.emptyMap()
               : chargingPileService.listByIds(pileIds).stream()
               .collect(Collectors.toMap(TChargingPile::getId, item -> item, (left, right) -> left));
         List<TChargingGunVO> guns = pileIds.isEmpty()
               ? Collections.emptyList()
               : chargingGunService.exportQRCodeList(new TChargingGunQuery()).stream()
               .filter(gun -> pileIds.contains(gun.getChargingPileId()))
               .collect(Collectors.toList());
         Map<Integer, List<TChargingGunVO>> gunsByPile = guns.stream()
               .collect(Collectors.groupingBy(TChargingGunVO::getChargingPileId));
         List<ChargingPileExport> exports = new ArrayList<>();
         for (PageChargingPileListDTO record : records) {
            List<TChargingGunVO> pileGuns = gunsByPile.getOrDefault(record.getId(), Collections.emptyList());
            if (pileGuns.isEmpty()) {
               exports.add(ChargingPileExport.from(record, pileMap.get(record.getId()), null));
               continue;
            }
            for (TChargingGunVO gun : pileGuns) {
               exports.add(ChargingPileExport.from(record, pileMap.get(record.getId()), gun));
            }
         }
         ExcelUtil<ChargingPileExport> util = new ExcelUtil<>(ChargingPileExport.class);
        util.exportExcel(response, exports, "充电桩数据");
   }
   @RequiresPermissions(value = {"/chargingPile/add"}, logical = Logical.OR)
   @ResponseBody
   @GetMapping("/importTemplate")
   @ApiOperation(value = "?????????", tags = {"????-?????"})
    @ApiOperation(value = "下载充电桩导入模板", tags = {"管理后台-充电桩信息"})
   public void importTemplate(HttpServletResponse response){
      ExcelUtil<ChargingPileImportDTO> util = new ExcelUtil<>(ChargingPileImportDTO.class);
      util.importTemplateExcel(response, "???????");
        util.importTemplateExcel(response, "充电桩导入模板");
   }
   @RequiresPermissions(value = {"/chargingPile/add"}, logical = Logical.OR)
   @ResponseBody
   @PostMapping("/import")
   @Log(title = "??????????????", businessType = BusinessType.IMPORT,operatorType = OperatorType.MANAGE)
   @ApiOperation(value = "???????", tags = {"????-?????"})
    @Log(title = "【充电桩信息】批量导入充电桩", businessType = BusinessType.IMPORT,operatorType = OperatorType.MANAGE)
    @ApiOperation(value = "批量导入充电桩", tags = {"管理后台-充电桩信息"})
   public AjaxResult importChargingPile(@RequestParam("file") MultipartFile file,
         @RequestParam(value = "cover", defaultValue = "false") Boolean cover) throws Exception{
      ChargingPileImportResultDTO result = chargingPileService.importChargingPile(file, cover);
      if(Boolean.TRUE.equals(result.getNeedConfirm())){
         return AjaxResult.warn("????????????", result);
            return AjaxResult.warn("检测到重复设备编码,是否覆盖?", result);
      }
      if(result.getErrorCount() != null && result.getErrorCount() > 0){
         return AjaxResult.error("????????????", result);
            return AjaxResult.error("导入失败,请检查错误信息", result);
      }
      return AjaxResult.success("????", result);
        return AjaxResult.success("导入成功", result);
   }
   
   @RequiresPermissions(value = {"/chargingPile/add"}, logical = Logical.OR)
   @ResponseBody
   @PostMapping("/batchBuild")
   @Log(title = "【充电桩信息】批量建桩", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
   @ApiOperation(value = "批量建桩", tags = {"管理后台-充电桩信息"})
   public AjaxResult batchBuild(@RequestBody ChargingPileBatchBuildDTO dto){
      return AjaxResult.success("批量建桩成功", chargingPileService.batchBuildChargingPile(dto));
   }
   @RequiresPermissions(value = {"/chargingPile/select", "/chargingPile/update"}, logical = Logical.OR)
   @ResponseBody
   @GetMapping("/getChargingPile/{id}")
@@ -267,7 +300,7 @@
   }
   
   
   @RequiresPermissions(value = {"/chargingEquipmentMonitoring"}, logical = Logical.OR)
   @RequiresPermissions(value = {"/chargingEquipmentMonitoring", "/generalBigScreen", "/dataCockpit"}, logical = Logical.OR)
   @ResponseBody
   @GetMapping("/chargeMonitoring/{siteId}")
   @ApiOperation(value = "获取充电设施监控数据", tags = {"管理后台-充电设备监控"})
@@ -275,10 +308,25 @@
      ChargeMonitoring chargeMonitoring = chargingPileService.chargeMonitoring(siteId);
      return AjaxResult.success(chargeMonitoring);
   }
   @ResponseBody
   @GetMapping("/screenChargeMonitoring/{siteId}")
   @ApiOperation(value = "获取智慧充电大屏监控数据", tags = {"管理后台-智慧充电大屏"})
   public AjaxResult<ChargeMonitoring> screenChargeMonitoring(@PathVariable Integer siteId){
      return AjaxResult.success(chargingPileService.chargeMonitoringForScreen(siteId));
   }
   @RequiresPermissions(value = {"/chargingEquipmentMonitoring"}, logical = Logical.OR)
   @ResponseBody
   @GetMapping("/getChargingMonitoringSiteList")
   @ApiOperation(value = "获取当前账号允许监控的站点", tags = {"管理后台-充电设备监控"})
   public AjaxResult<List<Site>> getChargingMonitoringSiteList() {
      return AjaxResult.success(chargingPileService.getChargingMonitoringSiteList());
   }
   @RequiresPermissions(value = {"/chargingEquipmentMonitoring", "/generalBigScreen", "/dataCockpit"}, logical = Logical.OR)
   @ResponseBody
   @GetMapping("/getChargingGunCountMonitoring/{siteId}")
   @ApiOperation(value = "获取充电枪各种状态汇总监控数据", tags = {"管理后台-充电设备监控"})
   public AjaxResult<ChargingGunCountMonitoring> getChargingGunCountMonitoring(@PathVariable Integer siteId){