diff --git a/.gitignore b/.gitignore
index a496277..e6cef14 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,4 +39,6 @@ build/
.DS_Store
/logs
-.idea/*
\ No newline at end of file
+.idea/*
+
+*.log
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index bebfb51..9eb8b38 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,29 +4,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -49,11 +42,11 @@
-
+
-
+ {
+ "isOnboardingCommentShown": true
+}
@@ -74,6 +67,9 @@
+
+
+
{
"associatedIndex": 1
}
@@ -82,38 +78,40 @@
- {
+ "keyToString": {
+ "ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
+ "Application.test.executor": "Debug",
+ "HTTP Request.MiddlePlatformApplication | #1.executor": "Run",
+ "HTTP Request.MiddlePlatformApplication | #2.executor": "Run",
+ "HTTP Request.MiddlePlatformApplication | #3.executor": "Run",
+ "Maven.MiddlePlatform [clean].executor": "Run",
+ "Maven.MiddlePlatform [install].executor": "Run",
+ "Maven.maibu-netty-server [clean].executor": "Run",
+ "ModuleVcsDetector.initialDetectionPerformed": "true",
+ "RequestMappingsPanelOrder0": "0",
+ "RequestMappingsPanelOrder1": "1",
+ "RequestMappingsPanelWidth0": "75",
+ "RequestMappingsPanelWidth1": "75",
+ "RunOnceActivity.MCP Project settings loaded": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
+ "RunOnceActivity.git.unshallow": "true",
+ "RunOnceActivity.typescript.service.memoryLimit.init": "true",
+ "Spring Boot.MiddlePlatformApplication.executor": "Run",
+ "git-widget-placeholder": "main",
+ "kotlin-language-version-configured": "true",
+ "last_opened_file_path": "/home/maibu/Test/MiddlePlatform/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "nodejs_package_manager_path": "npm",
+ "onboarding.tips.debug.path": "D:/code/MiddlePlatform/maibu-service/maibu-system-service/src/main/java/com/maibu/Main.java",
+ "settings.editor.selected.configurable": "project.propVCSSupport.CommitDialog",
+ "vue.rearranger.settings.migration": "true"
}
-}]]>
+}
@@ -122,65 +120,52 @@
-
-
-
+
+
+
-
+
-
-
+
+
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
+
+
-
-
-
-
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
@@ -198,6 +183,12 @@
+
+
+
+
+
+
@@ -233,6 +224,8 @@
+
+
@@ -246,6 +239,9 @@
+
+
+
@@ -280,7 +276,15 @@
-
+
+
+
+
+
+
+
+
+
@@ -338,18 +342,226 @@
1778051353366
-
+
+
+ 1778141126329
+
+
+
+ 1778141126329
+
+
+
+ 1778206916483
+
+
+
+ 1778206916483
+
+
+
+ 1778207840351
+
+
+
+ 1778207840351
+
+
+
+ 1778210449207
+
+
+
+ 1778210449207
+
+
+
+ 1778218670780
+
+
+
+ 1778218670780
+
+
+
+ 1778218713227
+
+
+
+ 1778218713227
+
+
+
+ 1778223414798
+
+
+
+ 1778223414798
+
+
+
+ 1778223457362
+
+
+
+ 1778223457362
+
+
+
+ 1778287008465
+
+
+
+ 1778287008465
+
+
+
+ 1778309168631
+
+
+
+ 1778309168631
+
+
+
+ 1778309230525
+
+
+
+ 1778309230525
+
+
+
+ 1778310109753
+
+
+
+ 1778310109753
+
+
+
+ 1778553366338
+
+
+
+ 1778553366338
+
+
+
+ 1778553425504
+
+
+
+ 1778553425504
+
+
+
+ 1778659898388
+
+
+
+ 1778659898388
+
+
+
+ 1778659949764
+
+
+
+ 1778659949764
+
+
+
+ 1778720959140
+
+
+
+ 1778720959140
+
+
+
+ 1778741609875
+
+
+
+ 1778741609875
+
+
+
+ 1778813931654
+
+
+
+ 1778813931654
+
+
+
+ 1778835348155
+
+
+
+ 1778835348155
+
+
+
+ 1778837534661
+
+
+
+ 1778837534661
+
+
+
+ 1779066908452
+
+
+
+ 1779066908452
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -390,6 +602,39 @@
127
+
+ file://$PROJECT_DIR$/maibu-admin/src/main/java/com/maibu/web/controller/system/SysDeviceModelController.java
+ 81
+
+
+
+ file://$PROJECT_DIR$/maibu-admin/src/main/java/com/maibu/web/controller/system/SysDeviceModelController.java
+ 83
+
+
+
+ file://$PROJECT_DIR$/maibu-service/maibu-system-service/src/main/java/com/maibu/service/impl/SysDeviceModelServiceImpl.java
+ 112
+
+
+
+ file://$PROJECT_DIR$/maibu-admin/src/main/java/com/maibu/web/controller/system/SysQrCodeController.java
+ 75
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/IOTWorkOrderController.java
+ 58
+
+
+
+
+
+
diff --git a/D:/uploadPath/avatar/2026/05/15/1-首页_20260515160414A006.png b/D:/uploadPath/avatar/2026/05/15/1-首页_20260515160414A006.png
new file mode 100644
index 0000000..9cedf70
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/1-首页_20260515160414A006.png differ
diff --git a/D:/uploadPath/avatar/2026/05/15/1-首页_20260515161004A001.png b/D:/uploadPath/avatar/2026/05/15/1-首页_20260515161004A001.png
new file mode 100644
index 0000000..9cedf70
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/1-首页_20260515161004A001.png differ
diff --git a/D:/uploadPath/avatar/2026/05/15/10-装备控制_20260515160723A008.png b/D:/uploadPath/avatar/2026/05/15/10-装备控制_20260515160723A008.png
new file mode 100644
index 0000000..c51e8fa
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/10-装备控制_20260515160723A008.png differ
diff --git a/D:/uploadPath/avatar/2026/05/15/11-作业航线_20260515160320A003.png b/D:/uploadPath/avatar/2026/05/15/11-作业航线_20260515160320A003.png
new file mode 100644
index 0000000..6dbb8b4
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/11-作业航线_20260515160320A003.png differ
diff --git a/D:/uploadPath/avatar/2026/05/15/2-实时监控_20260515160343A004.png b/D:/uploadPath/avatar/2026/05/15/2-实时监控_20260515160343A004.png
new file mode 100644
index 0000000..7fa3727
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/2-实时监控_20260515160343A004.png differ
diff --git a/D:/uploadPath/avatar/2026/05/15/20211231082559_932c3_20260515161037A003.jpg b/D:/uploadPath/avatar/2026/05/15/20211231082559_932c3_20260515161037A003.jpg
new file mode 100644
index 0000000..d246438
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/20211231082559_932c3_20260515161037A003.jpg differ
diff --git a/D:/uploadPath/avatar/2026/05/15/20211231082559_932c3_20260515162739A004.jpg b/D:/uploadPath/avatar/2026/05/15/20211231082559_932c3_20260515162739A004.jpg
new file mode 100644
index 0000000..d246438
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/20211231082559_932c3_20260515162739A004.jpg differ
diff --git a/D:/uploadPath/avatar/2026/05/15/7-工单管理_20260515161025A002.png b/D:/uploadPath/avatar/2026/05/15/7-工单管理_20260515161025A002.png
new file mode 100644
index 0000000..550434d
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/7-工单管理_20260515161025A002.png differ
diff --git a/D:/uploadPath/avatar/2026/05/15/8-报表管理_20260515160242A001.png b/D:/uploadPath/avatar/2026/05/15/8-报表管理_20260515160242A001.png
new file mode 100644
index 0000000..1d1f05a
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/8-报表管理_20260515160242A001.png differ
diff --git a/D:/uploadPath/avatar/2026/05/15/8-报表管理_20260515160453A007.png b/D:/uploadPath/avatar/2026/05/15/8-报表管理_20260515160453A007.png
new file mode 100644
index 0000000..1d1f05a
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/8-报表管理_20260515160453A007.png differ
diff --git a/D:/uploadPath/avatar/2026/05/15/9-系统设置_20260515160250A002.png b/D:/uploadPath/avatar/2026/05/15/9-系统设置_20260515160250A002.png
new file mode 100644
index 0000000..edd52ce
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/9-系统设置_20260515160250A002.png differ
diff --git a/D:/uploadPath/avatar/2026/05/15/9-系统设置_20260515160348A005.png b/D:/uploadPath/avatar/2026/05/15/9-系统设置_20260515160348A005.png
new file mode 100644
index 0000000..edd52ce
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/15/9-系统设置_20260515160348A005.png differ
diff --git a/D:/uploadPath/avatar/2026/05/18/04032_20260518162112A001.png b/D:/uploadPath/avatar/2026/05/18/04032_20260518162112A001.png
new file mode 100644
index 0000000..0858959
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/18/04032_20260518162112A001.png differ
diff --git a/D:/uploadPath/avatar/2026/05/18/20211231082559_932c3_20260518163437A001.jpg b/D:/uploadPath/avatar/2026/05/18/20211231082559_932c3_20260518163437A001.jpg
new file mode 100644
index 0000000..d246438
Binary files /dev/null and b/D:/uploadPath/avatar/2026/05/18/20211231082559_932c3_20260518163437A001.jpg differ
diff --git a/maibu-admin/src/main/java/com/maibu/web/controller/system/SysLoginController.java b/maibu-admin/src/main/java/com/maibu/web/controller/system/SysLoginController.java
index 1365e3f..b6af317 100644
--- a/maibu-admin/src/main/java/com/maibu/web/controller/system/SysLoginController.java
+++ b/maibu-admin/src/main/java/com/maibu/web/controller/system/SysLoginController.java
@@ -84,6 +84,7 @@ public class SysLoginController {
String password = null;
Integer aiChatNum = null;
String nickName = null;
+ String avatar = null;
//loginPlatForm == null 走默认账号密码登录
if (loginPlatForm != null) {
@@ -107,6 +108,7 @@ public class SysLoginController {
if (sysUser != null) {
aiChatNum = sysUser.getAiChatNum();
nickName = sysUser.getNickName();
+ avatar =sysUser.getAvatar();
}
} else if (loginPlatForm == 2) {
//公众号
@@ -139,6 +141,7 @@ public class SysLoginController {
String code = SourceType.switchCode(sourceType);
username = loginBody.getUsername();
password = loginBody.getPassword();
+
String loginUserKey = username + ":" + code; // 使用用户ID作为缓存键的一部分
NettyDevice nettyDevice = sessionManager.getDevice(loginUserKey);
if (sourceType != 1) {
@@ -164,6 +167,7 @@ public class SysLoginController {
ajax.put("username", username);
ajax.put("aiChatNum", aiChatNum);
ajax.put("nickName", nickName);
+ ajax.put("avatar",avatar);
if (sysUser != null) {
ajax.put("roleId",sysUser.getRoleId());
ajax.put("siteId",sysUser.getSiteId());
diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/AlarmController.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/AlarmController.java
index f751785..f065b27 100644
--- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/AlarmController.java
+++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/AlarmController.java
@@ -1 +1 @@
-package com.maibu.controller;
import com.maibu.annotation.Log;import com.maibu.core.business.alarm_center.Alarm;import com.maibu.core.business.dto.AlarmHandleDTO;
import com.maibu.core.business.dto.AlarmQueryDTO;
import com.maibu.core.controller.BaseController;import com.maibu.core.domain.AjaxResult;
import com.maibu.core.page.TableDataInfo;
import com.maibu.enums.BusinessType;
import com.maibu.service.IAlarmService;
import com.maibu.utils.poi.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;import java.util.List;import java.util.Map;import static com.maibu.utils.PageUtils.startPage;
@Api("告警中心接口")
@RestController
@Slf4j
@RequestMapping("/iot/alarm")
public class AlarmController extends BaseController{
@Autowired
private IAlarmService alarmService;
// @PreAuthorize("@ss.hasPermi('iot:alarm:list')")
@GetMapping("/list")
@ApiOperation("告警分页列表")
public TableDataInfo list(AlarmQueryDTO queryDTO) {
// startPage();
// return alarmService.selectAlarmPage(queryDTO);
return alarmService.selectAlarmPage(queryDTO);
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:query')")
@GetMapping("/{id}")
@ApiOperation("获取告警详情")
public AjaxResult getInfo(@PathVariable Long id) {
return AjaxResult.success(alarmService.selectAlarmById(id));
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:add')")
@Log(title = "告警", businessType = BusinessType.INSERT)
@PostMapping
@ApiOperation("新增告警")
public AjaxResult add(@RequestBody Alarm alarm) {
return toAjax(alarmService.insertAlarm(alarm));
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:edit')")
@Log(title = "告警", businessType = BusinessType.UPDATE)
@PutMapping
@ApiOperation("修改告警")
public AjaxResult edit(@RequestBody Alarm alarm) {
return toAjax(alarmService.updateAlarm(alarm));
}
//@PreAuthorize("@ss.hasPermi('iot:alarm:handle')")
@Log(title = "告警处理", businessType = BusinessType.UPDATE)
@PutMapping("/handle")
@ApiOperation("处理告警")
public AjaxResult handle(@RequestBody AlarmHandleDTO handleDTO) {
return toAjax(alarmService.handleAlarm(handleDTO));
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:remove')")
@Log(title = "告警", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
@ApiOperation("删除告警")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(alarmService.deleteAlarmByIds(ids));
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:statistics')")
@GetMapping("/statistics")
@ApiOperation("告警统计")
public AjaxResult statistics() {
Map statistics = alarmService.getAlarmStatistics();
return AjaxResult.success(statistics);
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:export')")
@Log(title = "告警", businessType = BusinessType.EXPORT)
@PostMapping("/export")
@ApiOperation("导出告警")
public void export(HttpServletResponse response, AlarmQueryDTO queryDTO) {
try {
List list = alarmService.selectAlarmList(queryDTO);
ExcelUtil util = new ExcelUtil<>(Alarm.class);
util.exportExcel(response, list, "告警数据");
} catch (Exception e) {
log.error("导出告警失败", e);
}
}
}
\ No newline at end of file
+package com.maibu.controller;
import com.maibu.annotation.Log;import com.maibu.core.business.alarm_center.Alarm;import com.maibu.core.business.dto.AlarmHandleDTO;
import com.maibu.core.business.dto.AlarmQueryDTO;
import com.maibu.core.controller.BaseController;import com.maibu.core.domain.AjaxResult;
import com.maibu.core.page.TableDataInfo;
import com.maibu.enums.BusinessType;
import com.maibu.service.IAlarmService;
import com.maibu.utils.poi.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;import java.util.List;import java.util.Map;import static com.maibu.utils.PageUtils.startPage;
@Api("告警中心接口")
@RestController
@Slf4j
@RequestMapping("/iot/alarm")
public class AlarmController extends BaseController{
@Autowired
private IAlarmService alarmService;
// @PreAuthorize("@ss.hasPermi('iot:alarm:list')")
@GetMapping("/list")
@ApiOperation("告警分页列表")
public TableDataInfo list(AlarmQueryDTO queryDTO) {
// startPage();
// return alarmService.selectAlarmPage(queryDTO);
return alarmService.selectAlarmPage(queryDTO);
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:query')")
@GetMapping("/{id}")
@ApiOperation("获取告警详情")
public AjaxResult getInfo(@PathVariable Long id) {
return AjaxResult.success(alarmService.selectAlarmById(id));
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:add')")
@Log(title = "告警", businessType = BusinessType.INSERT)
@PostMapping
@ApiOperation("新增告警")
public AjaxResult add(@RequestBody Alarm alarm) {
return toAjax(alarmService.insertAlarm(alarm));
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:edit')")
@Log(title = "告警", businessType = BusinessType.UPDATE)
@PutMapping
@ApiOperation("修改告警")
public AjaxResult edit(@RequestBody Alarm alarm) {
return toAjax(alarmService.updateAlarm(alarm));
}
//@PreAuthorize("@ss.hasPermi('iot:alarm:handle')")
@Log(title = "告警处理", businessType = BusinessType.UPDATE)
@PutMapping("/handle")
@ApiOperation("处理告警")
public AjaxResult handle(@RequestBody AlarmHandleDTO handleDTO) {
return toAjax(alarmService.handleAlarm(handleDTO));
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:remove')")
@Log(title = "告警", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
@ApiOperation("删除告警")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(alarmService.deleteAlarmByIds(ids));
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:statistics')")
// @GetMapping("/statistics")
// @ApiOperation("告警统计")
// public AjaxResult statistics() {
// Map statistics = alarmService.getAlarmStatistics();
// return AjaxResult.success(statistics);
// }
@GetMapping("/statistics")
@ApiOperation("告警统计")
public AjaxResult statistics(AlarmQueryDTO queryDTO) {
Map statistics = alarmService.getAlarmStatistics(queryDTO);
return AjaxResult.success(statistics);
}
// @PreAuthorize("@ss.hasPermi('iot:alarm:export')")
@Log(title = "告警", businessType = BusinessType.EXPORT)
@PostMapping("/export")
@ApiOperation("导出告警")
public void export(HttpServletResponse response, AlarmQueryDTO queryDTO) {
try {
List list = alarmService.selectAlarmList(queryDTO);
ExcelUtil util = new ExcelUtil<>(Alarm.class);
util.exportExcel(response, list, "告警数据");
} catch (Exception e) {
log.error("导出告警失败", e);
}
}
}
\ No newline at end of file
diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IAlarmService.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IAlarmService.java
index e8b9bcc..de10cbf 100644
--- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IAlarmService.java
+++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IAlarmService.java
@@ -1 +1 @@
-package com.maibu.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.maibu.core.business.alarm_center.Alarm;
import com.maibu.core.business.dto.AlarmHandleDTO;
import com.maibu.core.business.dto.AlarmQueryDTO;
import com.maibu.core.page.TableDataInfo;
import java.util.List;
import java.util.Map;
public interface IAlarmService extends IService {
TableDataInfo selectAlarmPage(AlarmQueryDTO queryDTO);
List selectAlarmList(AlarmQueryDTO queryDTO);
Alarm selectAlarmById(Long id);
int insertAlarm(Alarm alarm);
int updateAlarm(Alarm alarm);
int handleAlarm(AlarmHandleDTO handleDTO);
int deleteAlarmById(Long id);
int deleteAlarmByIds(Long[] ids);
Map getAlarmStatistics();
}
\ No newline at end of file
+package com.maibu.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.maibu.core.business.alarm_center.Alarm;
import com.maibu.core.business.dto.AlarmHandleDTO;
import com.maibu.core.business.dto.AlarmQueryDTO;
import com.maibu.core.page.TableDataInfo;
import java.util.List;
import java.util.Map;
public interface IAlarmService extends IService {
TableDataInfo selectAlarmPage(AlarmQueryDTO queryDTO);
List selectAlarmList(AlarmQueryDTO queryDTO);
Alarm selectAlarmById(Long id);
int insertAlarm(Alarm alarm);
int updateAlarm(Alarm alarm);
int handleAlarm(AlarmHandleDTO handleDTO);
int deleteAlarmById(Long id);
int deleteAlarmByIds(Long[] ids);
Map getAlarmStatistics();
Map getAlarmStatistics(AlarmQueryDTO queryDTO);
}
\ No newline at end of file
diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/AlarmServiceImpl.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/AlarmServiceImpl.java
index 09068b9..8557e5b 100644
--- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/AlarmServiceImpl.java
+++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/AlarmServiceImpl.java
@@ -55,6 +55,28 @@ public class AlarmServiceImpl extends ServiceImpl implements
return baseMapper.selectList(wrapper);
}
+
+ @Override
+ public Map getAlarmStatistics(AlarmQueryDTO queryDTO) {
+ com.github.pagehelper.PageHelper.clearPage();
+
+ LambdaQueryWrapper wrapper = buildQueryWrapper(queryDTO);
+
+ List alarms = baseMapper.selectList(wrapper);
+ Map statistics = new HashMap<>();
+ statistics.put("total", alarms.size());
+ statistics.put("pending", alarms.stream().filter(a -> a.getHandleStatus() == 1).count());
+ statistics.put("processing", alarms.stream().filter(a -> a.getHandleStatus() == 2).count());
+ statistics.put("closed", alarms.stream().filter(a -> a.getHandleStatus() == 3).count());
+
+ statistics.put("levelStats", alarms.stream().collect(Collectors.groupingBy(Alarm::getAlarmLevel, Collectors.counting())));
+ statistics.put("typeStats", alarms.stream().collect(Collectors.groupingBy(Alarm::getAlarmType, Collectors.counting())));
+
+ return statistics;
+ }
+
+
+
private void validateQueryParams(AlarmQueryDTO queryDTO) {
Long userId = SecurityUtils.getUserId();
if (SecurityUtils.isAdmin(userId)) {