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