From 18a3ffde129bfbcb7afa3663e92a246f1656dd91 Mon Sep 17 00:00:00 2001 From: zhaoxianglong Date: Wed, 20 Mar 2024 13:45:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=AE=BE=E5=A4=87=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E9=A1=B5=E9=9D=A2=20=E4=BC=98=E5=8C=96=E5=A4=A9?= =?UTF-8?q?=E6=B0=94=E8=AF=B7=E6=B1=82=E6=8A=A5=E9=94=99=E3=80=81=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=8A=9F=E8=83=BD=E8=AF=B7=E6=B1=82=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DcDeviceController.java | 21 ++++++---- .../zc/business/controller/DeviceStatus.java | 5 ++- .../business/controller/StatusController.java | 38 ++++++++++++++++++- .../controller/WeatherForecastController.java | 4 +- .../java/com/zc/business/domain/DcDevice.java | 4 +- .../java/com/zc/business/domain/Status.java | 9 +++++ .../zc/business/mapper/DcDeviceMapper.java | 3 ++ .../zc/business/service/IDcDeviceService.java | 2 + .../service/impl/DcDeviceServiceImpl.java | 7 +++- .../impl/DcWeatherMonitoringServiceImpl.java | 2 +- .../mapper/business/DcDeviceMapper.xml | 6 +++ .../mapper/business/StatusMapper.xml | 6 +++ 12 files changed, 91 insertions(+), 16 deletions(-) diff --git a/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java b/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java index 41b68888..48528ab5 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java @@ -349,17 +349,22 @@ public class DcDeviceController extends BaseController { return AjaxResult.error("设备未接入"); } - OkHttp okHttp = new OkHttp(); + try { - RequestParams requestParams = new RequestParams(props); + OkHttp okHttp = new OkHttp(); + RequestParams requestParams = new RequestParams(props); - Response response // 请求响应 - = okHttp - .url(iotAddress + "/api/iot/device/functions/" + deviceId + "/" + functionId) // 请求地址 - .data(requestParams) - .post(); // 请求方法 - return JSON.parseObject(response.body().string(), AjaxResult.class); + + Response response // 请求响应 + = okHttp + .url(iotAddress + "/api/iot/device/functions/" + deviceId + "/" + functionId) // 请求地址 + .data(requestParams) + .post(); // 请求方法 + return JSON.parseObject(response.body().string(), AjaxResult.class); + }catch (Exception e){ + return AjaxResult.error("请求失败"); + } } diff --git a/zc-business/src/main/java/com/zc/business/controller/DeviceStatus.java b/zc-business/src/main/java/com/zc/business/controller/DeviceStatus.java index 659453ba..e307a436 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DeviceStatus.java +++ b/zc-business/src/main/java/com/zc/business/controller/DeviceStatus.java @@ -1,5 +1,6 @@ package com.zc.business.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.pagehelper.util.StringUtil; import com.ruoyi.common.utils.spring.SpringUtils; import com.zc.business.domain.DcDevice; @@ -47,7 +48,9 @@ public class DeviceStatus { IDcDeviceService deviceService= SpringUtils.getBean(IDcDeviceService.class); StatusService statusService= SpringUtils.getBean(StatusService.class); ExecutorService executor = Executors.newFixedThreadPool(100); - List deviceList = deviceService.list(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(DcDevice::getUseState,1); + List deviceList = deviceService.list(lambdaQueryWrapper); List> futures = new ArrayList<>(); diff --git a/zc-business/src/main/java/com/zc/business/controller/StatusController.java b/zc-business/src/main/java/com/zc/business/controller/StatusController.java index 382c4cda..07e3d102 100644 --- a/zc-business/src/main/java/com/zc/business/controller/StatusController.java +++ b/zc-business/src/main/java/com/zc/business/controller/StatusController.java @@ -6,7 +6,9 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; +import com.zc.business.domain.DcDevice; import com.zc.business.domain.Status; +import com.zc.business.service.impl.DcDeviceServiceImpl; import com.zc.business.service.impl.StatusService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -22,7 +24,6 @@ import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; -import static com.ruoyi.common.utils.PageUtils.startPage; @Api(tags="设备状态") @RestController @@ -31,6 +32,8 @@ public class StatusController extends BaseController { @Autowired private StatusService statusService; + @Autowired + private DcDeviceServiceImpl dcDeviceService; //设备列表 @ApiOperation("设备状态列表按时间和类型") @@ -94,11 +97,39 @@ public class StatusController extends BaseController { return AjaxResult.success(mapSort); } + + @ApiOperation("根据设备Id查询折线图数据") + @GetMapping("/deviceStatusList") + public AjaxResult getDeviceStatusList(Long deviceId) { + + LocalDateTime thirtyDaysAgo = LocalDateTime.now().minusDays(30); + LocalDateTime currentTime = LocalDateTime.now(); + + Status status = new Status(); + status.setStartTime(thirtyDaysAgo); + status.setTime(currentTime); + status.setDeviceId(deviceId); + + List listStatus = statusService.list(status); + + // Group by day and calculate average successRate + Map averageSuccessRateByDay = listStatus.stream() + .collect(Collectors.groupingBy(s -> s.getTime().getDayOfMonth(), + Collectors.averagingDouble(s -> Double.parseDouble(s.getSuccessRate().replace("%",""))))); + + if (averageSuccessRateByDay.isEmpty()) { + return AjaxResult.success("暂无数据"); + } + + return AjaxResult.success(averageSuccessRateByDay); + } + //按类型划分设备 @ApiOperation("设备状态列表按类型") @GetMapping ("/type") public AjaxResult getTypeList() { + List dcDeviceList = dcDeviceService.numberOfDevicesByType(); HashMap itemTypeMap = new HashMap<>(); itemTypeMap.put("1-1", "高清网络枪型固定摄像机"); itemTypeMap.put("1-2", "高清网络球形摄像机"); @@ -122,6 +153,7 @@ public class StatusController extends BaseController { Status status = new Status(); status.setStartTime(todayStart); status.setTime(currentTime); + status.setUseState(1); List listStatus = statusService.list(status); //根据时间分组 Map> map = listStatus.stream() @@ -151,8 +183,10 @@ public class StatusController extends BaseController { maps.put("sucessRate",String.format("%.2f", sucessRate)+"%"); //离线率 maps.put("failRate",failRate); + //已使用数量 + maps.put("sumUseState",String.valueOf(groupItems.size())); //总数 - maps.put("sum",String.valueOf(groupItems.size())); + maps.put("sum", String.valueOf(dcDeviceList.stream().filter(item -> Objects.equals(item.getDeviceType(), entrys.getKey())).map(DcDevice::getSumAll).collect(Collectors.toList()).get(0))); if(itemTypeMap.get(entrys.getKey())!=null) { subMap.put(itemTypeMap.get(entrys.getKey()), maps); } diff --git a/zc-business/src/main/java/com/zc/business/controller/WeatherForecastController.java b/zc-business/src/main/java/com/zc/business/controller/WeatherForecastController.java index 07becb21..9ff01fbe 100644 --- a/zc-business/src/main/java/com/zc/business/controller/WeatherForecastController.java +++ b/zc-business/src/main/java/com/zc/business/controller/WeatherForecastController.java @@ -103,7 +103,7 @@ public class WeatherForecastController extends BaseController { } } } catch (Exception e) { - return AjaxResult.error(500, "连接异常,请检查网络"); + //return AjaxResult.error(500, "连接异常,请检查网络"); } } } @@ -186,7 +186,7 @@ public class WeatherForecastController extends BaseController { } } catch (Exception e) { - return AjaxResult.error(500, "连接异常,请检查网络"); + //return AjaxResult.error(500, "连接异常,请检查网络"); } } diff --git a/zc-business/src/main/java/com/zc/business/domain/DcDevice.java b/zc-business/src/main/java/com/zc/business/domain/DcDevice.java index ee3d8a32..8600ebde 100644 --- a/zc-business/src/main/java/com/zc/business/domain/DcDevice.java +++ b/zc-business/src/main/java/com/zc/business/domain/DcDevice.java @@ -39,7 +39,7 @@ public class DcDevice { @ApiModelProperty("设备编号") private String deviceCode; @ApiModelProperty("设备类型") - private Integer deviceType; + private String deviceType; @ApiModelProperty("设备图片") private String deviceImg; @ApiModelProperty("安装日期") @@ -73,6 +73,8 @@ public class DcDevice { @TableField(exist = false) private String longitude; @TableField(exist = false) + private String sumAll; + @TableField(exist = false) private String latitude; //设备厂商 @TableField(exist = false) diff --git a/zc-business/src/main/java/com/zc/business/domain/Status.java b/zc-business/src/main/java/com/zc/business/domain/Status.java index 0b79747c..2d74b95a 100644 --- a/zc-business/src/main/java/com/zc/business/domain/Status.java +++ b/zc-business/src/main/java/com/zc/business/domain/Status.java @@ -117,6 +117,8 @@ public class Status { @Excel(name = "状态") private int deviceStatus; + @Excel(name = "使用状态") + private int useState; @@ -228,4 +230,11 @@ public class Status { private String type; + public int getUseState() { + return useState; + } + + public void setUseState(int useState) { + this.useState = useState; + } } diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcDeviceMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcDeviceMapper.java index c9250885..1318201f 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcDeviceMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/DcDeviceMapper.java @@ -15,4 +15,7 @@ import java.util.List; public interface DcDeviceMapper extends BaseMapper { List selectDcDeviceList(DcDevice dcDevice); + List numberOfDevicesByType(); + + } diff --git a/zc-business/src/main/java/com/zc/business/service/IDcDeviceService.java b/zc-business/src/main/java/com/zc/business/service/IDcDeviceService.java index 8bd23a34..5e401f43 100644 --- a/zc-business/src/main/java/com/zc/business/service/IDcDeviceService.java +++ b/zc-business/src/main/java/com/zc/business/service/IDcDeviceService.java @@ -77,4 +77,6 @@ public interface IDcDeviceService extends IService { Long statisticalAnomalyDevice(); List devicePileNumberQueryDevice(Map parameter); + + List numberOfDevicesByType(); } diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java index 36111ac8..4b9cea05 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java @@ -401,7 +401,7 @@ public class DcDeviceServiceImpl extends ServiceImpl i device.setChildType(childType); } if (!Objects.equals(deviceType, "null")) { - device.setDeviceType(Integer.valueOf(deviceType)); + device.setDeviceType(deviceType); } if (!Objects.equals(deviceState, "null")) { device.setDeviceState(deviceState); @@ -446,6 +446,11 @@ public class DcDeviceServiceImpl extends ServiceImpl i return dcDevices; } + @Override + public List numberOfDevicesByType() { + return dcDeviceMapper.numberOfDevicesByType(); + } + public static List castList(Object obj, Class clazz) { List result = new ArrayList(); if (obj instanceof List) { diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcWeatherMonitoringServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcWeatherMonitoringServiceImpl.java index 2b344579..5b2363b9 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcWeatherMonitoringServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcWeatherMonitoringServiceImpl.java @@ -45,7 +45,7 @@ public class DcWeatherMonitoringServiceImpl implements IDcWeatherMonitoringServi DcDevice dcDevice = new DcDevice(); - dcDevice.setDeviceType(3); + dcDevice.setDeviceType("3"); List deviceList = dcDeviceService.listDevice(dcDevice); //正常路段里程 diff --git a/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml b/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml index b9c350de..c7e78309 100644 --- a/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml @@ -105,4 +105,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + diff --git a/zc-business/src/main/resources/mapper/business/StatusMapper.xml b/zc-business/src/main/resources/mapper/business/StatusMapper.xml index 4943b263..9c40d3bf 100644 --- a/zc-business/src/main/resources/mapper/business/StatusMapper.xml +++ b/zc-business/src/main/resources/mapper/business/StatusMapper.xml @@ -99,6 +99,12 @@ AND (d.device_type = #{status.type} or d.child_type=#{status.type}) + + AND s.device_id = #{status.deviceId} + + + AND d.use_state = #{status.useState} +