From 972735253f6c1e0ca1b87a5d1ad2b760f4b976bd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E5=95=B8=E9=9D=9E?= <13281114856@qq.com>
Date: Mon, 4 Jul 2022 17:25:36 +0800
Subject: [PATCH] =?UTF-8?q?=E5=91=8A=E8=AD=A6=E5=86=85=E5=AE=B9=E4=BF=AE?=
 =?UTF-8?q?=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../admin/src/assets/mixins/form.js           |  7 +-
 .../admin/src/assets/mixins/table.js          |  2 +-
 .../admin/src/components/Pagination.vue       |  5 +-
 .../admin/src/views/alarm/config/list.vue     |  2 +-
 .../src/views/device/alarm/info/list.vue      | 67 ++++++++++++++-----
 .../admin/src/views/device/list.vue           | 39 ++++++++---
 .../admin/src/views/device/module/list.vue    |  4 ++
 .../admin/src/views/product/list.vue          | 19 ++----
 .../system/oper/web/OperLogController.java    | 58 ++++++++--------
 .../service/impl/AlarmConfigServiceImpl.java  | 25 ++++---
 .../service/impl/DeviceModuleServiceImpl.java | 21 +++++-
 .../service/impl/DeviceServiceImpl.java       |  3 +
 .../device/web/DeviceAlarmInfoController.java | 18 ++++-
 13 files changed, 183 insertions(+), 87 deletions(-)

diff --git a/device-manager-ui/admin/src/assets/mixins/form.js b/device-manager-ui/admin/src/assets/mixins/form.js
index c56d4e55..a43a9752 100644
--- a/device-manager-ui/admin/src/assets/mixins/form.js
+++ b/device-manager-ui/admin/src/assets/mixins/form.js
@@ -55,10 +55,9 @@ export default {
       el.validate((valid) => {
         if (!valid) return;
         this.loading = true;
-        this.$post(this.urls.saveUrl || this.pageInfo.saveUrl, {
-          entity: this.beforeSubmit(this.form),
-          ...this.extendFormData
-        })
+        this.$post(this.urls.saveUrl || this.pageInfo.saveUrl, 
+            this.beforeSubmit(this.form)
+        )
           .then(res => {
             this.$message.success(res.msg);
             this.afterSubmit(res);
diff --git a/device-manager-ui/admin/src/assets/mixins/table.js b/device-manager-ui/admin/src/assets/mixins/table.js
index 2c235864..08b7f0b1 100644
--- a/device-manager-ui/admin/src/assets/mixins/table.js
+++ b/device-manager-ui/admin/src/assets/mixins/table.js
@@ -14,7 +14,7 @@ export default {
   },
   watch: {
     '$route'(route) {
-      // this.query = Object.assign({}, this.query, route.query);
+      this.query = Object.assign({}, this.query, route.query);
       this.getData();
     }
   },
diff --git a/device-manager-ui/admin/src/components/Pagination.vue b/device-manager-ui/admin/src/components/Pagination.vue
index 5e6f5efb..46920de0 100644
--- a/device-manager-ui/admin/src/components/Pagination.vue
+++ b/device-manager-ui/admin/src/components/Pagination.vue
@@ -40,6 +40,9 @@ export default {
       console.log("query",query)
       this.currPage = parseInt(query['page']) || 1;
       this.currSize = parseInt(query['size']) || this.prePageResult;
+
+     console.log("this.currPage",this.currPage,this.currSize)
+
     },
     changeHash(key, val) {
       let {path, query} = this.$route;
@@ -49,7 +52,7 @@ export default {
       })
     },
     handleSizeChange(currSize) {
-      console.log("currsize"+size)
+      console.log("currsize"+currSize)
       this.changeHash('size', currSize);
     },
     handleCurrentChange(currPage) {
diff --git a/device-manager-ui/admin/src/views/alarm/config/list.vue b/device-manager-ui/admin/src/views/alarm/config/list.vue
index c5206e3d..21d165b3 100644
--- a/device-manager-ui/admin/src/views/alarm/config/list.vue
+++ b/device-manager-ui/admin/src/views/alarm/config/list.vue
@@ -1,6 +1,6 @@
 <template>
     <div class="page">
-        <LayoutTable :data="tableData" :config="tableConfig">
+        <LayoutTable :data="tableData" notSearch :config="tableConfig">
                     </LayoutTable>
 
         <!-- <dialog-show ref="dialogform" @ok="getData" /> -->
diff --git a/device-manager-ui/admin/src/views/device/alarm/info/list.vue b/device-manager-ui/admin/src/views/device/alarm/info/list.vue
index 87bb219a..6f41ad1d 100644
--- a/device-manager-ui/admin/src/views/device/alarm/info/list.vue
+++ b/device-manager-ui/admin/src/views/device/alarm/info/list.vue
@@ -1,6 +1,35 @@
 <template>
   <div class="page">
-    <LayoutTable :data="tableData" notAdd notDel :config="tableConfig"> </LayoutTable>
+    <LayoutTable :data="tableData" notAdd notDel :config="tableConfig">
+
+         <el-button
+        slot="table-head-left2"
+        style="margin-left: 10px"
+        icon="el-icon-tickets"
+        size="mini"
+        @click="doExport"
+        :disabled="isExport"
+        >瀵煎嚭</el-button
+      >
+        
+        <el-tag slot="table-head-left2" size="mini" style="margin-left: 20px" 
+        >鍛婅娆℃暟锛歿{ tableData.totalCount }}娆�</el-tag
+      >
+
+      <el-tag slot="table-head-left2" size="mini" style="margin: 5px" type="danger"
+        >鍗遍櫓锛歿{ tableData.dangerCount }}娆�</el-tag
+      >
+
+      <el-tag slot="table-head-left2" size="mini" style="margin: 5px" type="warning"
+        >娆¤锛歿{ tableData.subCount }}娆�</el-tag
+      >
+
+       <el-tag slot="table-head-left2" size="mini" style="margin: 5px" type="info"
+        >涓€鑸細{{ tableData.normalCount }}娆�</el-tag
+      >
+
+        
+         </LayoutTable>
 
     <dialog-show ref="dialogform" @ok="getData" />
   </div>
@@ -23,25 +52,11 @@ export default {
   created() {
     console.log("queryIn:", this.queryIn);
 
-    //this.config.addQuery = { deviceId, deviceType };
-
     if (this.queryIn.alarmDevice) {
       this.query={}
       this.query["alarmDevice"] = this.queryIn.alarmDevice;
     }
-
-    console.log("pageInfo--before",this.pageInfo)
-
     this.changePath("/device/alarm/info")
-
-    // this.pageInfo.list = "/device/alarm/info/list";
-    // this.pageInfo.del = "/device/alarm/info/delete";
-    // this.pageInfo.add = "/device/alarm/info/add";
-    // this.pageInfo.edit = "/device/alarm/info/edit";
-    // this.pageInfo.view = "/device/alarm/info/view";
-
-     console.log("pageInfo",this.pageInfo)
-
   },
   methods: {
     /** 閲嶅啓鏂板鏂规硶 */
@@ -56,6 +71,19 @@ export default {
     // toView(row) {
     //     this.$refs.dialogform.view(row);
     // },
+    /** 瀵煎嚭Excel */
+            doExport() {
+                this.isExport = true;
+                this.$download("/device/alarm/info/exportExcel", {
+                    "idList": this.selection,
+                    'alarmDevice': this.$route.query['alarmDevice'],
+                    'alarmType': this.$route.query['alarmType'],
+                    'alarmStatus': this.$route.query['alarmStatus'],
+                }, { type: "excel" }).then(() => this.isExport = false).catch(error => {
+                    this.isExport = false;
+                    this.$message.error(error.message);
+                });
+            },
   },
   data() {
     return {
@@ -84,6 +112,13 @@ export default {
 
         ],
         columns: [
+ {type: "selection", width: 60},
+              {
+            type: "index",
+            label: "搴忓彿",
+            width: 50
+          },
+
 
           {
             label: "鍛婅鏃堕棿",
@@ -94,7 +129,7 @@ export default {
           {
             label: "鍛婅璁惧",
             prop: "alarmDevice",
-            formatter: this.formatterString,
+            formatter: this.formatter,
           },
             {
             label: "鍛婅鍐呭",
diff --git a/device-manager-ui/admin/src/views/device/list.vue b/device-manager-ui/admin/src/views/device/list.vue
index 6d79d5f2..41b56fe0 100644
--- a/device-manager-ui/admin/src/views/device/list.vue
+++ b/device-manager-ui/admin/src/views/device/list.vue
@@ -31,26 +31,41 @@
         :disabled="isExport"
         >瀵煎嚭</el-button
       >
-      <el-tag slot="table-head-left2" size="mini" style="margin-left: 20px" 
+      <el-tag slot="table-head-left2" size="mini" style="margin-left: 20px"
         >璁惧鎬绘暟锛歿{ tableData.totalCount }}鍙�</el-tag
       >
 
-      <el-tag slot="table-head-left2" size="mini" style="margin: 5px" type="success"
+      <el-tag
+        slot="table-head-left2"
+        size="mini"
+        style="margin: 5px"
+        type="success"
         >鍦ㄧ嚎锛歿{ tableData.onlineCount }}鍙�</el-tag
       >
 
-      <el-tag slot="table-head-left2" size="mini" style="margin: 5px" type="danger"
+      <el-tag
+        slot="table-head-left2"
+        size="mini"
+        style="margin: 5px"
+        type="danger"
         >绂荤嚎锛歿{ tableData.offlineCount }}鍙�</el-tag
       >
 
-       <el-tag slot="table-head-left2" size="mini" style="margin: 5px" type="danger"
+      <el-tag
+        slot="table-head-left2"
+        size="mini"
+        style="margin: 5px"
+        type="danger"
         >鍋滅敤锛歿{ tableData.stopCount }}鍙�</el-tag
       >
 
-       <el-tag slot="table-head-left2" size="mini" style="margin: 5px" type="danger"
+      <el-tag
+        slot="table-head-left2"
+        size="mini"
+        style="margin: 5px"
+        type="danger"
         >鏈縺娲伙細{{ tableData.unActiveCount }}鍙�</el-tag
       >
-
     </LayoutTable>
 
     <!-- 璁惧瀵煎叆瀵硅瘽妗� -->
@@ -99,7 +114,7 @@
 
     <drawer-show ref="drawerform" @ok="getData" />
 
-     <drawer-view ref="drawerViewform" @ok="getData" />
+    <drawer-view ref="drawerViewform" @ok="getData" />
   </div>
 </template>
 
@@ -165,7 +180,15 @@ export default {
     /** 瀵煎嚭Excel */
     doExport() {
       this.isExport = true;
-      this.$download("/device/exportExcel", {}, { type: "excel" })
+      this.$download(
+        "/device/exportExcel",
+        {
+          "idList": this.selection,
+          "deviceName": this.$route.query["deviceName"],
+          "siteId": this.$route.query["siteId"],
+        },
+        { type: "excel" }
+      )
         .then(() => (this.isExport = false))
         .catch((error) => {
           this.isExport = false;
diff --git a/device-manager-ui/admin/src/views/device/module/list.vue b/device-manager-ui/admin/src/views/device/module/list.vue
index e29f749f..07ddb249 100644
--- a/device-manager-ui/admin/src/views/device/module/list.vue
+++ b/device-manager-ui/admin/src/views/device/module/list.vue
@@ -41,6 +41,10 @@
                     ],
                     columns: [
                         {type: "selection", width: 60},
+
+                         {label: "妯″潡鍚嶇О", prop: "moduleName"},
+
+                        {label: "妯″潡娑堟伅缂栫爜", prop: "moduleMsgCode"},
                         {
                             label: "鎿嶄綔",
                             width: 240,
diff --git a/device-manager-ui/admin/src/views/product/list.vue b/device-manager-ui/admin/src/views/product/list.vue
index 5c6b5b29..48d6034f 100644
--- a/device-manager-ui/admin/src/views/product/list.vue
+++ b/device-manager-ui/admin/src/views/product/list.vue
@@ -1,6 +1,6 @@
 <template>
     <div class="page">
-        <LayoutTable :data="tableData" :config="tableConfig">
+        <LayoutTable :data="tableData" notAdd notDel notSearch :config="tableConfig">
                     </LayoutTable>
 
         <dialog-show ref="dialogform" @ok="getData" />
@@ -40,20 +40,11 @@
                     search: [
                     ],
                     columns: [
-                        {type: "selection", width: 60},
+                    
+                        {label: "浜у搧鍚嶇О", prop: "productName"},
 
-                        {label: "浜у搧鍚嶇О锛屽悕绉板敮涓€", prop: "productName"},
-
-                        {label: "浜у搧缂栫爜锛岀紪鐮佸敮涓€", prop: "productCode"},
-                        {
-                            label: "鎿嶄綔",
-                            width: 240,
-                            formatter: row => {
-                                return (
-                                    <table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
-                            );
-                            }
-                        }
+                        {label: "浜у搧缂栫爜", prop: "productCode"},
+            
                     ]
                 }
             };
diff --git a/device-manager/src/main/java/com/mortals/xhx/base/system/oper/web/OperLogController.java b/device-manager/src/main/java/com/mortals/xhx/base/system/oper/web/OperLogController.java
index d3be74c7..d33740d8 100644
--- a/device-manager/src/main/java/com/mortals/xhx/base/system/oper/web/OperLogController.java
+++ b/device-manager/src/main/java/com/mortals/xhx/base/system/oper/web/OperLogController.java
@@ -1,10 +1,10 @@
 /**
-* 鏂囦欢锛歄perLogController.java
-* 鐗堟湰锛�1.0.0
-* 鏃ユ湡锛�
-* Copyright &reg; 
-* All right reserved.
-*/
+ * 鏂囦欢锛歄perLogController.java
+ * 鐗堟湰锛�1.0.0
+ * 鏃ユ湡锛�
+ * Copyright &reg;
+ * All right reserved.
+ */
 package com.mortals.xhx.base.system.oper.web;
 
 
@@ -12,6 +12,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.mortals.framework.exception.AppException;
 import com.mortals.framework.model.Context;
 import com.mortals.framework.model.OrderCol;
+import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.base.system.oper.model.OperLogEntity;
 import com.mortals.xhx.base.system.oper.service.OperLogService;
 import com.mortals.xhx.common.code.OperTypeEnum;
@@ -33,37 +34,36 @@ import java.util.Map;
  * <p>Description: OperLogController  </p>
  * <p>Copyright: Copyright &reg;  </p>
  * <p>Company: </p>
- * @author 
+ *
+ * @author
  * @version 1.0.0
  */
 @RestController
 @RequestMapping("oper/log")
-public class OperLogController extends BaseCRUDJsonMappingController<OperLogService,OperLogForm,OperLogEntity,Long> {
+public class OperLogController extends BaseCRUDJsonBodyMappingController<OperLogService, OperLogEntity, Long> {
 
-	public OperLogController(){
-		super.setFormClass(OperLogForm.class);
-		super.setModuleDesc("鎿嶄綔鏃ュ織");
-	}
+    public OperLogController() {
+        super.setFormClass(OperLogForm.class);
+        super.setModuleDesc("鎿嶄綔鏃ュ織");
+    }
 
 
-	@Override
-	protected void init(HttpServletRequest request, HttpServletResponse response, OperLogForm form,
-						Map<String, Object> model, Context context) {
-		Map<String, Object> status = new HashMap<String, Object>(1);
-		// 杩斿洖鏃ュ織绫诲瀷
-		status.put("operType", OperTypeEnum.getEnumMap());
+    @Override
+    protected void init(Map<String, Object> model, Context context) {
+        Map<String, Object> status = new HashMap<String, Object>(1);
+        // 杩斿洖鏃ュ織绫诲瀷
+        status.put("operType", OperTypeEnum.getEnumMap());
 
-		model.put(KEY_RESULT_DICT, status);
-		super.init(request, response, form, model, context);
-	}
+        model.put(KEY_RESULT_DICT, status);
+    }
 
-	@Override
-	protected void doListBefore(HttpServletRequest request, HttpServletResponse response, OperLogForm form, Map<String, Object> model, Context context) throws AppException {
-		form.getQuery().setOrderColList(new ArrayList<OrderCol>() {
-			{
-				add(new OrderCol("a.logDate", "desc"));
-			}
-		});
-	}
+    @Override
+    protected void doListBefore(OperLogEntity query, Map<String, Object> model, Context context) throws AppException {
+        query.setOrderColList(new ArrayList<OrderCol>() {
+            {
+                add(new OrderCol("a.logDate", "desc"));
+            }
+        });
+    }
 
 }
\ No newline at end of file
diff --git a/device-manager/src/main/java/com/mortals/xhx/module/alarm/service/impl/AlarmConfigServiceImpl.java b/device-manager/src/main/java/com/mortals/xhx/module/alarm/service/impl/AlarmConfigServiceImpl.java
index 655d0b10..3030dab0 100644
--- a/device-manager/src/main/java/com/mortals/xhx/module/alarm/service/impl/AlarmConfigServiceImpl.java
+++ b/device-manager/src/main/java/com/mortals/xhx/module/alarm/service/impl/AlarmConfigServiceImpl.java
@@ -1,4 +1,5 @@
 package com.mortals.xhx.module.alarm.service.impl;
+
 import com.mortals.framework.exception.AppException;
 import com.mortals.framework.model.Context;
 import com.mortals.xhx.module.alarm.model.AlarmConfigQuery;
@@ -10,12 +11,12 @@ import com.mortals.xhx.module.alarm.service.AlarmConfigService;
 import org.springframework.util.ObjectUtils;
 
 /**
-* AlarmConfigService
-* 璁惧鍛婅閰嶇疆 service瀹炵幇
-*
-* @author zxfei
-* @date 2022-06-27
-*/
+ * AlarmConfigService
+ * 璁惧鍛婅閰嶇疆 service瀹炵幇
+ *
+ * @author zxfei
+ * @date 2022-06-27
+ */
 @Service("alarmConfigService")
 public class AlarmConfigServiceImpl extends AbstractCRUDServiceImpl<AlarmConfigDao, AlarmConfigEntity, Long> implements AlarmConfigService {
 
@@ -24,7 +25,7 @@ public class AlarmConfigServiceImpl extends AbstractCRUDServiceImpl<AlarmConfigD
     protected void saveBefore(AlarmConfigEntity entity, Context context) throws AppException {
         //鏍¢獙浜у搧鏄惁宸茬粡瀛樺湪閰嶇疆
         AlarmConfigEntity alarmConfigEntity = this.selectOne(new AlarmConfigQuery().productId(entity.getProductId()));
-        if(!ObjectUtils.isEmpty(alarmConfigEntity)){
+        if (!ObjectUtils.isEmpty(alarmConfigEntity)) {
             throw new AppException("褰撳墠浜у搧宸插瓨鍦ㄥ憡璀﹂厤缃紒");
         }
         super.saveBefore(entity, context);
@@ -32,10 +33,12 @@ public class AlarmConfigServiceImpl extends AbstractCRUDServiceImpl<AlarmConfigD
 
     @Override
     protected void updateBefore(AlarmConfigEntity entity, Context context) throws AppException {
-      //鏍¢獙
-        AlarmConfigEntity alarmConfigEntity = this.selectOne(new AlarmConfigQuery().productId(entity.getProductId()));
-        if(!ObjectUtils.isEmpty(alarmConfigEntity)&&entity.getId()!=alarmConfigEntity.getId()){
-            entity.setId(alarmConfigEntity.getId());
+        //鏍¢獙
+        if (!ObjectUtils.isEmpty(entity.getProductId())) {
+            AlarmConfigEntity alarmConfigEntity = this.selectOne(new AlarmConfigQuery().productId(entity.getProductId()));
+            if (!ObjectUtils.isEmpty(alarmConfigEntity) && entity.getId() != alarmConfigEntity.getId()) {
+                entity.setId(alarmConfigEntity.getId());
+            }
         }
         super.updateBefore(entity, context);
     }
diff --git a/device-manager/src/main/java/com/mortals/xhx/module/device/service/impl/DeviceModuleServiceImpl.java b/device-manager/src/main/java/com/mortals/xhx/module/device/service/impl/DeviceModuleServiceImpl.java
index 94e93ac2..f33c4c9d 100644
--- a/device-manager/src/main/java/com/mortals/xhx/module/device/service/impl/DeviceModuleServiceImpl.java
+++ b/device-manager/src/main/java/com/mortals/xhx/module/device/service/impl/DeviceModuleServiceImpl.java
@@ -4,7 +4,10 @@ import com.mortals.framework.exception.AppException;
 import com.mortals.framework.model.Context;
 import com.mortals.framework.model.PageInfo;
 import com.mortals.framework.model.Result;
+import com.mortals.xhx.module.alarm.model.AlarmConfigEntity;
+import com.mortals.xhx.module.alarm.model.AlarmConfigQuery;
 import com.mortals.xhx.module.device.model.DeviceEntity;
+import com.mortals.xhx.module.device.model.DeviceModuleQuery;
 import com.mortals.xhx.module.device.service.DeviceService;
 import com.mortals.xhx.module.platform.model.PlatformEntity;
 import com.mortals.xhx.module.platform.service.PlatformService;
@@ -31,5 +34,21 @@ import java.util.List;
 public class DeviceModuleServiceImpl extends AbstractCRUDServiceImpl<DeviceModuleDao, DeviceModuleEntity, Long> implements DeviceModuleService {
 
 
-
+    @Override
+    protected void validData(DeviceModuleEntity entity, Context context) throws AppException {
+        if (entity.newEntity()) {
+            DeviceModuleEntity deviceModuleEntity = this.selectOne(new DeviceModuleQuery().moduleMsgCode(entity.getModuleMsgCode()));
+            if (!ObjectUtils.isEmpty(deviceModuleEntity)) {
+                throw new AppException("璁惧妯″潡娑堟伅缂栫爜宸插瓨鍦�");
+            }
+        } else {
+            if (!ObjectUtils.isEmpty(entity.getModuleMsgCode())) {
+                DeviceModuleEntity deviceModuleEntity = this.selectOne(new DeviceModuleQuery().moduleMsgCode(entity.getModuleMsgCode()));
+                if (!ObjectUtils.isEmpty(deviceModuleEntity) && entity.getId() != deviceModuleEntity.getId()) {
+                    throw new AppException("璁惧妯″潡娑堟伅缂栫爜宸插瓨鍦�");
+                }
+            }
+        }
+        super.validData(entity, context);
+    }
 }
\ No newline at end of file
diff --git a/device-manager/src/main/java/com/mortals/xhx/module/device/service/impl/DeviceServiceImpl.java b/device-manager/src/main/java/com/mortals/xhx/module/device/service/impl/DeviceServiceImpl.java
index c41954d7..cb3dc503 100644
--- a/device-manager/src/main/java/com/mortals/xhx/module/device/service/impl/DeviceServiceImpl.java
+++ b/device-manager/src/main/java/com/mortals/xhx/module/device/service/impl/DeviceServiceImpl.java
@@ -289,6 +289,9 @@ public class DeviceServiceImpl extends AbstractCRUDCacheServiceImpl<DeviceDao, D
             throw new AppException("璁惧缂栫爜閲嶅锛�");
         }
 
+        entity.setDeviceCode(StrUtil.replace(entity.getDeviceCode(),":","-"));
+
+
         super.saveBefore(entity, context);
     }
 
diff --git a/device-manager/src/main/java/com/mortals/xhx/module/device/web/DeviceAlarmInfoController.java b/device-manager/src/main/java/com/mortals/xhx/module/device/web/DeviceAlarmInfoController.java
index def3a3b9..9ca28e10 100644
--- a/device-manager/src/main/java/com/mortals/xhx/module/device/web/DeviceAlarmInfoController.java
+++ b/device-manager/src/main/java/com/mortals/xhx/module/device/web/DeviceAlarmInfoController.java
@@ -1,16 +1,22 @@
 package com.mortals.xhx.module.device.web;
 
+import com.mortals.framework.exception.AppException;
 import com.mortals.framework.model.Context;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.base.system.param.service.ParamService;
+import com.mortals.xhx.common.code.DeviceStatusEnum;
+import com.mortals.xhx.common.code.YesNoEnum;
 import com.mortals.xhx.module.device.model.DeviceAlarmInfoEntity;
+import com.mortals.xhx.module.device.model.DeviceEntity;
 import com.mortals.xhx.module.device.model.DeviceQuery;
 import com.mortals.xhx.module.device.service.DeviceAlarmInfoService;
 import com.mortals.xhx.module.device.service.DeviceService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -42,5 +48,15 @@ public class DeviceAlarmInfoController extends BaseCRUDJsonBodyMappingController
         super.init(model, context);
     }
 
-
+    @Override
+    protected int doListAfter(DeviceAlarmInfoEntity query, Map<String, Object> model, Context context) throws AppException {
+        List<DeviceAlarmInfoEntity> alarmInfoEntityList = this.service.find(query, context);
+        Map<Integer, Long> collect = alarmInfoEntityList.stream().collect(Collectors.groupingBy(DeviceAlarmInfoEntity::getAlarmLevel, Collectors.counting()));
+        model.put("totalCount", alarmInfoEntityList.size());
+        model.put("dangerCount", collect.getOrDefault(0,0L));
+        model.put("subCount", collect.getOrDefault(1,0L));
+        model.put("normalCount", collect.getOrDefault(2,0L));
+
+        return super.doListAfter(query, model, context);
+    }
 }
\ No newline at end of file
-- 
2.24.3