From d632135cb8d0fdf1d63d0b533558b3987bda932d Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 11 九月 2024 18:26:24 +0800
Subject: [PATCH] 设备状态统计
---
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingGunService.java | 9 ++
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java | 16 ++++
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java | 68 ++++++++++++++--
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StatusModeStatisticsVO.java | 33 ++++++++
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GunStatusStatisticsVO.java | 21 +++++
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml | 30 +++++++
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java | 22 +++++
7 files changed, 189 insertions(+), 10 deletions(-)
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GunStatusStatisticsVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GunStatusStatisticsVO.java
new file mode 100644
index 0000000..fe534cb
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GunStatusStatisticsVO.java
@@ -0,0 +1,21 @@
+package com.ruoyi.chargingPile.api.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+@Data
+@ApiModel(value = "设备状态统计VO")
+public class GunStatusStatisticsVO implements Serializable {
+
+ @ApiModelProperty(value = "充电桩类型统计 key:充电模式(1=超级快充,2=快充,3=慢充)")
+ private Map<Integer,Integer> modeStatistics;
+ @ApiModelProperty(value = "状态统计 key:充电模式(1=离线,2=故障,3=充电中)")
+ private Map<Integer,Integer> statusStatistics;
+ @ApiModelProperty(value = "状态统计根据类型分组")
+ private List<StatusModeStatisticsVO> statusModeStatistics;
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StatusModeStatisticsVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StatusModeStatisticsVO.java
new file mode 100644
index 0000000..4b22bf3
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StatusModeStatisticsVO.java
@@ -0,0 +1,33 @@
+package com.ruoyi.chargingPile.api.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "状态统计根据类型分组VO")
+public class StatusModeStatisticsVO implements Serializable {
+
+
+ @ApiModelProperty(value = "充电模式(1=超级快充,2=快充,3=慢充)")
+ private Integer chargeMode;
+
+
+ @ApiModelProperty(value = "空闲")
+ private Integer freeCount;
+
+
+ @ApiModelProperty(value = "充满")
+ private Integer filledCount;
+
+
+ @ApiModelProperty(value = "插枪")
+ private Integer insertCount;
+
+
+ @ApiModelProperty(value = "充电中")
+ private Integer chargingCount;
+
+}
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 79acf34..ecb1330 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
@@ -4,12 +4,14 @@
import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;
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.model.TFaultMessage;
import com.ruoyi.chargingPile.api.query.TChargingGunQuery;
+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.service.ISiteService;
@@ -23,6 +25,7 @@
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.utils.SecurityUtils;
import com.ruoyi.integration.api.feignClient.IntegrationClient;
import com.ruoyi.integration.api.model.EndCharge;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
@@ -40,8 +43,10 @@
import java.io.FileReader;
import java.io.PrintWriter;
import java.net.URLEncoder;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
/**
* <p>
@@ -167,7 +172,22 @@
e.printStackTrace();
}
}
-
+
+ /**
+ * 设备状态统计
+ */
+ @ApiOperation(tags = {"后台-工作台"},value = "设备状态统计")
+ @PutMapping(value = "/gunStatusStatistics")
+ public AjaxResult<GunStatusStatisticsVO> gunStatusStatistics() {
+ List<Integer> siteIds = new ArrayList<>();
+ Long userId = SecurityUtils.getUserId();
+ //获取当前登录的siteIds
+ PageInfo<GetSiteListDTO> siteList1 = siteService.getSiteList1(userId);
+ for (GetSiteListDTO datum : siteList1.getRecords()) {
+ siteIds.add(datum.getId());
+ }
+ return AjaxResult.ok(chargingGunService.gunStatusStatistics(siteIds));
+ }
/**
* 根据id获取充电枪完整名称
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java
index 7ce3dd6..146e826 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingGunMapper.java
@@ -3,12 +3,14 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.query.TChargingGunQuery;
+import com.ruoyi.chargingPile.api.vo.StatusModeStatisticsVO;
import com.ruoyi.chargingPile.api.vo.TChargingGunVO;
import com.ruoyi.common.core.web.page.PageInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
@@ -30,4 +32,18 @@
*/
List<TChargingGunVO> pageList(@Param("query") TChargingGunQuery query, @Param("pageInfo")PageInfo<TChargingGunVO> pageInfo, @Param("siteIds") Set<Integer> siteIds);
+ /**
+ * 统计充电枪状态
+ * @param siteIds
+ * @return
+ */
+ Map<Integer, Integer> getModeStatistics(@Param("siteIds")List<Integer> siteIds);
+
+ /**
+ * 统计充电枪状态
+ * @param siteIds
+ * @param chargeMode
+ * @return
+ */
+ StatusModeStatisticsVO getStatusModeStatistics(@Param("siteIds")List<Integer> siteIds, @Param("chargeMode")Integer chargeMode);
}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingGunService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingGunService.java
index fab3626..5bfe152 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingGunService.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingGunService.java
@@ -5,11 +5,13 @@
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.query.TChargingGunQuery;
import com.ruoyi.chargingPile.api.vo.ChargingGunCountVO;
+import com.ruoyi.chargingPile.api.vo.GunStatusStatisticsVO;
import com.ruoyi.chargingPile.api.vo.TChargingGunVO;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import org.springframework.web.bind.annotation.RequestBody;
+import java.util.List;
import java.util.Map;
/**
@@ -50,4 +52,11 @@
* @return
*/
Map<String, ChargingGunCountVO> getChargingGunCount(Integer siteId);
+
+ /**
+ * 设备状态统计
+ * @param siteIds
+ * @return
+ */
+ GunStatusStatisticsVO gunStatusStatistics(List<Integer> siteIds);
}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
index 6f7103b..1918cc5 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
@@ -7,9 +7,7 @@
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.ChargingGunCountVO;
-import com.ruoyi.chargingPile.api.vo.TChargingGunVO;
-import com.ruoyi.chargingPile.api.vo.TMonitoringEquipmentVO;
+import com.ruoyi.chargingPile.api.vo.*;
import com.ruoyi.chargingPile.domain.SiteMenu;
import com.ruoyi.chargingPile.mapper.TChargingGunMapper;
import com.ruoyi.chargingPile.service.IPartnerService;
@@ -32,13 +30,8 @@
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.stream.Collectors;
-import java.util.Set;
/**
* <p>
@@ -188,6 +181,63 @@
return map;
}
+ @Override
+ public GunStatusStatisticsVO gunStatusStatistics(List<Integer> siteIds) {
+ GunStatusStatisticsVO gunStatusStatisticsVO = new GunStatusStatisticsVO();
+
+ if(CollectionUtils.isEmpty(siteIds)){
+ Map<Integer, Integer> modeStatisticsNull = new HashMap<>();
+ modeStatisticsNull.put(1, 0);
+ modeStatisticsNull.put(2, 0);
+ modeStatisticsNull.put(3, 0);
+ gunStatusStatisticsVO.setModeStatistics(modeStatisticsNull);
+ Map<Integer, Integer> statusStatisticsNull = new HashMap<>();
+ statusStatisticsNull.put(1, 0);
+ statusStatisticsNull.put(2, 0);
+ statusStatisticsNull.put(3, 0);
+ gunStatusStatisticsVO.setStatusStatistics(statusStatisticsNull);
+ List<StatusModeStatisticsVO> statusModeStatistics = new ArrayList<>();
+ for (int i = 1; i < 4; i++) {
+ StatusModeStatisticsVO statusModeStatisticsVO = new StatusModeStatisticsVO();
+ statusModeStatisticsVO.setChargeMode(i);
+ statusModeStatisticsVO.setChargingCount(0);
+ statusModeStatisticsVO.setFilledCount(0);
+ statusModeStatisticsVO.setInsertCount(0);
+ statusModeStatisticsVO.setFreeCount(0);
+ statusModeStatistics.add(statusModeStatisticsVO);
+ }
+ gunStatusStatisticsVO.setStatusModeStatistics(statusModeStatistics);
+ }
+
+ Map<Integer, Integer> modeStatistics = this.baseMapper.getModeStatistics(siteIds);
+ gunStatusStatisticsVO.setModeStatistics(modeStatistics);
+
+ Map<Integer, Integer> statusStatistics = new HashMap<>();
+ // 离线
+ Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(TChargingGun.class)
+ .eq(TChargingGun::getStatus, 1));
+ statusStatistics.put(1, count.intValue());
+ // 故障
+ count = this.baseMapper.selectCount(Wrappers.lambdaQuery(TChargingGun.class)
+ .eq(TChargingGun::getStatus, 7));
+ statusStatistics.put(2, count.intValue());
+ // 充电中
+ count = this.baseMapper.selectCount(Wrappers.lambdaQuery(TChargingGun.class)
+ .in(TChargingGun::getStatus, Arrays.asList(3,4,5,6)));
+ statusStatistics.put(3, count.intValue());
+ gunStatusStatisticsVO.setModeStatistics(statusStatistics);
+
+ List<StatusModeStatisticsVO> statusModeStatisticsVOS = new ArrayList<>();
+ StatusModeStatisticsVO statusModeStatistics1 = this.baseMapper.getStatusModeStatistics(siteIds,1);
+ StatusModeStatisticsVO statusModeStatistics2 = this.baseMapper.getStatusModeStatistics(siteIds,2);
+ StatusModeStatisticsVO statusModeStatistics3 = this.baseMapper.getStatusModeStatistics(siteIds,3);
+ statusModeStatisticsVOS.add(statusModeStatistics1);
+ statusModeStatisticsVOS.add(statusModeStatistics2);
+ statusModeStatisticsVOS.add(statusModeStatistics3);
+ gunStatusStatisticsVO.setStatusModeStatistics(statusModeStatisticsVOS);
+ return gunStatusStatisticsVO;
+ }
+
private ChargingGunCountVO getGunCount(Integer chargeMode, List<TChargingGun> list){
ChargingGunCountVO chargingGunCountVO = new ChargingGunCountVO();
chargingGunCountVO.setTotalCount(list.stream().filter(tChargingGun -> tChargingGun.getChargeMode().equals(chargeMode)).collect(Collectors.toList()).size());
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml
index 6a3c2af..a3e2a10 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml
@@ -68,5 +68,35 @@
</where>
ORDER BY tcg.create_time DESC
</select>
+ <select id="getModeStatistics" resultType="java.util.Map">
+ SELECT
+ charge_mode,
+ IFNULL(COUNT(charge_mode),0) AS modeCount
+ FROM t_charging_gun
+ WHERE del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()}
+ <if test="siteIds != null and siteIds.size()>0">
+ AND site_id IN
+ <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+ #{siteId}
+ </foreach>
+ </if>
+ GROUP BY charge_mode
+ </select>
+ <select id="getStatusModeStatistics" resultType="com.ruoyi.chargingPile.api.vo.StatusModeStatisticsVO">
+ SELECT
+ charge_mode,
+ IFNULL((SELECT COUNT(*) FROM your_table WHERE status = 2),0) AS freeCount,
+ IFNULL((SELECT COUNT(*) FROM your_table WHERE status = 5),0) AS filledCount,
+ IFNULL((SELECT COUNT(*) FROM your_table WHERE status = 3),0) AS insertCount,
+ IFNULL((SELECT COUNT(*) FROM your_table WHERE status = 4),0) AS chargingCount
+ FROM t_charging_gun
+ WHERE del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} AND charge_mode = #{chargeMode}
+ <if test="siteIds != null and siteIds.size()>0">
+ AND site_id IN
+ <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+ #{siteId}
+ </foreach>
+ </if>
+ </select>
</mapper>
--
Gitblit v1.7.1