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