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 | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 216 insertions(+), 20 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 9762411..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,27 +1,46 @@ package com.ruoyi.chargingPile.controller; +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.*; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -37,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) { @@ -59,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) { @@ -69,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) { @@ -79,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) { @@ -88,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) { @@ -100,32 +143,98 @@ /** * 批量删除充电枪 */ - @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(@RequestBody BaseDelete baseDelete) { - return AjaxResult.ok(chargingGunService.removeByIds(baseDelete.getIds())); + public AjaxResult<Boolean> deleteByIds(@RequestParam String ids) { + String[] split = ids.split(","); + return AjaxResult.ok(chargingGunService.removeByIds(Arrays.asList(split))); } /** * 结束充电 */ - @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 = "结束充电") - @PostMapping(value = "/stopCharging") - public AjaxResult<String> stopCharging() { - // TODO 硬件 结束充电 + @PutMapping(value = "/stopCharging") + 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){ - // todo 待完善 + try { + TChargingGun chargingGun = chargingGunService.getById(id); + 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); + ServletOutputStream out = response.getOutputStream(); + int len = 0; + byte[] buf = new byte[1024]; + while ((len = inputStream.read(buf, 0, 1024)) != -1) { + 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获取充电枪完整名称 @@ -152,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