首页数据

This commit is contained in:
2025-09-02 15:08:53 +08:00
parent 98ef841f18
commit 1d37bfb719
9 changed files with 237 additions and 50 deletions

View File

@ -1,17 +1,16 @@
package com.fuyuanshen.web.controller.device; package com.fuyuanshen.web.controller.device;
import com.fuyuanshen.common.core.domain.R; import com.fuyuanshen.common.core.domain.R;
import com.fuyuanshen.equipment.domain.vo.AlarmInformationVo;
import com.fuyuanshen.equipment.domain.vo.DataOverviewVo; import com.fuyuanshen.equipment.domain.vo.DataOverviewVo;
import com.fuyuanshen.equipment.domain.vo.EquipmentClassificationVo;
import com.fuyuanshen.equipment.service.DeviceService; import com.fuyuanshen.equipment.service.DeviceService;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Arrays; import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/** /**
* 首页数据 * 首页数据
@ -39,29 +38,36 @@ public class HomePageController {
} }
/**
* 获取 设备分类
// 获取设备使用数据 * DataOverview
@GetMapping("/{deviceId}") */
public Map<String, Object> getUsageData( @GetMapping("/getEquipmentClassification")
@PathVariable String deviceId, public R<EquipmentClassificationVo> getEquipmentClassification() {
@RequestParam String range) { return R.ok(deviceService.getEquipmentClassification());
Map<String, Object> response = new HashMap<>();
if ("halfYear".equals(range)) {
response.put("months", Arrays.asList("1月", "2月", "3月", "4月", "5月", "6月"));
response.put("data", Arrays.asList(45, 52, 38, 60, 56, 48));
} else if ("oneYear".equals(range)) {
response.put("months", Arrays.asList("7月", "8月", "9月", "10月", "11月", "12月",
"1月", "2月", "3月", "4月", "5月", "6月"));
response.put("data", Arrays.asList(42, 38, 45, 48, 52, 55, 45, 52, 38, 60, 56, 48));
}
response.put("deviceId", deviceId);
response.put("range", range);
response.put("lastUpdate", new Date());
return response;
} }
/**
* 获取 报警信息
* DataOverview
*/
@GetMapping("/getAlarmInformation")
public R<AlarmInformationVo> getAlarmInformation() {
return R.ok(deviceService.getAlarmInformation());
}
/**
* 获取设备使用数据
*
* @param deviceId 设备ID
* @param range 时间范围 1:半年 2:一年
* @return 每月使用数据列表
*/
@GetMapping("/getEquipmentUsageData/{deviceId}/{range}")
public R<List<Map<String, Object>>> getEquipmentUsageData(@PathVariable Long deviceId, @PathVariable Integer range) {
return R.ok(deviceService.getEquipmentUsageData(deviceId, range));
}
} }

View File

@ -39,8 +39,8 @@ public class EncryptUtilsTest {
loginBody.setClientId("e5cd7e4891bf95d1d19206ce24a7b32e"); loginBody.setClientId("e5cd7e4891bf95d1d19206ce24a7b32e");
loginBody.setGrantType("password"); loginBody.setGrantType("password");
loginBody.setTenantId("894078"); loginBody.setTenantId("894078");
loginBody.setCode("9"); loginBody.setCode("0");
loginBody.setUuid("d5be31eac1244cee851a9903f358bc6a"); loginBody.setUuid("1d6615668c7f410da77c4e002c601073");
// loginBody.setUsername("admin"); // loginBody.setUsername("admin");
// loginBody.setPassword("admin123"); // loginBody.setPassword("admin123");
loginBody.setUsername("dyf"); loginBody.setUsername("dyf");

View File

@ -162,7 +162,7 @@ public class Device extends TenantEntity {
private Date productionDate; private Date productionDate;
/** /**
* 在线状态(0离线1在线) * 在线状态(0离线1在线,2异常)
*/ */
private Integer onlineStatus; private Integer onlineStatus;
} }

View File

@ -36,8 +36,10 @@ public class DeviceAlarm extends TenantEntity {
/** /**
* 报警事项 * 报警事项
* 0-强制报警1-撞击闯入2-手动报警3-电子围栏告警4-强制告警
* device_action
*/ */
private String deviceAction; private Integer deviceAction;
/** /**
* 设备名称 * 设备名称
@ -92,6 +94,7 @@ public class DeviceAlarm extends TenantEntity {
/** /**
* 0已处理1未处理 * 0已处理1未处理
* treatment_state
*/ */
private Long treatmentState; private Long treatmentState;

View File

@ -59,7 +59,7 @@ public class DeviceType extends TenantEntity {
@Schema(title = "联网方式", example = "0:无;1:4G;2:WIFI") @Schema(title = "联网方式", example = "0:无;1:4G;2:WIFI")
private String networkWay; private String networkWay;
@Schema(title = "通讯方式", example = "0:4G;1:蓝牙") @Schema(title = "通讯方式", example = "0:4G;1:蓝牙,2 4G&蓝牙")
private String communicationMode; private String communicationMode;
/** /**

View File

@ -6,13 +6,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuyuanshen.equipment.domain.Device; import com.fuyuanshen.equipment.domain.Device;
import com.fuyuanshen.equipment.domain.dto.InstructionRecordDto; import com.fuyuanshen.equipment.domain.dto.InstructionRecordDto;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;
import com.fuyuanshen.equipment.domain.vo.AppDeviceVo; import com.fuyuanshen.equipment.domain.vo.*;
import com.fuyuanshen.equipment.domain.vo.LocationHistoryVo;
import com.fuyuanshen.equipment.domain.vo.WebDeviceVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @Description: * @Description:
@ -72,7 +71,42 @@ public interface DeviceMapper extends BaseMapper<Device> {
AppDeviceVo getDeviceInfo(@Param("deviceMac") String deviceMac); AppDeviceVo getDeviceInfo(@Param("deviceMac") String deviceMac);
Page<WebDeviceVo> queryWebDeviceList(Page<Object> build,@Param("criteria") DeviceQueryCriteria criteria); Page<WebDeviceVo> queryWebDeviceList(Page<Object> build, @Param("criteria") DeviceQueryCriteria criteria);
Page<LocationHistoryVo> getLocationHistory(Page<Object> build, @Param("bo") InstructionRecordDto criteria); Page<LocationHistoryVo> getLocationHistory(Page<Object> build, @Param("bo") InstructionRecordDto criteria);
/**
* 获取数据总览
*
* @return
*/
DataOverviewVo getDataOverview();
/**
* 获取设备分类
*
* @return
*/
EquipmentClassificationVo getEquipmentClassification();
/**
* 获取告警信息
*
* @return
*/
AlarmInformationVo getAlarmInformation();
/**
* 获取设备使用数据
*
* @param deviceId 设备ID
* @param range 时间范围 1:半年 2:一年
* @return 每月使用数据列表
*/
List<Map<String, Object>> getEquipmentUsageData(Long deviceId, Integer range);
// 在DeviceMapper.java中添加方法
int getUsageDataForMonth(@Param("deviceId") Long deviceId,
@Param("year") int year,
@Param("month") int month);
} }

View File

@ -9,12 +9,11 @@ import com.fuyuanshen.equipment.domain.Device;
import com.fuyuanshen.equipment.domain.dto.AppDeviceBo; import com.fuyuanshen.equipment.domain.dto.AppDeviceBo;
import com.fuyuanshen.equipment.domain.form.DeviceForm; import com.fuyuanshen.equipment.domain.form.DeviceForm;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;
import com.fuyuanshen.equipment.domain.vo.AppDeviceVo; import com.fuyuanshen.equipment.domain.vo.*;
import com.fuyuanshen.equipment.domain.vo.CustomerVo;
import com.fuyuanshen.equipment.domain.vo.DataOverviewVo;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @Description: * @Description:
@ -122,4 +121,27 @@ public interface DeviceService extends IService<Device> {
* @return * @return
*/ */
DataOverviewVo getDataOverview(); DataOverviewVo getDataOverview();
/**
* 获取设备分类
*
* @return
*/
EquipmentClassificationVo getEquipmentClassification();
/**
* 获取告警信息
*
* @return
*/
AlarmInformationVo getAlarmInformation();
/**
* 获取设备使用数据
*
* @param deviceId
* @param range
* @return
*/
List<Map<String, Object>> getEquipmentUsageData(Long deviceId, Integer range);
} }

View File

@ -28,9 +28,7 @@ import com.fuyuanshen.equipment.domain.form.DeviceForm;
import com.fuyuanshen.equipment.domain.query.DeviceAssignmentQuery; import com.fuyuanshen.equipment.domain.query.DeviceAssignmentQuery;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;
import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria; import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria;
import com.fuyuanshen.equipment.domain.vo.AppDeviceVo; import com.fuyuanshen.equipment.domain.vo.*;
import com.fuyuanshen.equipment.domain.vo.CustomerVo;
import com.fuyuanshen.equipment.domain.vo.DataOverviewVo;
import com.fuyuanshen.equipment.enums.BindingStatusEnum; import com.fuyuanshen.equipment.enums.BindingStatusEnum;
import com.fuyuanshen.equipment.enums.CommunicationModeEnum; import com.fuyuanshen.equipment.enums.CommunicationModeEnum;
import com.fuyuanshen.equipment.enums.DeviceActiveStatusEnum; import com.fuyuanshen.equipment.enums.DeviceActiveStatusEnum;
@ -53,11 +51,9 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/** /**
* @Description: * @Description:
@ -596,8 +592,6 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
} }
/** /**
* 查询设备MAC号 * 查询设备MAC号
* *
@ -623,7 +617,46 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
*/ */
@Override @Override
public DataOverviewVo getDataOverview() { public DataOverviewVo getDataOverview() {
return null; DataOverviewVo dataOverviewVo = deviceMapper.getDataOverview();
return dataOverviewVo;
}
/**
* 获取设备分类
*
* @return
*/
@Override
public EquipmentClassificationVo getEquipmentClassification() {
EquipmentClassificationVo equipmentClassification = deviceMapper.getEquipmentClassification();
return equipmentClassification;
}
/**
* 获取告警信息
*
* @return
*/
@Override
public AlarmInformationVo getAlarmInformation() {
AlarmInformationVo alarmInformation = deviceMapper.getAlarmInformation();
return alarmInformation;
}
/**
* 获取设备使用数据
*
* @param deviceId 设备ID
* @param range 时间范围 1:半年 2:一年
* @return 每月使用数据列表
*/
@Override
public List<Map<String, Object>> getEquipmentUsageData(Long deviceId, Integer range) {
List<Map<String, Object>> equipmentUsageData = deviceMapper.getEquipmentUsageData(deviceId, range);
return equipmentUsageData;
} }
} }

View File

@ -314,4 +314,93 @@
a.create_time DESC a.create_time DESC
</select> </select>
<!-- 获取数据总览 -->
<select id="getDataOverview" resultType="com.fuyuanshen.equipment.domain.vo.DataOverviewVo">
SELECT (SELECT COUNT(1) FROM device) AS devicesNumber,
(SELECT COUNT(1) FROM device WHERE device_status = 1) AS equipmentOnline,
(SELECT COUNT(1) FROM device WHERE DATE (create_time) = CURDATE()) AS bindingNew, (
SELECT COUNT (1)
FROM device
WHERE device_status = 2) AS equipmentAbnormal
</select>
<!-- 获取设备分类 -->
<select id="getEquipmentClassification"
resultType="com.fuyuanshen.equipment.domain.vo.EquipmentClassificationVo">
SELECT (SELECT COUNT(1)
FROM device d
INNER JOIN device_type dt ON d.device_type = dt.id
WHERE dt.communication_mode = 0) AS equipment4G,
(SELECT COUNT(1)
FROM device d
INNER JOIN device_type dt ON d.device_type = dt.id
WHERE dt.communication_mode = 1) AS deviceBluetooth,
(SELECT COUNT(1)
FROM device d
INNER JOIN device_type dt ON d.device_type = dt.id
WHERE dt.communication_mode = 2) AS devices4GAndBluetooth
</select>
<!-- 获取告警信息 -->
<select id="getAlarmInformation" resultType="com.fuyuanshen.equipment.domain.vo.AlarmInformationVo">
SELECT (SELECT COUNT(1) FROM device_alarm WHERE treatment_state = 0 AND DATE (create_time) = CURDATE()) AS alarmsTotal, (
SELECT COUNT (1)
FROM device_alarm
WHERE treatment_state = 0
AND DATE (create_time) = CURDATE()) AS processingAlarm
, (
SELECT COUNT (1)
FROM device_alarm
WHERE device_action = 0
AND DATE (create_time) = CURDATE()) AS alarmForced
, (
SELECT COUNT (1)
FROM device_alarm
WHERE device_action = 1
AND DATE (create_time) = CURDATE()) AS intrusionImpact
, (
SELECT COUNT (1)
FROM device_alarm
WHERE device_action = 2
AND DATE (create_time) = CURDATE()) AS alarmManual
, (
SELECT COUNT (1)
FROM device_alarm
WHERE device_action = 3 AND DATE (create_time) = CURDATE()) AS fenceElectronic
</select>
<!-- 获取设备使用数据 -->
<select id="getEquipmentUsageData" resultType="map">
SELECT COUNT(CASE WHEN MONTH (dl.create_time) = 1 THEN 1 END) AS m1,
COUNT(CASE WHEN MONTH (dl.create_time) = 2 THEN 1 END) AS m2,
COUNT(CASE WHEN MONTH (dl.create_time) = 3 THEN 1 END) AS m3,
COUNT(CASE WHEN MONTH (dl.create_time) = 4 THEN 1 END) AS m4,
COUNT(CASE WHEN MONTH (dl.create_time) = 5 THEN 1 END) AS m5,
COUNT(CASE WHEN MONTH (dl.create_time) = 6 THEN 1 END) AS m6,
COUNT(CASE WHEN MONTH (dl.create_time) = 7 THEN 1 END) AS m7,
COUNT(CASE WHEN MONTH (dl.create_time) = 8 THEN 1 END) AS m8,
COUNT(CASE WHEN MONTH (dl.create_time) = 9 THEN 1 END) AS m9,
COUNT(CASE WHEN MONTH (dl.create_time) = 10 THEN 1 END) AS m10,
COUNT(CASE WHEN MONTH (dl.create_time) = 11 THEN 1 END) AS m11,
COUNT(CASE WHEN MONTH (dl.create_time) = 12 THEN 1 END) AS m12
FROM device_log dl
LEFT JOIN device d ON dl.device_id = d.id
LEFT JOIN device_type dt ON d.device_type = dt.id
WHERE dt.id = #{deviceId}
AND (
(#{range} = 1 AND dl.create_time >= DATE_SUB(NOW(), INTERVAL 6 MONTH)) OR
(#{range} = 2 AND dl.create_time >= DATE_SUB(NOW(), INTERVAL 12 MONTH))
)
</select>
<select id="getUsageDataForMonth" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM device_log dl
WHERE dl.device_id = #{deviceId}
AND YEAR (
dl.create_time) = #{year}
AND MONTH (dl.create_time) = #{month}
</select>
</mapper> </mapper>