From 806cbe242deee0ddbcdc9dc898150c3af836cc0d Mon Sep 17 00:00:00 2001
From: elkers <elkers@163.com>
Date: 星期三, 09 四月 2025 19:21:52 +0800
Subject: [PATCH] 显示数据

---
 src/main/java/com/nanjing/water/service/DataUploadRecordService.java                           |  407 ++++++++++++++++++
 src/main/java/com/nanjing/water/host/controller/CommonParametersController.java                |  128 +++++
 src/main/java/com/nanjing/water/repository/po/DataUploadRecordPO.java                          |   95 ++++
 src/main/java/com/nanjing/water/repository/vo/DataUploadRecordVO.java                          |   54 ++
 src/main/java/com/nanjing/water/repository/mapper/DataUploadRecordMapper.java                  |   10 
 src/main/java/com/nanjing/water/repository/po/CommonParametersPO.java                          |    3 
 src/main/java/com/nanjing/water/entity/request/datauploadrecord/ReqModifyDataUploadRecord.java |   66 +++
 src/main/java/com/nanjing/water/entity/request/datauploadrecord/ReqCreateDataUploadRecord.java |   62 ++
 src/main/java/com/nanjing/water/repository/po/WaterFacilityParameterPO.java                    |   10 
 src/main/resources/application-dev.yml                                                         |    2 
 src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqCreateAlarmHistory.java         |    5 
 src/main/java/com/nanjing/water/host/controller/DataUploadRecordController.java                |  113 +++++
 src/main/java/com/nanjing/water/entity/search/SearchDataUploadRecord.java                      |   14 
 src/main/java/com/nanjing/water/repository/impl/AlarmHistoryMapperImpl.java                    |   11 
 src/main/java/com/nanjing/water/repository/impl/DataUploadRecordMapperImpl.java                |  137 ++++++
 src/main/java/com/nanjing/water/repository/po/AlarmHistoryPO.java                              |    7 
 src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqModifyAlarmHistory.java         |    7 
 src/main/java/com/nanjing/water/host/mqtt/CountVO.java                                         |   12 
 src/main/java/com/nanjing/water/service/AlarmHistoryService.java                               |   12 
 src/main/java/com/nanjing/water/service/convert/DataUploadRecordConvert.java                   |   48 ++
 src/main/java/com/nanjing/water/repository/mapper/AlarmHistoryMapper.java                      |    5 
 src/main/java/com/nanjing/water/host/controller/WaterFacilityParameterController.java          |   10 
 src/main/java/com/nanjing/water/service/WaterFacilityParameterService.java                     |   45 ++
 src/test/java/com/nanjing/water/DateTimeTest.java                                              |    9 
 src/main/java/com/nanjing/water/repository/vo/WaterFacilityVO.java                             |    3 
 25 files changed, 1,238 insertions(+), 37 deletions(-)

diff --git a/src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqCreateAlarmHistory.java b/src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqCreateAlarmHistory.java
index 52d2d92..c37110b 100644
--- a/src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqCreateAlarmHistory.java
+++ b/src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqCreateAlarmHistory.java
@@ -54,10 +54,7 @@
 	 * 是否处理
 	 */
 	private Integer isSolve;
-	/**
-	 * 是否确认(10误报 20已证实,200已处理)
-	 */
-	private Integer isConfirm;
+
 	/**
 	 * 最后报警时间
 	 */
diff --git a/src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqModifyAlarmHistory.java b/src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqModifyAlarmHistory.java
index c2e881b..20f543a 100644
--- a/src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqModifyAlarmHistory.java
+++ b/src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqModifyAlarmHistory.java
@@ -45,7 +45,7 @@
 	/**
 	 * 报警参数
 	 */
-	private Integer code;
+	private String code;
 	/**
 	 * 报警描述
 	 */
@@ -58,10 +58,7 @@
 	 * 是否处理
 	 */
 	private Integer isSolve;
-	/**
-	 * 是否确认(10误报 20已证实,200已处理)
-	 */
-	private Integer isConfirm;
+
 	/**
 	 * 最后报警时间
 	 */
diff --git a/src/main/java/com/nanjing/water/entity/request/datauploadrecord/ReqCreateDataUploadRecord.java b/src/main/java/com/nanjing/water/entity/request/datauploadrecord/ReqCreateDataUploadRecord.java
new file mode 100644
index 0000000..a61d4aa
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/datauploadrecord/ReqCreateDataUploadRecord.java
@@ -0,0 +1,62 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.datauploadrecord;
+
+import lombok.Data;
+import java.math.BigDecimal;
+
+/**
+ * 数据上报记录
+ * @author lin.liu
+ */
+@Data
+public class ReqCreateDataUploadRecord {
+	/**
+	 * 关联设备
+	 */
+	private Long facilityId;
+	/**
+	 * 设备名称
+	 */
+	private String facilityName;
+	/**
+	 * 字段名
+	 */
+	private String columnsCode;
+	/**
+	 * 字段展示
+	 */
+	private String columnsShow;
+	/**
+	 * 字段值
+	 */
+	private BigDecimal columnsValue;
+	/**
+	 * 数据上传时间
+	 */
+	private Long uploadTime;
+	/**
+	 * 数据上传日期
+	 */
+	private String uploadDate;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/datauploadrecord/ReqModifyDataUploadRecord.java b/src/main/java/com/nanjing/water/entity/request/datauploadrecord/ReqModifyDataUploadRecord.java
new file mode 100644
index 0000000..7cac228
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/datauploadrecord/ReqModifyDataUploadRecord.java
@@ -0,0 +1,66 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.datauploadrecord;
+
+import lombok.Data;
+import java.math.BigDecimal;
+
+/**
+ * 数据上报记录
+ * @author lin.liu
+ */
+@Data
+public class ReqModifyDataUploadRecord {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 关联设备
+	 */
+	private Long facilityId;
+	/**
+	 * 设备名称
+	 */
+	private String facilityName;
+	/**
+	 * 字段名
+	 */
+	private String columnsCode;
+	/**
+	 * 字段展示
+	 */
+	private String columnsShow;
+	/**
+	 * 字段值
+	 */
+	private BigDecimal columnsValue;
+	/**
+	 * 数据上传时间
+	 */
+	private Long uploadTime;
+	/**
+	 * 数据上传日期
+	 */
+	private String uploadDate;
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchDataUploadRecord.java b/src/main/java/com/nanjing/water/entity/search/SearchDataUploadRecord.java
new file mode 100644
index 0000000..0171b51
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchDataUploadRecord.java
@@ -0,0 +1,14 @@
+package com.nanjing.water.entity.search;
+
+import lombok.Data;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+
+/**
+ * 数据上报记录
+ * @author lin.liu
+ */
+@Data
+public class SearchDataUploadRecord extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/CommonParametersController.java b/src/main/java/com/nanjing/water/host/controller/CommonParametersController.java
new file mode 100644
index 0000000..f8f5d8b
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/CommonParametersController.java
@@ -0,0 +1,128 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.host.controller;
+
+
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.util.ParameterUtil;
+import com.nanjing.water.common.validator.ParameterValidateResult;
+import com.nanjing.water.common.validator.ParameterValidator;
+import com.nanjing.water.entity.request.commonparameters.ReqCreateCommonParameters;
+import com.nanjing.water.entity.request.commonparameters.ReqModifyCommonParameters;
+import com.nanjing.water.entity.search.SearchCommonParameters;
+import com.nanjing.water.host.BasicController;
+import com.nanjing.water.repository.vo.CommonParametersVO;
+import com.nanjing.water.service.CommonParametersService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 130.公共参数
+ * @author lin.liu
+ * @description 公共参数
+ * @order 130
+ */
+@RestController
+@RequestMapping(value = "commonParameters")
+public class CommonParametersController extends BasicController {
+    @Autowired
+    private CommonParametersService service;
+
+    /**
+     * 创建[公共参数]
+     * @author lin.liu
+     * @description 创建[公共参数]
+     */
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateCommonParameters request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                // 非空
+                .addNotNullOrEmpty(ParameterUtil.named("名称"), request.getName())
+                .addNotNullOrEmpty(ParameterUtil.named("标识"), request.getMark())
+                // 限制最大长度
+                //.addLengthMax(ParameterUtil.named("名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
+                ;
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.create(request);
+    }
+
+    /**
+     * 编辑[公共参数]
+     * @author lin.liu
+     * @description 编辑[公共参数]
+     */
+    @PostMapping(value = "modify")
+    public ExecutedResult<String> modify(@RequestBody ReqModifyCommonParameters 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 this.service.modify(request);
+    }
+
+    /**
+     * 获取[公共参数]
+     * @author lin.liu
+     * @description 获取[公共参数]
+     */
+    @GetMapping(value = "get")
+    public ExecutedResult<CommonParametersVO> get(@RequestParam Long id) {
+        return this.service.get(id);
+    }
+    /**
+     * 删除[公共参数]
+     * @author lin.liu
+     * @description 删除[公共参数]
+     */
+    @GetMapping(value = "remove")
+    public ExecutedResult<String> remove(@RequestParam Long id) {
+        return this.service.remove(id);
+    }
+
+
+    /**
+     * 查询[公共参数]
+     * @author lin.liu
+     * @description 查询[公共参数]
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<CommonParametersVO>> search(@RequestBody SearchCommonParameters request) {
+        return this.service.search(request);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/DataUploadRecordController.java b/src/main/java/com/nanjing/water/host/controller/DataUploadRecordController.java
new file mode 100644
index 0000000..1b126d2
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/DataUploadRecordController.java
@@ -0,0 +1,113 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.host.controller;
+
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.util.ParameterUtil;
+import com.nanjing.water.common.validator.ParameterValidateResult;
+import com.nanjing.water.common.validator.ParameterValidator;
+import com.nanjing.water.entity.request.ReqListId;
+import com.nanjing.water.host.BasicController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import java.util.List;
+import com.nanjing.water.service.DataUploadRecordService;
+import com.nanjing.water.entity.request.datauploadrecord.ReqCreateDataUploadRecord;
+import com.nanjing.water.entity.request.datauploadrecord.ReqModifyDataUploadRecord;
+import com.nanjing.water.entity.search.SearchDataUploadRecord;
+import com.nanjing.water.repository.vo.DataUploadRecordVO;
+
+/**
+ * 9000.数据上报记录
+ * @author lin.liu
+ * @order 9000
+ */
+@RestController
+@RequestMapping(value = "dataUploadRecord")
+public class DataUploadRecordController extends BasicController {
+    @Autowired
+    private DataUploadRecordService service;
+
+    /**
+     * 创建[数据上报记录]
+     * @author lin.liu
+     */
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateDataUploadRecord 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 lin.liu
+     */
+    @PostMapping(value = "modify")
+    public ExecutedResult<String> modify(@RequestBody ReqModifyDataUploadRecord 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 lin.liu
+     */
+    @GetMapping(value = "get/{id}")
+    public ExecutedResult<DataUploadRecordVO> get(@PathVariable Long id) {
+        return service.get(id);
+    }
+
+    /**
+     * 查询[数据上报记录]
+     * @author lin.liu
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<DataUploadRecordVO>> search(@RequestBody SearchDataUploadRecord request) {
+        return service.search(request);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/WaterFacilityParameterController.java b/src/main/java/com/nanjing/water/host/controller/WaterFacilityParameterController.java
index 9323370..2e59d9b 100644
--- a/src/main/java/com/nanjing/water/host/controller/WaterFacilityParameterController.java
+++ b/src/main/java/com/nanjing/water/host/controller/WaterFacilityParameterController.java
@@ -33,6 +33,7 @@
 import com.nanjing.water.host.BasicController;
 import com.nanjing.water.repository.po.WaterFacilityParameterPO;
 import com.nanjing.water.repository.vo.WaterFacilityParameterVO;
+import com.nanjing.water.repository.vo.WaterFacilityVO;
 import com.nanjing.water.service.WaterFacilityParameterService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -126,4 +127,13 @@
     public ExecutedResult<PagerResult<WaterFacilityParameterVO>> search(@RequestBody SearchWaterFacilityParameter request) {
         return this.service.search(request);
     }
+    /**
+     * 获取最新数据
+     * @author lin.liu
+     * @description 查询[设备设定参数]
+     */
+    @PostMapping(value = "getData")
+    public ExecutedResult<List<WaterFacilityVO>> getData() {
+        return this.service.getData();
+    }
 }
diff --git a/src/main/java/com/nanjing/water/host/mqtt/CountVO.java b/src/main/java/com/nanjing/water/host/mqtt/CountVO.java
new file mode 100644
index 0000000..accb623
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/mqtt/CountVO.java
@@ -0,0 +1,12 @@
+package com.nanjing.water.host.mqtt;
+
+import lombok.Data;
+
+@Data
+public class CountVO {
+ private String name;
+
+ private String code;
+
+ private String value;
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/AlarmHistoryMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/AlarmHistoryMapperImpl.java
index 3958153..2537c54 100644
--- a/src/main/java/com/nanjing/water/repository/impl/AlarmHistoryMapperImpl.java
+++ b/src/main/java/com/nanjing/water/repository/impl/AlarmHistoryMapperImpl.java
@@ -135,18 +135,13 @@
 		return super.getList(listId);
 	}
 
+	public Integer deleteList(Long facilityId, String code){
+		return DB.deleteList(facilityId,code);
+	}
 
 	public List<AlarmHistoryPO> getListByTime(Long  beginTime,Long  endTime) {
 		LambdaQueryWrapper<AlarmHistoryPO> queryWrapper = this.query();
 		queryWrapper.between(AlarmHistoryPO::getLastTime,beginTime,endTime);
 		return super.selectList(queryWrapper);
-	}
-	public AlarmHistoryPO getListByFacilityId(Long  facilityId,Integer  code) {
-		LambdaQueryWrapper<AlarmHistoryPO> queryWrapper = this.query();
-		queryWrapper.eq(AlarmHistoryPO::getFacilityId,facilityId);
-		queryWrapper.eq(AlarmHistoryPO::getCode,code);
-		queryWrapper.ne(AlarmHistoryPO::getIsConfirm,30);
-		queryWrapper.ne(AlarmHistoryPO::getIsConfirm,200);
-		return super.selectOne(queryWrapper);
 	}
 }
diff --git a/src/main/java/com/nanjing/water/repository/impl/DataUploadRecordMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/DataUploadRecordMapperImpl.java
new file mode 100644
index 0000000..62accd1
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/DataUploadRecordMapperImpl.java
@@ -0,0 +1,137 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.enums.EYesOrNo;
+import com.nanjing.water.common.util.*;
+import com.nanjing.water.entity.dto.*;
+import com.nanjing.water.entity.enums.*;
+import com.nanjing.water.repository.BasicMapperImpl;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import com.nanjing.water.entity.search.SearchDataUploadRecord;
+import com.nanjing.water.repository.mapper.DataUploadRecordMapper;
+import com.nanjing.water.repository.po.DataUploadRecordPO;
+
+/**
+ * 数据上报记录
+ * @author lin.liu
+ */
+@Repository
+public class DataUploadRecordMapperImpl extends BasicMapperImpl<DataUploadRecordPO, DataUploadRecordMapper> {
+	DataUploadRecordMapperImpl(DataUploadRecordMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<DataUploadRecordPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchDataUploadRecord search = (SearchDataUploadRecord)request;
+		// 查询条件
+		LambdaQueryWrapper<DataUploadRecordPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(DataUploadRecordPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, DataUploadRecordPO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), DataUploadRecordPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, DataUploadRecordPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, DataUploadRecordPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		//if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+		//	queryWrapper.and(q ->
+		//		q.like(DataUploadRecordPO::getName, search.getKeywords())
+		//		.or().like(DataUploadRecordPO::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(DataUploadRecordPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(DataUploadRecordPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(DataUploadRecordPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(DataUploadRecordPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(DataUploadRecordPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(DataUploadRecordPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(DataUploadRecordPO::getId);
+		}
+		Page<DataUploadRecordPO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(DataUploadRecordPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public Boolean addNotIncrement(DataUploadRecordPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public DataUploadRecordPO getById(Long id) {
+		return super.get(id);
+	}
+
+	public List<DataUploadRecordPO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/AlarmHistoryMapper.java b/src/main/java/com/nanjing/water/repository/mapper/AlarmHistoryMapper.java
index bb0f0c2..0d7ee9f 100644
--- a/src/main/java/com/nanjing/water/repository/mapper/AlarmHistoryMapper.java
+++ b/src/main/java/com/nanjing/water/repository/mapper/AlarmHistoryMapper.java
@@ -2,10 +2,15 @@
 
 import com.nanjing.water.repository.BasicMapper;
 import com.nanjing.water.repository.po.AlarmHistoryPO;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Select;
 
 /**
  * 报警信息 mapper
  * @author lin.liu
  */
 public interface AlarmHistoryMapper extends BasicMapper<AlarmHistoryPO> {
+
+    @Delete("DELETE FROM alarm_history where facility_id=#{facilityId} and code=#{code}")
+    Integer deleteList(Long facilityId, String code);
 }
diff --git a/src/main/java/com/nanjing/water/repository/mapper/DataUploadRecordMapper.java b/src/main/java/com/nanjing/water/repository/mapper/DataUploadRecordMapper.java
new file mode 100644
index 0000000..1833422
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/DataUploadRecordMapper.java
@@ -0,0 +1,10 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;import com.nanjing.water.repository.po.DataUploadRecordPO;
+
+/**
+ * 数据上报记录 mapper
+ * @author lin.liu
+ */
+public interface DataUploadRecordMapper extends BasicMapper<DataUploadRecordPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/AlarmHistoryPO.java b/src/main/java/com/nanjing/water/repository/po/AlarmHistoryPO.java
index 53cc88b..ec9ae63 100644
--- a/src/main/java/com/nanjing/water/repository/po/AlarmHistoryPO.java
+++ b/src/main/java/com/nanjing/water/repository/po/AlarmHistoryPO.java
@@ -55,7 +55,7 @@
 	 * 报警参数
 	 */
 	@TableField(value = "code")
-	private Integer code;
+	private String code;
 	/**
 	 * 报警描述
 	 */
@@ -71,11 +71,6 @@
 	 */
 	@TableField(value = "is_solve")
 	private Integer isSolve;
-	/**
-	 * 是否确认(10误报 20已证实,200已处理)
-	 */
-	@TableField(value = "is_confirm")
-	private Integer isConfirm;
 	/**
 	 * 是否删除
 	 */
diff --git a/src/main/java/com/nanjing/water/repository/po/CommonParametersPO.java b/src/main/java/com/nanjing/water/repository/po/CommonParametersPO.java
index bba05cd..bf2115b 100644
--- a/src/main/java/com/nanjing/water/repository/po/CommonParametersPO.java
+++ b/src/main/java/com/nanjing/water/repository/po/CommonParametersPO.java
@@ -77,4 +77,7 @@
 	@TableLogic
 	@TableField(value = "is_delete")
 	private Integer isDelete;
+
+	@TableField(value = "parameter_type")
+	private Integer parameterType;
 }
diff --git a/src/main/java/com/nanjing/water/repository/po/DataUploadRecordPO.java b/src/main/java/com/nanjing/water/repository/po/DataUploadRecordPO.java
new file mode 100644
index 0000000..ca001e9
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/DataUploadRecordPO.java
@@ -0,0 +1,95 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import lombok.Data;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.math.BigDecimal;
+
+/**
+ * 数据上报记录
+ * @author lin.liu
+ */
+@Data
+@TableName("data_upload_record")
+public class DataUploadRecordPO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 关联设备
+	 */
+	@TableField(value = "facility_id")
+	private Long facilityId;
+	/**
+	 * 设备名称
+	 */
+	@TableField(value = "facility_name")
+	private String facilityName;
+	/**
+	 * 字段名
+	 */
+	@TableField(value = "columns_code")
+	private String columnsCode;
+	/**
+	 * 字段展示
+	 */
+	@TableField(value = "columns_show")
+	private String columnsShow;
+	/**
+	 * 字段值
+	 */
+	@TableField(value = "columns_value")
+	private BigDecimal columnsValue;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 数据更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 数据上传时间
+	 */
+	@TableField(value = "upload_time")
+	private Long uploadTime;
+	/**
+	 * 数据上传日期
+	 */
+	@TableField(value = "upload_date")
+	private String uploadDate;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/WaterFacilityParameterPO.java b/src/main/java/com/nanjing/water/repository/po/WaterFacilityParameterPO.java
index 9eecc71..225a822 100644
--- a/src/main/java/com/nanjing/water/repository/po/WaterFacilityParameterPO.java
+++ b/src/main/java/com/nanjing/water/repository/po/WaterFacilityParameterPO.java
@@ -92,4 +92,14 @@
 	 */
 	@TableField(value = "last_time")
 	private String lastTime;
+	/**
+	 * 排序
+	 */
+	@TableField(value = "sort")
+	private Integer sort;
+	/**
+	 * 绑定参数类型(1环境参数 2运行参数)
+	 */
+	@TableField(value = "parameter_type")
+	private Integer parameterType;
 }
diff --git a/src/main/java/com/nanjing/water/repository/vo/DataUploadRecordVO.java b/src/main/java/com/nanjing/water/repository/vo/DataUploadRecordVO.java
new file mode 100644
index 0000000..bfd48b2
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/DataUploadRecordVO.java
@@ -0,0 +1,54 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import lombok.Data;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import java.util.Objects;
+import com.nanjing.water.repository.po.DataUploadRecordPO;
+
+/**
+ * 数据上报记录
+ * @author lin.liu
+ */
+@Data
+public class DataUploadRecordVO extends DataUploadRecordPO 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/nanjing/water/repository/vo/WaterFacilityVO.java b/src/main/java/com/nanjing/water/repository/vo/WaterFacilityVO.java
index 1d0ce24..4f5b401 100644
--- a/src/main/java/com/nanjing/water/repository/vo/WaterFacilityVO.java
+++ b/src/main/java/com/nanjing/water/repository/vo/WaterFacilityVO.java
@@ -27,6 +27,8 @@
 import com.nanjing.water.repository.po.WaterFacilityPO;
 import lombok.Data;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -37,6 +39,7 @@
 public class WaterFacilityVO extends WaterFacilityPO implements BasicVO {
     private String pointName;
     private String facilityTypeName;
+    private List<WaterFacilityParameterVO> parameterVOList;
 
     @Override
     public String getCreateTimeView() {
diff --git a/src/main/java/com/nanjing/water/service/AlarmHistoryService.java b/src/main/java/com/nanjing/water/service/AlarmHistoryService.java
index 5a74497..4a2324b 100644
--- a/src/main/java/com/nanjing/water/service/AlarmHistoryService.java
+++ b/src/main/java/com/nanjing/water/service/AlarmHistoryService.java
@@ -55,15 +55,7 @@
 
     public ExecutedResult<String> create(ReqCreateAlarmHistory request) {
         //查询报警记录是否存在
-        AlarmHistoryPO historyPO = mapper.getListByFacilityId(request.getFacilityId(), request.getCode());
-        if(Objects.nonNull(historyPO)){
-            historyPO.setTotalCount(historyPO.getTotalCount()+1);
-            historyPO.setLastTime(LocalDateTimeUtil.nowTimeStamp());
-            int i = mapper.updateById(historyPO);
-            if (i != 1) {
-                return ExecutedResult.failed("创建[报警信息]失败。");
-            }
-        }else {
+
             // 转换po
             AlarmHistoryPO item = AlarmHistoryConvert.INSTANCE.toCreate(request);
             // 设置记录创建时间
@@ -75,7 +67,6 @@
             if (rowCount != 1) {
                 return ExecutedResult.failed("创建[报警信息]失败。");
             }
-        }
 
         return ExecutedResult.success();
     }
@@ -102,7 +93,6 @@
             return ExecutedResult.failed(checkExists.getMsg());
         }
         AlarmHistoryPO data = checkExists.getData();
-        data.setIsConfirm(status);
         int i = mapper.updateById(data);
         if(i!=1){
             return ExecutedResult.failed("编辑[报警信息]失败。");
diff --git a/src/main/java/com/nanjing/water/service/DataUploadRecordService.java b/src/main/java/com/nanjing/water/service/DataUploadRecordService.java
new file mode 100644
index 0000000..7e5e689
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/DataUploadRecordService.java
@@ -0,0 +1,407 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+import com.baomidou.mybatisplus.core.toolkit.Sequence;
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.reflect.TypeToken;
+import com.nanjing.water.common.*;
+import com.nanjing.water.common.enums.*;
+import com.nanjing.water.common.model.Tuple;
+import com.nanjing.water.common.util.*;
+import com.nanjing.water.host.mqtt.CountVO;
+import com.nanjing.water.repository.impl.*;
+import com.nanjing.water.repository.po.*;
+import org.apache.commons.lang3.BooleanUtils;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.lang.reflect.Type;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import com.nanjing.water.entity.request.datauploadrecord.ReqCreateDataUploadRecord;
+import com.nanjing.water.entity.request.datauploadrecord.ReqModifyDataUploadRecord;
+import com.nanjing.water.entity.search.SearchDataUploadRecord;
+import com.nanjing.water.repository.vo.DataUploadRecordVO;
+import com.nanjing.water.service.convert.DataUploadRecordConvert;
+
+/**
+ * 数据上报记录
+ * @author lin.liu
+ */
+@Service
+public class DataUploadRecordService extends BaseService {
+    private static final Logger ERROR_LOGGER = LoggerUtil.get(ELogger.SYS_ERROR);
+    @Autowired
+    private DataUploadRecordMapperImpl mapper;
+    @Autowired
+    private WaterFacilityMapperImpl waterFacilityMapper;
+    @Autowired
+    private WaterFacilityParameterMapperImpl waterFacilityParameterMapper;
+    @Autowired
+    private WaterMonitoryPointMapperImpl waterMonitoryPointMapper;
+    @Autowired
+    private AlarmHistoryMapperImpl alarmHistoryMapper;
+
+    public ExecutedResult<Long> create(ReqCreateDataUploadRecord request) {
+        // 转换po
+        DataUploadRecordPO item = DataUploadRecordConvert.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());
+    }
+
+    public ExecutedResult<String> modify(ReqModifyDataUploadRecord request) {
+        // 验证记录是否存在
+        ExecutedResult<DataUploadRecordPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        DataUploadRecordPO item = DataUploadRecordConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[数据上报记录]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<DataUploadRecordVO> get(Long id) {
+        DataUploadRecordVO result = new DataUploadRecordVO();
+
+        DataUploadRecordPO find = mapper.get(id);
+        if (null != find) {
+            // 转换vo
+            result = DataUploadRecordConvert.INSTANCE.toVo(find);
+        }
+        return ExecutedResult.success(result);
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<DataUploadRecordPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        DataUploadRecordPO item = new DataUploadRecordPO();
+//        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<DataUploadRecordPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        DataUploadRecordPO item = new DataUploadRecordPO();
+//        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<DataUploadRecordPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        DataUploadRecordPO item = new DataUploadRecordPO();
+//        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<DataUploadRecordPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<DataUploadRecordPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    DataUploadRecordPO item = new DataUploadRecordPO();
+//                    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<DataUploadRecordVO>> getList(List<Long> listId) {
+        List<DataUploadRecordVO> result = new ArrayList<>();
+
+        List<DataUploadRecordPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 转换vo
+            result = DataUploadRecordConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<DataUploadRecordVO>> search(SearchDataUploadRecord 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<DataUploadRecordPO> pageList = mapper.search(search);
+        List<DataUploadRecordVO> listVo = new ArrayList<>();
+        List<DataUploadRecordPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = DataUploadRecordConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<DataUploadRecordVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<DataUploadRecordPO> check4Id(Long id) {
+        DataUploadRecordPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[数据上报记录]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<DataUploadRecordPO>> check4Id(List<Long> listId) {
+        // 从数据库查找数据上报记录
+        List<DataUploadRecordPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[数据上报记录]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(DataUploadRecordPO::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);
+    }
+    /**
+     * mqtt收到消息
+     * @param topic 主题
+     * @param msg 消息内容
+     */
+    public void mqttReceived(String topic, String msg) {
+        String action = "mqtt收到消息";
+        if (StringUtil.isNullOrEmpty(topic)) {
+            ERROR_LOGGER.error(action, "主题不能为空");
+            return;
+        }
+        if (StringUtil.isNullOrEmpty(msg)) {
+            ERROR_LOGGER.error(action, "消息不能为空");
+            return;
+        }
+        Gson gson = new Gson();
+        JsonObject object = gson.fromJson(msg, JsonObject.class);
+        String asJsonObject = object.get("time").getAsString();
+        Type listType = new TypeToken<List<CountVO>>() {
+        }.getType();
+        //获取data数据
+        JsonArray data = object.getAsJsonArray("Data");
+        List<CountVO> listVo = gson.fromJson(data, listType);
+        for(CountVO vo:listVo){
+            String[] split = vo.getName().split("-");
+            vo.setName(split[0]);
+            vo.setCode(split[1]);
+        }
+        List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
+        List<WaterFacilityParameterPO> parameterPOList = waterFacilityParameterMapper.getList();
+       // List<AlarmHistoryPO> historyPOList = alarmHistoryMapper.getList();
+        //根据设备编号分组
+        Map<String, List<CountVO>> collect = listVo.stream().collect(Collectors.groupingBy(CountVO::getName));
+        for (Map.Entry<String, List<CountVO>> entry : collect.entrySet()) {
+            //获取设备信息
+            WaterFacilityPO facilityPO = facilityPOList.stream().filter(x -> x.getFacilityCode().equals(entry.getKey())).findFirst().orElse(null);
+            //获取设备所属监控点
+            List<WaterFacilityParameterPO>parameterList=new ArrayList<>();
+            //循环上报数据
+            for(CountVO vo:entry.getValue()){
+                //保存数据
+                WaterFacilityParameterPO parameterPO1 = parameterPOList.stream().filter(item -> item.getFacilityId().equals(facilityPO.getId()) && item.getColumnsCode().equals(vo.getCode())).findFirst().orElse(null);
+                if(Objects.nonNull(parameterPO1)){
+                    parameterPO1.setColumnValue(vo.getValue());
+                    parameterPO1.setLastTime(asJsonObject);
+                    parameterList.add(parameterPO1);
+                }
+                //判断报警
+              //  AlarmHistoryPO alarmHistoryPO=null;
+//                if(ListUtil.isNotNullOrEmpty(historyPOList)){
+//                 alarmHistoryPO = historyPOList.stream().filter(item -> item.getFacilityId().equals(parameterPO1.getFacilityId()) && item.getCode().equals(parameterPO1.getColumnsCode()) && item.getIsSolve() == 0).findFirst().orElse(null);
+//                }
+                switch (vo.getCode()){
+                    case "QF1":
+                        //1号空开吸合关闭报警
+                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue() );
+                        break;
+                    case "QF2":
+                        //2号空开吸合关闭报警
+                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue());
+                        break;
+                    case "QF3":
+                        //3号空开吸合关闭报警
+                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue());
+                        break;
+                    case "QF4":
+                        //4号空开吸合关闭报警
+                        QFCreateAlarm(facilityPO,parameterPO1, vo.getValue());
+                        break;
+                    case "B001Fault":
+                        //1号泵综合故障
+                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue());
+                        break;
+                    case "B002Fault":
+                        //2号泵综合故障
+                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue());
+                        break;
+                    case "SQ":
+                        //水侵报警
+                        SQFaultCreateAlarm(facilityPO,parameterPO1, vo.getValue());
+                        break;
+                    case "H1001Fault":
+                        //高水位报警
+                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue());
+                        break;
+                    case "L1001Fault":
+                        //低水位报警
+                        faultCreateAlarm(facilityPO,parameterPO1, vo.getValue());
+                        break;
+                }
+            }
+            waterFacilityParameterMapper.updateById(parameterList);
+
+        }
+    }
+
+     public void QFCreateAlarm(WaterFacilityPO facilityPO,WaterFacilityParameterPO parameterPO,String value){
+        if(value.equals("false")){
+                alarmHistoryMapper.deleteList(parameterPO.getFacilityId(),parameterPO.getColumnsCode());
+                AlarmHistoryPO alarmHistoryPO=new AlarmHistoryPO();
+                alarmHistoryPO.setFacilityId(facilityPO.getId());
+                alarmHistoryPO.setFacilityName(facilityPO.getFacilityName());
+                alarmHistoryPO.setCode(parameterPO.getColumnsCode());
+                alarmHistoryPO.setDescription(parameterPO.getColumnsShow()+"关闭");
+                alarmHistoryPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
+                alarmHistoryPO.setLastTime(LocalDateTimeUtil.nowTimeStamp());
+                alarmHistoryMapper.insert(alarmHistoryPO);
+
+
+        }
+     }
+    public void faultCreateAlarm(WaterFacilityPO facilityPO,WaterFacilityParameterPO parameterPO,String value){
+        if(value.equals("true")){
+            alarmHistoryMapper.deleteList(parameterPO.getFacilityId(),parameterPO.getColumnsCode());
+            AlarmHistoryPO alarmHistoryPO=new AlarmHistoryPO();
+            alarmHistoryPO.setFacilityId(facilityPO.getId());
+            alarmHistoryPO.setFacilityName(facilityPO.getFacilityName());
+            alarmHistoryPO.setCode(parameterPO.getColumnsCode());
+            alarmHistoryPO.setDescription(parameterPO.getColumnsShow()+"关闭");
+            alarmHistoryPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
+            alarmHistoryPO.setLastTime(LocalDateTimeUtil.nowTimeStamp());
+            alarmHistoryMapper.insert(alarmHistoryPO);
+
+
+        }
+    }
+    public void SQFaultCreateAlarm(WaterFacilityPO facilityPO,WaterFacilityParameterPO parameterPO,String value){
+        if(value.equals("1")){
+            alarmHistoryMapper.deleteList(parameterPO.getFacilityId(),parameterPO.getColumnsCode());
+            AlarmHistoryPO alarmHistoryPO=new AlarmHistoryPO();
+            alarmHistoryPO.setFacilityId(facilityPO.getId());
+            alarmHistoryPO.setFacilityName(facilityPO.getFacilityName());
+            alarmHistoryPO.setCode(parameterPO.getColumnsCode());
+            alarmHistoryPO.setDescription(parameterPO.getColumnsShow()+"关闭");
+            alarmHistoryPO.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
+            alarmHistoryPO.setLastTime(LocalDateTimeUtil.nowTimeStamp());
+            alarmHistoryMapper.insert(alarmHistoryPO);
+
+
+        }
+    }
+}
diff --git a/src/main/java/com/nanjing/water/service/WaterFacilityParameterService.java b/src/main/java/com/nanjing/water/service/WaterFacilityParameterService.java
index b95bd5c..06ca0df 100644
--- a/src/main/java/com/nanjing/water/service/WaterFacilityParameterService.java
+++ b/src/main/java/com/nanjing/water/service/WaterFacilityParameterService.java
@@ -36,9 +36,12 @@
 import com.nanjing.water.repository.po.WaterFacilityPO;
 import com.nanjing.water.repository.po.WaterFacilityParameterPO;
 import com.nanjing.water.repository.vo.WaterFacilityParameterVO;
+import com.nanjing.water.repository.vo.WaterFacilityVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -253,7 +256,49 @@
         result.setLastId(pageList.getLastId());
         return ExecutedResult.success(result);
     }
+    public ExecutedResult<List<WaterFacilityVO>> getData(){
+        List<WaterFacilityVO>result=new ArrayList<>();
+        //获取泵房数据
+        List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
+        //获取泵房设备参数
+        List<WaterFacilityParameterPO> parameterPOList = mapper.getList();
+        if(ListUtil.isNotNullOrEmpty(facilityPOList)){
+            result = CopierUtil.mapTo(facilityPOList, WaterFacilityVO.class);
+            for(WaterFacilityVO facilityVO:result){
+                List<WaterFacilityParameterPO> collect = parameterPOList.stream().filter(x -> x.getFacilityId().equals(facilityVO.getId())).collect(Collectors.toList());
+                if(ListUtil.isNotNullOrEmpty(collect)){
+                    List<WaterFacilityParameterVO>parameterVOList=CopierUtil.mapTo(collect, WaterFacilityParameterVO.class);
+                    for(WaterFacilityParameterVO parameterVO:parameterVOList){
+                        boolean matches = parameterVO.getColumnValue().matches("-?\\d+(\\.\\d+)?");
+                        if (matches) {
+                            BigDecimal value = new BigDecimal(parameterVO.getColumnValue()).setScale(3, BigDecimal.ROUND_DOWN);
+                            parameterVO.setColumnValue(value.toString());
+                        }
+                        if("false".equals(parameterVO.getColumnValue())){
+                            parameterVO.setColumnValue("关");
+                        }
+                        if("true".equals(parameterVO.getColumnValue())){
+                            parameterVO.setColumnValue("开");
+                        }
+//                        if(parameterVO.getColumnsCode().equals("B001Time")||parameterVO.getColumnsCode().equals("B002Time")){
+//                            BigDecimal bigDecimal=new BigDecimal(parameterVO.getColumnValue()).setScale(2,RoundingMode.DOWN);
+//                            if(bigDecimal.compareTo(new BigDecimal(60).setScale(2,RoundingMode.DOWN))>0){
+//                                BigDecimal data = bigDecimal.divide(new BigDecimal(60),2,BigDecimal.ROUND_HALF_UP);
+//                                parameterVO.setColumnValue(data+"分");
+//                            }
+//                            if(bigDecimal.compareTo(new BigDecimal(3600))>0){
+//                                BigDecimal data = bigDecimal.divide(new BigDecimal(3600),2,BigDecimal.ROUND_HALF_UP);
+//                                parameterVO.setColumnValue(data+"时");
+//                            }
+//                        }
+                    }
+                    facilityVO.setParameterVOList(parameterVOList);
+                }
 
+            }
+        }
+        return ExecutedResult.success(result);
+    }
     protected ExecutedResult<WaterFacilityParameterPO> check4Id(Long id) {
         WaterFacilityParameterPO exists = mapper.get(id);
         if (Objects.isNull(exists)) {
diff --git a/src/main/java/com/nanjing/water/service/convert/DataUploadRecordConvert.java b/src/main/java/com/nanjing/water/service/convert/DataUploadRecordConvert.java
new file mode 100644
index 0000000..4f4d72b
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/DataUploadRecordConvert.java
@@ -0,0 +1,48 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.datauploadrecord.ReqCreateDataUploadRecord;
+import com.nanjing.water.entity.request.datauploadrecord.ReqModifyDataUploadRecord;
+import com.nanjing.water.repository.po.DataUploadRecordPO;
+import com.nanjing.water.repository.vo.DataUploadRecordVO;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 数据上报记录
+ * @author {#=author}
+ */
+@Mapper
+public interface DataUploadRecordConvert {
+    DataUploadRecordConvert INSTANCE = Mappers.getMapper(DataUploadRecordConvert.class);
+
+    DataUploadRecordPO toCreate(ReqCreateDataUploadRecord request);
+    DataUploadRecordPO toModify(ReqModifyDataUploadRecord request);
+
+    DataUploadRecordVO toVo(DataUploadRecordPO item);
+    List<DataUploadRecordVO> toVo(List<DataUploadRecordPO> list);
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 21bf1f3..a7ee327 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -6,7 +6,7 @@
     date-format: yyyy-MM-dd HH:mm:ss
   datasource:
     driver-class-name: org.postgresql.Driver
-    url: jdbc:postgresql://113.250.189.120:57654/test_db1
+    url: jdbc:postgresql://113.250.189.120:57654/nanjing_water_system
     username: lunhan
     password: lunhan.20240330
     druid:
diff --git a/src/test/java/com/nanjing/water/DateTimeTest.java b/src/test/java/com/nanjing/water/DateTimeTest.java
index da891cd..07d51b2 100644
--- a/src/test/java/com/nanjing/water/DateTimeTest.java
+++ b/src/test/java/com/nanjing/water/DateTimeTest.java
@@ -5,11 +5,16 @@
 import org.junit.runner.RunWith;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
 @RunWith(SpringJUnit4ClassRunner.class)
 public class DateTimeTest {
     @Test
     public void time2BCDTest() {
-        String timeStr = LocalDateTimeUtil.nowTimeBCD("yyMMddHHmmss");
-        System.out.println(timeStr);
+        BigDecimal a=BigDecimal.valueOf(80);
+        BigDecimal b = BigDecimal.valueOf(60);
+        BigDecimal bigDecimal = a.divide(b,2,BigDecimal.ROUND_HALF_UP);
+        System.out.println(bigDecimal);
     }
 }

--
Gitblit v1.9.3