ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GunStatusStatisticsVO.java
New file @@ -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; } ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StatusModeStatisticsVO.java
New file @@ -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; } 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> @@ -168,6 +173,21 @@ } } /** * 设备状态统计 */ @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获取充电枪完整名称 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); } 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); } 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()); 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>