From 3244b550596e0330031b3f4547356927df83b0ad Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期一, 19 五月 2025 11:48:35 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java |  220 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 195 insertions(+), 25 deletions(-)

diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
index 6e83cb0..4ac3c29 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
@@ -1,32 +1,45 @@
 package com.ruoyi.chargingPile.controller;
 
 
-import cn.hutool.core.io.FileUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
 import com.ruoyi.chargingPile.api.dto.TChargingGunDTO;
+import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.chargingPile.api.model.TChargingGun;
 import com.ruoyi.chargingPile.api.model.TChargingPile;
 import com.ruoyi.chargingPile.api.query.TChargingGunQuery;
+import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode;
+import com.ruoyi.chargingPile.api.vo.GunStatusStatisticsVO;
+import com.ruoyi.chargingPile.api.vo.SiteNameVO;
 import com.ruoyi.chargingPile.api.vo.TChargingGunVO;
+import com.ruoyi.chargingPile.config.FileUploadConfig;
+import com.ruoyi.chargingPile.service.ISiteService;
 import com.ruoyi.chargingPile.service.TChargingGunService;
 import com.ruoyi.chargingPile.service.TChargingPileService;
 import com.ruoyi.chargingPile.util.QRCodeUtils;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
-import com.ruoyi.common.core.web.domain.BaseDelete;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
-import java.io.FileInputStream;
-import java.io.PrintWriter;
+import java.io.*;
 import java.net.URLEncoder;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -43,19 +56,39 @@
 @RequestMapping("/t-charging-gun")
 public class TChargingGunController {
 
-    private final TChargingGunService chargingGunService;
-    
+    @Autowired
+    private TChargingGunService chargingGunService;
+    @Resource
+    private ChargingOrderClient chargingOrderClient;
+
     @Resource
     private TChargingPileService chargingPileService;
-
-    @Autowired
-    public TChargingGunController(TChargingGunService chargingGunService) {
-        this.chargingGunService = chargingGunService;
-    }
+    @Resource
+    private ISiteService siteService;
     
+    @Autowired
+    private FileUploadConfig fileUploadConfig;
+
+
+    /**
+     * 查询所有枪
+     */
+    @PostMapping(value = "/getAllGun")
+    public R<List<TChargingGun>> getAllGun() {
+        return R.ok(chargingGunService.list());
+    }
+    /**
+     * 查询所有桩
+     */
+    @PostMapping(value = "/getAllPile")
+    public R<List<TChargingPile>> getAllPile() {
+        return R.ok(chargingPileService.list());
+    }
+
     /**
      * 查询充电枪列表
      */
+    @RequiresPermissions(value = {"/chargingPile", "/chargingGun"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-充电枪", "管理后台-充电桩信息"},value = "查询充电枪分页列表")
     @PostMapping(value = "/pageList")
     public AjaxResult<PageInfo<TChargingGunVO>> pageList(@RequestBody TChargingGunQuery query) {
@@ -65,7 +98,8 @@
     /**
      * 添加充电枪管理
      */
-    @Log(title = "添加充电枪", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
+    @RequiresPermissions(value = {"/chargingPile/add_charging_gun"}, logical = Logical.OR)
+    @Log(title = "【充电桩信息】添加充电枪", businessType = BusinessType.INSERT,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"管理后台-充电桩信息"},value = "添加充电枪")
     @PostMapping(value = "/add")
     public AjaxResult add(@RequestBody TChargingGunDTO dto) {
@@ -75,7 +109,8 @@
     /**
      * 修改充电枪
      */
-    @Log(title = "修改充电枪", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
+    @RequiresPermissions(value = {"/chargingGun/update"}, logical = Logical.OR)
+    @Log(title = "【充电桩信息】修改充电枪", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"管理后台-充电桩信息"},value = "修改充电枪")
     @PostMapping(value = "/update")
     public AjaxResult update(@RequestBody TChargingGunDTO dto) {
@@ -85,6 +120,7 @@
     /**
      * 查看充电枪详情
      */
+    @RequiresPermissions(value = {"/chargingGun/update", "/chargingGun/select"}, logical = Logical.OR)
     @ApiOperation(tags = {"后台-充电枪", "管理后台-充电桩信息"},value = "查看充电枪详情")
     @GetMapping(value = "/getDetailById")
     public AjaxResult<TChargingGun> getDetailById(@RequestParam("id") Integer id) {
@@ -94,7 +130,8 @@
     /**
      * 删除充电枪
      */
-    @Log(title = "删除充电枪", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
+    @RequiresPermissions(value = {"/chargingGun/del"}, logical = Logical.OR)
+    @Log(title = "【充电桩信息】删除充电枪", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"管理后台-充电桩信息"},value = "删除充电枪")
     @DeleteMapping(value = "/deleteById")
     public AjaxResult<Boolean> deleteById(@RequestParam("id") Integer id) {
@@ -106,7 +143,8 @@
     /**
      * 批量删除充电枪
      */
-    @Log(title = "批量删除充电枪", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
+    @RequiresPermissions(value = {"/chargingGun/del"}, logical = Logical.OR)
+    @Log(title = "【充电桩信息】批量删除充电枪", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-充电枪"},value = "批量删除充电枪")
     @DeleteMapping(value = "/deleteByIds")
     public AjaxResult<Boolean> deleteByIds(@RequestParam String ids) {
@@ -117,41 +155,86 @@
     /**
      * 结束充电
      */
-    @Log(title = "结束充电", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE)
+    @RequiresPermissions(value = {"/chargingGun/end_charging"}, logical = Logical.OR)
+    @Log(title = "【充电桩信息】结束充电", businessType = BusinessType.OTHER,operatorType = OperatorType.MANAGE)
     @ApiOperation(tags = {"后台-充电枪"},value = "结束充电")
     @PutMapping(value = "/stopCharging")
-    public AjaxResult<String> stopCharging(@RequestParam("id") Integer id) {
-        // TODO 硬件 结束充电
+    public AjaxResult<String> stopCharging(@RequestParam("id") String id) {
+        // 根据充电枪id 查询最新的一笔订单
+        String data = chargingOrderClient.queryOrderByGunId(id).getData();
+        // 硬件 结束充电
+        chargingOrderClient.stopCharging(data);
         return AjaxResult.success();
     }
     
     
     
+    @RequiresPermissions(value = {"/chargingGun/download_qr_code"}, logical = Logical.OR)
     @ApiOperation(tags = {"管理后台-充电桩信息"},value = "下载二维码")
     @GetMapping(value = "/downloadQRCode/{id}")
+    @Log(title = "【充电桩信息】下载二维码", businessType = BusinessType.OTHER,operatorType = OperatorType.MANAGE)
     public void downloadQRCode(@PathVariable Integer id, HttpServletResponse response){
         try {
             TChargingGun chargingGun = chargingGunService.getById(id);
-            response.setContentType("image/jpeg");
-            response.setHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(chargingGun.getName(), "UTF-8") + ".jpeg");
-            String url = "https://www.baidu.com?id=" + id;
-            String filePath = "D:/Program Files/nginx-1.20.2/html";
+            TChargingPile chargingPile = chargingPileService.getById(chargingGun.getChargingPileId());
+            String code = chargingPile.getCode() + chargingGun.getCode();
+            String fileName = URLEncoder.encode(code, "UTF-8") + ".jpg";
+            response.setContentType("application/force-download");
+            response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
+            String url = "https://mxcd.zhinenganguan.com?No=" + code;
+            String filePath = fileUploadConfig.getLocation() + fileName;
             QRCodeUtils.encode(url, filePath);
             FileInputStream inputStream = new FileInputStream(filePath);
-            PrintWriter out = response.getWriter();
+            ServletOutputStream out = response.getOutputStream();
             int len = 0;
             byte[] buf = new byte[1024];
             while ((len = inputStream.read(buf, 0, 1024)) != -1) {
-                out.println(buf);
+                out.write(buf);
             }
             out.flush();
             out.close();
             inputStream.close();
+            
+            //清除服务器上的文件
+            try {
+                // 使用Runtime执行命令
+                Process process = Runtime.getRuntime().exec("sudo rm -rf " + filePath);
+                // 读取命令的输出
+                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+                String line;
+                while ((line = reader.readLine()) != null) {
+                    System.out.println(line);
+                }
+                // 等待命令执行完成
+                process.waitFor();
+                // 关闭流
+                reader.close();
+            } catch (IOException | InterruptedException e) {
+                e.printStackTrace();
+            }
+            
         }catch (Exception e){
             e.printStackTrace();
         }
     }
-    
+    @Resource
+    private TokenService tokenService;
+    /**
+     * 设备状态统计
+     */
+    @RequiresPermissions(value = {"/workbench"}, logical = Logical.OR)
+    @ApiOperation(tags = {"后台-工作台"},value = "设备状态统计")
+    @PutMapping(value = "/gunStatusStatistics")
+    public R<GunStatusStatisticsVO> gunStatusStatistics() {
+        List<Integer> siteIds = new ArrayList<>();
+        Long userId = tokenService.getLoginUser().getUserid();
+        //获取当前登录的siteIds
+        PageInfo<GetSiteListDTO> siteList1 = siteService.getSiteList1(userId);
+        for (GetSiteListDTO datum : siteList1.getRecords()) {
+            siteIds.add(datum.getId());
+        }
+        return R.ok(chargingGunService.gunStatusStatistics(siteIds));
+    }
     
     /**
      * 根据id获取充电枪完整名称
@@ -178,5 +261,92 @@
         TChargingGun chargingGun = chargingGunService.getById(id);
         return R.ok(chargingGun);
     }
+    /**
+     * 根据id获取充电枪详情
+     * @param id
+     * @return
+     */
+    @ResponseBody
+    @PostMapping(value = "/getAllInfoById/{id}")
+    public R<SiteNameVO> getAllInfoById(@PathVariable Integer id){
+        SiteNameVO siteNameVO = new SiteNameVO();
+        TChargingGun chargingGun = chargingGunService.getById(id);
+        siteNameVO.setGunName(chargingGun.getName());
+        siteNameVO.setGunNumber(chargingGun.getCode());
+        TChargingPile chargingPile = chargingPileService.getById(chargingGun.getChargingPileId());
+        siteNameVO.setPileName(chargingPile.getName());
+        siteNameVO.setPileNumber(chargingPile.getNumber());
+        Site site = siteService.getById(chargingGun.getSiteId());
+        siteNameVO.setSiteName(site.getName());
+        return R.ok(siteNameVO);
+    }
+    /**
+     * 根据枪编号获取充电枪
+     * @param code
+     * @return
+     */
+    @PostMapping("/getChargingGunByCode")
+    public R<TChargingGun> getChargingGunByCode(@RequestBody GetChargingGunByCode code){
+        TChargingPile chargingPile = chargingPileService.getOne(new LambdaQueryWrapper<TChargingPile>()
+                .eq(TChargingPile::getCode, code.getCharging_pile_code()).eq(TChargingPile::getDelFlag, 0));
+        return R.ok(chargingGunService.getOne(Wrappers.lambdaQuery(TChargingGun.class)
+                        .eq(TChargingGun::getChargingPileId, chargingPile.getId())
+                        .eq(TChargingGun::getCode, code.getCharging_gun_code())
+                        .eq(TChargingGun::getDelFlag, 0)
+                        .last("LIMIT 1")));
+    }
+    /**
+     * 根据枪编号获取充电枪
+     * @param code
+     * @return
+     */
+    /**
+     * 编辑充电枪
+     * @param chargingGun
+     * @return
+     */
+    @PostMapping("/updateChargingGunById")
+    public R<String> updateChargingGunById(@RequestBody TChargingGun chargingGun){
+        chargingGunService.updateById(chargingGun);
+        return R.ok();
+    }
+    
+    
+    
+    /**
+     * 根据充电桩id获取枪
+     * @param chargingPileId
+     * @return
+     */
+    @PostMapping("/getChargingGunByChargingPileId")
+    public R<List<TChargingGun>> getChargingGunByChargingPileId(@RequestParam("chargingPileId") Integer chargingPileId){
+        List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPileId)
+                .eq(TChargingGun::getDelFlag, 0));
+        return R.ok(list);
+    }
+    
+    
+    /**
+     * 根据充电桩ids获取枪
+     * @param chargingPileIds
+     * @return
+     */
+    @PostMapping("/getChargingGunByChargingPileIds")
+    public R<List<TChargingGun>> getChargingGunByChargingPileIds(@RequestParam("chargingPileIds") List<Integer> chargingPileIds){
+        List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, chargingPileIds)
+                .eq(TChargingGun::getDelFlag, 0));
+        return R.ok(list);
+    }
+
+
+    /**
+     * 根据枪唯一码查询信息
+     * @return
+     */
+    @PostMapping("/getChargingGunByFullNumber")
+    public R<TChargingGun> getChargingGunByFullNumber(@RequestParam("fullNumber") String fullNumber){
+        TChargingGun chargingGun = chargingGunService.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getDelFlag, 0).eq(TChargingGun::getFullNumber, fullNumber));
+        return R.ok(chargingGun);
+    }
 }
 

--
Gitblit v1.7.1