From 49aaecfb0617b0e6043147c86f3d303e9f24867e Mon Sep 17 00:00:00 2001
From: liulin <lin.liu@88.com>
Date: 星期三, 09 七月 2025 20:27:56 +0800
Subject: [PATCH] 修改yml配置

---
 src/main/java/com/fengdu/gas/entity/response/facility/FacilityCount.java                          |   35 
 src/main/java/com/fengdu/gas/host/controller/WaterFacilityParameterController.java                |    6 
 src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqModifyAlarmScheme.java                 |   62 +
 src/main/java/com/fengdu/gas/entity/request/test/TestPayVO.java                                   |   28 
 src/test/java/com/fengdu/gas/GenCodeGauss.java                                                    |    2 
 src/main/java/com/fengdu/gas/entity/request/waterfacility/ReqCreateWaterFacility.java             |    4 
 src/main/java/com/fengdu/gas/entity/search/SearchFacilityAlarmRecord.java                         |    5 
 src/main/java/com/fengdu/gas/service/WaterFacilityService.java                                    |  209 ++--
 src/main/resources/application-prod.yml                                                           |    2 
 src/main/java/com/fengdu/gas/host/controller/AlarmSchemeController.java                           |  113 ++
 src/main/java/com/fengdu/gas/host/controller/TestInfoServiceController.java                       |  214 -----
 src/main/java/com/fengdu/gas/entity/response/alarm/FacilityAlarm.java                             |   23 
 pom.xml                                                                                           |    2 
 src/main/java/com/fengdu/gas/host/mqtt/PushCallback.java                                          |   23 
 src/main/java/com/fengdu/gas/repository/po/FacilityAlarmRecordPO.java                             |   20 
 src/main/java/com/fengdu/gas/service/DataUploadRecordService.java                                 |   28 
 src/main/java/com/fengdu/gas/entity/search/SearchAlarmScheme.java                                 |   14 
 src/main/java/com/fengdu/gas/repository/po/WaterMonitoryPointPO.java                              |   10 
 src/main/resources/application-dev.yml                                                            |    8 
 src/main/java/com/fengdu/gas/repository/mapper/FacilityAlarmRecordMapper.java                     |   11 
 src/main/java/com/fengdu/gas/repository/vo/UserWorkOrderVO.java                                   |   54 
 src/main/java/com/fengdu/gas/service/FacilityAlarmRecordService.java                              |   42 
 src/main/java/com/fengdu/gas/common/enums/EFacilityState.java                                     |   56 +
 src/main/java/com/fengdu/gas/service/convert/AlarmSchemeConvert.java                              |   48 +
 src/main/java/com/fengdu/gas/host/controller/visualized/FacilityDataController.java               |   17 
 src/main/java/com/fengdu/gas/service/AlarmSchemeService.java                                      |  245 ++++++
 src/main/java/com/fengdu/gas/entity/request/waterfacilityparameter/ReqAddParameter.java           |   17 
 src/main/java/com/fengdu/gas/host/controller/visualized/StatisticsDataController.java             |   31 
 src/main/java/com/fengdu/gas/entity/request/facilityalarmrecord/ReqCreateFacilityAlarmRecord.java |   10 
 src/main/java/com/fengdu/gas/repository/mapper/AlarmSchemeMapper.java                             |   10 
 src/main/java/com/fengdu/gas/service/TestInfoService.java                                         |  442 +++++-----
 src/main/java/com/fengdu/gas/repository/impl/WaterFacilityParameterMapperImpl.java                |    7 
 src/main/java/com/fengdu/gas/service/WaterFacilityParameterService.java                           |   43 
 /dev/null                                                                                         |   36 
 src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqCreateAlarmScheme.java                 |   58 +
 src/main/java/com/fengdu/gas/repository/po/WaterFacilityPO.java                                   |   10 
 src/main/java/com/fengdu/gas/repository/vo/AlarmSchemeVO.java                                     |   54 +
 src/main/java/com/fengdu/gas/repository/impl/FacilityAlarmRecordMapperImpl.java                   |    5 
 src/main/java/com/fengdu/gas/repository/po/UserWorkOrderPO.java                                   |   10 
 src/main/java/com/fengdu/gas/host/controller/visualized/HomeDataController.java                   |   58 +
 src/main/java/com/fengdu/gas/repository/impl/AlarmSchemeMapperImpl.java                           |  137 +++
 src/main/java/com/fengdu/gas/entity/response/facility/FacilityData.java                           |   53 +
 src/main/java/com/fengdu/gas/service/UserWorkOrderService.java                                    |   14 
 src/main/java/com/fengdu/gas/repository/po/AlarmSchemePO.java                                     |   90 ++
 44 files changed, 1,746 insertions(+), 620 deletions(-)

diff --git a/pom.xml b/pom.xml
index 2c1b1b5..d43a014 100644
--- a/pom.xml
+++ b/pom.xml
@@ -320,7 +320,7 @@
                     <!--指定生成文档的使用的配置文件,配置文件放在自己的 目中 项 -->
                     <configFile>./src/main/resources/smart-doc.json</configFile>
                     <!--指定 目名称 项 -->
-                    <projectName>xxx项目-xxx服务-接口文档</projectName>
+                    <projectName>丰都气体监测项目-api服务-接口文档</projectName>
                     <!-- &lt;!&ndash;smart-doc 实现自动分析依赖树加载第三方
                    依 的源 ,如果一些框架依 加 不到 致 , 使用 赖 码 赖库 载 导 报错 这时请 excludes 排除掉&ndash;&gt;
                     <excludes>
diff --git a/src/main/java/com/fengdu/gas/common/enums/EFacilityState.java b/src/main/java/com/fengdu/gas/common/enums/EFacilityState.java
new file mode 100644
index 0000000..351bc8f
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/common/enums/EFacilityState.java
@@ -0,0 +1,56 @@
+package com.fengdu.gas.common.enums;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+public enum EFacilityState {
+    NO("停止", 0),
+    YES("运行", 1),
+
+    ONE("一级报警", 2),
+
+    TWO("二级报警",3)
+    ;
+
+
+    private String desc;//枚举描述
+    private Integer value;//枚举值
+
+    public Integer getValue() {
+        return value;
+    }
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * 构造方法
+     * @param desc 枚举描述
+     * @param value 枚举值
+     */
+    EFacilityState(String desc, Integer value) {
+        this.desc = desc;
+        this.value = value;
+    }
+
+    /**
+     * 根据值获取枚举
+     *
+     * @param value 枚举值
+     * @return
+     */
+    public static EFacilityState getByValue(Integer value) {
+        return Arrays.stream(EFacilityState.values())
+                .filter(e -> Objects.equals(e.getValue(), value))
+                .findFirst()
+                .orElse(null);
+    }
+
+    @Override
+    public String toString() {
+        return "EFacilityState{" +
+                "desc='" + desc + '\'' +
+                ", value=" + value +
+                '}';
+    }
+}
diff --git a/src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqCreateAlarmScheme.java b/src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqCreateAlarmScheme.java
new file mode 100644
index 0000000..5cdedaf
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqCreateAlarmScheme.java
@@ -0,0 +1,58 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.fengdu.gas.entity.request.alarmscheme;
+
+import lombok.Data;
+import java.math.BigDecimal;
+
+/**
+ * 报警规则配置
+ * @author zr
+ */
+@Data
+public class ReqCreateAlarmScheme {
+	/**
+	 * 设备参数code
+	 */
+	private String columnsCode;
+	/**
+	 * 参数名称
+	 */
+	private String columnsShow;
+	/**
+	 * 低报警值
+	 */
+	private BigDecimal lowAlarm;
+	/**
+	 * 高报警值
+	 */
+	private BigDecimal tallAlarm;
+	/**
+	 * 通知人员
+	 */
+	private String informUser;
+	/**
+	 * 备注
+	 */
+	private String remark;
+}
diff --git a/src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqModifyAlarmScheme.java b/src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqModifyAlarmScheme.java
new file mode 100644
index 0000000..7557003
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/entity/request/alarmscheme/ReqModifyAlarmScheme.java
@@ -0,0 +1,62 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.fengdu.gas.entity.request.alarmscheme;
+
+import lombok.Data;
+import java.math.BigDecimal;
+
+/**
+ * 报警规则配置
+ * @author zr
+ */
+@Data
+public class ReqModifyAlarmScheme {
+	/**
+	 * null
+	 */
+	private Long id;
+	/**
+	 * 设备参数code
+	 */
+	private String columnsCode;
+	/**
+	 * 参数名称
+	 */
+	private String columnsShow;
+	/**
+	 * 低报警值
+	 */
+	private BigDecimal lowAlarm;
+	/**
+	 * 高报警值
+	 */
+	private BigDecimal tallAlarm;
+	/**
+	 * 通知人员
+	 */
+	private String informUser;
+	/**
+	 * 备注
+	 */
+	private String remark;
+}
diff --git a/src/main/java/com/fengdu/gas/entity/request/facilityalarmrecord/ReqCreateFacilityAlarmRecord.java b/src/main/java/com/fengdu/gas/entity/request/facilityalarmrecord/ReqCreateFacilityAlarmRecord.java
index 2cc3e60..f537362 100644
--- a/src/main/java/com/fengdu/gas/entity/request/facilityalarmrecord/ReqCreateFacilityAlarmRecord.java
+++ b/src/main/java/com/fengdu/gas/entity/request/facilityalarmrecord/ReqCreateFacilityAlarmRecord.java
@@ -54,6 +54,16 @@
 	 * 参数名称
 	 */
 	private String columnsName;
+
+	private Integer alarmType;
+
+	private String columnsValue;
+
+	private String minValue;
+
+	private String maxValue;
+
+
 	/**
 	 * 报警描述
 	 */
diff --git a/src/main/java/com/fengdu/gas/entity/request/test/TestPayVO.java b/src/main/java/com/fengdu/gas/entity/request/test/TestPayVO.java
new file mode 100644
index 0000000..42c79d7
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/entity/request/test/TestPayVO.java
@@ -0,0 +1,28 @@
+package com.fengdu.gas.entity.request.test;
+
+import lombok.Data;
+
+@Data
+public class TestPayVO {
+    private String service;
+    private String mer_no;
+    private String account_type;
+    private String card_no;
+    private String real_name;
+    private String bank_code;
+    private String id_type;
+    private String id_no;
+    private String notify_url;
+    private String goods_name;
+    private String goods_num;
+    private String goods_price;
+    private String goods_type;
+    private String order_no;
+    private String order_amount;
+    private String order_time;
+    private String currency;
+    private String pay_comments;
+    private String remark;
+
+
+}
diff --git a/src/main/java/com/fengdu/gas/entity/request/waterfacility/ReqCreateWaterFacility.java b/src/main/java/com/fengdu/gas/entity/request/waterfacility/ReqCreateWaterFacility.java
index c0ebb5b..03b3d80 100644
--- a/src/main/java/com/fengdu/gas/entity/request/waterfacility/ReqCreateWaterFacility.java
+++ b/src/main/java/com/fengdu/gas/entity/request/waterfacility/ReqCreateWaterFacility.java
@@ -47,6 +47,10 @@
 	 */
 	private Long pointId;
 	/**
+	 * 监控点名称
+	 */
+	private String pointName;
+	/**
 	 * 是否在线
 	 */
 	private Integer isOnline;
diff --git a/src/main/java/com/fengdu/gas/entity/request/waterfacilityparameter/ReqAddParameter.java b/src/main/java/com/fengdu/gas/entity/request/waterfacilityparameter/ReqAddParameter.java
new file mode 100644
index 0000000..03f004b
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/entity/request/waterfacilityparameter/ReqAddParameter.java
@@ -0,0 +1,17 @@
+package com.fengdu.gas.entity.request.waterfacilityparameter;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReqAddParameter {
+    /**
+     * 设备id
+     */
+    private Long facilityId;
+    /**
+     * 参数列表
+     */
+    private List<ReqCreateWaterFacilityParameter> parameterList;
+}
diff --git a/src/main/java/com/fengdu/gas/entity/response/alarm/FacilityAlarm.java b/src/main/java/com/fengdu/gas/entity/response/alarm/FacilityAlarm.java
new file mode 100644
index 0000000..137dd47
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/entity/response/alarm/FacilityAlarm.java
@@ -0,0 +1,23 @@
+package com.fengdu.gas.entity.response.alarm;
+
+import lombok.Data;
+
+@Data
+public class FacilityAlarm {
+    /**
+     * 报警名称
+     */
+    private String name;
+    /**
+     * 最小报警值
+     */
+    private String minValue;
+    /**
+     * 最大报警值
+     */
+    private String maxValue;
+    /**
+     * 报警次数
+     */
+    private Integer count;
+}
diff --git a/src/main/java/com/fengdu/gas/entity/response/facility/FacilityCount.java b/src/main/java/com/fengdu/gas/entity/response/facility/FacilityCount.java
new file mode 100644
index 0000000..abc808c
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/entity/response/facility/FacilityCount.java
@@ -0,0 +1,35 @@
+package com.fengdu.gas.entity.response.facility;
+
+import lombok.Data;
+
+@Data
+public class FacilityCount {
+    /**
+     * 监控点id
+     */
+    private Long pointId;
+    /**
+     * 监控点名称
+     */
+    private String pointName;
+    /**
+     * 甲烷传感器数量
+     */
+    private Integer methaneCount;
+    /**
+     * 硫化氢传感器数量
+     */
+    private Integer hyrothionCount;
+    /**
+     * 风机数量
+     */
+    private Integer facilityFanCount;
+    /**
+     * 终端设备台数
+     */
+    private Integer boxCount;
+    /**
+     * 总设备数量
+     */
+    private Integer sumCount;
+}
diff --git a/src/main/java/com/fengdu/gas/entity/response/facility/FacilityData.java b/src/main/java/com/fengdu/gas/entity/response/facility/FacilityData.java
new file mode 100644
index 0000000..98380ce
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/entity/response/facility/FacilityData.java
@@ -0,0 +1,53 @@
+package com.fengdu.gas.entity.response.facility;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class FacilityData {
+    /**
+     * 监测点id
+     */
+    private Long  pointId;
+    /**
+     * 监测点名称名称
+     */
+    private String pointName;
+    /**
+     * 左边距
+     */
+    private String left;
+    /**
+     * 上边距
+     */
+    private String top;
+    /**
+     * 设备id
+     */
+    private Long  facilityId;
+    /**
+     * 设备名称
+     */
+    private String facilityName;
+    /**
+     * 设备状态
+     */
+    private String facilityState;
+    /**
+     * 设备风机状态
+     */
+    private String facilityFanState;
+    /**
+     * 设备甲烷值
+     */
+    private BigDecimal methaneValue;
+    /**
+     * 硫化氢值
+     */
+    private BigDecimal hyrothionValue;
+    /**
+     * 温度
+     */
+    private BigDecimal temperature;
+}
diff --git a/src/main/java/com/fengdu/gas/entity/search/SearchAlarmScheme.java b/src/main/java/com/fengdu/gas/entity/search/SearchAlarmScheme.java
new file mode 100644
index 0000000..57bbca1
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/entity/search/SearchAlarmScheme.java
@@ -0,0 +1,14 @@
+package com.fengdu.gas.entity.search;
+
+import lombok.Data;
+
+import com.fengdu.gas.entity.dto.SearchBasicDTO;
+
+/**
+ * 报警规则配置
+ * @author zr
+ */
+@Data
+public class SearchAlarmScheme extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/fengdu/gas/entity/search/SearchFacilityAlarmRecord.java b/src/main/java/com/fengdu/gas/entity/search/SearchFacilityAlarmRecord.java
index 1f17a61..90dc086 100644
--- a/src/main/java/com/fengdu/gas/entity/search/SearchFacilityAlarmRecord.java
+++ b/src/main/java/com/fengdu/gas/entity/search/SearchFacilityAlarmRecord.java
@@ -10,5 +10,8 @@
  */
 @Data
 public class SearchFacilityAlarmRecord extends SearchBasicDTO {
-
+    /**
+     *1本日 2本月 3本年
+     */
+    private Integer dateType;
 }
diff --git a/src/main/java/com/fengdu/gas/host/controller/AlarmSchemeController.java b/src/main/java/com/fengdu/gas/host/controller/AlarmSchemeController.java
new file mode 100644
index 0000000..4d72f9b
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/host/controller/AlarmSchemeController.java
@@ -0,0 +1,113 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.fengdu.gas.host.controller;
+
+import com.fengdu.gas.common.ExecutedResult;
+import com.fengdu.gas.common.PagerResult;
+import com.fengdu.gas.common.util.ParameterUtil;
+import com.fengdu.gas.common.validator.ParameterValidateResult;
+import com.fengdu.gas.common.validator.ParameterValidator;
+import com.fengdu.gas.entity.request.ReqListId;
+import com.fengdu.gas.host.BasicController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import java.util.List;
+import com.fengdu.gas.service.AlarmSchemeService;
+import com.fengdu.gas.entity.request.alarmscheme.ReqCreateAlarmScheme;
+import com.fengdu.gas.entity.request.alarmscheme.ReqModifyAlarmScheme;
+import com.fengdu.gas.entity.search.SearchAlarmScheme;
+import com.fengdu.gas.repository.vo.AlarmSchemeVO;
+
+/**
+ * 9000.报警规则配置
+ * @author zr
+ * @order 9000
+ */
+@RestController
+@RequestMapping(value = "alarmScheme")
+public class AlarmSchemeController extends BasicController {
+    @Autowired
+    private AlarmSchemeService service;
+
+    /**
+     * 创建[报警规则配置]
+     * @author zr
+     */
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateAlarmScheme request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                // 非空
+                //.addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
+                // 限制最大长度
+                //.addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
+                ;
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.create(request);
+    }
+
+    /**
+     * 编辑[报警规则配置]
+     * @author zr
+     */
+    @PostMapping(value = "modify")
+    public ExecutedResult<String> modify(@RequestBody ReqModifyAlarmScheme request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                // 必须大于0
+                .addGreater(ParameterUtil.named("[报警规则配置]id"), request.getId(), 0L)
+                // 非空
+                //.addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
+                // 限制最大长度
+                //.addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
+                ;
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.modify(request);
+    }
+
+    /**
+     * 获取[报警规则配置]
+     * @author zr
+     */
+    @GetMapping(value = "get/{id}")
+    public ExecutedResult<AlarmSchemeVO> get(@PathVariable Long id) {
+        return service.get(id);
+    }
+
+    /**
+     * 查询[报警规则配置]
+     * @author zr
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<AlarmSchemeVO>> search(@RequestBody SearchAlarmScheme request) {
+        return service.search(request);
+    }
+}
diff --git a/src/main/java/com/fengdu/gas/host/controller/TestInfoServiceController.java b/src/main/java/com/fengdu/gas/host/controller/TestInfoServiceController.java
index a35b2d7..f44c150 100644
--- a/src/main/java/com/fengdu/gas/host/controller/TestInfoServiceController.java
+++ b/src/main/java/com/fengdu/gas/host/controller/TestInfoServiceController.java
@@ -12,6 +12,7 @@
 import com.fengdu.gas.entity.request.ReqSetSort;
 import com.fengdu.gas.entity.request.test.ReqCreateTestInfo;
 import com.fengdu.gas.entity.request.test.ReqModifyTestInfo;
+import com.fengdu.gas.entity.request.test.TestPayVO;
 import com.fengdu.gas.entity.search.SearchTestInfo;
 import com.fengdu.gas.service.TestInfoService;
 import com.fengdu.gas.host.BasicController;
@@ -36,222 +37,27 @@
 public class TestInfoServiceController extends BasicController {
     @Autowired
     private TestInfoService service;
+
     /**
-     * 创建[测试信息]
+     * 测试支付信息
      *
      * @author lin.liu
      * @date 2021/11/23
      */
-    @PostMapping(value = "create")
-    public ExecutedResult<Long> create(@RequestBody ReqCreateTestInfo request) {
-        //#region 参数验证
-        ParameterValidator validator = new ParameterValidator()
-                // 非空
-                .addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
-                // 限制最大长度
-                .addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
-                // 必须大于0
-                .addGreater(ParameterUtil.named("用户id"), request.getUserId(), 0L)
-                // 必须是手机号码(正则)
-                .addMustMobile(ParameterUtil.named("电话"), request.getPhone())
-                // 金额大于0
-                .addGreaterThan(ParameterUtil.named("余额"), request.getBalance(), BigDecimal.ZERO)
-                // 必须是枚举值
-                .addMustEnum(ParameterUtil.named("性别"), request.getSex(), ESex.class)
-                // 必须是日期字符串(yyyy-MM-dd)
-                .addMustDate(ParameterUtil.named("生日"), request.getBirthday())
-                // 必须大于0
-                .addGreater(ParameterUtil.named("排序值"), request.getSort(), 0)
-                // 限制最大长度
-                .addLengthMax(ParameterUtil.named("备注"), request.getComment(), ConstantFactory.LENGTH_MAX500);
-        ParameterValidateResult result = validator.validate();
-        if (result.getIsFiled()) {
-            return failed(result.getErrorMsg());
-        }
-        //#endregion
-        return this.service.create(request);
+    @PostMapping(value = "pay")
+    public ExecutedResult<String> pay() throws Exception {
+        return this.service.testPay();
     }
 
     /**
-     * 编辑[测试信息]
+     * 测试支付信息
      *
      * @author lin.liu
      * @date 2021/11/23
      */
-    @PostMapping(value = "modify")
-    public ExecutedResult<String> modify(@RequestBody ReqModifyTestInfo request) {
-        //#region 参数验证
-        ParameterValidator validator = new ParameterValidator()
-                // 必须大于0
-                .addGreater(ParameterUtil.named("[测试信息]id"), request.getId(), 0L)
-                // 非空
-                .addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
-                // 限制最大长度
-                .addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
-                // 必须大于0
-                .addGreater(ParameterUtil.named("用户id"), request.getUserId(), 0L)
-                // 必须是手机号码(正则)
-                .addMustMobile(ParameterUtil.named("电话"), request.getPhone())
-                // 金额大于0
-                .addGreaterThan(ParameterUtil.named("余额"), request.getBalance(), BigDecimal.ZERO)
-                // 必须是枚举值
-                .addMustEnum(ParameterUtil.named("性别"), request.getSex(), ESex.class)
-                // 必须是日期字符串(yyyy-MM-dd)
-                .addMustDate(ParameterUtil.named("生日"), request.getBirthday())
-                // 必须大于0
-                .addGreater(ParameterUtil.named("排序值"), request.getSort(), 0)
-                // 限制最大长度
-                .addLengthMax(ParameterUtil.named("备注"), request.getComment(), ConstantFactory.LENGTH_MAX500);
-        ParameterValidateResult result = validator.validate();
-        if (result.getIsFiled()) {
-            return failed(result.getErrorMsg());
-        }
-        //#endregion
-        return this.service.modify(request);
+    @PostMapping(value = "confirmPay")
+    public ExecutedResult<String> confirmPay() throws Exception {
+        return this.service.confirmPay();
     }
 
-    /**
-     * 获取[测试信息]
-     *
-     * @author lin.liu
-     * @date 2021/11/23
-     */
-    @GetMapping(value = "get/{id}")
-    public ExecutedResult<TestInfoVO> get(@PathVariable Long id) {
-        return this.service.get(id);
-    }
-
-    /**
-     * 根据id批量获取[测试信息]
-     *
-     * @author lin.liu
-     * @date 2021/11/23
-     */
-    @PostMapping(value = "getList")
-    public ExecutedResult<List<TestInfoVO>> getList(@RequestBody ReqListId request) {
-        //#region 参数验证
-        ParameterValidator validator = new ParameterValidator()
-                // 不能为空
-                .addNotNullOrEmpty(ParameterUtil.named("[测试信息]id列表"), request.getListId())
-                ;
-        ParameterValidateResult result = validator.validate();
-        if (result.getIsFiled()) {
-            return failed(result.getErrorMsg());
-        }
-        //#endregion
-        return this.service.getList(request.getListId());
-    }
-
-    /**
-     * [测试信息]设置排序值
-     *
-     * @author lin.liu
-     * @date 2021/11/23
-     */
-    @PostMapping(value = "setSort")
-    public ExecutedResult<String> setSort(@RequestBody ReqSetSort request) {
-        //#region 参数验证
-        ParameterValidator validator = new ParameterValidator()
-                // 必须大于0
-                .addGreater(ParameterUtil.named("[测试信息]id"), request.getId(), 0L)
-                // 必须大于0
-                .addGreaterThan(ParameterUtil.named("排序值"), request.getSort(), 0)
-                ;
-        ParameterValidateResult result = validator.validate();
-        if (result.getIsFiled()) {
-            return failed(result.getErrorMsg());
-        }
-        //#endregion
-        return this.service.setSort(request);
-    }
-
-    /**
-     * [测试信息]批量设置排序值
-     *
-     * @author lin.liu
-     * @date 2021/11/23
-     */
-    @PostMapping(value = "listSetSort")
-    ExecutedResult<String> listSetSort(ReqListSetSort request) {
-        //#region 参数验证
-        ParameterValidator validator = new ParameterValidator()
-                // 不能为空
-                .addNotNullOrEmpty(ParameterUtil.named("[测试信息]排序设置列表"), request.getList())
-                ;
-        ParameterValidateResult result = validator.validate();
-        if (result.getIsFiled()) {
-            return failed(result.getErrorMsg());
-        }
-        //#endregion
-        return this.service.listSetSort(request);
-    }
-
-    /**
-     * 停用[测试信息]
-     *
-     * @param id [测试]id
-     * @author lin.liu
-     * @date 2021/11/23
-     */
-    @PostMapping(value = "stop/{id}")
-    public ExecutedResult<String> stop(@PathVariable Long id) {
-        return this.service.stop(id);
-    }
-
-    /**
-     * 启用[测试信息]
-     *
-     * @param id [测试]id
-     * @author lin.liu
-     * @date 2021/11/23
-     */
-    @PostMapping(value = "enable/{id}")
-    public ExecutedResult<String> enable(@PathVariable Long id) {
-        return this.service.enable(id);
-    }
-
-    /**
-     * 删除[测试信息]
-     *
-     * @param id [测试]id
-     * @author lin.liu
-     * @date 2021/11/23
-     */
-    @PostMapping(value = "remove/{id}")
-    public ExecutedResult<String> remove(@PathVariable Long id) {
-        return this.service.remove(id);
-    }
-
-    /**
-     * 批量删除[测试信息]
-     *
-     * @author lin.liu
-     * @date 2021/11/23
-     */
-    @PostMapping(value = "removeList")
-    public ExecutedResult<String> removeList(@RequestBody ReqListId request) {
-        //#region 参数验证
-        ParameterValidator validator = new ParameterValidator()
-                // 不能为空
-                .addNotNullOrEmpty(ParameterUtil.named("[测试信息]id列表"), request.getListId())
-                ;
-        ParameterValidateResult result = validator.validate();
-        if (result.getIsFiled()) {
-            return failed(result.getErrorMsg());
-        }
-        //#endregion
-        return this.service.removeList(request.getListId());
-    }
-
-    /**
-     * 查询[测试信息]
-     *
-     * @author lin.liu
-     * @date 2021/11/23
-     */
-    @NonLogin
-    @PostMapping(value = "search")
-    public ExecutedResult<PagerResult<TestInfoVO>> search(@RequestBody SearchTestInfo request) {
-        return this.service.search(request);
-    }
 }
diff --git a/src/main/java/com/fengdu/gas/host/controller/WaterFacilityParameterController.java b/src/main/java/com/fengdu/gas/host/controller/WaterFacilityParameterController.java
index 0316fa4..4fb8c2a 100644
--- a/src/main/java/com/fengdu/gas/host/controller/WaterFacilityParameterController.java
+++ b/src/main/java/com/fengdu/gas/host/controller/WaterFacilityParameterController.java
@@ -28,6 +28,7 @@
 import com.fengdu.gas.common.validator.ParameterValidateResult;
 import com.fengdu.gas.common.validator.ParameterValidator;
 import com.fengdu.gas.entity.request.ReqListId;
+import com.fengdu.gas.entity.request.waterfacilityparameter.ReqAddParameter;
 import com.fengdu.gas.host.BasicController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -54,11 +55,12 @@
      * @author zr
      */
     @PostMapping(value = "create")
-    public ExecutedResult<Long> create(@RequestBody ReqCreateWaterFacilityParameter request) {
+    public ExecutedResult<String> create(@RequestBody ReqAddParameter request) {
         //#region 参数验证
         ParameterValidator validator = new ParameterValidator()
                 // 非空
-                //.addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
+                .addNotNullOrEmpty(ParameterUtil.named("设备id"), request.getFacilityId())
+                .addNotNullOrEmpty(ParameterUtil.named("参数列表"), request.getParameterList())
                 // 限制最大长度
                 //.addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
                 ;
diff --git a/src/main/java/com/fengdu/gas/host/controller/visualized/FacilityDataController.java b/src/main/java/com/fengdu/gas/host/controller/visualized/FacilityDataController.java
new file mode 100644
index 0000000..d44d0bd
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/host/controller/visualized/FacilityDataController.java
@@ -0,0 +1,17 @@
+package com.fengdu.gas.host.controller.visualized;
+
+import com.fengdu.gas.host.BasicController;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 10000.可视化数据大屏设备管理
+ * @author zr
+ * @order 10000
+ */
+@RestController
+@RequestMapping(value = "facilityData")
+public class FacilityDataController extends BasicController {
+    /*****************************设备管理**********************************/
+
+}
diff --git a/src/main/java/com/fengdu/gas/host/controller/visualized/HomeDataController.java b/src/main/java/com/fengdu/gas/host/controller/visualized/HomeDataController.java
new file mode 100644
index 0000000..603b640
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/host/controller/visualized/HomeDataController.java
@@ -0,0 +1,58 @@
+package com.fengdu.gas.host.controller.visualized;
+
+import com.fengdu.gas.common.ExecutedResult;
+import com.fengdu.gas.common.PagerResult;
+import com.fengdu.gas.common.util.ParameterUtil;
+import com.fengdu.gas.common.validator.ParameterValidateResult;
+import com.fengdu.gas.common.validator.ParameterValidator;
+import com.fengdu.gas.entity.request.commonparameters.ReqModifyCommonParameters;
+import com.fengdu.gas.entity.response.facility.FacilityCount;
+import com.fengdu.gas.entity.response.facility.FacilityData;
+import com.fengdu.gas.entity.search.SearchUserWorkOrder;
+import com.fengdu.gas.host.BasicController;
+import com.fengdu.gas.repository.vo.UserWorkOrderVO;
+import com.fengdu.gas.service.UserWorkOrderService;
+import com.fengdu.gas.service.WaterFacilityService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 10000.可视化数据大屏首页总览
+ * @author zr
+ * @order 10000
+ */
+@RestController
+@RequestMapping(value = "homeData")
+public class HomeDataController extends BasicController {
+    @Autowired
+    private WaterFacilityService waterFacilityService;
+    @Autowired
+    private UserWorkOrderService userWorkOrderService;
+    /**
+     * 查询设备
+     * @author zr
+     */
+    @PostMapping(value = "getFacilityList")
+    public ExecutedResult<List<FacilityData>> getFacilityList() {
+        return waterFacilityService.getFacilityList();
+    }
+
+    /**
+     * 区域设备数量统计
+     * @author zr
+     */
+    @PostMapping(value = "deviceCount")
+    public ExecutedResult<List<FacilityCount>> deviceCount() {
+        return waterFacilityService.deviceCount();
+    }
+    /**
+     * 工单统计
+     * @author zr
+     */
+    @PostMapping(value = "workOrderList")
+    public ExecutedResult<PagerResult<UserWorkOrderVO>> workOrderList(@ RequestBody  SearchUserWorkOrder search) {
+        return userWorkOrderService.search(search);
+    }
+}
diff --git a/src/main/java/com/fengdu/gas/host/controller/visualized/StatisticsDataController.java b/src/main/java/com/fengdu/gas/host/controller/visualized/StatisticsDataController.java
new file mode 100644
index 0000000..82bcb63
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/host/controller/visualized/StatisticsDataController.java
@@ -0,0 +1,31 @@
+package com.fengdu.gas.host.controller.visualized;
+
+import com.fengdu.gas.common.ExecutedResult;
+import com.fengdu.gas.common.PagerResult;
+import com.fengdu.gas.entity.response.alarm.FacilityAlarm;
+import com.fengdu.gas.entity.search.SearchFacilityAlarmRecord;
+import com.fengdu.gas.entity.search.SearchUserWorkOrder;
+import com.fengdu.gas.host.BasicController;
+import com.fengdu.gas.repository.vo.FacilityAlarmRecordVO;
+import com.fengdu.gas.repository.vo.UserWorkOrderVO;
+import com.fengdu.gas.service.FacilityAlarmRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 10000.可视化数据大屏数据统计
+ * @author zr
+ * @order 10000
+ */
+@RestController
+@RequestMapping(value = "statisticsData")
+public class StatisticsDataController extends BasicController {
+@Autowired
+private FacilityAlarmRecordService facilityAlarmRecordService;
+    @PostMapping(value = "getAlarmList")
+    public ExecutedResult<List<FacilityAlarm>> getAlarmList(Integer dateType) {
+        return facilityAlarmRecordService.getAlarmList(dateType);
+    }
+}
diff --git a/src/main/java/com/fengdu/gas/host/controller/visualized/visualizedDataController.java b/src/main/java/com/fengdu/gas/host/controller/visualized/visualizedDataController.java
deleted file mode 100644
index d8dbf18..0000000
--- a/src/main/java/com/fengdu/gas/host/controller/visualized/visualizedDataController.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.fengdu.gas.host.controller.visualized;
-
-import com.fengdu.gas.host.BasicController;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 10000.可视化数据管理
- * @author zr
- * @order 10000
- */
-@RestController
-@RequestMapping(value = "visualizedData")
-public class visualizedDataController extends BasicController {
-
-
-    /*****************************首页总览**********************************/
-
-
-
-
-
-
-
-
-    /*****************************数据统计**********************************/
-
-
-
-
-
-
-
-    /*****************************设备管理**********************************/
-
-}
diff --git a/src/main/java/com/fengdu/gas/host/mqtt/PushCallback.java b/src/main/java/com/fengdu/gas/host/mqtt/PushCallback.java
index af46fc6..1b019b6 100644
--- a/src/main/java/com/fengdu/gas/host/mqtt/PushCallback.java
+++ b/src/main/java/com/fengdu/gas/host/mqtt/PushCallback.java
@@ -3,13 +3,17 @@
 
 import com.fengdu.gas.common.enums.ELogger;
 import com.fengdu.gas.common.util.LoggerUtil;
+import com.fengdu.gas.common.util.SpringUtil;
 import com.fengdu.gas.common.util.ThreadPoolUtil;
+import com.fengdu.gas.service.DataUploadRecordService;
 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
 import org.eclipse.paho.client.mqttv3.MqttCallback;
 import org.eclipse.paho.client.mqttv3.MqttMessage;
 import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import java.nio.charset.StandardCharsets;
+import java.util.Objects;
 
 ;
 
@@ -32,7 +36,8 @@
 public class PushCallback implements MqttCallback {
     private static final Logger LOGGER_DEBUG = LoggerUtil.get(ELogger.DEBUG);
     private static final Logger LOGGER_ERROR = LoggerUtil.get(ELogger.SYS_ERROR);
-
+    @Autowired
+    DataUploadRecordService dataUploadService;
     private MQTTSubsribe mqttSubsribe;
 
     public PushCallback(MQTTSubsribe mqttSubsribe) {
@@ -74,8 +79,20 @@
         //这里可以针对收到的消息做处理
         ThreadPoolUtil.getDefaultPool().execute(() -> {
             try {
-                //调用方法
-                //dataUploadYwjRecordService.mqttReceived(topic, msg);
+                if (Objects.nonNull(dataUploadService)) {
+                    //调用方法
+                    dataUploadService.mqttReceived(topic, msg);
+                } else {
+                    try {
+                        System.out.println("dataUploadService bean尚未初始化...");
+                        dataUploadService = SpringUtil.getBean(DataUploadRecordService.class);
+                        System.out.println("dataUploadService 初始化bean成功!");
+                    } catch (Exception ignored) {}
+                    if (Objects.nonNull(dataUploadService)) {
+                        //调用方法
+                        dataUploadService.mqttReceived(topic, msg);
+                    }
+                }
             } catch (Exception e) {
                 LOGGER_ERROR.error("messageArrived", e);
             }
diff --git a/src/main/java/com/fengdu/gas/repository/impl/AlarmSchemeMapperImpl.java b/src/main/java/com/fengdu/gas/repository/impl/AlarmSchemeMapperImpl.java
new file mode 100644
index 0000000..b16fd0b
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/repository/impl/AlarmSchemeMapperImpl.java
@@ -0,0 +1,137 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.fengdu.gas.repository.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fengdu.gas.common.PagerResult;
+import com.fengdu.gas.common.enums.EYesOrNo;
+import com.fengdu.gas.common.util.*;
+import com.fengdu.gas.entity.dto.*;
+import com.fengdu.gas.entity.enums.*;
+import com.fengdu.gas.repository.BasicMapperImpl;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import com.fengdu.gas.entity.search.SearchAlarmScheme;
+import com.fengdu.gas.repository.mapper.AlarmSchemeMapper;
+import com.fengdu.gas.repository.po.AlarmSchemePO;
+
+/**
+ * 报警规则配置
+ * @author zr
+ */
+@Repository
+public class AlarmSchemeMapperImpl extends BasicMapperImpl<AlarmSchemePO, AlarmSchemeMapper> {
+	AlarmSchemeMapperImpl(AlarmSchemeMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<AlarmSchemePO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchAlarmScheme search = (SearchAlarmScheme)request;
+		// 查询条件
+		LambdaQueryWrapper<AlarmSchemePO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(AlarmSchemePO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, AlarmSchemePO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), AlarmSchemePO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, AlarmSchemePO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, AlarmSchemePO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		//if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+		//	queryWrapper.and(q ->
+		//		q.like(AlarmSchemePO::getName, search.getKeywords())
+		//		.or().like(AlarmSchemePO::getPhone, search.getKeywords())
+		//	);
+		//}
+
+		// 排序处理
+		if (ListUtil.isNotNullOrEmpty(search.getOrderBy())) {
+			for (OrderByDTO item : search.getOrderBy()) {
+				EOrderBy orderBy = EOrderBy.getByValue(item.getOrderBy());
+				// 顺序排序
+				if (item.getIsAsc()) {
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByAsc(AlarmSchemePO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(AlarmSchemePO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(AlarmSchemePO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(AlarmSchemePO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(AlarmSchemePO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(AlarmSchemePO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(AlarmSchemePO::getId);
+		}
+		Page<AlarmSchemePO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(AlarmSchemePO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public Boolean addNotIncrement(AlarmSchemePO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public AlarmSchemePO getById(Long id) {
+		return super.get(id);
+	}
+
+	public List<AlarmSchemePO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+}
diff --git a/src/main/java/com/fengdu/gas/repository/impl/FacilityAlarmRecordMapperImpl.java b/src/main/java/com/fengdu/gas/repository/impl/FacilityAlarmRecordMapperImpl.java
index 25163d0..e4f1b0c 100644
--- a/src/main/java/com/fengdu/gas/repository/impl/FacilityAlarmRecordMapperImpl.java
+++ b/src/main/java/com/fengdu/gas/repository/impl/FacilityAlarmRecordMapperImpl.java
@@ -29,6 +29,7 @@
 import com.fengdu.gas.common.util.*;
 import com.fengdu.gas.entity.dto.*;
 import com.fengdu.gas.entity.enums.*;
+import com.fengdu.gas.entity.response.alarm.FacilityAlarm;
 import com.fengdu.gas.repository.BasicMapperImpl;
 import org.springframework.stereotype.Repository;
 
@@ -134,4 +135,8 @@
 	public List<FacilityAlarmRecordPO> getListById(List<Long> listId) {
 		return super.getList(listId);
 	}
+
+	public List<FacilityAlarm> getByDateType(String beginTime,String endTime){
+		return DB.getByDateType(beginTime,endTime);
+	}
 }
diff --git a/src/main/java/com/fengdu/gas/repository/impl/WaterFacilityParameterMapperImpl.java b/src/main/java/com/fengdu/gas/repository/impl/WaterFacilityParameterMapperImpl.java
index f7ffb5b..18994c8 100644
--- a/src/main/java/com/fengdu/gas/repository/impl/WaterFacilityParameterMapperImpl.java
+++ b/src/main/java/com/fengdu/gas/repository/impl/WaterFacilityParameterMapperImpl.java
@@ -126,7 +126,12 @@
 		int rowCount = super.insert(item);
 		return rowCount == 1;
 	}
-
+	public List<WaterFacilityParameterPO> getListByFacilityId(Long facilityId) {
+		LambdaQueryWrapper<WaterFacilityParameterPO> queryWrapper = this.query();
+		queryWrapper.eq(WaterFacilityParameterPO::getFacilityId,facilityId);
+		queryWrapper.eq(WaterFacilityParameterPO::getIsDelete,EYesOrNo.NO.getValue());
+		return DB.selectList(queryWrapper);
+	}
 	public WaterFacilityParameterPO getById(Long id) {
 		return super.get(id);
 	}
diff --git a/src/main/java/com/fengdu/gas/repository/mapper/AlarmSchemeMapper.java b/src/main/java/com/fengdu/gas/repository/mapper/AlarmSchemeMapper.java
new file mode 100644
index 0000000..649e666
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/repository/mapper/AlarmSchemeMapper.java
@@ -0,0 +1,10 @@
+package com.fengdu.gas.repository.mapper;
+
+import com.fengdu.gas.repository.BasicMapper;import com.fengdu.gas.repository.po.AlarmSchemePO;
+
+/**
+ * 报警规则配置 mapper
+ * @author zr
+ */
+public interface AlarmSchemeMapper extends BasicMapper<AlarmSchemePO> {
+}
diff --git a/src/main/java/com/fengdu/gas/repository/mapper/FacilityAlarmRecordMapper.java b/src/main/java/com/fengdu/gas/repository/mapper/FacilityAlarmRecordMapper.java
index a03181b..87e9f54 100644
--- a/src/main/java/com/fengdu/gas/repository/mapper/FacilityAlarmRecordMapper.java
+++ b/src/main/java/com/fengdu/gas/repository/mapper/FacilityAlarmRecordMapper.java
@@ -1,10 +1,19 @@
 package com.fengdu.gas.repository.mapper;
 
-import com.fengdu.gas.repository.BasicMapper;import com.fengdu.gas.repository.po.FacilityAlarmRecordPO;
+import com.fengdu.gas.entity.response.alarm.FacilityAlarm;
+import com.fengdu.gas.repository.BasicMapper;
+import com.fengdu.gas.repository.po.FacilityAlarmRecordPO;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * 设备报警记录 mapper
  * @author zr
  */
 public interface FacilityAlarmRecordMapper extends BasicMapper<FacilityAlarmRecordPO> {
+    @Select("SELECT description AS NAME ,MIN(min_value) AS minValue ,MAX(max_value) AS maxValue,COUNT(id) AS count FROM facility_alarm_record \n" +
+            "WHERE is_delete=0 AND latest_alarm_time BETWEEN #{beginTime} AND #{endTime} '\n" +
+            "GROUP BY description\n")
+    List<FacilityAlarm> getByDateType(String beginTime, String endTime);
 }
diff --git a/src/main/java/com/fengdu/gas/repository/po/AlarmSchemePO.java b/src/main/java/com/fengdu/gas/repository/po/AlarmSchemePO.java
new file mode 100644
index 0000000..600f696
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/repository/po/AlarmSchemePO.java
@@ -0,0 +1,90 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.fengdu.gas.repository.po;
+
+import lombok.Data;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.math.BigDecimal;
+
+/**
+ * 报警规则配置
+ * @author zr
+ */
+@Data
+@TableName("alarm_scheme")
+public class AlarmSchemePO implements Serializable {
+	/**
+	 * null
+	 */
+	private Long id;
+	/**
+	 * 设备参数code
+	 */
+	@TableField(value = "columns_code")
+	private String columnsCode;
+	/**
+	 * 参数名称
+	 */
+	@TableField(value = "columns_show")
+	private String columnsShow;
+	/**
+	 * 低报警值
+	 */
+	@TableField(value = "low_alarm")
+	private BigDecimal lowAlarm;
+	/**
+	 * 高报警值
+	 */
+	@TableField(value = "tall_alarm")
+	private BigDecimal tallAlarm;
+	/**
+	 * 通知人员
+	 */
+	@TableField(value = "inform_user")
+	private String informUser;
+	/**
+	 * 备注
+	 */
+	@TableField(value = "remark")
+	private String remark;
+	/**
+	 * 是否删除
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+	/**
+	 * 创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 修改时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+}
diff --git a/src/main/java/com/fengdu/gas/repository/po/FacilityAlarmRecordPO.java b/src/main/java/com/fengdu/gas/repository/po/FacilityAlarmRecordPO.java
index f792c4e..20fc61e 100644
--- a/src/main/java/com/fengdu/gas/repository/po/FacilityAlarmRecordPO.java
+++ b/src/main/java/com/fengdu/gas/repository/po/FacilityAlarmRecordPO.java
@@ -61,21 +61,37 @@
 	@TableField(value = "facility_name")
 	private String facilityName;
 	/**
+	 * 报警类型(1 一级报警 2二级报警)
+	 */
+	@TableField(value = "alarm_type")
+	private Integer alarmType;
+	/**
 	 * 参数编码
 	 */
 	@TableField(value = "columns_code")
 	private String columnsCode;
 	/**
-	 * 参数名称
+	 * 报警值
 	 */
 	@TableField(value = "columns_name")
 	private String columnsName;
+
 	/**
 	 * 参数名称
 	 */
-	@TableField(value = "columns_name")
+	@TableField(value = "columns_value")
 	private String columnsValue;
 	/**
+	 * 最小报警值
+	 */
+	@TableField(value = "min_value")
+	private String minValue;
+	/**
+	 * 最大报警值
+	 */
+	@TableField(value = "max_value")
+	private String maxValue;
+	/**
 	 * 报警描述
 	 */
 	@TableField(value = "description")
diff --git a/src/main/java/com/fengdu/gas/repository/po/UserWorkOrderPO.java b/src/main/java/com/fengdu/gas/repository/po/UserWorkOrderPO.java
index 8c0f2ba..2fff3b9 100644
--- a/src/main/java/com/fengdu/gas/repository/po/UserWorkOrderPO.java
+++ b/src/main/java/com/fengdu/gas/repository/po/UserWorkOrderPO.java
@@ -56,6 +56,16 @@
 	@TableField(value = "type")
 	private Integer type;
 	/**
+	 * 所属监测点编号
+	 */
+	@TableField(value = "point_code")
+	private String pointCode;
+	/**
+	 * 所属设备编号
+	 */
+	@TableField(value = "facility_code")
+	private String facilityCode;
+	/**
 	 * 内容描述
 	 */
 	@TableField(value = "content")
diff --git a/src/main/java/com/fengdu/gas/repository/po/WaterFacilityPO.java b/src/main/java/com/fengdu/gas/repository/po/WaterFacilityPO.java
index f0ce533..7fc8117 100644
--- a/src/main/java/com/fengdu/gas/repository/po/WaterFacilityPO.java
+++ b/src/main/java/com/fengdu/gas/repository/po/WaterFacilityPO.java
@@ -86,6 +86,16 @@
 	@TableField(value = "facility_url")
 	private String facilityUrl;
 	/**
+	 * 设备状态
+	 */
+	@TableField(value = "facility_state")
+	private Integer facilityState;
+	/**
+	 * 设备风机运行状态
+	 */
+	@TableField(value = "facility_fan_state")
+	private Integer facilityFanState;
+	/**
 	 * 数据创建时间
 	 */
 	@TableField(value = "create_time")
diff --git a/src/main/java/com/fengdu/gas/repository/po/WaterMonitoryPointPO.java b/src/main/java/com/fengdu/gas/repository/po/WaterMonitoryPointPO.java
index b1122fc..7847881 100644
--- a/src/main/java/com/fengdu/gas/repository/po/WaterMonitoryPointPO.java
+++ b/src/main/java/com/fengdu/gas/repository/po/WaterMonitoryPointPO.java
@@ -61,6 +61,16 @@
 	@TableField(value = "remark")
 	private String remark;
 	/**
+	 * 左边距
+	 */
+	@TableField(value = "left_margin")
+	private String leftMargin;
+	/**
+	 * 上边距
+	 */
+	@TableField(value = "top_margin")
+	private String topMargin;
+	/**
 	 * 监控点图片
 	 */
 	@TableField(value = "image_rul")
diff --git a/src/main/java/com/fengdu/gas/repository/vo/AlarmSchemeVO.java b/src/main/java/com/fengdu/gas/repository/vo/AlarmSchemeVO.java
new file mode 100644
index 0000000..6499c52
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/repository/vo/AlarmSchemeVO.java
@@ -0,0 +1,54 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.fengdu.gas.repository.vo;
+
+import lombok.Data;
+
+import com.fengdu.gas.common.util.LocalDateTimeUtil;
+import com.fengdu.gas.common.util.NumericUtil;
+import java.util.Objects;
+import com.fengdu.gas.repository.po.AlarmSchemePO;
+
+/**
+ * 报警规则配置
+ * @author zr
+ */
+@Data
+public class AlarmSchemeVO extends AlarmSchemePO implements BasicVO {
+
+    @Override
+    public String getCreateTimeView() {
+        if (NumericUtil.tryParseLong(this.getCreateTime()).compareTo(0L) > 0) {
+            return LocalDateTimeUtil.toFormatString(this.getCreateTime());
+        }
+        return "";
+    }
+
+    @Override
+    public String getUpdateTimeView() {
+        if (Objects.isNull(this.getUpdateTime())) {
+            return "";
+        }
+        return LocalDateTimeUtil.toFormatFullString(this.getUpdateTime());
+    }
+}
diff --git a/src/main/java/com/fengdu/gas/repository/vo/UserWorkOrderVO.java b/src/main/java/com/fengdu/gas/repository/vo/UserWorkOrderVO.java
index 63118d8..3f1b6d1 100644
--- a/src/main/java/com/fengdu/gas/repository/vo/UserWorkOrderVO.java
+++ b/src/main/java/com/fengdu/gas/repository/vo/UserWorkOrderVO.java
@@ -1,32 +1,35 @@
 /**
-#                                                    __----~~~~~~~~~~~------___
-#                                   .  .   ~~//====......          __--~ ~~
-#                   -.            \_|//     |||\\  ~~~~~~::::... /~
-#                ___-==_       _-~o~  \/    |||  \\            _/~~-
-#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
-#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
-#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
-# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
-# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
-#          '         ~-|      /|    |-~\~~       __--~~
-#                      |-~~-_/ |    |   ~\_   _-~            /\
-#                           /  \     \__   \/~                \__
-#                       _--~ _/ | .-~~____--~-/                  ~~==.
-#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
-#                                 -_     ~\      ~~---l__i__i__i--~~_/
-#                                 _-~-__   ~)  \--______________--~~
-#                               //.-~~~-~_--~- |-------~~~~~~~~
-#                                      //.-~~~--\
-#                  神兽保佑
-#                  永无BUG!
-*/
+ #                                                    __----~~~~~~~~~~~------___
+ #                                   .  .   ~~//====......          __--~ ~~
+ #                   -.            \_|//     |||\\  ~~~~~~::::... /~
+ #                ___-==_       _-~o~  \/    |||  \\            _/~~-
+ #        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+ #    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+ #  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+ # /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+ # |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+ #          '         ~-|      /|    |-~\~~       __--~~
+ #                      |-~~-_/ |    |   ~\_   _-~            /\
+ #                           /  \     \__   \/~                \__
+ #                       _--~ _/ | .-~~____--~-/                  ~~==.
+ #                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+ #                                 -_     ~\      ~~---l__i__i__i--~~_/
+ #                                 _-~-__   ~)  \--______________--~~
+ #                               //.-~~~-~_--~- |-------~~~~~~~~
+ #                                      //.-~~~--\
+ #                  神兽保佑
+ #                  永无BUG!
+ */
 package com.fengdu.gas.repository.vo;
 
+import com.fengdu.gas.entity.enums.EExecuteType;
 import lombok.Data;
 
 import com.fengdu.gas.common.util.LocalDateTimeUtil;
 import com.fengdu.gas.common.util.NumericUtil;
+
 import java.util.Objects;
+
 import com.fengdu.gas.repository.po.UserWorkOrderPO;
 
 /**
@@ -35,6 +38,8 @@
  */
 @Data
 public class UserWorkOrderVO extends UserWorkOrderPO implements BasicVO {
+    private String pointName;
+    private String facilityName;
 
     @Override
     public String getCreateTimeView() {
@@ -51,4 +56,11 @@
         }
         return LocalDateTimeUtil.toFormatFullString(this.getUpdateTime());
     }
+
+    public String getExecuteStateView() {
+        if (Objects.isNull(this.getExecuteState())) {
+            return "";
+        }
+        return EExecuteType.getByValue(this.getExecuteState()).getDesc();
+    }
 }
diff --git a/src/main/java/com/fengdu/gas/service/AlarmSchemeService.java b/src/main/java/com/fengdu/gas/service/AlarmSchemeService.java
new file mode 100644
index 0000000..af18e52
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/service/AlarmSchemeService.java
@@ -0,0 +1,245 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.fengdu.gas.service;
+
+import com.fengdu.gas.common.*;
+import com.fengdu.gas.common.enums.*;
+import com.fengdu.gas.common.model.Tuple;
+import com.fengdu.gas.common.util.*;
+import com.fengdu.gas.repository.vo.UserWorkOrderVO;
+import org.apache.commons.lang3.BooleanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.util.*;
+import java.util.stream.Collectors;
+import com.fengdu.gas.repository.impl.AlarmSchemeMapperImpl;
+import com.fengdu.gas.repository.po.AlarmSchemePO;
+import com.fengdu.gas.entity.request.alarmscheme.ReqCreateAlarmScheme;
+import com.fengdu.gas.entity.request.alarmscheme.ReqModifyAlarmScheme;
+import com.fengdu.gas.entity.search.SearchAlarmScheme;
+import com.fengdu.gas.repository.vo.AlarmSchemeVO;
+import com.fengdu.gas.service.convert.AlarmSchemeConvert;
+
+/**
+ * 报警规则配置
+ * @author zr
+ */
+@Service
+public class AlarmSchemeService extends BaseService {
+    @Autowired
+    private AlarmSchemeMapperImpl mapper;
+
+    public ExecutedResult<Long> create(ReqCreateAlarmScheme request) {
+        // 转换po
+        AlarmSchemePO item = CopierUtil.mapTo(request, AlarmSchemePO.class);
+        // 设置状态
+        //item.setStatus(EState.NORMAL.getValue());
+        // 设置记录创建时间
+        item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
+        // 是否删除(逻辑删除)初始值
+        item.setIsDelete(EYesOrNo.NO.getValue());
+
+        int rowCount = mapper.insert(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("创建[报警规则配置]失败。");
+        }
+        return ExecutedResult.success(item.getId());
+    }
+
+    public ExecutedResult<String> modify(ReqModifyAlarmScheme request) {
+        // 验证记录是否存在
+        ExecutedResult<AlarmSchemePO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        AlarmSchemePO item = AlarmSchemeConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[报警规则配置]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<AlarmSchemeVO> get(Long id) {
+        AlarmSchemeVO result = new AlarmSchemeVO();
+
+        AlarmSchemePO find = mapper.get(id);
+        if (null != find) {
+            // 转换vo
+            result = AlarmSchemeConvert.INSTANCE.toVo(find);
+        }
+        return ExecutedResult.success(result);
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<AlarmSchemePO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AlarmSchemePO item = new AlarmSchemePO();
+//        item.setId(id);
+//        item.setStatus(EState.DISABLED.getValue());
+//
+//        int rowCount = mapper.updateById(item);
+//        if (rowCount != 1) {
+//           return ExecutedResult.failed("停用[报警规则配置]失败。");
+//       }
+//       return ExecutedResult.success();
+//   }
+//
+//    public ExecutedResult<String> enable(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<AlarmSchemePO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AlarmSchemePO item = new AlarmSchemePO();
+//        item.setId(id);
+//        item.setStatus(EState.NORMAL.getValue());
+//
+//        int rowCount = mapper.updateById(item);
+//        if (rowCount != 1) {
+//            return ExecutedResult.failed("启用[报警规则配置]失败。");
+//        }
+//        return ExecutedResult.success();
+//    }
+//
+//    public ExecutedResult<String> setSort(ReqSetSort request) {
+//        // 验证记录是否存在
+//        ExecutedResult<AlarmSchemePO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AlarmSchemePO item = new AlarmSchemePO();
+//        item.setId(request.getId());
+//        item.setSort(request.getSort());
+//
+//        int rowCount = mapper.updateById(item);
+//        if (rowCount != 1) {
+//            return ExecutedResult.failed("设置[报警规则配置]排序值失败。");
+//        }
+//        return ExecutedResult.success();
+//    }
+//
+//    public ExecutedResult<String> listSetSort(ReqListSetSort request) {
+//        // id列表
+//        List<Long> listId = request.getList().stream().map(ReqSetSort::getId).collect(Collectors.toList());
+//        // 验证记录是否存在
+//        ExecutedResult<List<AlarmSchemePO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<AlarmSchemePO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    AlarmSchemePO item = new AlarmSchemePO();
+//                    item.setId(c.getId());
+//                    item.setSort(c.getSort());
+//                    return item;
+//                })
+//                .collect(Collectors.toList());
+//        Boolean result = mapper.modifyList(listUpdate);
+//        if (result) {
+//            return ExecutedResult.success();
+//        }
+//        return ExecutedResult.failed("[报警规则配置]设置排序值失败");
+//    }
+//
+//    public ExecutedResult<String> remove(Long id) {
+//        Boolean result = mapper.deleteLogic(id);
+//        if (BooleanUtils.isFalse(result)) {
+//            return ExecutedResult.failed("删除[报警规则配置]失败。");
+//        }
+//        return ExecutedResult.success();
+//    }
+//
+//    public ExecutedResult<String> removeList(List<Long> ids) {
+//        Boolean result = mapper.deleteLogic(ids);
+//        if (BooleanUtils.isFalse(result)) {
+//            return ExecutedResult.failed("删除[报警规则配置]失败。");
+//        }
+//        return ExecutedResult.success();
+//    }
+
+    public ExecutedResult<List<AlarmSchemeVO>> getList(List<Long> listId) {
+        List<AlarmSchemeVO> result = new ArrayList<>();
+
+        List<AlarmSchemePO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 转换vo
+            result = AlarmSchemeConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<AlarmSchemeVO>> search(SearchAlarmScheme search) {
+        // 处理创建时间范围-查询参数
+        Tuple<String, String> createTimeRange = ParameterUtil.getTimeRange(search.getCreateTimeRange());
+        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) {
+            search.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime());
+        }
+        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) {
+            search.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime());
+        }
+
+        PagerResult<AlarmSchemePO> pageList = mapper.search(search);
+        List<AlarmSchemeVO> listVo = new ArrayList<>();
+        List<AlarmSchemePO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = AlarmSchemeConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<AlarmSchemeVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<AlarmSchemePO> check4Id(Long id) {
+        AlarmSchemePO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[报警规则配置]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<AlarmSchemePO>> check4Id(List<Long> listId) {
+        // 从数据库查找报警规则配置
+        List<AlarmSchemePO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[报警规则配置]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(AlarmSchemePO::getId).collect(Collectors.toList());
+        // 数量不一致
+        if (listId.size() != listIdFind.size()) {
+            // 筛选数据库不存在的报警规则配置
+            List<Long> listIdNotFound = listId.stream().filter(c -> !listIdFind.contains(c)).collect(Collectors.toList());
+            if (ListUtil.isNullOrEmpty(list)) {
+                return ExecutedResult.failed("[报警规则配置]不存在." + listIdNotFound);
+            }
+        }
+        return ExecutedResult.success(list);
+    }}
diff --git a/src/main/java/com/fengdu/gas/service/DataUploadRecordService.java b/src/main/java/com/fengdu/gas/service/DataUploadRecordService.java
index b4e854d..621cc16 100644
--- a/src/main/java/com/fengdu/gas/service/DataUploadRecordService.java
+++ b/src/main/java/com/fengdu/gas/service/DataUploadRecordService.java
@@ -33,6 +33,7 @@
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import org.apache.commons.lang3.BooleanUtils;
+import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -67,7 +68,8 @@
     private DataUploadRecordMonthMapperImpl dataUploadRecordMonthMapper;
     @Autowired
     private WaterFacilityParameterMapperImpl waterFacilityParameterMapper;
-
+    private static final Logger DEBUG_LOGGER = LoggerUtil.get(ELogger.DEBUG);
+    private static final Logger ERROR_LOGGER = LoggerUtil.get(ELogger.SYS_ERROR);
     public ExecutedResult<Long> create(ReqCreateDataUploadRecord request) {
         // 转换po
         DataUploadRecordPO item = DataUploadRecordConvert.INSTANCE.toCreate(request);
@@ -202,9 +204,31 @@
 //        }
 //        return ExecutedResult.success();
 //    }
+    /**
+     * mqtt收到消息
+     * @param topic 主题
+     * @param msg 消息内容
+     */
+    public void mqttReceived(String topic, String msg) {
+        if (StringUtil.isNullOrEmpty(topic)) {
+            ERROR_LOGGER.error("主题不能为空");
+            return;
+        }
+        if (StringUtil.isNullOrEmpty(msg)) {
+            ERROR_LOGGER.error("消息不能为空");
+            return;
+        }
+        if (msg.startsWith("{\"platform")) {
+            return;
+        }
+        //报文解析
+        //添加参数报警记录
+        List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
+        FacilityAlarmRecordPO recordPO=new FacilityAlarmRecordPO();
+
+    }
     public ExecutedResult<String> dataUpload(Long startTime, Long endTime, Integer type) {
         List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
-        List<WaterMonitoryPointPO> pointPOList = waterMonitoryPointMapper.getList();
         //获取所有设备参数
         List<WaterFacilityParameterPO> parameterPOList = waterFacilityParameterMapper.getList();
 
diff --git a/src/main/java/com/fengdu/gas/service/FacilityAlarmRecordService.java b/src/main/java/com/fengdu/gas/service/FacilityAlarmRecordService.java
index de75a51..88f1990 100644
--- a/src/main/java/com/fengdu/gas/service/FacilityAlarmRecordService.java
+++ b/src/main/java/com/fengdu/gas/service/FacilityAlarmRecordService.java
@@ -22,10 +22,13 @@
 */
 package com.fengdu.gas.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fengdu.gas.common.*;
 import com.fengdu.gas.common.enums.*;
 import com.fengdu.gas.common.model.Tuple;
 import com.fengdu.gas.common.util.*;
+import com.fengdu.gas.entity.response.alarm.FacilityAlarm;
+import com.fengdu.gas.repository.po.AlarmSchemePO;
 import org.apache.commons.lang3.BooleanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -50,7 +53,7 @@
 
     public ExecutedResult<Long> create(ReqCreateFacilityAlarmRecord request) {
         // 转换po
-        FacilityAlarmRecordPO item = FacilityAlarmRecordConvert.INSTANCE.toCreate(request);
+        FacilityAlarmRecordPO item = CopierUtil.mapTo(request, FacilityAlarmRecordPO.class);
         // 设置状态
         //item.setStatus(EState.NORMAL.getValue());
         // 设置记录创建时间
@@ -193,16 +196,37 @@
         }
         return ExecutedResult.success(result);
     }
-
-    public ExecutedResult<PagerResult<FacilityAlarmRecordVO>> search(SearchFacilityAlarmRecord search) {
+    public ExecutedResult<List<FacilityAlarm>> getAlarmList(Integer dateType){
+        List<FacilityAlarm> result=new ArrayList<>();
         // 处理创建时间范围-查询参数
-        Tuple<String, String> createTimeRange = ParameterUtil.getTimeRange(search.getCreateTimeRange());
-        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) {
-            search.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime());
+        if(dateType!=null&&dateType>0) {
+            Long beginTime = 0L;
+            Long endTime = 0L;
+            switch (dateType) {
+                case 1:
+                    beginTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.todayStartTime()).getTime();
+                    endTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.todayEndTime()).getTime();
+                    break;
+                case 2:
+                    beginTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.weekStartTime()).getTime();
+                    endTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.weekEndTime()).getTime();
+                    break;
+                case 3:
+                    beginTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.monthStartTime()).getTime();
+                    endTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.monthEndTime()).getTime();
+                    break;
+                case 4:
+                    beginTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.yearStartTime()).getTime();
+                    endTime = LocalDateTimeUtil.getTimeStamp(LocalDateTimeUtils.yearEndTime()).getTime();
+                    break;
+            }
+            if (beginTime > 0&&endTime > 0) {
+                result= mapper.getByDateType(LocalDateTimeUtil.toFormatString(beginTime),LocalDateTimeUtil.toFormatString(endTime));
+            }
         }
-        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) {
-            search.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime());
-        }
+        return ExecutedResult.success(result);
+    }
+    public ExecutedResult<PagerResult<FacilityAlarmRecordVO>> search(SearchFacilityAlarmRecord search) {
 
         PagerResult<FacilityAlarmRecordPO> pageList = mapper.search(search);
         List<FacilityAlarmRecordVO> listVo = new ArrayList<>();
diff --git a/src/main/java/com/fengdu/gas/service/TestInfoService.java b/src/main/java/com/fengdu/gas/service/TestInfoService.java
index efb660d..58fe0e5 100644
--- a/src/main/java/com/fengdu/gas/service/TestInfoService.java
+++ b/src/main/java/com/fengdu/gas/service/TestInfoService.java
@@ -1,5 +1,6 @@
 package com.fengdu.gas.service;
 
+import com.fengdu.gas.entity.request.test.TestPayVO;
 import com.fengdu.gas.repository.po.TestInfoPO;
 import com.fengdu.gas.service.convert.TestInfoConvert;
 import com.fengdu.gas.common.ExecutedResult;
@@ -15,10 +16,30 @@
 import com.fengdu.gas.entity.search.SearchTestInfo;
 import com.fengdu.gas.repository.impl.TestInfoMapperImpl;
 import com.fengdu.gas.repository.vo.TestInfoVO;
+import com.google.gson.Gson;
 import org.apache.commons.lang3.BooleanUtils;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.security.KeyStore;
+import java.security.NoSuchAlgorithmException;
+import java.security.Signature;
+import java.security.interfaces.RSAPrivateCrtKey;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -29,222 +50,237 @@
 public class TestInfoService extends BaseService {
     @Autowired
     private TestInfoMapperImpl mapper;
+    //私钥
+   private final static String PRIVATE_KEY="";
+    private final static String PASSWORD="";
 
-    public ExecutedResult<Long> create(ReqCreateTestInfo request) {
-        // 转换po
-        TestInfoPO item = TestInfoConvert.INSTANCE.toCreate(request);
-        // 设置状态
-        item.setStatus(EState.NORMAL.getValue());
-        // 设置记录创建时间
-        item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
-        // 非逻辑删除
-        item.setIsDelete(EYesOrNo.NO.getValue());
-
-        int rowCount = mapper.insert(item);
-        if (rowCount != 1) {
-            return ExecutedResult.failed("创建[测试信息]失败。");
-        }
-        return ExecutedResult.success(item.getId());
+    /**
+     * AES256加密
+     * @param data
+     * @return
+     * @throws Exception
+     */
+    public String AES256(String data) throws Exception {
+        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
+        keyGenerator.init(256); // 初始化密钥生成器,指定AES-256
+        SecretKey key = keyGenerator.generateKey();
+        Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
+        cipher.init(Cipher.ENCRYPT_MODE, key);
+        byte[] encrypted = cipher.doFinal(data.getBytes("UTF-8"));
+        return Base64.getEncoder().encodeToString(encrypted);
     }
 
-    public ExecutedResult<String> modify(ReqModifyTestInfo request) {
-        // 验证记录是否存在
-        ExecutedResult<TestInfoPO> checkExists = this.check4Id(request.getId());
-        if (checkExists.isFailed()) {
-            return ExecutedResult.failed(checkExists.getMsg());
+    /**
+     * Base64加密
+     * @param data
+     * @return
+     */
+    public String Base64(String data) {
+        String encodedString = Base64.getEncoder().encodeToString(data.getBytes());
+        return encodedString;
+    }
+    public static String getKeyAndValueStr(Map<String, String> map) {
+        String result = "";
+        try {
+            List<Map.Entry<String, String>> infoIds = new ArrayList<>(map.entrySet());
+            // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
+            Collections.sort(infoIds, Comparator.comparing(Map.Entry::getKey));
+            // 构造签名键值对的格式
+            StringBuilder sb = new StringBuilder();
+            for (Map.Entry<String, String> item : infoIds) {
+                if (item.getKey() != null && item.getKey() != "") {
+                    String key = item.getKey();
+                    String val = item.getValue();
+                    if (!(val == "" || val == null)) {
+                        sb.append(key + "=" + val + "&");
+                    }
+                }
+            }
+            result = sb.toString().substring(0, sb.length() - 1);
+        } catch (Exception e) {
+            return null;
         }
-
-        // 转换po
-        TestInfoPO item = TestInfoConvert.INSTANCE.toModify(request);
-
-        int rowCount = mapper.updateById(item);
-        if (rowCount != 1) {
-            return ExecutedResult.failed("编辑[测试信息]失败。");
-        }
-        return ExecutedResult.success();
+        return result;
     }
 
-    public ExecutedResult<TestInfoVO> get(Long id) {
-        TestInfoVO result = new TestInfoVO();
 
-        TestInfoPO find = mapper.selectById(id);
-        if (null != find) {
-            result = TestInfoConvert.INSTANCE.toVo(find);
+    /**
+     * 测试支付
+     * @return
+     * @throws Exception
+     */
+    public ExecutedResult<String> testPay() throws Exception {
+        CloseableHttpClient client = HttpClients.createDefault();
+        HttpPost httpPost = new HttpPost("https://test.sumpay.cn/entrance/gateway.htm");
+        List<BasicNameValuePair> pairList = new ArrayList<>();
+        Map<String, String> map = new HashMap<>();
+        map.put("service", "fosun.sumpay.api.orderpay.order.apply");
+        map.put("version","1.0");
+        map.put("format","JSON");
+        map.put("app_id",);
+        map.put("timestamp","20250313142521");
+        map.put("terminal_type","api");
+        map.put("mer_no", "200102833852");//商户号
+        map.put("account_type", "01");//付款方账户类型
+        map.put("card_no", AES256("6217007200125513450"));//付款方账户号
+        map.put("real_name", AES256("尹勇"));//付款方账户名
+        //map.put("bank_code","");//银行代码
+        //map.put("id_type","1");//证件类型
+        //map.put("id_no",AES256(""));//证件号码
+        //map.put("notify_url");//商户后台通知URL
+        map.put("goods_name", Base64("测试001"));//商品名称
+        map.put("goods_num", "1");//商品数量
+        map.put("goods_price", "0.11");//商品价格
+        map.put("goods_type", "1");//商品类型
+        map.put("order_no", "111111111111111");//订单号
+        map.put("order_amount", "0.11");//订单金额
+        map.put("order_time", "20250313142521");//订单时间
+        map.put("currency", "CNY");//币种
+        // map.put("pay_comments");//附言
+        //map.put("remark");//备注字段
+        Map<String, String> map1 = new HashMap<>();
+        for (Map.Entry<String, String> entry : map.entrySet()) {
+            map1.put(entry.getKey(), entry.getValue());
         }
-        return ExecutedResult.success(result);
-    }
+        //map转换字符串&拼接并排序
+        String keyAndValueStr = getKeyAndValueStr(map);
+        //签名处理
+        String msg = signMsg(keyAndValueStr, PRIVATE_KEY, PASSWORD, "UTF-8");
+        map1.put("sign_type","CERT");
+        map1.put("sign",msg);
 
-    public ExecutedResult<String> stop(Long id) {
-        // 验证记录是否存在
-        ExecutedResult<TestInfoPO> checkExists = this.check4Id(id);
-        if (checkExists.isFailed()) {
-            return ExecutedResult.failed(checkExists.getMsg());
+        for(String key:map1.keySet()){
+            pairList.add(new BasicNameValuePair(key,map1.get(key)));
         }
-
-        TestInfoPO item = new TestInfoPO();
-        item.setId(id);
-        item.setStatus(EState.DISABLED.getValue());
-
-        int rowCount = mapper.updateById(item);
-        if (rowCount != 1) {
-            return ExecutedResult.failed("停用[测试信息]失败。");
-        }
-        return ExecutedResult.success();
-    }
-
-    public ExecutedResult<String> enable(Long id) {
-        // 验证记录是否存在
-        ExecutedResult<TestInfoPO> checkExists = this.check4Id(id);
-        if (checkExists.isFailed()) {
-            return ExecutedResult.failed(checkExists.getMsg());
-        }
-
-        TestInfoPO item = new TestInfoPO();
-        item.setId(id);
-        item.setStatus(EState.NORMAL.getValue());
-
-        int rowCount = mapper.updateById(item);
-        if (rowCount != 1) {
-            return ExecutedResult.failed("启用[测试信息]失败。");
-        }
-        return ExecutedResult.success();
-    }
-
-    public ExecutedResult<String> setSort(ReqSetSort request) {
-        // 验证记录是否存在
-        ExecutedResult<TestInfoPO> checkExists = this.check4Id(request.getId());
-        if (checkExists.isFailed()) {
-            return ExecutedResult.failed(checkExists.getMsg());
-        }
-
-        TestInfoPO item = new TestInfoPO();
-        item.setId(request.getId());
-        item.setSort(request.getSort());
-
-        int rowCount = mapper.updateById(item);
-        if (rowCount != 1) {
-            return ExecutedResult.failed("[测试信息]设置排序值失败。");
-        }
-        return ExecutedResult.success();
-    }
-
-    public ExecutedResult<String> listSetSort(ReqListSetSort request) {
-        // id列表
-        List<Long> listId = request.getList().stream().map(ReqSetSort::getId).collect(Collectors.toList());
-        // 验证记录是否存在
-        ExecutedResult<List<TestInfoPO>> checkExists = this.check4Id(listId);
-        if (checkExists.isFailed()) {
-            return ExecutedResult.failed(checkExists.getMsg());
-        }
-
-        List<TestInfoPO> listUpdate = request.getList().stream()
-                .map(c -> {
-                    TestInfoPO item = new TestInfoPO();
-                    item.setId(c.getId());
-                    item.setSort(c.getSort());
-                    return item;
-                })
-                .collect(Collectors.toList());
-        Boolean result = mapper.modifyList(listUpdate);
-        if (result) {
-            return ExecutedResult.success();
-        }
-        return ExecutedResult.failed("[测试信息]设置排序值失败");
-    }
-
-    public ExecutedResult<String> remove(Long id) {
-        // 验证记录是否存在
-        ExecutedResult<TestInfoPO> checkExists = this.check4Id(id);
-        if (checkExists.isFailed()) {
-            return ExecutedResult.failed(checkExists.getMsg());
-        }
-
-        Boolean result = mapper.deleteLogic(id);
-        if (BooleanUtils.isFalse(result)) {
-            return ExecutedResult.failed("删除[测试信息]失败。");
-        }
-        return ExecutedResult.success();
-    }
-
-    public ExecutedResult<String> removeList(List<Long> listId) {
-        // 验证记录是否存在
-        ExecutedResult<List<TestInfoPO>> checkExists = this.check4Id(listId);
-        if (checkExists.isFailed()) {
-            return ExecutedResult.failed(checkExists.getMsg());
-        }
-
-        Boolean result = mapper.deleteLogic(listId);
-        if (BooleanUtils.isFalse(result)) {
-            return ExecutedResult.failed("删除[测试信息]失败。");
-        }
-        return ExecutedResult.success();
-    }
-
-    public ExecutedResult<List<TestInfoVO>> getList(List<Long> listId) {
-        List<TestInfoVO> result = new ArrayList<>();
-
-        List<TestInfoPO> list = mapper.getList(listId);
-        if (ListUtil.isNotNullOrEmpty(list)) {
-            result = CopierUtil.mapTo(list, TestInfoVO.class);
-        }
-        return ExecutedResult.success(result);
-    }
-
-    public ExecutedResult<PagerResult<TestInfoVO>> search(SearchTestInfo search) {
-        // 处理创建时间范围-查询参数
-        Tuple<String, String> createTimeRange = ParameterUtil.getTimeRange(search.getCreateTimeRange());
-        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) {
-            search.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime());
-        }
-        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) {
-            search.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime());
-        }
-
-        PagerResult<TestInfoPO> pageList = mapper.search(search);
-        List<TestInfoVO> listVo = new ArrayList<>();
-        List<TestInfoPO> list = pageList.getList();
-        if (ListUtil.isNotNullOrEmpty(list)) {
-            pageList.setLastId(list.get(list.size() - 1).getId());
-            // 转换vo
-            listVo = TestInfoConvert.INSTANCE.toVo(list);
-        }
-        PagerResult<TestInfoVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
-        result.setLastId(pageList.getLastId());
-        return ExecutedResult.success(result);
-    }
-
-    protected ExecutedResult<TestInfoPO> check4Id(Long id) {
-        TestInfoPO exists = mapper.get(id);
-        if (Objects.isNull(exists)) {
-            return ExecutedResult.failed("[测试信息]不存在:" + id);
-        }
-        return ExecutedResult.success(exists);
-    }
-    protected ExecutedResult<List<TestInfoPO>> check4Id(List<Long> listId) {
-        // 从数据库查找测试信息
-        List<TestInfoPO> list = mapper.getList(listId);
-        if (ListUtil.isNullOrEmpty(list)) {
-            return ExecutedResult.failed("[测试信息]不存在." + listId);
-        }
-        // 数据库找到的id列表
-        List<Long> listIdFind = list.stream().map(TestInfoPO::getId).collect(Collectors.toList());
-        // 数量不一致
-        if (listId.size() != listIdFind.size()) {
-            // 筛选数据库不存在的测试信息
-            List<Long> listIdNotFound = listId.stream().filter(c -> !listIdFind.contains(c)).collect(Collectors.toList());
-            if (ListUtil.isNullOrEmpty(list)) {
-                return ExecutedResult.failed("[测试信息]不存在." + listIdNotFound);
+        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairList, "UTF-8");
+        httpPost.setEntity(entity);
+        try {
+            // 执行请求并获取响应
+            CloseableHttpResponse response = client.execute(httpPost);
+            try {
+               if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK){
+                   String data=EntityUtils.toString(response.getEntity(),"UTF-8");
+                   System.out.println(data);
+               }else {
+                   throw new RuntimeException("接口连接失败");
+               }
+                // 处理响应...
+            } finally {
+                response.close();
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                client.close();
+            } catch (IOException e) {
+                e.printStackTrace();
             }
         }
-        return ExecutedResult.success(list);
+        return ExecutedResult.success();
     }
-
-    protected Map<Long, TestInfoPO> getMap4Id(List<Long> listId) {
-        List<TestInfoPO> list = mapper.getList(listId);
-        if (ListUtil.isNullOrEmpty(list)) {
-            return new HashMap<>(0);
+    /**
+     * 订单支付确认接口
+     * @return
+     * @throws Exception
+     */
+    public ExecutedResult<String> confirmPay() throws Exception {
+        CloseableHttpClient client = HttpClients.createDefault();
+        HttpPost httpPost = new HttpPost("https://test.sumpay.cn/entrance/gateway.htm");
+        List<BasicNameValuePair> pairList = new ArrayList<>();
+        Map<String, String> map = new HashMap<>();
+        map.put("service", "fosun.sumpay.api.orderpay.order.apply");
+        map.put("version","1.0");
+        map.put("format","JSON");
+        map.put("app_id",);
+        map.put("timestamp","20250313142521");
+        map.put("terminal_type","api");
+        map.put("mer_no", "200102833852");//商户号
+        map.put("order_no", "111111111111111");//订单号
+        map.put("serial_no", "");//入账流水号
+        Map<String, String> map1 = new HashMap<>();
+        for (Map.Entry<String, String> entry : map.entrySet()) {
+            map1.put(entry.getKey(), entry.getValue());
         }
-        return list.stream().collect(Collectors.toMap(TestInfoPO::getId, c -> c));
-    }
+        //map转换字符串&拼接并排序
+        String keyAndValueStr = getKeyAndValueStr(map);
+        //签名处理
+        String msg = signMsg(keyAndValueStr, PRIVATE_KEY, PASSWORD, "UTF-8");
+        map1.put("sign_type","CERT");
+        map1.put("sign",msg);
 
+        for(String key:map1.keySet()){
+            pairList.add(new BasicNameValuePair(key,map1.get(key)));
+        }
+        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairList, "UTF-8");
+        httpPost.setEntity(entity);
+        try {
+            // 执行请求并获取响应
+            CloseableHttpResponse response = client.execute(httpPost);
+            try {
+                if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK){
+                    String data=EntityUtils.toString(response.getEntity(),"UTF-8");
+                    System.out.println(data);
+                }else {
+                    throw new RuntimeException("接口连接失败");
+                }
+                // 处理响应...
+            } finally {
+                response.close();
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                client.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return ExecutedResult.success();
+    }
+    /**
+     * 签名处理
+     * @param privateKeyPath:私钥
+     * @param plaintext:原始字符串
+     * @param passWord:证书密码
+     * @param charset :UTF-8
+     * @return
+     */
+    public String signMsg(String plaintext, String privateKeyPath, String passWord, String charset) {
+        try {
+            InputStream keyFile = new FileInputStream(new File(privateKeyPath));
+            KeyStore ks = KeyStore.getInstance("PKCS12");
+            try {
+                ks.load(keyFile, passWord.toCharArray());
+            } catch (Throwable ex) {
+                if (keyFile != null)
+                    keyFile.close();
+                throw new RuntimeException("加载私钥失败",ex);
+            }
+            Enumeration<String> myEnum = ks.aliases();
+            String keyAlias = null;
+            RSAPrivateCrtKey prikey = null;
+            /* IBM JDK必须使用While循环取最后一个别名,才能得到个人私钥别名 */
+            while (myEnum.hasMoreElements()) {
+                keyAlias = myEnum.nextElement();
+                if (ks.isKeyEntry(keyAlias)) {
+                    prikey = (RSAPrivateCrtKey) ks.getKey(keyAlias, passWord.toCharArray());
+                    break;
+                }
+            }
+            if (prikey == null) {
+                throw new RuntimeException("没有找到匹配私钥");
+            } else {
+                Signature sign = Signature.getInstance("SHA256withRSA");
+                sign.initSign(prikey);
+                sign.update(plaintext.getBytes(charset));
+                return org.apache.commons.codec.binary.Base64.encodeBase64String(sign.sign());
+            }
+        } catch (RuntimeException e) {
+            throw e;
+        } catch (Throwable e) {
+            throw new RuntimeException("签名失败",e);
+        }
+    }
 }
diff --git a/src/main/java/com/fengdu/gas/service/UserWorkOrderService.java b/src/main/java/com/fengdu/gas/service/UserWorkOrderService.java
index e9fffe6..64e7691 100644
--- a/src/main/java/com/fengdu/gas/service/UserWorkOrderService.java
+++ b/src/main/java/com/fengdu/gas/service/UserWorkOrderService.java
@@ -26,6 +26,8 @@
 import com.fengdu.gas.common.enums.*;
 import com.fengdu.gas.common.model.Tuple;
 import com.fengdu.gas.common.util.*;
+import com.fengdu.gas.repository.impl.WaterFacilityMapperImpl;
+import com.fengdu.gas.repository.po.WaterFacilityPO;
 import org.apache.commons.lang3.BooleanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -47,6 +49,8 @@
 public class UserWorkOrderService extends BaseService {
     @Autowired
     private UserWorkOrderMapperImpl mapper;
+    @Autowired
+    private WaterFacilityMapperImpl waterFacilityMapper;
 
     public ExecutedResult<Long> create(ReqCreateUserWorkOrder request) {
         // 转换po
@@ -210,7 +214,15 @@
         if (ListUtil.isNotNullOrEmpty(list)) {
             pageList.setLastId(list.get(list.size() - 1).getId());
             // 转换vo
-            listVo = UserWorkOrderConvert.INSTANCE.toVo(list);
+            listVo = CopierUtil.mapTo(list, UserWorkOrderVO.class);
+            List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
+            for(UserWorkOrderVO vo:listVo){
+                WaterFacilityPO waterFacilityPO = facilityPOList.stream().filter(item -> item.getFacilityCode().equals(vo.getFacilityCode())).findFirst().orElse(null);
+                if(Objects.nonNull(waterFacilityPO)){
+                    vo.setPointName(waterFacilityPO.getPointName());
+                    vo.setFacilityName(waterFacilityPO.getFacilityName());
+                }
+            }
         }
         PagerResult<UserWorkOrderVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
         result.setLastId(pageList.getLastId());
diff --git a/src/main/java/com/fengdu/gas/service/WaterFacilityParameterService.java b/src/main/java/com/fengdu/gas/service/WaterFacilityParameterService.java
index 302ef34..35bda99 100644
--- a/src/main/java/com/fengdu/gas/service/WaterFacilityParameterService.java
+++ b/src/main/java/com/fengdu/gas/service/WaterFacilityParameterService.java
@@ -26,6 +26,9 @@
 import com.fengdu.gas.common.enums.*;
 import com.fengdu.gas.common.model.Tuple;
 import com.fengdu.gas.common.util.*;
+import com.fengdu.gas.entity.request.waterfacilityparameter.ReqAddParameter;
+import com.fengdu.gas.repository.impl.WaterFacilityMapperImpl;
+import com.fengdu.gas.repository.po.WaterFacilityPO;
 import org.apache.commons.lang3.BooleanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -47,22 +50,34 @@
 public class WaterFacilityParameterService extends BaseService {
     @Autowired
     private WaterFacilityParameterMapperImpl mapper;
+    @Autowired
+    private WaterFacilityMapperImpl waterFacilityMapper;
 
-    public ExecutedResult<Long> create(ReqCreateWaterFacilityParameter request) {
-        // 转换po
-        WaterFacilityParameterPO item = WaterFacilityParameterConvert.INSTANCE.toCreate(request);
-        // 设置状态
-        //item.setStatus(EState.NORMAL.getValue());
-        // 设置记录创建时间
-        item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
-        // 是否删除(逻辑删除)初始值
-        item.setIsDelete(EYesOrNo.NO.getValue());
-
-        int rowCount = mapper.insert(item);
-        if (rowCount != 1) {
-            return ExecutedResult.failed("创建[设备设定参数]失败。");
+    public ExecutedResult<String> create(ReqAddParameter request) {
+        WaterFacilityPO facilityPO = waterFacilityMapper.get(request.getFacilityId());
+        if (Objects.isNull(facilityPO)) {
+            return ExecutedResult.failed("所属设备[id=" + request.getFacilityId() + "]不存在。");
         }
-        return ExecutedResult.success(item.getId());
+        List<WaterFacilityParameterPO> list = mapper.getListByFacilityId(request.getFacilityId());
+        if (ListUtil.isNotNullOrEmpty(request.getParameterList())) {
+            for (ReqCreateWaterFacilityParameter x : request.getParameterList()) {
+                WaterFacilityParameterPO parameterPO = list.stream().filter(item -> item.getFacilityId().equals(request.getFacilityId()) && item.getColumnsCode().equals(x.getColumnsCode())).findFirst().orElse(null);
+                if(Objects.isNull(parameterPO)) {
+                    WaterFacilityParameterPO item = new WaterFacilityParameterPO();
+                    item.setId(SnowFlakeUtil.getId());
+                    item.setFacilityId(facilityPO.getId());
+                    item.setFacilityCode(facilityPO.getFacilityCode());
+                    item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
+                    item.setColumnsUnits(x.getColumnsUnits());
+                    item.setColumnsCode(x.getColumnsCode());
+                    item.setColumnsShow(x.getColumnsShow());
+                    item.setColumnValue("");
+                    item.setLastTime("");
+                    this.mapper.insert(item);
+                }
+            }
+        }
+        return ExecutedResult.success("添加成功");
     }
 
     public ExecutedResult<String> modify(ReqModifyWaterFacilityParameter request) {
diff --git a/src/main/java/com/fengdu/gas/service/WaterFacilityService.java b/src/main/java/com/fengdu/gas/service/WaterFacilityService.java
index 27e051b..8b2b2fe 100644
--- a/src/main/java/com/fengdu/gas/service/WaterFacilityService.java
+++ b/src/main/java/com/fengdu/gas/service/WaterFacilityService.java
@@ -1,36 +1,46 @@
 /**
-#                                                    __----~~~~~~~~~~~------___
-#                                   .  .   ~~//====......          __--~ ~~
-#                   -.            \_|//     |||\\  ~~~~~~::::... /~
-#                ___-==_       _-~o~  \/    |||  \\            _/~~-
-#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
-#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
-#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
-# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
-# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
-#          '         ~-|      /|    |-~\~~       __--~~
-#                      |-~~-_/ |    |   ~\_   _-~            /\
-#                           /  \     \__   \/~                \__
-#                       _--~ _/ | .-~~____--~-/                  ~~==.
-#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
-#                                 -_     ~\      ~~---l__i__i__i--~~_/
-#                                 _-~-__   ~)  \--______________--~~
-#                               //.-~~~-~_--~- |-------~~~~~~~~
-#                                      //.-~~~--\
-#                  神兽保佑
-#                  永无BUG!
-*/
+ #                                                    __----~~~~~~~~~~~------___
+ #                                   .  .   ~~//====......          __--~ ~~
+ #                   -.            \_|//     |||\\  ~~~~~~::::... /~
+ #                ___-==_       _-~o~  \/    |||  \\            _/~~-
+ #        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+ #    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+ #  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+ # /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+ # |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+ #          '         ~-|      /|    |-~\~~       __--~~
+ #                      |-~~-_/ |    |   ~\_   _-~            /\
+ #                           /  \     \__   \/~                \__
+ #                       _--~ _/ | .-~~____--~-/                  ~~==.
+ #                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+ #                                 -_     ~\      ~~---l__i__i__i--~~_/
+ #                                 _-~-__   ~)  \--______________--~~
+ #                               //.-~~~-~_--~- |-------~~~~~~~~
+ #                                      //.-~~~--\
+ #                  神兽保佑
+ #                  永无BUG!
+ */
 package com.fengdu.gas.service;
 
 import com.fengdu.gas.common.*;
 import com.fengdu.gas.common.enums.*;
 import com.fengdu.gas.common.model.Tuple;
 import com.fengdu.gas.common.util.*;
+import com.fengdu.gas.entity.response.facility.FacilityCount;
+import com.fengdu.gas.entity.response.facility.FacilityData;
+import com.fengdu.gas.repository.impl.WaterFacilityParameterMapperImpl;
+import com.fengdu.gas.repository.impl.WaterMonitoryPointMapperImpl;
+import com.fengdu.gas.repository.po.WaterFacilityParameterPO;
+import com.fengdu.gas.repository.po.WaterMonitoryPointPO;
 import org.apache.commons.lang3.BooleanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 import com.fengdu.gas.repository.impl.WaterFacilityMapperImpl;
 import com.fengdu.gas.repository.po.WaterFacilityPO;
 import com.fengdu.gas.entity.request.waterfacility.ReqCreateWaterFacility;
@@ -47,10 +57,14 @@
 public class WaterFacilityService extends BaseService {
     @Autowired
     private WaterFacilityMapperImpl mapper;
+    @Autowired
+    private WaterFacilityParameterMapperImpl waterFacilityParameterMapper;
+    @Autowired
+    private WaterMonitoryPointMapperImpl waterMonitoryPointMapper;
 
     public ExecutedResult<Long> create(ReqCreateWaterFacility request) {
         // 转换po
-        WaterFacilityPO item = WaterFacilityConvert.INSTANCE.toCreate(request);
+        WaterFacilityPO item = CopierUtil.mapTo(request, WaterFacilityPO.class);
         // 设置状态
         //item.setStatus(EState.NORMAL.getValue());
         // 设置记录创建时间
@@ -92,96 +106,63 @@
         return ExecutedResult.success(result);
     }
 
-//    public ExecutedResult<String> stop(Long id) {
-//        // 验证记录是否存在
-//        ExecutedResult<WaterFacilityPO> checkExists = this.check4Id(id);
-//        if (checkExists.isFailed()) {
-//            return ExecutedResult.failed(checkExists.getMsg());
-//        }
-//        WaterFacilityPO item = new WaterFacilityPO();
-//        item.setId(id);
-//        item.setStatus(EState.DISABLED.getValue());
-//
-//        int rowCount = mapper.updateById(item);
-//        if (rowCount != 1) {
-//           return ExecutedResult.failed("停用[设备信息]失败。");
-//       }
-//       return ExecutedResult.success();
-//   }
-//
-//    public ExecutedResult<String> enable(Long id) {
-//        // 验证记录是否存在
-//        ExecutedResult<WaterFacilityPO> checkExists = this.check4Id(id);
-//        if (checkExists.isFailed()) {
-//            return ExecutedResult.failed(checkExists.getMsg());
-//        }
-//        WaterFacilityPO item = new WaterFacilityPO();
-//        item.setId(id);
-//        item.setStatus(EState.NORMAL.getValue());
-//
-//        int rowCount = mapper.updateById(item);
-//        if (rowCount != 1) {
-//            return ExecutedResult.failed("启用[设备信息]失败。");
-//        }
-//        return ExecutedResult.success();
-//    }
-//
-//    public ExecutedResult<String> setSort(ReqSetSort request) {
-//        // 验证记录是否存在
-//        ExecutedResult<WaterFacilityPO> checkExists = this.check4Id(request.getId());
-//        if (checkExists.isFailed()) {
-//            return ExecutedResult.failed(checkExists.getMsg());
-//        }
-//        WaterFacilityPO item = new WaterFacilityPO();
-//        item.setId(request.getId());
-//        item.setSort(request.getSort());
-//
-//        int rowCount = mapper.updateById(item);
-//        if (rowCount != 1) {
-//            return ExecutedResult.failed("设置[设备信息]排序值失败。");
-//        }
-//        return ExecutedResult.success();
-//    }
-//
-//    public ExecutedResult<String> listSetSort(ReqListSetSort request) {
-//        // id列表
-//        List<Long> listId = request.getList().stream().map(ReqSetSort::getId).collect(Collectors.toList());
-//        // 验证记录是否存在
-//        ExecutedResult<List<WaterFacilityPO>> checkExists = this.check4Id(listId);
-//        if (checkExists.isFailed()) {
-//            return ExecutedResult.failed(checkExists.getMsg());
-//        }
-//
-//        List<WaterFacilityPO> listUpdate = request.getList().stream()
-//                .map(c -> {
-//                    WaterFacilityPO item = new WaterFacilityPO();
-//                    item.setId(c.getId());
-//                    item.setSort(c.getSort());
-//                    return item;
-//                })
-//                .collect(Collectors.toList());
-//        Boolean result = mapper.modifyList(listUpdate);
-//        if (result) {
-//            return ExecutedResult.success();
-//        }
-//        return ExecutedResult.failed("[设备信息]设置排序值失败");
-//    }
-//
-//    public ExecutedResult<String> remove(Long id) {
-//        Boolean result = mapper.deleteLogic(id);
-//        if (BooleanUtils.isFalse(result)) {
-//            return ExecutedResult.failed("删除[设备信息]失败。");
-//        }
-//        return ExecutedResult.success();
-//    }
-//
-//    public ExecutedResult<String> removeList(List<Long> ids) {
-//        Boolean result = mapper.deleteLogic(ids);
-//        if (BooleanUtils.isFalse(result)) {
-//            return ExecutedResult.failed("删除[设备信息]失败。");
-//        }
-//        return ExecutedResult.success();
-//    }
+    public ExecutedResult<List<FacilityData>> getFacilityList() {
+        List<FacilityData> result = new ArrayList<>();
+        List<WaterMonitoryPointPO> pointPOList = waterMonitoryPointMapper.getList();
+        List<WaterFacilityPO> facilityPOList = mapper.getList();
+        List<WaterFacilityParameterPO> parameterPOList = waterFacilityParameterMapper.getList();
+        for (WaterFacilityPO facilityPO : facilityPOList) {
+            WaterMonitoryPointPO pointPO = pointPOList.stream().filter(item -> item.getId().equals(facilityPO.getPointId())).findFirst().orElse(null);
+            FacilityData data = new FacilityData();
+            data.setPointId(facilityPO.getPointId());
+            data.setPointName(facilityPO.getPointName());
+            data.setLeft(pointPO.getLeftMargin());
+            data.setTop(pointPO.getTopMargin());
+            data.setFacilityId(facilityPO.getId());
+            data.setFacilityName(facilityPO.getFacilityName());
+            data.setFacilityState(EFacilityState.getByValue(facilityPO.getFacilityState()).getDesc());
+            data.setFacilityFanState(EFacilityState.getByValue(facilityPO.getFacilityFanState()).getDesc());
+            List<WaterFacilityParameterPO> poList = parameterPOList.stream().filter(item -> item.getFacilityId().equals(facilityPO.getId())).collect(Collectors.toList());
+            if (ListUtil.isNotNullOrEmpty(poList)) {
+                //获取甲烷值
+                String methaneValue = poList.stream().filter(item -> item.getColumnsCode().equals("JW001")).map(WaterFacilityParameterPO::getColumnValue).findFirst().orElse(null);
+                //获取硫化氢值
+                String hyrothionValue = poList.stream().filter(item -> item.getColumnsCode().equals("LHQ001")).map(WaterFacilityParameterPO::getColumnValue).findFirst().orElse(null);
+                //获取温度
+                String temperature = poList.stream().filter(item -> item.getColumnsCode().equals("WD001")).map(WaterFacilityParameterPO::getColumnValue).findFirst().orElse(null);
+
+                if (StringUtil.isNotNullOrEmpty(methaneValue))
+                    data.setMethaneValue(new BigDecimal(methaneValue));
+                if (StringUtil.isNotNullOrEmpty(hyrothionValue))
+                    data.setHyrothionValue(new BigDecimal(hyrothionValue));
+                if (StringUtil.isNotNullOrEmpty(temperature))
+                    data.setTemperature(new BigDecimal(temperature));
+            }
+            result.add(data);
+        }
+        return ExecutedResult.success(result);
+    }
+    public ExecutedResult<List<FacilityCount>> deviceCount(){
+        List<FacilityCount> result = new ArrayList<>();
+        List<WaterMonitoryPointPO> pointPOList = waterMonitoryPointMapper.getList();
+        List<WaterFacilityPO> facilityPOList = mapper.getList();
+        for(WaterMonitoryPointPO po:pointPOList){
+            List<WaterFacilityPO> collect = facilityPOList.stream().filter(item -> item.getPointId().equals(po.getId())).collect(Collectors.toList());
+            if(ListUtil.isNotNullOrEmpty(collect)&&collect.size()>0){
+                FacilityCount count=new FacilityCount();
+                count.setPointId(po.getId());
+                count.setPointName(po.getPointName());
+                count.setFacilityFanCount(collect.size());
+                count.setMethaneCount(collect.size());
+                count.setHyrothionCount(collect.size());
+                count.setBoxCount(collect.size());
+                int i = count.getFacilityFanCount() + count.getMethaneCount() + count.getHyrothionCount() + count.getBoxCount();
+                count.setSumCount( i);
+                result.add(count);
+            }
+        }
+        return ExecutedResult.success(result);
+    }
 
     public ExecutedResult<List<WaterFacilityVO>> getList(List<Long> listId) {
         List<WaterFacilityVO> result = new ArrayList<>();
@@ -224,6 +205,7 @@
         }
         return ExecutedResult.success(exists);
     }
+
     protected ExecutedResult<List<WaterFacilityPO>> check4Id(List<Long> listId) {
         // 从数据库查找设备信息
         List<WaterFacilityPO> list = mapper.getList(listId);
@@ -241,4 +223,5 @@
             }
         }
         return ExecutedResult.success(list);
-    }}
+    }
+}
diff --git a/src/main/java/com/fengdu/gas/service/convert/AlarmSchemeConvert.java b/src/main/java/com/fengdu/gas/service/convert/AlarmSchemeConvert.java
new file mode 100644
index 0000000..ba8fb91
--- /dev/null
+++ b/src/main/java/com/fengdu/gas/service/convert/AlarmSchemeConvert.java
@@ -0,0 +1,48 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.fengdu.gas.service.convert;
+
+import com.fengdu.gas.entity.request.alarmscheme.ReqCreateAlarmScheme;
+import com.fengdu.gas.entity.request.alarmscheme.ReqModifyAlarmScheme;
+import com.fengdu.gas.repository.po.AlarmSchemePO;
+import com.fengdu.gas.repository.vo.AlarmSchemeVO;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 报警规则配置
+ * @author {#=author}
+ */
+@Mapper
+public interface AlarmSchemeConvert {
+    AlarmSchemeConvert INSTANCE = Mappers.getMapper(AlarmSchemeConvert.class);
+
+    AlarmSchemePO toCreate(ReqCreateAlarmScheme request);
+    AlarmSchemePO toModify(ReqModifyAlarmScheme request);
+
+    AlarmSchemeVO toVo(AlarmSchemePO item);
+    List<AlarmSchemeVO> toVo(List<AlarmSchemePO> list);
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 04208da..eea38ea 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -44,10 +44,10 @@
 
 
 # mybatis-plus 配置:
-#mybatis-plus:
-#  configuration:
-#    ### 开启打印sql配置
-#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+mybatis-plus:
+  configuration:
+    ### 开启打印sql配置
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 
 mqtt:
   # 是否启用
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index c7e21f7..eba5ea8 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -55,7 +55,7 @@
 
 
 
-# quartz定时任务配置
+ #quartz定时任务配置
 quartz:
   # 是否启用
   enable: false
diff --git a/src/test/java/com/fengdu/gas/GenCodeGauss.java b/src/test/java/com/fengdu/gas/GenCodeGauss.java
index 057df0e..a349682 100644
--- a/src/test/java/com/fengdu/gas/GenCodeGauss.java
+++ b/src/test/java/com/fengdu/gas/GenCodeGauss.java
@@ -243,7 +243,7 @@
      * 只生成以下配置的表
      */
     private static final List<String> ONLY_TABLES = Arrays.asList(
-       "data_upload_record","data_upload_record_day","data_upload_record_hour","data_upload_record_month"
+       "alarm_scheme"
     );
 
     public static void main(String[] args) {

--
Gitblit v1.9.3