From 2dba8dbb14af4616eec876fd9af744651e8beeda Mon Sep 17 00:00:00 2001
From: elkers <elkers@163.com>
Date: 星期一, 07 四月 2025 14:28:24 +0800
Subject: [PATCH] 初始化项目

---
 src/main/java/com/nanjing/water/entity/search/SearchAdminRole.java                                                   |   13 
 src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqModifyWaterFacilityParameter.java           |   59 
 src/main/java/com/nanjing/water/host/controller/WaterFacilityTypeController.java                                     |  125 
 src/main/java/com/nanjing/water/host/mqtt/MQTTServer.java                                                            |   94 
 src/test/java/com/nanjing/water/GenCodeGauss.java                                                                    |   32 
 src/main/java/com/nanjing/water/entity/search/SearchSysRegion.java                                                   |   13 
 src/main/java/com/nanjing/water/host/controller/admin/AdminMenuController.java                                       |  273 
 src/main/java/com/nanjing/water/entity/request/sysregion/ReqModifySysRegion.java                                     |  186 
 src/main/java/com/nanjing/water/service/convert/AdminRolePermissionRelationConvert.java                              |   47 
 src/main/java/com/nanjing/water/entity/response/statistics/ResStatistics4DateAndType.java                            |   18 
 src/main/java/com/nanjing/water/repository/impl/WaterFacilityTypeMapperImpl.java                                     |  142 
 src/main/java/com/nanjing/water/entity/response/admin/ResAdminMenuTree.java                                          |   50 
 src/main/java/com/nanjing/water/repository/po/WaterFacilityParameterPO.java                                          |   95 
 src/main/java/com/nanjing/water/entity/request/sysregion/ReqCreateSysRegion.java                                     |  175 
 src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqCreateAlarmHistory.java                               |   69 
 src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqSetListMenu4Role.java                        |   24 
 src/main/java/com/nanjing/water/repository/mapper/AlarmSchemeMapper.java                                             |   11 
 src/main/java/com/nanjing/water/entity/request/waterfacilitytype/ReqModifyWaterFacilityType.java                     |   64 
 src/main/java/com/nanjing/water/repository/vo/AdminRoleRelationVO.java                                               |   54 
 src/main/java/com/nanjing/water/repository/mapper/WaterFacilityMapper.java                                           |   14 
 src/main/java/com/nanjing/water/repository/mapper/AdminMenuMapper.java                                               |   11 
 src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqModifyAdminRoleMenuRelation.java             |   46 
 src/main/java/com/nanjing/water/repository/impl/AdminMenuMapperImpl.java                                             |  130 
 src/main/java/com/nanjing/water/service/SysDictTypeService.java                                                      |  323 +
 src/main/java/com/nanjing/water/repository/vo/WaterFacilityVO.java                                                   |   56 
 src/main/java/com/nanjing/water/repository/impl/SysDictTypeMapperImpl.java                                           |  150 
 src/main/java/com/nanjing/water/repository/impl/AdminMenusMapperImpl.java                                            |  137 
 src/main/java/com/nanjing/water/repository/vo/SysRegionVO.java                                                       |   54 
 src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointData.java                                      |   12 
 src/main/java/com/nanjing/water/host/mqtt/MQTTConnect.java                                                           |   36 
 src/main/java/com/nanjing/water/service/AdminRolePermissionRelationService.java                                      |  246 
 src/main/java/com/nanjing/water/entity/search/SearchAdminMenu.java                                                   |   13 
 src/main/java/com/nanjing/water/entity/request/adminmenu/ReqModifyAdminMenu.java                                     |  141 
 pom.xml                                                                                                              |   17 
 src/main/java/com/nanjing/water/entity/request/adminuser/ReqCreateAdminUser.java                                     |   62 
 src/main/java/com/nanjing/water/repository/impl/WaterFacilityParameterMapperImpl.java                                |  151 
 src/main/java/com/nanjing/water/service/convert/AdminRoleMenuRelationConvert.java                                    |   47 
 src/main/java/com/nanjing/water/service/dto/StatisticsTodayDto.java                                                  |   60 
 src/main/java/com/nanjing/water/repository/vo/SysDictTypeVO.java                                                     |   54 
 src/main/java/com/nanjing/water/entity/search/SearchWaterFacilityType.java                                           |   13 
 src/main/java/com/nanjing/water/repository/po/CommonParametersPO.java                                                |   80 
 src/main/java/com/nanjing/water/repository/po/AdminMenusPO.java                                                      |  100 
 src/main/java/com/nanjing/water/entity/search/SearchWaterMonitoryPoint.java                                          |   13 
 src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqAddParameter.java                           |   18 
 src/main/java/com/nanjing/water/common/config/MqttConfig.java                                                        |   61 
 src/main/java/com/nanjing/water/service/WaterFacilityTypeService.java                                                |  274 
 src/main/java/com/nanjing/water/host/controller/base/SysDictTypeController.java                                      |  143 
 src/main/java/com/nanjing/water/repository/vo/AdminRoleVO.java                                                       |   53 
 src/main/java/com/nanjing/water/repository/po/AdminUserPO.java                                                       |  105 
 src/main/java/com/nanjing/water/entity/request/waterfacility/ReqModifyWaterFacility.java                             |   85 
 src/main/java/com/nanjing/water/host/controller/base/SysRegionController.java                                        |  160 
 src/main/java/com/nanjing/water/repository/impl/AdminRolePermissionRelationMapperImpl.java                           |  144 
 src/main/java/com/nanjing/water/entity/request/adminrolepermissionrelation/ReqCreateAdminRolePermissionRelation.java |   53 
 src/main/java/com/nanjing/water/repository/impl/AdminUserMapperImpl.java                                             |  134 
 src/main/java/com/nanjing/water/service/WaterMonitoryPointService.java                                               |  261 
 src/main/java/com/nanjing/water/entity/search/SearchWaterFacility.java                                               |   13 
 src/main/java/com/nanjing/water/service/WaterFacilityParameterService.java                                           |  284 
 src/main/java/com/nanjing/water/entity/request/waterfacility/ReqEditWaterFacility.java                               |   45 
 src/main/java/com/nanjing/water/repository/impl/AdminRoleRelationMapperImpl.java                                     |  144 
 src/main/resources/application.yml                                                                                   |    4 
 src/main/java/com/nanjing/water/repository/po/WaterFacilityTypePO.java                                               |   70 
 src/main/java/com/nanjing/water/service/convert/CommonParametersConvert.java                                         |   47 
 src/main/java/com/nanjing/water/service/convert/AlarmSchemeConvert.java                                              |   47 
 src/main/java/com/nanjing/water/service/cache/AdminMenuService.java                                                  |   74 
 src/main/java/com/nanjing/water/repository/impl/AdminRoleMapperImpl.java                                             |  117 
 src/main/java/com/nanjing/water/host/controller/admin/AdminUserController.java                                       |  294 
 src/main/java/com/nanjing/water/repository/vo/CommonParametersVO.java                                                |   54 
 src/main/java/com/nanjing/water/repository/po/SysRegionPO.java                                                       |  126 
 src/main/java/com/nanjing/water/repository/vo/AdminRoleMenuRelationVO.java                                           |   54 
 src/main/java/com/nanjing/water/repository/po/WaterFacilityPO.java                                                   |  143 
 src/main/java/com/nanjing/water/repository/impl/SysDictDataMapperImpl.java                                           |  187 
 src/main/java/com/nanjing/water/repository/mapper/SysRegionMapper.java                                               |   11 
 src/main/java/com/nanjing/water/entity/request/adminrole/ReqCreateAdminRole.java                                     |   64 
 src/main/java/com/nanjing/water/service/convert/AdminMenuConvert.java                                                |   50 
 src/main/java/com/nanjing/water/repository/vo/SysDictDataVO.java                                                     |   58 
 src/main/java/com/nanjing/water/service/AdminRoleService.java                                                        |  246 
 src/main/java/com/nanjing/water/entity/request/sysdicttype/ReqCreateSysDictType.java                                 |   64 
 src/main/java/com/nanjing/water/service/convert/AlarmHistoryConvert.java                                             |   47 
 src/main/java/com/nanjing/water/repository/po/AlarmHistoryPO.java                                                    |  105 
 src/main/java/com/nanjing/water/entity/request/alarmscheme/ReqModifyAlarmScheme.java                                 |   63 
 src/main/java/com/nanjing/water/entity/enums/EOperation.java                                                         |   98 
 src/main/java/com/nanjing/water/service/AdminUserService.java                                                        |  246 
 src/main/java/com/nanjing/water/repository/mapper/AlarmHistoryMapper.java                                            |   11 
 src/main/java/com/nanjing/water/service/CommonParametersService.java                                                 |  290 
 src/main/java/com/nanjing/water/service/convert/AdminUserConvert.java                                                |   50 
 src/main/java/com/nanjing/water/repository/mapper/AdminPermissionMapper.java                                         |   11 
 src/main/java/com/nanjing/water/entity/response/region/ResRegionTree.java                                            |   45 
 src/main/java/com/nanjing/water/entity/request/alarmscheme/ReqCreateAlarmScheme.java                                 |   59 
 src/main/java/com/nanjing/water/repository/impl/AlarmSchemeMapperImpl.java                                           |  144 
 src/main/java/com/nanjing/water/entity/request/adminuser/ReqAdminLogin.java                                          |   30 
 src/main/java/com/nanjing/water/service/convert/AdminPermissionConvert.java                                          |   50 
 src/main/java/com/nanjing/water/repository/mapper/AdminRoleMapper.java                                               |   11 
 src/main/java/com/nanjing/water/service/QuartzTaskErrorService.java                                                  |  246 
 src/main/java/com/nanjing/water/entity/request/adminuser/ReqModifyAdminUser.java                                     |   62 
 src/main/java/com/nanjing/water/repository/mapper/WaterFacilityTypeMapper.java                                       |   11 
 src/main/java/com/nanjing/water/service/SysDictDataService.java                                                      |  390 +
 src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqCreateAdminRoleMenuRelation.java             |   42 
 src/main/java/com/nanjing/water/entity/request/waterfacilitytype/ReqCreateWaterFacilityType.java                     |   53 
 src/main/java/com/nanjing/water/host/controller/admin/AdminPermissionController.java                                 |  120 
 src/main/java/com/nanjing/water/entity/search/SearchCommonParameters.java                                            |   13 
 src/main/java/com/nanjing/water/entity/response/region/ResBasicRegionTree.java                                       |  127 
 src/main/java/com/nanjing/water/service/QuartzTaskInfoService.java                                                   |  246 
 src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqPointAndParameter.java                      |   17 
 src/main/java/com/nanjing/water/repository/vo/AlarmHistoryVO.java                                                    |   61 
 src/main/java/com/nanjing/water/entity/search/SearchAlarmScheme.java                                                 |   13 
 src/main/java/com/nanjing/water/service/convert/AdminRoleRelationConvert.java                                        |   47 
 src/main/java/com/nanjing/water/repository/mapper/WaterFacilityParameterMapper.java                                  |   12 
 src/main/java/com/nanjing/water/repository/vo/AdminUserVO.java                                                       |   54 
 src/main/java/com/nanjing/water/entity/search/SearchAdminPermission.java                                             |   13 
 src/main/java/com/nanjing/water/entity/request/sysdicttype/ReqModifySysDictType.java                                 |   86 
 src/main/java/com/nanjing/water/host/controller/WaterMonitoryPointController.java                                    |  131 
 src/main/java/com/nanjing/water/entity/search/SearchAlarmHistory.java                                                |   13 
 src/main/java/com/nanjing/water/repository/po/AdminRoleMenuRelationPO.java                                           |   70 
 src/main/java/com/nanjing/water/service/AdminRoleMenuRelationService.java                                            |  246 
 src/main/java/com/nanjing/water/entity/search/SearchWaterFacilityParameter.java                                      |   13 
 src/main/java/com/nanjing/water/repository/po/AdminRolePO.java                                                       |   80 
 src/main/java/com/nanjing/water/service/WaterFacilityService.java                                                    |  238 
 src/main/java/com/nanjing/water/service/cache/AdminPermissionService.java                                            |  142 
 src/main/java/com/nanjing/water/service/SysRegionService.java                                                        |  258 
 src/main/java/com/nanjing/water/service/dto/ResAdminDetail.java                                                      |   35 
 src/main/java/com/nanjing/water/repository/po/AdminRoleRelationPO.java                                               |   70 
 src/main/java/com/nanjing/water/repository/mapper/AdminUserMapper.java                                               |   11 
 src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqModifyAlarmHistory.java                               |   73 
 src/main/java/com/nanjing/water/entity/request/adminrolerelation/ReqModifyAdminRoleRelation.java                     |   64 
 src/main/java/com/nanjing/water/entity/response/admin/ResAdminPermission.java                                        |   28 
 src/main/java/com/nanjing/water/repository/vo/WaterMonitoryPointVO.java                                              |   58 
 src/main/java/com/nanjing/water/service/AdminPowerService.java                                                       |  869 ++
 src/main/java/com/nanjing/water/service/convert/WaterMonitoryPointConvert.java                                       |   47 
 src/main/java/com/nanjing/water/entity/search/SearchAdminRoleRelation.java                                           |   13 
 src/main/java/com/nanjing/water/repository/impl/SysRegionMapperImpl.java                                             |  162 
 src/main/java/com/nanjing/water/service/convert/WaterFacilityConvert.java                                            |   47 
 src/main/java/com/nanjing/water/repository/vo/WaterFacilityTypeVO.java                                               |   56 
 src/main/java/com/nanjing/water/repository/po/AdminMenuPO.java                                                       |  105 
 src/main/java/com/nanjing/water/entity/response/admin/ResAdminLogin.java                                             |   35 
 src/main/java/com/nanjing/water/repository/impl/AdminRoleMenuRelationMapperImpl.java                                 |  144 
 src/main/java/com/nanjing/water/entity/response/statistics/ResGetTodayStatistics.java                                |   18 
 src/main/java/com/nanjing/water/entity/enums/EMenuType.java                                                          |   66 
 src/main/java/com/nanjing/water/entity/request/adminpermission/ReqCreateAdminPermission.java                         |   97 
 src/main/java/com/nanjing/water/repository/impl/CommonParametersMapperImpl.java                                      |  156 
 src/main/java/com/nanjing/water/entity/search/SearchSysDictData.java                                                 |   13 
 src/main/java/com/nanjing/water/entity/request/commonparameters/ReqModifyCommonParameters.java                       |   86 
 src/main/java/com/nanjing/water/service/convert/SysRegionConvert.java                                                |   47 
 src/main/java/com/nanjing/water/repository/impl/AlarmHistoryMapperImpl.java                                          |  152 
 src/main/java/com/nanjing/water/service/AlarmSchemeService.java                                                      |  275 
 src/main/java/com/nanjing/water/entity/request/adminuser/ReqSetListRole4Admin.java                                   |   19 
 src/main/java/com/nanjing/water/entity/request/adminpermission/ReqModifyAdminPermission.java                         |  119 
 src/main/java/com/nanjing/water/repository/po/AlarmSchemePO.java                                                     |   91 
 src/main/java/com/nanjing/water/service/AdminService.java                                                            |  544 +
 src/main/java/com/nanjing/water/entity/response/admin/ResAdminMenuTreeAndPermission.java                             |   13 
 src/main/java/com/nanjing/water/repository/mapper/AdminMenusMapper.java                                              |   11 
 src/main/java/com/nanjing/water/service/convert/WaterFacilityParameterConvert.java                                   |   47 
 src/main/java/com/nanjing/water/entity/request/commonparameters/ReqCreateCommonParameters.java                       |   75 
 src/main/java/com/nanjing/water/entity/request/sysdictdata/ReqCreateSysDictData.java                                 |   75 
 src/main/java/com/nanjing/water/entity/search/SearchSysDictType.java                                                 |   13 
 src/main/java/com/nanjing/water/host/mqtt/MQTTSubsribe.java                                                          |  100 
 src/main/java/com/nanjing/water/entity/request/adminrolerelation/ReqCreateAdminRoleRelation.java                     |   53 
 src/main/java/com/nanjing/water/repository/vo/AdminPermissionVO.java                                                 |   54 
 src/main/java/com/nanjing/water/repository/po/AdminPermissionPO.java                                                 |   95 
 src/main/java/com/nanjing/water/entity/search/SearchAdminUser.java                                                   |   26 
 src/main/java/com/nanjing/water/service/convert/WaterFacilityTypeConvert.java                                        |   47 
 src/main/java/com/nanjing/water/entity/request/adminrole/ReqModifyAdminRole.java                                     |   86 
 src/main/java/com/nanjing/water/repository/impl/WaterFacilityMapperImpl.java                                         |  156 
 src/main/java/com/nanjing/water/repository/vo/AdminRolePermissionRelationVO.java                                     |   54 
 src/main/java/com/nanjing/water/repository/impl/AdminPermissionMapperImpl.java                                       |  141 
 src/main/java/com/nanjing/water/entity/response/statistics/ResStatisticsItem.java                                    |   29 
 src/main/java/com/nanjing/water/repository/vo/AdminMenuVO.java                                                       |   54 
 src/main/java/com/nanjing/water/entity/search/SearchAdminRoleMenuRelation.java                                       |   13 
 src/main/java/com/nanjing/water/repository/mapper/AdminRoleRelationMapper.java                                       |   11 
 src/main/java/com/nanjing/water/service/convert/AdminRoleConvert.java                                                |   47 
 src/main/java/com/nanjing/water/repository/mapper/SysDictTypeMapper.java                                             |   11 
 src/main/java/com/nanjing/water/host/controller/admin/AdminRoleController.java                                       |  321 
 src/main/java/com/nanjing/water/entity/request/adminrolepermissionrelation/ReqModifyAdminRolePermissionRelation.java |   64 
 src/main/java/com/nanjing/water/host/mqtt/MQTTStart.java                                                             |   26 
 src/main/java/com/nanjing/water/repository/mapper/WaterMonitoryPointMapper.java                                      |   11 
 src/main/java/com/nanjing/water/repository/po/WaterMonitoryPointPO.java                                              |   96 
 src/main/java/com/nanjing/water/host/controller/base/SysDictDataController.java                                      |  145 
 src/main/java/com/nanjing/water/entity/response/admin/ResAdminPower.java                                             |   18 
 src/main/java/com/nanjing/water/repository/vo/WaterFacilityParameterVO.java                                          |   55 
 src/main/java/com/nanjing/water/entity/request/watermonitorypoint/ReqModifyWaterMonitoryPoint.java                   |   68 
 src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqCreateWaterFacilityParameter.java           |   53 
 src/main/java/com/nanjing/water/service/AdminRoleRelationService.java                                                |  246 
 src/main/java/com/nanjing/water/entity/dto/UploadResultVo.java                                                       |   88 
 src/main/java/com/nanjing/water/entity/request/adminmenu/ReqCreateAdminMenu.java                                     |  119 
 src/main/java/com/nanjing/water/repository/po/SysDictDataPO.java                                                     |   85 
 src/main/java/com/nanjing/water/entity/request/waterfacility/ReqCreateWaterFacility.java                             |   84 
 src/main/java/com/nanjing/water/entity/search/SearchAdminMenus.java                                                  |   13 
 src/main/java/com/nanjing/water/service/QuartzTaskRecordService.java                                                 |  246 
 src/main/java/com/nanjing/water/repository/mapper/SysDictDataMapper.java                                             |   11 
 src/main/java/com/nanjing/water/repository/mapper/AdminRolePermissionRelationMapper.java                             |   11 
 src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointDataFacility.java                              |   12 
 src/main/java/com/nanjing/water/service/convert/SysDictTypeConvert.java                                              |   47 
 src/main/java/com/nanjing/water/repository/po/SysDictTypePO.java                                                     |   80 
 src/main/java/com/nanjing/water/repository/vo/AlarmSchemeVO.java                                                     |   56 
 src/main/java/com/nanjing/water/entity/request/watermonitorypoint/ReqCreateWaterMonitoryPoint.java                   |   64 
 src/main/java/com/nanjing/water/repository/mapper/AdminRoleMenuRelationMapper.java                                   |   11 
 src/main/java/com/nanjing/water/service/convert/SysDictDataConvert.java                                              |   47 
 src/main/java/com/nanjing/water/host/mqtt/WebSocket.java                                                             |   54 
 src/main/java/com/nanjing/water/entity/search/SearchAdminRolePermissionRelation.java                                 |   13 
 src/main/java/com/nanjing/water/host/controller/WaterFacilityController.java                                         |  163 
 src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointDataFacilityParameter.java                     |   12 
 src/main/java/com/nanjing/water/entity/request/sysdictdata/ReqModifySysDictData.java                                 |   97 
 src/main/java/com/nanjing/water/service/AlarmHistoryService.java                                                     |  275 
 src/test/java/com/nanjing/water/GenCodeMysql.java                                                                    |   62 
 src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqSetListRole4Admin.java                       |   19 
 src/main/java/com/nanjing/water/host/mqtt/PushCallback.java                                                          |   85 
 src/main/java/com/nanjing/water/host/controller/base/FileController.java                                             |  188 
 src/main/java/com/nanjing/water/repository/mapper/CommonParametersMapper.java                                        |   11 
 src/main/java/com/nanjing/water/host/controller/WaterFacilityParameterController.java                                |  129 
 src/main/java/com/nanjing/water/repository/impl/WaterMonitoryPointMapperImpl.java                                    |  152 
 src/main/java/com/nanjing/water/repository/po/AdminRolePermissionRelationPO.java                                     |   70 
 210 files changed, 19,327 insertions(+), 52 deletions(-)

diff --git a/pom.xml b/pom.xml
index e5256b7..cecc896 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,9 +10,9 @@
     </parent>
 
     <groupId>com.nanjing.water</groupId>
-    <artifactId>xxx-yyy</artifactId>
+    <artifactId>nanjing-station</artifactId>
     <version>0.0.1-SNAPSHOT</version>
-    <name>xxx-yyy-service</name>
+    <name>nanjing-station-service</name>
     <description>The service which yyy of xxx project</description>
 
     <properties>
@@ -236,7 +236,18 @@
             <artifactId>spring-boot-starter-quartz</artifactId>
             <version>2.0.3.RELEASE</version>
         </dependency>
-
+        <!-- mqtt 依赖 -->
+        <dependency>
+            <groupId>org.eclipse.paho</groupId>
+            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
+            <version>1.2.5</version>
+        </dependency>
+        <!--生成验证码工具-->
+        <dependency>
+            <groupId>com.github.whvcse</groupId>
+            <artifactId>easy-captcha</artifactId>
+            <version>1.6.2</version>
+        </dependency>
         <!--************************************************** 单元测试相关 **************************************************-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
diff --git a/src/main/java/com/nanjing/water/common/config/MqttConfig.java b/src/main/java/com/nanjing/water/common/config/MqttConfig.java
new file mode 100644
index 0000000..ecaa451
--- /dev/null
+++ b/src/main/java/com/nanjing/water/common/config/MqttConfig.java
@@ -0,0 +1,61 @@
+package com.nanjing.water.common.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "mqtt")
+@Order(10)
+public class MqttConfig {
+    /**
+     * 是否启用
+     */
+    private Boolean enable;
+    /**
+     * 主机
+     */
+    private String host;
+
+    /**
+     * 端口
+     */
+    private Integer port;
+
+    /**
+     * 用户名
+     */
+    private String user;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 订阅主题
+     */
+    private String topic;
+
+    /**
+     * 订阅消息的客户端id
+     */
+    private String clientId;
+
+    /**
+     * 连接超时时间
+     */
+    private Integer connectionTimeout;
+
+    /**
+     * 心跳
+     */
+    private Integer keepAliveInterval;
+
+    /**
+     * 发送消息的客户端id
+     */
+    private String serverClientId;
+}
diff --git a/src/main/java/com/nanjing/water/entity/dto/UploadResultVo.java b/src/main/java/com/nanjing/water/entity/dto/UploadResultVo.java
new file mode 100644
index 0000000..80caf3d
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/dto/UploadResultVo.java
@@ -0,0 +1,88 @@
+package com.nanjing.water.entity.dto;
+
+public class UploadResultVo {
+    /**
+     * 文件id,传参后原样输出,前端比对文件用,无实际意义。
+     */
+    private String fileId;
+    /**
+     * 原始文件名称 传参后原样输出
+     */
+    private String name;
+    /**
+     * 新文件名称(需要保存数据库的虚拟路径)
+     */
+    private String newFileName;
+    /**
+     * 文件预览地址
+     */
+    private String newFileView;
+    /**
+     * 文件类型
+     */
+    private String fileType;
+    /**
+     * 文件媒体类型
+     */
+    private String contentType;
+    /**
+     * 文件大小(kb)
+     */
+    private Long size;
+
+    public String getFileId() {
+        return fileId;
+    }
+
+    public void setFileId(String fileId) {
+        this.fileId = fileId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getNewFileName() {
+        return newFileName;
+    }
+
+    public void setNewFileName(String newFileName) {
+        this.newFileName = newFileName;
+    }
+
+    public String getNewFileView() {
+        return newFileView;
+    }
+
+    public void setNewFileView(String newFileView) {
+        this.newFileView = newFileView;
+    }
+
+    public String getFileType() {
+        return fileType;
+    }
+
+    public void setFileType(String fileType) {
+        this.fileType = fileType;
+    }
+
+    public String getContentType() {
+        return contentType;
+    }
+
+    public void setContentType(String contentType) {
+        this.contentType = contentType;
+    }
+
+    public Long getSize() {
+        return size;
+    }
+
+    public void setSize(Long size) {
+        this.size = size;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/nanjing/water/entity/enums/EMenuType.java b/src/main/java/com/nanjing/water/entity/enums/EMenuType.java
new file mode 100644
index 0000000..20321b7
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/enums/EMenuType.java
@@ -0,0 +1,66 @@
+package com.nanjing.water.entity.enums;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * 菜单类型
+ */
+public enum EMenuType {
+    /**
+     * 目录=1,
+     */
+    FOLDER("目录", 1),
+    /**
+     * 页面=2,
+     */
+    PAGE("页面", 2),
+    ;
+
+    /**
+     * 枚举描述
+     */
+    private String desc;
+    /**
+     * 枚举值
+     */
+    private Integer value;
+
+    public Integer getValue() {
+        return value;
+    }
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * 构造方法
+     * @param desc 枚举描述
+     * @param value 枚举值
+     */
+    EMenuType(String desc, Integer value) {
+        this.desc = desc;
+        this.value = value;
+    }
+
+    /**
+     * 根据值获取枚举
+     *
+     * @param value 枚举值
+     * @return
+     */
+    public static EMenuType getByValue(Integer value) {
+        return Arrays.stream(EMenuType.values())
+                .filter(e -> Objects.equals(e.getValue(), value))
+                .findAny()
+                .orElse(null);
+    }
+
+    @Override
+    public String toString() {
+        return "EMenuType{" +
+                "desc='" + desc + '\'' +
+                ", value=" + value +
+                '}';
+    }
+}
diff --git a/src/main/java/com/nanjing/water/entity/enums/EOperation.java b/src/main/java/com/nanjing/water/entity/enums/EOperation.java
new file mode 100644
index 0000000..7f0d06e
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/enums/EOperation.java
@@ -0,0 +1,98 @@
+package com.nanjing.water.entity.enums;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * 操作类型
+ * @author linliu
+ * @date 2019-01-02
+ */
+public enum EOperation {
+    /**
+     * 搜索
+     */
+    LIST("搜索", "list"),
+    /**
+     * 保存(新增+编辑)
+     */
+    SAVE("保存(新增+编辑)", "save"),
+    /**
+     * 新增
+     */
+    ADD("新增", "add"),
+    /**
+     * 详情
+     */
+    DETAIL("详情", "detail"),
+    /**
+     * 修改
+     */
+    UPDATE("修改", "update"),
+    /**
+     * 停用
+     */
+    DISABLED("停用", "disable"),
+    /**
+     * 启用
+     */
+    ENABLED("启用", "enable"),
+    /**
+     * 删除
+     */
+    DELETED("删除", "delete"),
+    /**
+     * 导入
+     */
+    IMPORT("导入", "import"),
+    /**
+     * 导出
+     */
+    EXPORT("导出", "export"),
+    /**
+     * 打印
+     */
+    PRINT("打印", "print"),
+    ;
+
+    private String desc;//枚举描述
+    private String value;//枚举值
+
+    public String getValue() {
+        return value;
+    }
+    public String getDesc() {
+        return desc;
+    }
+
+    /**
+     * 构造方法
+     * @param desc 枚举描述
+     * @param value 枚举值
+     */
+    EOperation(String desc, String value) {
+        this.desc = desc;
+        this.value = value;
+    }
+
+    /**
+     * 根据值获取枚举
+     *
+     * @param value 枚举值
+     * @return
+     */
+    public static EOperation getByValue(String value) {
+        return Arrays.stream(EOperation.values())
+                .filter(e -> Objects.equals(e.getValue(), value))
+                .findAny()
+                .orElse(null);
+    }
+
+    @Override
+    public String toString() {
+        return "EOperation{" +
+                "desc='" + desc + '\'' +
+                ", value=" + value +
+                '}';
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/nanjing/water/entity/request/adminmenu/ReqCreateAdminMenu.java b/src/main/java/com/nanjing/water/entity/request/adminmenu/ReqCreateAdminMenu.java
new file mode 100644
index 0000000..c2d2b2b
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminmenu/ReqCreateAdminMenu.java
@@ -0,0 +1,119 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminmenu;
+
+/**
+ * 后台菜单
+ * @author lin.liu
+ */
+
+public class ReqCreateAdminMenu {
+	/**
+	 * 父级ID
+	 */
+	private Long parentId;
+	/**
+	 * 菜单名称
+	 */
+	private String name;
+	/**
+	 * 菜单标题
+	 */
+	private String title;
+	/**
+	 * 前端资源路径
+	 */
+	private String url;
+	/**
+	 * 菜单层级
+	 */
+	private Integer level;
+	/**
+	 * 排序值
+	 */
+	private Integer sort;
+	/**
+	 * 图标
+	 */
+	private String icon;
+	/**
+	 * 类型 EMenuType
+	 */
+	private Integer type;
+
+	public Long getParentId() {
+		return this.parentId;
+	}
+	public void setParentId(Long parentId) {
+		this.parentId = parentId;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getTitle() {
+		return this.title;
+	}
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getUrl() {
+		return this.url;
+	}
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public Integer getLevel() {
+		return this.level;
+	}
+	public void setLevel(Integer level) {
+		this.level = level;
+	}
+
+	public Integer getSort() {
+		return this.sort;
+	}
+	public void setSort(Integer sort) {
+		this.sort = sort;
+	}
+
+	public String getIcon() {
+		return this.icon;
+	}
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public Integer getType() {
+		return this.type;
+	}
+	public void setType(Integer type) {
+		this.type = type;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminmenu/ReqModifyAdminMenu.java b/src/main/java/com/nanjing/water/entity/request/adminmenu/ReqModifyAdminMenu.java
new file mode 100644
index 0000000..22085b9
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminmenu/ReqModifyAdminMenu.java
@@ -0,0 +1,141 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminmenu;
+
+/**
+ * 后台菜单
+ * @author lin.liu
+ */
+
+public class ReqModifyAdminMenu {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 父级ID
+	 */
+	private Long parentId;
+	/**
+	 * 菜单名称
+	 */
+	private String name;
+	/**
+	 * 菜单标题
+	 */
+	private String title;
+	/**
+	 * 前端资源路径
+	 */
+	private String url;
+	/**
+	 * 菜单层级
+	 */
+	private Integer level;
+	/**
+	 * 排序值
+	 */
+	private Integer sort;
+	/**
+	 * 图标
+	 */
+	private String icon;
+	/**
+	 * 状态 EState
+	 */
+	private Integer status;
+	/**
+	 * 类型 EMenuType
+	 */
+	private Integer type;
+
+	public Long getId() {
+		return this.id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getParentId() {
+		return this.parentId;
+	}
+	public void setParentId(Long parentId) {
+		this.parentId = parentId;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getTitle() {
+		return this.title;
+	}
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getUrl() {
+		return this.url;
+	}
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public Integer getLevel() {
+		return this.level;
+	}
+	public void setLevel(Integer level) {
+		this.level = level;
+	}
+
+	public Integer getSort() {
+		return this.sort;
+	}
+	public void setSort(Integer sort) {
+		this.sort = sort;
+	}
+
+	public String getIcon() {
+		return this.icon;
+	}
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public Integer getStatus() {
+		return this.status;
+	}
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public Integer getType() {
+		return this.type;
+	}
+	public void setType(Integer type) {
+		this.type = type;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminpermission/ReqCreateAdminPermission.java b/src/main/java/com/nanjing/water/entity/request/adminpermission/ReqCreateAdminPermission.java
new file mode 100644
index 0000000..2b97f1d
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminpermission/ReqCreateAdminPermission.java
@@ -0,0 +1,97 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminpermission;
+
+/**
+ * 后台用户权限表
+ * @author lin.liu
+ */
+
+public class ReqCreateAdminPermission {
+	/**
+	 * 权限值
+	 */
+	private String sn;
+	/**
+	 * 菜单id
+	 */
+	private Long menuId;
+	/**
+	 * 前端资源url
+	 */
+	private String menuUrl;
+	/**
+	 * 名称
+	 */
+	private String name;
+	/**
+	 * 图标
+	 */
+	private String icon;
+	/**
+	 * 权限类型 EOperation
+	 */
+	private String type;
+
+	public String getSn() {
+		return this.sn;
+	}
+	public void setSn(String sn) {
+		this.sn = sn;
+	}
+
+	public Long getMenuId() {
+		return this.menuId;
+	}
+	public void setMenuId(Long menuId) {
+		this.menuId = menuId;
+	}
+
+	public String getMenuUrl() {
+		return this.menuUrl;
+	}
+	public void setMenuUrl(String menuUrl) {
+		this.menuUrl = menuUrl;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getIcon() {
+		return this.icon;
+	}
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public String getType() {
+		return this.type;
+	}
+	public void setType(String type) {
+		this.type = type;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminpermission/ReqModifyAdminPermission.java b/src/main/java/com/nanjing/water/entity/request/adminpermission/ReqModifyAdminPermission.java
new file mode 100644
index 0000000..d61537a
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminpermission/ReqModifyAdminPermission.java
@@ -0,0 +1,119 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminpermission;
+
+/**
+ * 后台用户权限表
+ * @author lin.liu
+ */
+
+public class ReqModifyAdminPermission {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 权限值
+	 */
+	private String sn;
+	/**
+	 * 菜单id
+	 */
+	private Long menuId;
+	/**
+	 * 前端资源url
+	 */
+	private String menuUrl;
+	/**
+	 * 名称
+	 */
+	private String name;
+	/**
+	 * 图标
+	 */
+	private String icon;
+	/**
+	 * 权限类型 EOperation
+	 */
+	private String type;
+	/**
+	 * 状态 EStatus
+	 */
+	private Integer status;
+
+	public Long getId() {
+		return this.id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getSn() {
+		return this.sn;
+	}
+	public void setSn(String sn) {
+		this.sn = sn;
+	}
+
+	public Long getMenuId() {
+		return this.menuId;
+	}
+	public void setMenuId(Long menuId) {
+		this.menuId = menuId;
+	}
+
+	public String getMenuUrl() {
+		return this.menuUrl;
+	}
+	public void setMenuUrl(String menuUrl) {
+		this.menuUrl = menuUrl;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getIcon() {
+		return this.icon;
+	}
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public String getType() {
+		return this.type;
+	}
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public Integer getStatus() {
+		return this.status;
+	}
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminrole/ReqCreateAdminRole.java b/src/main/java/com/nanjing/water/entity/request/adminrole/ReqCreateAdminRole.java
new file mode 100644
index 0000000..9ef76cf
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminrole/ReqCreateAdminRole.java
@@ -0,0 +1,64 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminrole;
+
+/**
+ * 后台用户角色表
+ * @author lin.liu
+ */
+
+public class ReqCreateAdminRole {
+	/**
+	 * 角色名称
+	 */
+	private String name;
+	/**
+	 * 描述
+	 */
+	private String description;
+	/**
+	 * 排序值
+	 */
+	private Integer sort;
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDescription() {
+		return this.description;
+	}
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public Integer getSort() {
+		return this.sort;
+	}
+	public void setSort(Integer sort) {
+		this.sort = sort;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminrole/ReqModifyAdminRole.java b/src/main/java/com/nanjing/water/entity/request/adminrole/ReqModifyAdminRole.java
new file mode 100644
index 0000000..20b23bb
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminrole/ReqModifyAdminRole.java
@@ -0,0 +1,86 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminrole;
+
+/**
+ * 后台用户角色表
+ * @author lin.liu
+ */
+
+public class ReqModifyAdminRole {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 角色名称
+	 */
+	private String name;
+	/**
+	 * 描述
+	 */
+	private String description;
+	/**
+	 * 状态 EState
+	 */
+	private Integer status;
+	/**
+	 * 排序值
+	 */
+	private Integer sort;
+
+	public Long getId() {
+		return this.id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDescription() {
+		return this.description;
+	}
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public Integer getStatus() {
+		return this.status;
+	}
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public Integer getSort() {
+		return this.sort;
+	}
+	public void setSort(Integer sort) {
+		this.sort = sort;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqCreateAdminRoleMenuRelation.java b/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqCreateAdminRoleMenuRelation.java
new file mode 100644
index 0000000..f86e02d
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqCreateAdminRoleMenuRelation.java
@@ -0,0 +1,42 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminrolemenurelation;
+
+import lombok.Data;
+
+/**
+ * 后台角色菜单关系表
+ * @author lin.liu
+ * @description 后台角色菜单关系表
+ */
+@Data
+public class ReqCreateAdminRoleMenuRelation {
+	/**
+	 * 角色id
+	 */
+	private Long roleId;
+	/**
+	 * 菜单id
+	 */
+	private Long menuId;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqModifyAdminRoleMenuRelation.java b/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqModifyAdminRoleMenuRelation.java
new file mode 100644
index 0000000..944a3c7
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqModifyAdminRoleMenuRelation.java
@@ -0,0 +1,46 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminrolemenurelation;
+
+import lombok.Data;
+
+/**
+ * 后台角色菜单关系表
+ * @author lin.liu
+ * @description 后台角色菜单关系表
+ */
+@Data
+public class ReqModifyAdminRoleMenuRelation {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 角色id
+	 */
+	private Long roleId;
+	/**
+	 * 菜单id
+	 */
+	private Long menuId;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqSetListMenu4Role.java b/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqSetListMenu4Role.java
new file mode 100644
index 0000000..7711f6a
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqSetListMenu4Role.java
@@ -0,0 +1,24 @@
+package com.nanjing.water.entity.request.adminrolemenurelation;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReqSetListMenu4Role {
+    /**
+     * 角色id
+     * @required
+     */
+    private Long id;
+    /**
+     * 菜单列表
+     * @required
+     **/
+    private List<Long> listMenu;
+    /**
+     * 权限列表
+     * @required
+     **/
+    private List<Long> listPermission;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqSetListRole4Admin.java b/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqSetListRole4Admin.java
new file mode 100644
index 0000000..6d87f3c
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminrolemenurelation/ReqSetListRole4Admin.java
@@ -0,0 +1,19 @@
+package com.nanjing.water.entity.request.adminrolemenurelation;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReqSetListRole4Admin {
+    /**
+     * 管理员id
+     * @required
+     */
+    private Long id;
+    /**
+     * 角色列表
+     * @required
+     **/
+    private List<Long> listRole;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminrolepermissionrelation/ReqCreateAdminRolePermissionRelation.java b/src/main/java/com/nanjing/water/entity/request/adminrolepermissionrelation/ReqCreateAdminRolePermissionRelation.java
new file mode 100644
index 0000000..bc22461
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminrolepermissionrelation/ReqCreateAdminRolePermissionRelation.java
@@ -0,0 +1,53 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminrolepermissionrelation;
+
+/**
+ * 后台角色权限关系表
+ * @author lin.liu
+ */
+
+public class ReqCreateAdminRolePermissionRelation {
+	/**
+	 * 角色id
+	 */
+	private Long roleId;
+	/**
+	 * 权限id
+	 */
+	private Long permissionId;
+
+	public Long getRoleId() {
+		return this.roleId;
+	}
+	public void setRoleId(Long roleId) {
+		this.roleId = roleId;
+	}
+
+	public Long getPermissionId() {
+		return this.permissionId;
+	}
+	public void setPermissionId(Long permissionId) {
+		this.permissionId = permissionId;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminrolepermissionrelation/ReqModifyAdminRolePermissionRelation.java b/src/main/java/com/nanjing/water/entity/request/adminrolepermissionrelation/ReqModifyAdminRolePermissionRelation.java
new file mode 100644
index 0000000..5299b24
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminrolepermissionrelation/ReqModifyAdminRolePermissionRelation.java
@@ -0,0 +1,64 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminrolepermissionrelation;
+
+/**
+ * 后台角色权限关系表
+ * @author lin.liu
+ */
+
+public class ReqModifyAdminRolePermissionRelation {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 角色id
+	 */
+	private Long roleId;
+	/**
+	 * 权限id
+	 */
+	private Long permissionId;
+
+	public Long getId() {
+		return this.id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getRoleId() {
+		return this.roleId;
+	}
+	public void setRoleId(Long roleId) {
+		this.roleId = roleId;
+	}
+
+	public Long getPermissionId() {
+		return this.permissionId;
+	}
+	public void setPermissionId(Long permissionId) {
+		this.permissionId = permissionId;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminrolerelation/ReqCreateAdminRoleRelation.java b/src/main/java/com/nanjing/water/entity/request/adminrolerelation/ReqCreateAdminRoleRelation.java
new file mode 100644
index 0000000..22be00b
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminrolerelation/ReqCreateAdminRoleRelation.java
@@ -0,0 +1,53 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminrolerelation;
+
+/**
+ * 后台用户和角色关系表
+ * @author lin.liu
+ */
+
+public class ReqCreateAdminRoleRelation {
+	/**
+	 * 管理员id
+	 */
+	private Long adminId;
+	/**
+	 * 角色id
+	 */
+	private Long roleId;
+
+	public Long getAdminId() {
+		return this.adminId;
+	}
+	public void setAdminId(Long adminId) {
+		this.adminId = adminId;
+	}
+
+	public Long getRoleId() {
+		return this.roleId;
+	}
+	public void setRoleId(Long roleId) {
+		this.roleId = roleId;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminrolerelation/ReqModifyAdminRoleRelation.java b/src/main/java/com/nanjing/water/entity/request/adminrolerelation/ReqModifyAdminRoleRelation.java
new file mode 100644
index 0000000..1a8d496
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminrolerelation/ReqModifyAdminRoleRelation.java
@@ -0,0 +1,64 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminrolerelation;
+
+/**
+ * 后台用户和角色关系表
+ * @author lin.liu
+ */
+
+public class ReqModifyAdminRoleRelation {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 管理员id
+	 */
+	private Long adminId;
+	/**
+	 * 角色id
+	 */
+	private Long roleId;
+
+	public Long getId() {
+		return this.id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getAdminId() {
+		return this.adminId;
+	}
+	public void setAdminId(Long adminId) {
+		this.adminId = adminId;
+	}
+
+	public Long getRoleId() {
+		return this.roleId;
+	}
+	public void setRoleId(Long roleId) {
+		this.roleId = roleId;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminuser/ReqAdminLogin.java b/src/main/java/com/nanjing/water/entity/request/adminuser/ReqAdminLogin.java
new file mode 100644
index 0000000..19aa0b4
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminuser/ReqAdminLogin.java
@@ -0,0 +1,30 @@
+package com.nanjing.water.entity.request.adminuser;
+
+import lombok.Data;
+
+@Data
+public class ReqAdminLogin {
+    /**
+     * uuid:随机字符串
+     */
+
+    private String uuid;
+    /**
+     * 验证码
+     */
+    private String code;
+    /**
+     * 登录账户
+     * @required
+     */
+    private String userName;
+    /**
+     * 密码
+     * @required
+     */
+    private String password;
+    /**
+     * 登录设备码
+     */
+    private String machineCode;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminuser/ReqCreateAdminUser.java b/src/main/java/com/nanjing/water/entity/request/adminuser/ReqCreateAdminUser.java
new file mode 100644
index 0000000..2d9fccd
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminuser/ReqCreateAdminUser.java
@@ -0,0 +1,62 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminuser;
+
+import lombok.Data;
+
+/**
+ * 管理员帐号
+ * @author lin.liu
+ * @description 管理员帐号
+ */
+@Data
+public class ReqCreateAdminUser {
+	/**
+	 * 用户类型 EUserType
+	 */
+	private Integer userType;
+	/**
+	 * 用户名
+	 */
+	private String userName;
+	/**
+	 * 密码
+	 */
+	private String password;
+	/**
+	 * 昵称
+	 */
+	private String nickName;
+	/**
+	 * 头像
+	 */
+	private String headImg;
+	/**
+	 * 联系方式
+	 */
+	private String contact;
+	/**
+	 * 联系邮箱
+	 */
+	private String email;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminuser/ReqModifyAdminUser.java b/src/main/java/com/nanjing/water/entity/request/adminuser/ReqModifyAdminUser.java
new file mode 100644
index 0000000..26c67dc
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminuser/ReqModifyAdminUser.java
@@ -0,0 +1,62 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.adminuser;
+
+import lombok.Data;
+
+/**
+ * 管理员帐号
+ * @author lin.liu
+ * @description 管理员帐号
+ */
+@Data
+public class ReqModifyAdminUser {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 用户类型 EUserType
+	 */
+	private Integer userType;
+	/**
+	 * 昵称
+	 */
+	private String nickName;
+	/**
+	 * 头像
+	 */
+	private String headImg;
+	/**
+	 * 联系方式
+	 */
+	private String contact;
+	/**
+	 * 联系邮箱
+	 */
+	private String email;
+	/**
+	 * 状态 EState
+	 */
+	private Integer status;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/adminuser/ReqSetListRole4Admin.java b/src/main/java/com/nanjing/water/entity/request/adminuser/ReqSetListRole4Admin.java
new file mode 100644
index 0000000..f1aa3ee
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/adminuser/ReqSetListRole4Admin.java
@@ -0,0 +1,19 @@
+package com.nanjing.water.entity.request.adminuser;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReqSetListRole4Admin {
+    /**
+     * 管理员id
+     * @required
+     */
+    private Long id;
+    /**
+     * 角色列表
+     * @required
+     **/
+    private List<Long> listRole;
+}
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
new file mode 100644
index 0000000..52d2d92
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqCreateAlarmHistory.java
@@ -0,0 +1,69 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.alarmhistory;
+
+import lombok.Data;
+
+/**
+ * 报警信息
+ * @author lin.liu
+ */
+@Data
+public class ReqCreateAlarmHistory {
+	/**
+	 * 设备id
+	 */
+	private Long facilityId;
+	/**
+	 * 设备名称
+	 */
+	private String facilityName;
+	/**
+	 * 报警参数
+	 */
+	private Integer code;
+	/**
+	 * 报警描述
+	 */
+	private String description;
+	/**
+	 * 备注
+	 */
+	private String comment;
+	/**
+	 * 是否处理
+	 */
+	private Integer isSolve;
+	/**
+	 * 是否确认(10误报 20已证实,200已处理)
+	 */
+	private Integer isConfirm;
+	/**
+	 * 最后报警时间
+	 */
+	private String lastTime;
+	/**
+	 * 报警次数
+	 */
+	private Integer totalCount;
+}
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
new file mode 100644
index 0000000..c2e881b
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/alarmhistory/ReqModifyAlarmHistory.java
@@ -0,0 +1,73 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.alarmhistory;
+
+import lombok.Data;
+
+/**
+ * 报警信息
+ * @author lin.liu
+ */
+@Data
+public class ReqModifyAlarmHistory {
+	/**
+	 * 主键id
+	 */
+	private Long id;
+	/**
+	 * 设备id
+	 */
+	private Long facilityId;
+	/**
+	 * 设备名称
+	 */
+	private String facilityName;
+	/**
+	 * 报警参数
+	 */
+	private Integer code;
+	/**
+	 * 报警描述
+	 */
+	private String description;
+	/**
+	 * 备注
+	 */
+	private String comment;
+	/**
+	 * 是否处理
+	 */
+	private Integer isSolve;
+	/**
+	 * 是否确认(10误报 20已证实,200已处理)
+	 */
+	private Integer isConfirm;
+	/**
+	 * 最后报警时间
+	 */
+	private String lastTime;
+	/**
+	 * 报警次数
+	 */
+	private Integer totalCount;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/alarmscheme/ReqCreateAlarmScheme.java b/src/main/java/com/nanjing/water/entity/request/alarmscheme/ReqCreateAlarmScheme.java
new file mode 100644
index 0000000..2deddc2
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/alarmscheme/ReqCreateAlarmScheme.java
@@ -0,0 +1,59 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.alarmscheme;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 报警方案设置
+ * @author lin.liu
+ */
+@Data
+public class ReqCreateAlarmScheme {
+	/**
+	 * 设备id
+	 */
+	private Long facilityId;
+	/**
+	 * 设备参数
+	 */
+	private String columnsCode;
+	/**
+	 * 方案名称
+	 */
+	private String schemeName;
+	/**
+	 * 低报警值
+	 */
+	private BigDecimal lowAlarm;
+	/**
+	 * 高报警值
+	 */
+	private BigDecimal tallAlarm;
+	/**
+	 * 备注
+	 */
+	private String remark;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/alarmscheme/ReqModifyAlarmScheme.java b/src/main/java/com/nanjing/water/entity/request/alarmscheme/ReqModifyAlarmScheme.java
new file mode 100644
index 0000000..6f895e8
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/alarmscheme/ReqModifyAlarmScheme.java
@@ -0,0 +1,63 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.alarmscheme;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 报警方案设置
+ * @author lin.liu
+ */
+@Data
+public class ReqModifyAlarmScheme {
+	/**
+	 * 主键id
+	 */
+	private Long id;
+	/**
+	 * 设备id
+	 */
+	private Long facilityId;
+	/**
+	 * 设备参数
+	 */
+	private String columnsCode;
+	/**
+	 * 方案名称
+	 */
+	private String schemeName;
+	/**
+	 * 低报警值
+	 */
+	private BigDecimal lowAlarm;
+	/**
+	 * 高报警值
+	 */
+	private BigDecimal tallAlarm;
+	/**
+	 * 备注
+	 */
+	private String remark;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/commonparameters/ReqCreateCommonParameters.java b/src/main/java/com/nanjing/water/entity/request/commonparameters/ReqCreateCommonParameters.java
new file mode 100644
index 0000000..feb44ca
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/commonparameters/ReqCreateCommonParameters.java
@@ -0,0 +1,75 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.commonparameters;
+
+/**
+ * 公共参数
+ * @author lin.liu
+ */
+
+public class ReqCreateCommonParameters {
+	/**
+	 * 参数名称,与前端对接的名称
+	 */
+	private String name;
+	/**
+	 * 参数标识,与硬件对接的名称
+	 */
+	private String mark;
+	/**
+	 * 单位
+	 */
+	private String unit;
+	/**
+	 * 排序值
+	 */
+	private Integer sort;
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getMark() {
+		return this.mark;
+	}
+	public void setMark(String mark) {
+		this.mark = mark;
+	}
+
+	public String getUnit() {
+		return this.unit;
+	}
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+
+	public Integer getSort() {
+		return this.sort;
+	}
+	public void setSort(Integer sort) {
+		this.sort = sort;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/commonparameters/ReqModifyCommonParameters.java b/src/main/java/com/nanjing/water/entity/request/commonparameters/ReqModifyCommonParameters.java
new file mode 100644
index 0000000..9d8aaf8
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/commonparameters/ReqModifyCommonParameters.java
@@ -0,0 +1,86 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.commonparameters;
+
+/**
+ * 公共参数
+ * @author lin.liu
+ */
+
+public class ReqModifyCommonParameters {
+	/**
+	 * 参数管理id,主键自增
+	 */
+	private Long id;
+	/**
+	 * 参数名称,与前端对接的名称
+	 */
+	private String name;
+	/**
+	 * 参数标识,与硬件对接的名称
+	 */
+	private String mark;
+	/**
+	 * 单位
+	 */
+	private String unit;
+	/**
+	 * 排序值
+	 */
+	private Integer sort;
+
+	public Long getId() {
+		return this.id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getMark() {
+		return this.mark;
+	}
+	public void setMark(String mark) {
+		this.mark = mark;
+	}
+
+	public String getUnit() {
+		return this.unit;
+	}
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+
+	public Integer getSort() {
+		return this.sort;
+	}
+	public void setSort(Integer sort) {
+		this.sort = sort;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/sysdictdata/ReqCreateSysDictData.java b/src/main/java/com/nanjing/water/entity/request/sysdictdata/ReqCreateSysDictData.java
new file mode 100644
index 0000000..d6cd1c5
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/sysdictdata/ReqCreateSysDictData.java
@@ -0,0 +1,75 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.sysdictdata;
+
+/**
+ * 字典数据表
+ * @author lin.liu
+ */
+
+public class ReqCreateSysDictData {
+	/**
+	 * 字典标题
+	 */
+	private String dictLabel;
+	/**
+	 * 字典键值
+	 */
+	private String dictValue;
+	/**
+	 * 字典类型
+	 */
+	private String dictType;
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+	public String getDictLabel() {
+		return this.dictLabel;
+	}
+	public void setDictLabel(String dictLabel) {
+		this.dictLabel = dictLabel;
+	}
+
+	public String getDictValue() {
+		return this.dictValue;
+	}
+	public void setDictValue(String dictValue) {
+		this.dictValue = dictValue;
+	}
+
+	public String getDictType() {
+		return this.dictType;
+	}
+	public void setDictType(String dictType) {
+		this.dictType = dictType;
+	}
+
+	public String getRemark() {
+		return this.remark;
+	}
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/sysdictdata/ReqModifySysDictData.java b/src/main/java/com/nanjing/water/entity/request/sysdictdata/ReqModifySysDictData.java
new file mode 100644
index 0000000..633a9b9
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/sysdictdata/ReqModifySysDictData.java
@@ -0,0 +1,97 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.sysdictdata;
+
+/**
+ * 字典数据表
+ * @author lin.liu
+ */
+
+public class ReqModifySysDictData {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 字典标题
+	 */
+	private String dictLabel;
+	/**
+	 * 字典键值
+	 */
+	private String dictValue;
+	/**
+	 * 字典类型
+	 */
+	private String dictType;
+	/**
+	 * 状态
+	 */
+	private Integer status;
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+	public Long getId() {
+		return this.id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getDictLabel() {
+		return this.dictLabel;
+	}
+	public void setDictLabel(String dictLabel) {
+		this.dictLabel = dictLabel;
+	}
+
+	public String getDictValue() {
+		return this.dictValue;
+	}
+	public void setDictValue(String dictValue) {
+		this.dictValue = dictValue;
+	}
+
+	public String getDictType() {
+		return this.dictType;
+	}
+	public void setDictType(String dictType) {
+		this.dictType = dictType;
+	}
+
+	public Integer getStatus() {
+		return this.status;
+	}
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public String getRemark() {
+		return this.remark;
+	}
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/sysdicttype/ReqCreateSysDictType.java b/src/main/java/com/nanjing/water/entity/request/sysdicttype/ReqCreateSysDictType.java
new file mode 100644
index 0000000..9a0377f
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/sysdicttype/ReqCreateSysDictType.java
@@ -0,0 +1,64 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.sysdicttype;
+
+/**
+ * 字典类型表
+ * @author lin.liu
+ */
+
+public class ReqCreateSysDictType {
+	/**
+	 * 字典名称
+	 */
+	private String dictName;
+	/**
+	 * 字典类型
+	 */
+	private String dictType;
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+	public String getDictName() {
+		return this.dictName;
+	}
+	public void setDictName(String dictName) {
+		this.dictName = dictName;
+	}
+
+	public String getDictType() {
+		return this.dictType;
+	}
+	public void setDictType(String dictType) {
+		this.dictType = dictType;
+	}
+
+	public String getRemark() {
+		return this.remark;
+	}
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/sysdicttype/ReqModifySysDictType.java b/src/main/java/com/nanjing/water/entity/request/sysdicttype/ReqModifySysDictType.java
new file mode 100644
index 0000000..81e0b9a
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/sysdicttype/ReqModifySysDictType.java
@@ -0,0 +1,86 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.sysdicttype;
+
+/**
+ * 字典类型表
+ * @author lin.liu
+ */
+
+public class ReqModifySysDictType {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 字典名称
+	 */
+	private String dictName;
+	/**
+	 * 字典类型
+	 */
+	private String dictType;
+	/**
+	 * 状态
+	 */
+	private Integer status;
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+	public Long getId() {
+		return this.id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getDictName() {
+		return this.dictName;
+	}
+	public void setDictName(String dictName) {
+		this.dictName = dictName;
+	}
+
+	public String getDictType() {
+		return this.dictType;
+	}
+	public void setDictType(String dictType) {
+		this.dictType = dictType;
+	}
+
+	public Integer getStatus() {
+		return this.status;
+	}
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public String getRemark() {
+		return this.remark;
+	}
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/sysregion/ReqCreateSysRegion.java b/src/main/java/com/nanjing/water/entity/request/sysregion/ReqCreateSysRegion.java
new file mode 100644
index 0000000..95b31f7
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/sysregion/ReqCreateSysRegion.java
@@ -0,0 +1,175 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.sysregion;
+import java.math.BigDecimal;
+
+/**
+ * 系统行政地区
+ * @author lin.liu
+ */
+
+public class ReqCreateSysRegion {
+	/**
+	 * 行政代码
+	 */
+	private String code;
+	/**
+	 * 上级行政代码
+	 */
+	private String parentCode;
+	/**
+	 * 名称
+	 */
+	private String name;
+	/**
+	 * 简称
+	 */
+	private String shortName;
+	/**
+	 * 邮政编码
+	 */
+	private String zipCode;
+	/**
+	 * 区号
+	 */
+	private String cityCode;
+	/**
+	 * 层级
+	 */
+	private Integer level;
+	/**
+	 * 拼音
+	 */
+	private String pinYin;
+	/**
+	 * 拼音简写
+	 */
+	private String pinYinShort;
+	/**
+	 * 经度
+	 */
+	private BigDecimal lng;
+	/**
+	 * 维度
+	 */
+	private BigDecimal lat;
+	/**
+	 * 排序
+	 */
+	private Integer sort;
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+	public String getCode() {
+		return this.code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getParentCode() {
+		return this.parentCode;
+	}
+	public void setParentCode(String parentCode) {
+		this.parentCode = parentCode;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getShortName() {
+		return this.shortName;
+	}
+	public void setShortName(String shortName) {
+		this.shortName = shortName;
+	}
+
+	public String getZipCode() {
+		return this.zipCode;
+	}
+	public void setZipCode(String zipCode) {
+		this.zipCode = zipCode;
+	}
+
+	public String getCityCode() {
+		return this.cityCode;
+	}
+	public void setCityCode(String cityCode) {
+		this.cityCode = cityCode;
+	}
+
+	public Integer getLevel() {
+		return this.level;
+	}
+	public void setLevel(Integer level) {
+		this.level = level;
+	}
+
+	public String getPinYin() {
+		return this.pinYin;
+	}
+	public void setPinYin(String pinYin) {
+		this.pinYin = pinYin;
+	}
+
+	public String getPinYinShort() {
+		return this.pinYinShort;
+	}
+	public void setPinYinShort(String pinYinShort) {
+		this.pinYinShort = pinYinShort;
+	}
+
+	public BigDecimal getLng() {
+		return this.lng;
+	}
+	public void setLng(BigDecimal lng) {
+		this.lng = lng;
+	}
+
+	public BigDecimal getLat() {
+		return this.lat;
+	}
+	public void setLat(BigDecimal lat) {
+		this.lat = lat;
+	}
+
+	public Integer getSort() {
+		return this.sort;
+	}
+	public void setSort(Integer sort) {
+		this.sort = sort;
+	}
+
+	public String getRemark() {
+		return this.remark;
+	}
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/sysregion/ReqModifySysRegion.java b/src/main/java/com/nanjing/water/entity/request/sysregion/ReqModifySysRegion.java
new file mode 100644
index 0000000..216d23a
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/sysregion/ReqModifySysRegion.java
@@ -0,0 +1,186 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.sysregion;
+import java.math.BigDecimal;
+
+/**
+ * 系统行政地区
+ * @author lin.liu
+ */
+
+public class ReqModifySysRegion {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 行政代码
+	 */
+	private String code;
+	/**
+	 * 上级行政代码
+	 */
+	private String parentCode;
+	/**
+	 * 名称
+	 */
+	private String name;
+	/**
+	 * 简称
+	 */
+	private String shortName;
+	/**
+	 * 邮政编码
+	 */
+	private String zipCode;
+	/**
+	 * 区号
+	 */
+	private String cityCode;
+	/**
+	 * 层级
+	 */
+	private Integer level;
+	/**
+	 * 拼音
+	 */
+	private String pinYin;
+	/**
+	 * 拼音简写
+	 */
+	private String pinYinShort;
+	/**
+	 * 经度
+	 */
+	private BigDecimal lng;
+	/**
+	 * 维度
+	 */
+	private BigDecimal lat;
+	/**
+	 * 排序
+	 */
+	private Integer sort;
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+	public Long getId() {
+		return this.id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getParentCode() {
+		return this.parentCode;
+	}
+	public void setParentCode(String parentCode) {
+		this.parentCode = parentCode;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getShortName() {
+		return this.shortName;
+	}
+	public void setShortName(String shortName) {
+		this.shortName = shortName;
+	}
+
+	public String getZipCode() {
+		return this.zipCode;
+	}
+	public void setZipCode(String zipCode) {
+		this.zipCode = zipCode;
+	}
+
+	public String getCityCode() {
+		return this.cityCode;
+	}
+	public void setCityCode(String cityCode) {
+		this.cityCode = cityCode;
+	}
+
+	public Integer getLevel() {
+		return this.level;
+	}
+	public void setLevel(Integer level) {
+		this.level = level;
+	}
+
+	public String getPinYin() {
+		return this.pinYin;
+	}
+	public void setPinYin(String pinYin) {
+		this.pinYin = pinYin;
+	}
+
+	public String getPinYinShort() {
+		return this.pinYinShort;
+	}
+	public void setPinYinShort(String pinYinShort) {
+		this.pinYinShort = pinYinShort;
+	}
+
+	public BigDecimal getLng() {
+		return this.lng;
+	}
+	public void setLng(BigDecimal lng) {
+		this.lng = lng;
+	}
+
+	public BigDecimal getLat() {
+		return this.lat;
+	}
+	public void setLat(BigDecimal lat) {
+		this.lat = lat;
+	}
+
+	public Integer getSort() {
+		return this.sort;
+	}
+	public void setSort(Integer sort) {
+		this.sort = sort;
+	}
+
+	public String getRemark() {
+		return this.remark;
+	}
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/waterfacility/ReqCreateWaterFacility.java b/src/main/java/com/nanjing/water/entity/request/waterfacility/ReqCreateWaterFacility.java
new file mode 100644
index 0000000..f637b3b
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/waterfacility/ReqCreateWaterFacility.java
@@ -0,0 +1,84 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.waterfacility;
+
+import lombok.Data;
+
+/**
+ * 设备信息
+ * @author lin.liu
+ */
+@Data
+public class ReqCreateWaterFacility {
+	/**
+	 * 设备名称
+	 */
+	private String facilityName;
+	/**
+	 * 设备编号
+	 */
+	private String facilityCode;
+	/**
+	 * 设备类型
+	 */
+	private Long facilityType;
+	/**
+	 * 监控点id
+	 */
+	private Long pointId;
+	/**
+	 * 安装日期
+	 */
+	private String installDate;
+	/**
+	 * 是否在线
+	 */
+	private Integer isOnline;
+	/**
+	 * 安装地址
+	 */
+	private String address;
+	/**
+	 * 备注
+	 */
+	private String remark;
+	/**
+	 * 设备图片
+	 */
+	private String facilityUrl;
+	/**
+	 * 最新数据上报时间间隔(单位分钟)
+	 */
+
+	private Integer newIntervalTime;
+	/**
+	 * 历史数据上报时间间隔(单位分钟)
+	 */
+
+	private Integer historyIntervalTime;
+	/**
+	 * 水位采集时间间隔(单位分钟)
+	 */
+
+	private Integer gatherIntervalTime;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/waterfacility/ReqEditWaterFacility.java b/src/main/java/com/nanjing/water/entity/request/waterfacility/ReqEditWaterFacility.java
new file mode 100644
index 0000000..12adeb7
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/waterfacility/ReqEditWaterFacility.java
@@ -0,0 +1,45 @@
+package com.nanjing.water.entity.request.waterfacility;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ReqEditWaterFacility {
+    /**
+     * 设备id
+     */
+    private Long id;
+    /**
+     * 最新数据上报时间间隔(单位分钟)
+     */
+    private Integer newIntervalTime;
+    /**
+     * 历史数据上报时间间隔(单位分钟)
+     */
+    private Integer historyIntervalTime;
+    /**
+     * 水位采集时间间隔(单位分钟)
+     */
+    private Integer gatherIntervalTime;
+    /**
+     * 量程设置
+     */
+    private BigDecimal range;
+    /**
+     * 高程设置
+     */
+    private BigDecimal elevation;
+    /**
+     * 投放角度
+     */
+    private BigDecimal putAngle;
+    /**
+     * 低水位下限
+     */
+    private BigDecimal lowWaterLevel;
+    /**
+     * 温度下限设置
+     */
+    private BigDecimal lowTemperature;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/waterfacility/ReqModifyWaterFacility.java b/src/main/java/com/nanjing/water/entity/request/waterfacility/ReqModifyWaterFacility.java
new file mode 100644
index 0000000..92accef
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/waterfacility/ReqModifyWaterFacility.java
@@ -0,0 +1,85 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.waterfacility;
+
+import lombok.Data;
+
+/**
+ * 设备信息
+ * @author lin.liu
+ */
+@Data
+public class ReqModifyWaterFacility {
+	/**
+	 * null
+	 */
+	private Long id;
+	/**
+	 * 设备名称
+	 */
+	private String facilityName;
+	/**
+	 * 设备编号
+	 */
+	private String facilityCode;
+	/**
+	 * 设备类型
+	 */
+	private Long facilityType;
+	/**
+	 * 监控点id
+	 */
+	private Long pointId;
+	/**
+	 * 安装日期
+	 */
+	private String installationDate;
+	/**
+	 * 是否在线
+	 */
+	private Integer isOnline;
+	/**
+	 * 地址
+	 */
+	private String address;
+	/**
+	 * 备注
+	 */
+	private String remark;
+	/**
+	 * 设备图片
+	 */
+	private String facilityUrl;
+	/**
+	 * 最新数据上报时间间隔(单位分钟)
+	 */
+	private Integer newIntervalTime;
+	/**
+	 * 历史数据上报时间间隔(单位分钟)
+	 */
+	private Integer historyIntervalTime;
+	/**
+	 * 水位采集时间间隔(单位分钟)
+	 */
+	private Integer gatherIntervalTime;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqAddParameter.java b/src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqAddParameter.java
new file mode 100644
index 0000000..a8e70de
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqAddParameter.java
@@ -0,0 +1,18 @@
+package com.nanjing.water.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/nanjing/water/entity/request/waterfacilityparameter/ReqCreateWaterFacilityParameter.java b/src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqCreateWaterFacilityParameter.java
new file mode 100644
index 0000000..192938c
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqCreateWaterFacilityParameter.java
@@ -0,0 +1,53 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.waterfacilityparameter;
+
+import lombok.Data;
+
+/**
+ * 设备设定参数
+ * @author lin.liu
+ */
+@Data
+public class ReqCreateWaterFacilityParameter {
+	/**
+	 * 设备id
+	 */
+	private Long facilityId;
+	/**
+	 * 设备code
+	 */
+	private String facilityCode;
+	/**
+	 * 参数编码
+	 */
+	private String columnsCode;
+	/**
+	 * 参数名称
+	 */
+	private String columnsShow;
+	/**
+	 * 锟斤拷位
+	 */
+	private String columnsUnits;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqModifyWaterFacilityParameter.java b/src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqModifyWaterFacilityParameter.java
new file mode 100644
index 0000000..b6fb539
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqModifyWaterFacilityParameter.java
@@ -0,0 +1,59 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.waterfacilityparameter;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 设备设定参数
+ * @author lin.liu
+ */
+@Data
+public class ReqModifyWaterFacilityParameter {
+	/**
+	 * 主键id
+	 */
+	private Long id;
+	/**
+	 * 设备id
+	 */
+	private Long facilityId;
+	/**
+	 * 参数编码
+	 */
+	private String columnsCode;
+	/**
+	 * 参数名称
+	 */
+	private BigDecimal columnsShow;
+	/**
+	 * 锟斤拷位
+	 */
+	private String columnsUnits;
+	/**
+	 * 设备code
+	 */
+	private String facilityCode;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqPointAndParameter.java b/src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqPointAndParameter.java
new file mode 100644
index 0000000..e5fb9eb
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/waterfacilityparameter/ReqPointAndParameter.java
@@ -0,0 +1,17 @@
+package com.nanjing.water.entity.request.waterfacilityparameter;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReqPointAndParameter {
+    /**
+     * 监控点id
+     */
+    private Long pointId;
+    /**
+     * 参数列表
+     */
+    private List<String> columnsCode;
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/waterfacilitytype/ReqCreateWaterFacilityType.java b/src/main/java/com/nanjing/water/entity/request/waterfacilitytype/ReqCreateWaterFacilityType.java
new file mode 100644
index 0000000..0b9e8ed
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/waterfacilitytype/ReqCreateWaterFacilityType.java
@@ -0,0 +1,53 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.waterfacilitytype;
+
+/**
+ * 设备类型
+ * @author lin.liu
+ */
+
+public class ReqCreateWaterFacilityType {
+	/**
+	 * 编码
+	 */
+	private String code;
+	/**
+	 * 名称
+	 */
+	private String name;
+
+	public String getCode() {
+		return this.code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/waterfacilitytype/ReqModifyWaterFacilityType.java b/src/main/java/com/nanjing/water/entity/request/waterfacilitytype/ReqModifyWaterFacilityType.java
new file mode 100644
index 0000000..3720595
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/waterfacilitytype/ReqModifyWaterFacilityType.java
@@ -0,0 +1,64 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.waterfacilitytype;
+
+/**
+ * 设备类型
+ * @author lin.liu
+ */
+
+public class ReqModifyWaterFacilityType {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 编码
+	 */
+	private String code;
+	/**
+	 * 名称
+	 */
+	private String name;
+
+	public Long getId() {
+		return this.id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getCode() {
+		return this.code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/watermonitorypoint/ReqCreateWaterMonitoryPoint.java b/src/main/java/com/nanjing/water/entity/request/watermonitorypoint/ReqCreateWaterMonitoryPoint.java
new file mode 100644
index 0000000..6eb18fa
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/watermonitorypoint/ReqCreateWaterMonitoryPoint.java
@@ -0,0 +1,64 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.watermonitorypoint;
+
+import lombok.Data;
+
+/**
+ * 监控点
+ * @author lin.liu
+ */
+@Data
+public class ReqCreateWaterMonitoryPoint {
+	/**
+	 * 监控点类型
+	 */
+	private Integer pointType;
+	/**
+	 * 父级id
+	 */
+	private Long parentId;
+	/**
+	 * 监控点编号
+	 * @required
+	 */
+	private String pointCode;
+	/**
+	 * 监控点名称
+	 * @required
+	 */
+	private String pointName;
+	/**
+	 * 详细地址
+	 */
+	private String address;
+	/**
+	 * 监控点图片
+	 */
+	private String imageUrl;
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/request/watermonitorypoint/ReqModifyWaterMonitoryPoint.java b/src/main/java/com/nanjing/water/entity/request/watermonitorypoint/ReqModifyWaterMonitoryPoint.java
new file mode 100644
index 0000000..b2ecf21
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/request/watermonitorypoint/ReqModifyWaterMonitoryPoint.java
@@ -0,0 +1,68 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.entity.request.watermonitorypoint;
+
+import lombok.Data;
+
+/**
+ * 监控点
+ * @author lin.liu
+ */
+@Data
+public class ReqModifyWaterMonitoryPoint {
+	/**
+	 * 主键id
+	 */
+	private Long id;
+	/**
+	 * 监控点类型
+	 */
+	private Integer pointType;
+	/**
+	 * 父级id
+	 */
+	private Long parentId;
+	/**
+	 * 监控点编号
+	 * @required
+	 */
+	private String pointCode;
+	/**
+	 * 监控点名称
+	 * @required
+	 */
+	private String pointName;
+	/**
+	 * 监控点图片
+	 */
+	private String imageUrl;
+	/**
+	 * 详细地址
+	 */
+	private String address;
+	/**
+	 * 备注
+	 */
+	private String remark;
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/admin/ResAdminLogin.java b/src/main/java/com/nanjing/water/entity/response/admin/ResAdminLogin.java
new file mode 100644
index 0000000..8afdb5a
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/admin/ResAdminLogin.java
@@ -0,0 +1,35 @@
+package com.nanjing.water.entity.response.admin;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResAdminLogin {
+    /**
+     * 管理员id
+     */
+    private Long id;
+    /**
+     * 用户类型 EUserType
+     */
+    private Integer userType;
+
+    /**
+     * 管理员名称
+     */
+    private String name;
+
+    /**
+     * 请求令牌
+     */
+    private String token;
+    /**
+     * 菜单列表
+     */
+    private List<ResAdminMenuTree> menus;
+    /**
+     * 权限列表
+     */
+    private List<String> listPermission;
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/admin/ResAdminMenuTree.java b/src/main/java/com/nanjing/water/entity/response/admin/ResAdminMenuTree.java
new file mode 100644
index 0000000..f81f776
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/admin/ResAdminMenuTree.java
@@ -0,0 +1,50 @@
+package com.nanjing.water.entity.response.admin;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResAdminMenuTree {
+    /**
+     * 菜单id
+     */
+    private Long id;
+    /**
+     * 类型 EMenuType
+     * @required
+     */
+    private Integer type;
+    /**
+     * 父级ID
+     */
+    private Long parentId;
+    /**
+     * 菜单名称
+     */
+    private String name;
+    /**
+     * 菜单标题
+     */
+    private String title;
+    /**
+     * 前端资源路径
+     */
+    private String url;
+    /**
+     * 菜单层级
+     */
+    private Integer level;
+    /**
+     * 排序 越大越靠前
+     */
+    private Integer sort;
+    /**
+     * 图标
+     */
+    private String icon;
+    /**
+     * 子级菜单列表
+     */
+    private List<ResAdminMenuTreeAndPermission> children;
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/admin/ResAdminMenuTreeAndPermission.java b/src/main/java/com/nanjing/water/entity/response/admin/ResAdminMenuTreeAndPermission.java
new file mode 100644
index 0000000..55c4265
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/admin/ResAdminMenuTreeAndPermission.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.response.admin;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResAdminMenuTreeAndPermission extends ResAdminMenuTree {
+    /**
+     * 权限列表
+     */
+    private List<ResAdminPermission> permissions;
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/admin/ResAdminPermission.java b/src/main/java/com/nanjing/water/entity/response/admin/ResAdminPermission.java
new file mode 100644
index 0000000..b5c01e1
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/admin/ResAdminPermission.java
@@ -0,0 +1,28 @@
+package com.nanjing.water.entity.response.admin;
+
+import lombok.Data;
+
+@Data
+public class ResAdminPermission {
+    /**
+     * 权限id
+     */
+    private Long id;
+    /**
+     * 权限值
+     */
+    private String sn;
+    /**
+     * 菜单id
+     */
+    private Long menuId;
+
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 状态 EState
+     */
+    private Integer status;
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/admin/ResAdminPower.java b/src/main/java/com/nanjing/water/entity/response/admin/ResAdminPower.java
new file mode 100644
index 0000000..99042ec
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/admin/ResAdminPower.java
@@ -0,0 +1,18 @@
+package com.nanjing.water.entity.response.admin;
+
+import com.nanjing.water.repository.vo.AdminMenuVO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResAdminPower {
+    /**
+     * 菜单列表
+     */
+    private List<AdminMenuVO> menus;
+    /**
+     * 权限列表
+     */
+    private List<ResAdminPermission> permissions;
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointData.java b/src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointData.java
new file mode 100644
index 0000000..090f5b3
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointData.java
@@ -0,0 +1,12 @@
+package com.nanjing.water.entity.response.point;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResMonitoryPointData {
+    private String pointCode;
+    private String pointName;
+    private List<ResMonitoryPointDataFacility> data;
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointDataFacility.java b/src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointDataFacility.java
new file mode 100644
index 0000000..926d364
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointDataFacility.java
@@ -0,0 +1,12 @@
+package com.nanjing.water.entity.response.point;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResMonitoryPointDataFacility {
+    private String facilityCode;
+    private String facilityName;
+    private List<ResMonitoryPointDataFacilityParameter> data;
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointDataFacilityParameter.java b/src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointDataFacilityParameter.java
new file mode 100644
index 0000000..43b3664
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/point/ResMonitoryPointDataFacilityParameter.java
@@ -0,0 +1,12 @@
+package com.nanjing.water.entity.response.point;
+
+import lombok.Data;
+
+@Data
+public class ResMonitoryPointDataFacilityParameter {
+    private String mark;
+    private String name;
+    private String value;
+    private String unit;
+    private String lastTime;
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/region/ResBasicRegionTree.java b/src/main/java/com/nanjing/water/entity/response/region/ResBasicRegionTree.java
new file mode 100644
index 0000000..584199b
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/region/ResBasicRegionTree.java
@@ -0,0 +1,127 @@
+package com.nanjing.water.entity.response.region;
+
+import java.util.List;
+
+public class ResBasicRegionTree {
+    /**
+     * 主键id
+     */
+    private Long id;
+
+    /**
+     * 区域编码
+     */
+    private String code;
+    /**
+     * 父级编码
+     */
+    private String parentCode;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 简称
+     */
+    private String shortName;
+    /**
+     * 层级
+     */
+    private Integer level;
+    /**
+     * 拼音
+     */
+    private String pinYin;
+    /**
+     * 拼音简写
+     */
+    private String pinYinShort;
+    /**
+     * 父级ID
+     */
+    private String parentId;
+    /**
+     * 子级列表
+     */
+    private List<ResBasicRegionTree> children;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getParentCode() {
+        return parentCode;
+    }
+
+    public void setParentCode(String parentCode) {
+        this.parentCode = parentCode;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getShortName() {
+        return shortName;
+    }
+
+    public void setShortName(String shortName) {
+        this.shortName = shortName;
+    }
+
+    public Integer getLevel() {
+        return level;
+    }
+
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    public String getPinYin() {
+        return pinYin;
+    }
+
+    public void setPinYin(String pinYin) {
+        this.pinYin = pinYin;
+    }
+
+    public String getPinYinShort() {
+        return pinYinShort;
+    }
+
+    public void setPinYinShort(String pinYinShort) {
+        this.pinYinShort = pinYinShort;
+    }
+
+    public String getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(String parentId) {
+        this.parentId = parentId;
+    }
+
+    public List<ResBasicRegionTree> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<ResBasicRegionTree> children) {
+        this.children = children;
+    }
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/region/ResRegionTree.java b/src/main/java/com/nanjing/water/entity/response/region/ResRegionTree.java
new file mode 100644
index 0000000..20816a2
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/region/ResRegionTree.java
@@ -0,0 +1,45 @@
+package com.nanjing.water.entity.response.region;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResRegionTree {
+    /**
+     * id
+     */
+    private Long id;
+    /**
+     * 编码
+     */
+    private String code;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 简称
+     */
+    private String shortName;
+    /**
+     * 层级
+     */
+    private Integer level;
+    /**
+     * 拼音
+     */
+    private String pinYin;
+    /**
+     * 拼音简写
+     */
+    private String pinYinShort;
+    /**
+     * 父级编码
+     */
+    private String parentCode;
+    /**
+     * 子级列表
+     */
+    private List<ResRegionTree> children;
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/statistics/ResGetTodayStatistics.java b/src/main/java/com/nanjing/water/entity/response/statistics/ResGetTodayStatistics.java
new file mode 100644
index 0000000..5112cc3
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/statistics/ResGetTodayStatistics.java
@@ -0,0 +1,18 @@
+package com.nanjing.water.entity.response.statistics;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResGetTodayStatistics {
+    /**
+     * 统计时间点列表
+     */
+    private List<String> listTime;
+
+    /**
+     * 统计数据
+     */
+    private List<ResStatisticsItem> list;
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/statistics/ResStatistics4DateAndType.java b/src/main/java/com/nanjing/water/entity/response/statistics/ResStatistics4DateAndType.java
new file mode 100644
index 0000000..44fd1d9
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/statistics/ResStatistics4DateAndType.java
@@ -0,0 +1,18 @@
+package com.nanjing.water.entity.response.statistics;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResStatistics4DateAndType {
+    /**
+     * 统计日期列表
+     */
+    private List<String> listDate;
+
+    /**
+     * 统计数据
+     */
+    private List<ResStatisticsItem> list;
+}
diff --git a/src/main/java/com/nanjing/water/entity/response/statistics/ResStatisticsItem.java b/src/main/java/com/nanjing/water/entity/response/statistics/ResStatisticsItem.java
new file mode 100644
index 0000000..1e79066
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/response/statistics/ResStatisticsItem.java
@@ -0,0 +1,29 @@
+package com.nanjing.water.entity.response.statistics;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResStatisticsItem {
+    /**
+     * 参数标识
+     */
+    private String mark;
+    /**
+     * 参数名称
+     */
+    private String markName;
+    /**
+     * 最大值列表
+     */
+    private List<String> maxValList;
+    /**
+     * 最小值列表
+     */
+    private List<String> minValList;
+    /**
+     * 平均值列表
+     */
+    private List<String> aveValList;
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchAdminMenu.java b/src/main/java/com/nanjing/water/entity/search/SearchAdminMenu.java
new file mode 100644
index 0000000..910400a
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchAdminMenu.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 后台菜单
+ * @author lin.liu
+ */
+@Data
+public class SearchAdminMenu extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchAdminMenus.java b/src/main/java/com/nanjing/water/entity/search/SearchAdminMenus.java
new file mode 100644
index 0000000..e36519c
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchAdminMenus.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 菜单信息
+ * @author lin.liu
+ */
+@Data
+public class SearchAdminMenus extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchAdminPermission.java b/src/main/java/com/nanjing/water/entity/search/SearchAdminPermission.java
new file mode 100644
index 0000000..dc950b9
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchAdminPermission.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 后台用户权限表
+ * @author lin.liu
+ */
+@Data
+public class SearchAdminPermission extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchAdminRole.java b/src/main/java/com/nanjing/water/entity/search/SearchAdminRole.java
new file mode 100644
index 0000000..eb49cb3
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchAdminRole.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 后台用户角色表
+ * @author lin.liu
+ */
+@Data
+public class SearchAdminRole extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchAdminRoleMenuRelation.java b/src/main/java/com/nanjing/water/entity/search/SearchAdminRoleMenuRelation.java
new file mode 100644
index 0000000..a4ddbaf
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchAdminRoleMenuRelation.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 后台角色菜单关系表
+ * @author lin.liu
+ */
+@Data
+public class SearchAdminRoleMenuRelation extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchAdminRolePermissionRelation.java b/src/main/java/com/nanjing/water/entity/search/SearchAdminRolePermissionRelation.java
new file mode 100644
index 0000000..e7426c3
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchAdminRolePermissionRelation.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 后台角色权限关系表
+ * @author lin.liu
+ */
+@Data
+public class SearchAdminRolePermissionRelation extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchAdminRoleRelation.java b/src/main/java/com/nanjing/water/entity/search/SearchAdminRoleRelation.java
new file mode 100644
index 0000000..4b4d845
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchAdminRoleRelation.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 后台用户和角色关系表
+ * @author lin.liu
+ */
+@Data
+public class SearchAdminRoleRelation extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchAdminUser.java b/src/main/java/com/nanjing/water/entity/search/SearchAdminUser.java
new file mode 100644
index 0000000..49b16da
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchAdminUser.java
@@ -0,0 +1,26 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 管理员帐号
+ * @author lin.liu
+ */
+@Data
+public class SearchAdminUser extends SearchBasicDTO {
+    @Override
+    public String toString() {
+        return "SearchAdminUser{" + "'" +
+                "keywords='" + getKeywords() +
+                ", listId =" + getListId() +
+                ", status =" + getStatus() +
+                ", listStatus =" + getListStatus() +
+                ", createTimeRange='" + getCreateTimeRange() + "'" +
+                ", createTimeStart =" + getCreateTimeEnd() +
+                ", createTimeEnd =" + getCreateTimeEnd() +
+                ", lastId =" + getListId() +
+                ", orderBy='" + getOrderBy() + "'" +
+                '}';
+    }
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchAlarmHistory.java b/src/main/java/com/nanjing/water/entity/search/SearchAlarmHistory.java
new file mode 100644
index 0000000..89779da
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchAlarmHistory.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 报警信息
+ * @author lin.liu
+ */
+@Data
+public class SearchAlarmHistory extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchAlarmScheme.java b/src/main/java/com/nanjing/water/entity/search/SearchAlarmScheme.java
new file mode 100644
index 0000000..0dd5769
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchAlarmScheme.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 报警方案设置
+ * @author lin.liu
+ */
+@Data
+public class SearchAlarmScheme extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchCommonParameters.java b/src/main/java/com/nanjing/water/entity/search/SearchCommonParameters.java
new file mode 100644
index 0000000..29a0a12
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchCommonParameters.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 公共参数
+ * @author lin.liu
+ */
+@Data
+public class SearchCommonParameters extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchSysDictData.java b/src/main/java/com/nanjing/water/entity/search/SearchSysDictData.java
new file mode 100644
index 0000000..cf16fea
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchSysDictData.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 字典数据表
+ * @author lin.liu
+ */
+@Data
+public class SearchSysDictData extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchSysDictType.java b/src/main/java/com/nanjing/water/entity/search/SearchSysDictType.java
new file mode 100644
index 0000000..a5d503c
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchSysDictType.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 字典类型表
+ * @author lin.liu
+ */
+@Data
+public class SearchSysDictType extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchSysRegion.java b/src/main/java/com/nanjing/water/entity/search/SearchSysRegion.java
new file mode 100644
index 0000000..33f0ae2
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchSysRegion.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 系统行政地区
+ * @author lin.liu
+ */
+@Data
+public class SearchSysRegion extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchWaterFacility.java b/src/main/java/com/nanjing/water/entity/search/SearchWaterFacility.java
new file mode 100644
index 0000000..351a540
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchWaterFacility.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 设备信息
+ * @author lin.liu
+ */
+@Data
+public class SearchWaterFacility extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchWaterFacilityParameter.java b/src/main/java/com/nanjing/water/entity/search/SearchWaterFacilityParameter.java
new file mode 100644
index 0000000..fbd9216
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchWaterFacilityParameter.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 设备设定参数
+ * @author lin.liu
+ */
+@Data
+public class SearchWaterFacilityParameter extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchWaterFacilityType.java b/src/main/java/com/nanjing/water/entity/search/SearchWaterFacilityType.java
new file mode 100644
index 0000000..25741ba
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchWaterFacilityType.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 设备类型
+ * @author lin.liu
+ */
+@Data
+public class SearchWaterFacilityType extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/entity/search/SearchWaterMonitoryPoint.java b/src/main/java/com/nanjing/water/entity/search/SearchWaterMonitoryPoint.java
new file mode 100644
index 0000000..ac55fe5
--- /dev/null
+++ b/src/main/java/com/nanjing/water/entity/search/SearchWaterMonitoryPoint.java
@@ -0,0 +1,13 @@
+package com.nanjing.water.entity.search;
+
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import lombok.Data;
+
+/**
+ * 监控点
+ * @author lin.liu
+ */
+@Data
+public class SearchWaterMonitoryPoint extends SearchBasicDTO {
+
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/WaterFacilityController.java b/src/main/java/com/nanjing/water/host/controller/WaterFacilityController.java
new file mode 100644
index 0000000..3534961
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/WaterFacilityController.java
@@ -0,0 +1,163 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.host.controller;
+
+import com.nanjing.water.common.ConstantFactory;
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.util.IPUtils;
+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.waterfacility.ReqCreateWaterFacility;
+import com.nanjing.water.entity.request.waterfacility.ReqModifyWaterFacility;
+
+import com.nanjing.water.entity.response.point.ResMonitoryPointDataFacility;
+import com.nanjing.water.entity.search.SearchWaterFacility;
+import com.nanjing.water.host.BasicController;
+import com.nanjing.water.repository.vo.WaterFacilityVO;
+import com.nanjing.water.service.WaterFacilityService;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * 150.设备信息
+ * @author lin.liu
+ * @order 150
+ */
+@RestController
+@RequestMapping(value = "waterFacility")
+public class WaterFacilityController extends BasicController {
+    @Autowired
+    private WaterFacilityService service;
+
+    /**
+     * 创建[设备表]
+     * @author lin.liu
+     * @description 创建[设备表]
+     */
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateWaterFacility request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                // 非空
+                .addNotNullOrEmpty(ParameterUtil.named("设备编号"), request.getFacilityCode())
+                // 限制最大长度
+                .addLengthMax(ParameterUtil.named("设备编号"), request.getFacilityCode(), ConstantFactory.LENGTH_MAX50)
+                // 非空
+                .addNotNullOrEmpty(ParameterUtil.named("设备名称"), request.getFacilityName())
+                // 限制最大长度
+                .addLengthMax(ParameterUtil.named("设备名称"), request.getFacilityName(), ConstantFactory.LENGTH_MAX200)
+                // 大于0
+                .addGreater(ParameterUtil.named("设备类型"), request.getFacilityType(), 0L)
+
+                // 限制最大长度
+                .addLengthMax(ParameterUtil.named("备注"), request.getRemark(), ConstantFactory.LENGTH_MAX1000)
+                // 限制最大长度
+                .addLengthMax(ParameterUtil.named("设备图片"), request.getFacilityUrl(), ConstantFactory.LENGTH_MAX200)
+                ;
+        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 ReqModifyWaterFacility request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                // 必须大于0
+                .addGreater(ParameterUtil.named("设备id"), request.getId(), 0L)
+                // 非空
+                .addNotNullOrEmpty(ParameterUtil.named("设备编号"), request.getFacilityCode())
+                // 限制最大长度
+                .addLengthMax(ParameterUtil.named("设备编号"), request.getFacilityCode(), ConstantFactory.LENGTH_MAX50)
+                // 非空
+                .addNotNullOrEmpty(ParameterUtil.named("设备名称"), request.getFacilityName())
+                // 限制最大长度
+                .addLengthMax(ParameterUtil.named("设备名称"), request.getFacilityName(), ConstantFactory.LENGTH_MAX200)
+                // 大于0
+                .addGreater(ParameterUtil.named("设备类型"), request.getFacilityType(), 0L)
+                // 限制最大长度
+                .addLengthMax(ParameterUtil.named("备注"), request.getRemark(), ConstantFactory.LENGTH_MAX1000)
+                // 限制最大长度
+                .addLengthMax(ParameterUtil.named("设备图片"), request.getFacilityUrl(), ConstantFactory.LENGTH_MAX200)
+                ;
+        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<WaterFacilityVO> get(@RequestParam Long id) {
+        return this.service.get(id);
+    }
+
+    /**
+     * 查询[设备表]
+     * @author lin.liu
+     * @description 查询[设备表]
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<WaterFacilityVO>> search(@RequestBody SearchWaterFacility request) {
+        return this.service.search(request);
+    }
+
+//    /**
+//     * 设备开关阀
+//     * @author lin.liu
+//     * @description 设备开阀
+//     */
+//    @PostMapping(value = "openOrClose")
+//    public ExecutedResult<String> open(@RequestBody ReqOpenAdnClose po, HttpServletRequest request) throws MqttException {
+//        return this.service.openOrClose(po,this.getTokenUser(), IPUtils.getIpAddress(request));
+//    }
+
+    /**
+     * 获取指定监控点最新数据
+     * @author lin.liu
+     */
+    @GetMapping(value = "listData/{pointId}")
+    public ExecutedResult<List<ResMonitoryPointDataFacility>> listData(@PathVariable Long pointId) {
+        return this.service.listData(pointId);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/WaterFacilityParameterController.java b/src/main/java/com/nanjing/water/host/controller/WaterFacilityParameterController.java
new file mode 100644
index 0000000..9323370
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/WaterFacilityParameterController.java
@@ -0,0 +1,129 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.waterfacilityparameter.ReqAddParameter;
+import com.nanjing.water.entity.request.waterfacilityparameter.ReqModifyWaterFacilityParameter;
+import com.nanjing.water.entity.search.SearchWaterFacilityParameter;
+import com.nanjing.water.host.BasicController;
+import com.nanjing.water.repository.po.WaterFacilityParameterPO;
+import com.nanjing.water.repository.vo.WaterFacilityParameterVO;
+import com.nanjing.water.service.WaterFacilityParameterService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 151.设备设定参数
+ * @author lin.liu
+ * @order 151
+ */
+@RestController
+@RequestMapping(value = "waterFacilityParameter")
+public class WaterFacilityParameterController extends BasicController {
+    @Autowired
+    private WaterFacilityParameterService service;
+
+    /**
+     * 创建[设备设定参数]
+     * @author lin.liu
+     * @description 创建[设备设定参数]
+     */
+    @PostMapping(value = "create")
+    public ExecutedResult<String> create(@RequestBody ReqAddParameter request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                // 非空
+                .addNotNullOrEmpty(ParameterUtil.named("设备id"), request.getFacilityId())
+                .addNotNullOrEmpty(ParameterUtil.named("参数列表"), request.getParameterList())
+                // 限制最大长度
+                //.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 ReqModifyWaterFacilityParameter 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<WaterFacilityParameterVO> get(@RequestParam Long id) {
+        return this.service.get(id);
+    }
+
+    /**
+     * 根据设备id获取设备绑定参数列表
+     * @author lin.liu
+     * @description 根据设备id获取设备绑定参数列表
+     */
+    @GetMapping(value = "getListByFacilityId")
+    public ExecutedResult<List<WaterFacilityParameterPO>> getListByFacilityId(@RequestParam Long facilityId) {
+        return this.service.getListByFacilityId(facilityId);
+    }
+
+    /**
+     * 查询[设备设定参数]
+     * @author lin.liu
+     * @description 查询[设备设定参数]
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<WaterFacilityParameterVO>> search(@RequestBody SearchWaterFacilityParameter request) {
+        return this.service.search(request);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/WaterFacilityTypeController.java b/src/main/java/com/nanjing/water/host/controller/WaterFacilityTypeController.java
new file mode 100644
index 0000000..542a9f3
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/WaterFacilityTypeController.java
@@ -0,0 +1,125 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.waterfacilitytype.ReqCreateWaterFacilityType;
+import com.nanjing.water.entity.request.waterfacilitytype.ReqModifyWaterFacilityType;
+import com.nanjing.water.entity.search.SearchWaterFacilityType;
+import com.nanjing.water.host.BasicController;
+import com.nanjing.water.repository.vo.WaterFacilityTypeVO;
+import com.nanjing.water.service.WaterFacilityTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 130.设备类型
+ * @author lin.liu
+ * @order 130
+ */
+@RestController
+@RequestMapping(value = "waterFacilityType")
+public class WaterFacilityTypeController extends BasicController {
+    @Autowired
+    private WaterFacilityTypeService service;
+
+    /**
+     * 创建[设备类型表]
+     * @author lin.liu
+     * @description 创建[设备类型表]
+     */
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateWaterFacilityType 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 this.service.create(request);
+    }
+
+    /**
+     * 编辑[设备类型表]
+     * @author lin.liu
+     * @description 编辑[设备类型表]
+     */
+    @PostMapping(value = "modify")
+    public ExecutedResult<String> modify(@RequestBody ReqModifyWaterFacilityType 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);
+    }
+    /**
+     * 删除设备类型表
+     *
+     * @param id 删除设备类型表
+     * @author li。ling。yu
+     * @date 2023/07/17
+     */
+    @PostMapping(value = "remove")
+    public ExecutedResult<String> remove(@RequestParam Long id) {
+        return this.service.remove(id);
+    }
+    /**
+     * 获取[设备类型表]
+     * @author lin.liu
+     * @description 获取[设备类型表]
+     */
+    @GetMapping(value = "get")
+    public ExecutedResult<WaterFacilityTypeVO> get(@RequestParam Long id) {
+        return this.service.get(id);
+    }
+
+    /**
+     * 查询[设备类型表]
+     * @author lin.liu
+     * @description 查询[设备类型表]
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<WaterFacilityTypeVO>> search(@RequestBody SearchWaterFacilityType request) {
+        return this.service.search(request);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/WaterMonitoryPointController.java b/src/main/java/com/nanjing/water/host/controller/WaterMonitoryPointController.java
new file mode 100644
index 0000000..fcf6922
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/WaterMonitoryPointController.java
@@ -0,0 +1,131 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.host.controller;
+
+import com.nanjing.water.common.ConstantFactory;
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.util.ListUtil;
+import com.nanjing.water.common.util.ParameterUtil;
+import com.nanjing.water.common.util.StringUtil;
+import com.nanjing.water.common.validator.ParameterValidateResult;
+import com.nanjing.water.common.validator.ParameterValidator;
+import com.nanjing.water.entity.request.watermonitorypoint.ReqCreateWaterMonitoryPoint;
+import com.nanjing.water.entity.request.watermonitorypoint.ReqModifyWaterMonitoryPoint;
+import com.nanjing.water.entity.response.point.ResMonitoryPointData;
+import com.nanjing.water.entity.search.SearchWaterMonitoryPoint;
+import com.nanjing.water.host.BasicController;
+import com.nanjing.water.repository.vo.WaterMonitoryPointVO;
+import com.nanjing.water.service.WaterMonitoryPointService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 140.监控点
+ * @author lin.liu
+ * @order 140
+ */
+@RestController
+@RequestMapping(value = "waterMonitoryPoint")
+public class WaterMonitoryPointController extends BasicController {
+    @Autowired
+    private WaterMonitoryPointService service;
+
+    /**
+     * 创建[监控点]
+     * @author lin.liu
+     * @description 创建[监控点]
+     */
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateWaterMonitoryPoint request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                // 非空
+                .addNotNullOrEmpty(ParameterUtil.named("监控点名称"), request.getPointName())
+                // 限制最大长度
+                .addLengthMax(ParameterUtil.named("监控点名称"), request.getPointName(), ConstantFactory.LENGTH_MAX200);
+
+        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 ReqModifyWaterMonitoryPoint request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                // 必须大于0
+                .addGreater(ParameterUtil.named("监控id"), request.getId(), 0L)
+                // 非空
+                .addNotNullOrEmpty(ParameterUtil.named("监控点名称"), request.getPointName())
+                // 限制最大长度
+                .addLengthMax(ParameterUtil.named("监控点名称"), request.getPointName(), ConstantFactory.LENGTH_MAX200);
+
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.modify(request);
+    }
+    /**
+     * 删除监控点
+     *
+     * @param id 删除监控点
+     * @author li。ling。yu
+     * @date 2023/07/17
+     */
+    @PostMapping(value = "remove")
+    public ExecutedResult<String> remove(@RequestParam Long id) {
+        return this.service.remove(id);
+    }
+
+    /**
+     * 查询监控点
+     * @author lin.liu
+     * @description 查询监控点
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<WaterMonitoryPointVO>> search(@RequestBody SearchWaterMonitoryPoint request) {
+        return this.service.search(request);
+    }
+
+    /**
+     * 所有监控点最新数据
+     * @author lin.liu
+     */
+    @GetMapping(value = "listData")
+    public ExecutedResult<List<ResMonitoryPointData>> listData() {
+        return this.service.listData();
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/admin/AdminMenuController.java b/src/main/java/com/nanjing/water/host/controller/admin/AdminMenuController.java
new file mode 100644
index 0000000..4e8926c
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/admin/AdminMenuController.java
@@ -0,0 +1,273 @@
+package com.nanjing.water.host.controller.admin;
+
+import com.nanjing.water.common.ConstantFactory;
+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.enums.EMenuType;
+import com.nanjing.water.entity.enums.EState;
+import com.nanjing.water.entity.request.ReqListId;
+import com.nanjing.water.entity.request.ReqListSetSort;
+import com.nanjing.water.entity.request.ReqSetSort;
+import com.nanjing.water.entity.request.adminmenu.ReqCreateAdminMenu;
+import com.nanjing.water.entity.request.adminmenu.ReqModifyAdminMenu;
+import com.nanjing.water.entity.response.admin.ResAdminMenuTreeAndPermission;
+import com.nanjing.water.entity.search.SearchAdminMenu;
+import com.nanjing.water.host.BasicController;
+import com.nanjing.water.host.api.MustAdmin;
+import com.nanjing.water.repository.vo.AdminMenuVO;
+import com.nanjing.water.service.AdminPowerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 10.菜单相关接口
+ *
+ * @author lin.liu
+ * @date 2023/02/17
+ * @order 10
+ */
+@RestController
+@RequestMapping(value = "admin/menu")
+public class AdminMenuController extends BasicController {
+    @Autowired
+    private AdminPowerService service;
+
+    /**
+     * 创建菜单
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateAdminMenu request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                // 必须是枚举值
+                .addMustEnum(ParameterUtil.named("类型"), request.getType(), EMenuType.class)
+                // 非空
+                .addNotNullOrEmpty(ParameterUtil.named("菜单名称"), request.getName())
+                // 限制长度
+                .addLengthMax(ParameterUtil.named("菜单名称"), request.getName(), ConstantFactory.LENGTH_MAX20)
+                // 限制长度
+                .addLengthMax(ParameterUtil.named("菜单标题"), request.getTitle(), ConstantFactory.LENGTH_MAX100)
+                // 限制长度
+                .addLengthMax(ParameterUtil.named("前端资源路径"), request.getUrl(), ConstantFactory.LENGTH_MAX200)
+                // 限制长度
+                .addLengthMax(ParameterUtil.named("图标"), request.getIcon(), ConstantFactory.LENGTH_MAX200)
+                ;
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.createMenu(request);
+    }
+
+    /**
+     * 编辑菜单
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "modify")
+    public ExecutedResult<String> modify(@RequestBody ReqModifyAdminMenu request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                // 必须是枚举值
+                .addMustEnum(ParameterUtil.named("类型"), request.getType(), EMenuType.class)
+                // 非空
+                .addNotNullOrEmpty(ParameterUtil.named("菜单名称"), request.getName())
+                // 限制长度
+                .addLengthMax(ParameterUtil.named("菜单名称"), request.getName(), ConstantFactory.LENGTH_MAX20)
+                // 限制长度
+                .addLengthMax(ParameterUtil.named("菜单标题"), request.getTitle(), ConstantFactory.LENGTH_MAX100)
+                // 限制长度
+                .addLengthMax(ParameterUtil.named("前端资源路径"), request.getUrl(), ConstantFactory.LENGTH_MAX200)
+                // 限制长度
+                .addLengthMax(ParameterUtil.named("图标"), request.getIcon(), ConstantFactory.LENGTH_MAX200)
+                ;
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.modifyMenu(request);
+    }
+
+    /**
+     * 停用菜单
+     *
+     * @param menuId 菜单id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "stop/{menuId}")
+    public ExecutedResult<String> stop(@PathVariable Long menuId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("菜单id"), menuId, 0L);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.changeMenuStatus(menuId, EState.DISABLED);
+    }
+
+    /**
+     * 启用菜单
+     *
+     * @param menuId 菜单id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "enable/menuId")
+    public ExecutedResult<String> enable(@PathVariable Long menuId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("菜单id"), menuId, 0L);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.changeMenuStatus(menuId, EState.NORMAL);
+    }
+
+    /**
+     * [菜单]设置排序值
+     *
+     * @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.setMenuSort(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.listSetMenuSort(request);
+    }
+
+    /**
+     * 删除菜单
+     *
+     * @param menuId 菜单id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "remove/{menuId}")
+    public ExecutedResult<String> remove(@PathVariable Long menuId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("菜单id"), menuId, 0L);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.removeMenu(menuId);
+    }
+
+    /**
+     * 批量删除[删除菜单]
+     *
+     * @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.removeMenuList(request.getListId());
+    }
+
+    /**
+     * 获取所有层级菜单(只返回状态正常的数据)
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @GetMapping(value = "getListTree")
+    public ExecutedResult<List<ResAdminMenuTreeAndPermission>> getListTree() {
+        return this.service.getListTreeMenu();
+    }
+
+    /**
+     * 获取指定菜单的子级菜单
+     *
+     * @param menuId 菜单id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @GetMapping(value = "getListChild/{menuId}")
+    public ExecutedResult<List<AdminMenuVO>> getListChild(@PathVariable Long menuId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("菜单id"), menuId, 0L);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.getListChildMenu(menuId);
+    }
+
+    /**
+     * 分页查询菜单
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<AdminMenuVO>> search(@RequestBody SearchAdminMenu request) {
+        return this.service.searchMenu(request);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/admin/AdminPermissionController.java b/src/main/java/com/nanjing/water/host/controller/admin/AdminPermissionController.java
new file mode 100644
index 0000000..8df6a33
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/admin/AdminPermissionController.java
@@ -0,0 +1,120 @@
+package com.nanjing.water.host.controller.admin;
+
+import com.nanjing.water.common.ConstantFactory;
+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.enums.EState;
+import com.nanjing.water.entity.request.adminpermission.ReqCreateAdminPermission;
+import com.nanjing.water.entity.request.adminpermission.ReqModifyAdminPermission;
+import com.nanjing.water.entity.response.admin.ResAdminPermission;
+import com.nanjing.water.entity.search.SearchAdminPermission;
+import com.nanjing.water.host.api.MustAdmin;
+import com.nanjing.water.service.AdminPowerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 20.权限相关接口
+ *
+ * @author lin.liu
+ * @date 2023/02/17
+ * @order 20
+ */
+@MustAdmin
+@RestController
+@RequestMapping(value = "admin/permission")
+public class AdminPermissionController {
+    @Autowired
+    private AdminPowerService service;
+
+
+    /**
+     * 创建权限
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateAdminPermission request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addNotNullOrEmpty(ParameterUtil.named("权限值"), request.getSn())
+                .addLengthMax(ParameterUtil.named("权限值"), request.getSn(), ConstantFactory.LENGTH_MAX50)
+                .addGreater(ParameterUtil.named("菜单id"), request.getMenuId(), 0)
+                .addLengthMax(ParameterUtil.named("前端资源url"), request.getMenuUrl(), ConstantFactory.LENGTH_MAX200)
+                .addNotNullOrEmpty(ParameterUtil.named("权限名称"), request.getName())
+                .addLengthMax(ParameterUtil.named("权限名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
+                .addLengthMax(ParameterUtil.named("图标"), request.getIcon(), ConstantFactory.LENGTH_MAX200)
+                .addLengthMax(ParameterUtil.named("类型"), request.getType(), ConstantFactory.LENGTH_MAX50)
+                ;
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.createPermission(request);
+    }
+
+    /**
+     * 编辑权限
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @PostMapping(value = "modify")
+    public ExecutedResult<String> modify(@RequestBody ReqModifyAdminPermission request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addNotNullOrEmpty(ParameterUtil.named("权限值"), request.getSn())
+                .addLengthMax(ParameterUtil.named("权限值"), request.getSn(), ConstantFactory.LENGTH_MAX50)
+                .addGreater(ParameterUtil.named("菜单id"), request.getMenuId(), 0)
+                .addLengthMax(ParameterUtil.named("前端资源url"), request.getMenuUrl(), ConstantFactory.LENGTH_MAX200)
+                .addNotNullOrEmpty(ParameterUtil.named("权限名称"), request.getName())
+                .addLengthMax(ParameterUtil.named("权限名称"), request.getName(), ConstantFactory.LENGTH_MAX50)
+                .addLengthMax(ParameterUtil.named("图标"), request.getIcon(), ConstantFactory.LENGTH_MAX200)
+                .addLengthMax(ParameterUtil.named("类型"), request.getType(), ConstantFactory.LENGTH_MAX50)
+                // 必须是枚举
+                .addMustEnum(ParameterUtil.named("状态"), request.getStatus(), EState.class)
+                ;
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.modifyPermission(request);
+    }
+
+    /**
+     * 删除权限
+     *
+     * @param powerId 权限id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @GetMapping(value = "remove/{powerId}")
+    public ExecutedResult<String> remove(@PathVariable Long powerId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("权限id"), powerId, 0L);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.removePermission(powerId);
+    }
+
+    /**
+     * 分页查询权限
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<ResAdminPermission>> search(@RequestBody SearchAdminPermission request) {
+        return this.service.searchPermission(request);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/admin/AdminRoleController.java b/src/main/java/com/nanjing/water/host/controller/admin/AdminRoleController.java
new file mode 100644
index 0000000..94b3837
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/admin/AdminRoleController.java
@@ -0,0 +1,321 @@
+package com.nanjing.water.host.controller.admin;
+
+import com.nanjing.water.common.ConstantFactory;
+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.enums.EState;
+import com.nanjing.water.entity.request.ReqListId;
+import com.nanjing.water.entity.request.ReqListSetSort;
+import com.nanjing.water.entity.request.ReqSetSort;
+import com.nanjing.water.entity.request.adminrole.ReqCreateAdminRole;
+import com.nanjing.water.entity.request.adminrole.ReqModifyAdminRole;
+import com.nanjing.water.entity.request.adminrolemenurelation.ReqSetListMenu4Role;
+import com.nanjing.water.entity.request.adminuser.ReqSetListRole4Admin;
+import com.nanjing.water.entity.response.admin.ResAdminPower;
+import com.nanjing.water.entity.search.SearchAdminRole;
+import com.nanjing.water.host.BasicController;
+import com.nanjing.water.host.api.MustAdmin;
+import com.nanjing.water.repository.vo.AdminRoleVO;
+import com.nanjing.water.service.AdminPowerService;
+import com.nanjing.water.service.AdminService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 30.角色相关接口
+ *
+ * @author lin.liu
+ * @date 2023/02/17
+ * @order 30
+ */
+
+@RestController
+@RequestMapping(value = "admin/role")
+public class AdminRoleController extends BasicController {
+    @Autowired
+    private AdminPowerService service;
+    @Autowired
+    private AdminService adminService;
+
+    /**
+     * 创建角色
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateAdminRole request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                // 非空
+                .addNotNullOrEmpty(ParameterUtil.named("角色名称"), request.getName())
+                // 限制长度
+                .addLengthMax(ParameterUtil.named("角色名称"), request.getName(), ConstantFactory.LENGTH_MAX20)
+                // 限制长度
+                .addLengthMax(ParameterUtil.named("描述"), request.getDescription(), ConstantFactory.LENGTH_MAX100)
+                ;
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.createRole(request);
+    }
+
+    /**
+     * 编辑角色
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "modify")
+    public ExecutedResult<String> modify(@RequestBody ReqModifyAdminRole 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_MAX100)
+                // 限制长度
+                .addLengthMax(ParameterUtil.named("描述"), request.getDescription(), ConstantFactory.LENGTH_MAX200)
+                // 必须是枚举值
+                .addMustEnum(ParameterUtil.named("状态"), request.getStatus(), EState.class)
+                ;
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.modifyRole(request);
+    }
+
+    /**
+     * 停用角色
+     *
+     * @param roleId 角色id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "stop/{roleId}")
+    public ExecutedResult<String> stop(@PathVariable Long roleId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("角色id"), roleId, 0L);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.changeRoleStatus(roleId, EState.DISABLED);
+    }
+
+    /**
+     * 启用角色
+     *
+     * @param roleId 角色id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "enable/{roleId}")
+    public ExecutedResult<String> enable(@PathVariable Long roleId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("角色id"), roleId, 0L);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.changeRoleStatus(roleId, EState.NORMAL);
+    }
+
+    /**
+     * [角色]设置排序值
+     *
+     * @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.setRoleSort(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.listSetRoleSort(request);
+    }
+
+    /**
+     * 删除角色
+     *
+     * @param roleId 角色id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "remove/{roleId}")
+    public ExecutedResult<String> remove(@PathVariable Long roleId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("角色id"), roleId, 0L);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.removeRole(roleId);
+    }
+
+    /**
+     * 批量删除角色
+     * @param request 请求参数
+     * @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.removeRoleList(request.getListId());
+    }
+
+    /**
+     * 分页查询角色
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<AdminRoleVO>> search(@RequestBody SearchAdminRole request) {
+        return this.service.searchRole(request);
+    }
+
+    /**
+     * 设置角色菜单权限列表
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "setListMenuAndPermission")
+    public ExecutedResult<String> setListMenuAndPermission(@RequestBody ReqSetListMenu4Role request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("角色id"), request.getId(), 0)
+        .addNotNullOrEmpty(ParameterUtil.named("菜单列表"), request.getListMenu())
+        .addNotNullOrEmpty(ParameterUtil.named("菜单权限列表"), request.getListMenu());
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.setListMenu4Role(request);
+    }
+
+    /**
+     * 获取角色菜单权限列表
+     *
+     * @param roleId 角色id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @GetMapping(value = "getListMenuAndPermission/{roleId}")
+    public ExecutedResult<ResAdminPower> getListMenuAndPermission(@PathVariable Long roleId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("角色id"), roleId, 0);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.getListMenu4Role(roleId);
+    }
+
+    /**
+     * 设置管理员的角色列表
+     *
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "setListRole4Admin")
+    public ExecutedResult<String> setListRole4Admin(@RequestBody ReqSetListRole4Admin request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("管理员id"), request.getId(), 0);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return adminService.setListRole4Admin(request);
+    }
+
+    /**
+     * 获取管理员的角色列表
+     *
+     * @param adminId 管理员id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @GetMapping(value = "getListRole4Admin")
+    public ExecutedResult<List<AdminRoleVO>> getListRole4Admin(@RequestParam Long adminId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("管理员id"), adminId, 0);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return adminService.getListRole4Admin(adminId);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/admin/AdminUserController.java b/src/main/java/com/nanjing/water/host/controller/admin/AdminUserController.java
new file mode 100644
index 0000000..91ae0b9
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/admin/AdminUserController.java
@@ -0,0 +1,294 @@
+package com.nanjing.water.host.controller.admin;
+
+import com.nanjing.water.common.ConstantFactory;
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.jwt.LoginUserDTO;
+import com.nanjing.water.common.util.IPUtils;
+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.enums.EState;
+import com.nanjing.water.entity.enums.EUserType;
+import com.nanjing.water.entity.request.ReqChangePassword;
+import com.nanjing.water.entity.request.adminuser.ReqAdminLogin;
+import com.nanjing.water.entity.request.adminuser.ReqCreateAdminUser;
+import com.nanjing.water.entity.request.adminuser.ReqModifyAdminUser;
+import com.nanjing.water.entity.response.admin.ResAdminLogin;
+import com.nanjing.water.entity.response.admin.ResAdminPower;
+import com.nanjing.water.entity.search.SearchAdminUser;
+import com.nanjing.water.host.BasicController;
+import com.nanjing.water.host.api.MustAdmin;
+import com.nanjing.water.host.api.NonLogin;
+import com.nanjing.water.repository.vo.AdminUserVO;
+import com.nanjing.water.service.AdminPowerService;
+import com.nanjing.water.service.AdminService;
+import com.nanjing.water.service.dto.ResAdminDetail;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 40.管理员用户相关接口
+ *
+ * @author lin.liu
+ * @date 2023/02/17
+ * @order 40
+ */
+@RestController
+@RequestMapping("admin/user")
+public class AdminUserController extends BasicController {
+    @Autowired
+    private AdminService service;
+    @Autowired
+    private AdminPowerService adminPowerService;
+
+    /**
+     * 添加后台管理员
+     *
+     * @param request 请求参数
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping("add")
+    public ExecutedResult<Long> add(@RequestBody ReqCreateAdminUser request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addMustEnum(ParameterUtil.named("用户类型"), request.getUserType(), EUserType.class)
+                .addNotNullOrEmpty(ParameterUtil.named("用户名"), request.getUserName())
+                .addLengthMax(ParameterUtil.named("用户名"), request.getUserName(), ConstantFactory.LENGTH_MAX100)
+                .addNotNullOrEmpty(ParameterUtil.named("密码"), request.getPassword())
+                .addLengthMax(ParameterUtil.named("密码"), request.getPassword(), ConstantFactory.LENGTH_MAX50)
+                .addLengthMax(ParameterUtil.named("昵称"), request.getNickName(), ConstantFactory.LENGTH_MAX50)
+                .addLengthMax(ParameterUtil.named("头像"), request.getHeadImg(), ConstantFactory.LENGTH_MAX500)
+                .addLengthMax(ParameterUtil.named("联系方式"), request.getContact(), ConstantFactory.LENGTH_MAX50)
+                .addLengthMax(ParameterUtil.named("联系邮箱"), request.getEmail(), ConstantFactory.LENGTH_MAX50);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.createAdmin(request);
+    }
+
+    /**
+     * 修改后台管理员
+     *
+     * @param request 请求参数
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping("modify")
+    public ExecutedResult<String> modify(@RequestBody ReqModifyAdminUser request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("用户id"), request.getId(), 0L)
+                .addMustEnum(ParameterUtil.named("用户类型"), request.getUserType(), EUserType.class)
+                .addMustEnum(ParameterUtil.named("状态"), request.getStatus(), EState.class)
+                .addLengthMax(ParameterUtil.named("昵称"), request.getNickName(), ConstantFactory.LENGTH_MAX50)
+                .addLengthMax(ParameterUtil.named("头像"), request.getHeadImg(), ConstantFactory.LENGTH_MAX500)
+                .addLengthMax(ParameterUtil.named("联系方式"), request.getContact(), ConstantFactory.LENGTH_MAX50)
+                .addLengthMax(ParameterUtil.named("联系邮箱"), request.getEmail(), ConstantFactory.LENGTH_MAX50);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.modify(request);
+    }
+
+    /**
+     * 获取指定管理员详情
+     *
+     * @param userId 用户id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @GetMapping("detail/{userId}")
+    public ExecutedResult<ResAdminDetail> detail(@PathVariable Long userId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("用户id"), userId, 0L);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.detail(userId);
+    }
+
+    /**
+     * 分页查询所有管理员
+     *
+     * @param request 查询参数
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping("search")
+    public ExecutedResult<PagerResult<AdminUserVO>> search(@RequestBody SearchAdminUser request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator();
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.search(request);
+    }
+
+    /**
+     * 管理员登录
+     *
+     * @param request 请求参数
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @PostMapping("login")
+    @NonLogin
+    public ExecutedResult<ResAdminLogin> adminLogin(@RequestBody ReqAdminLogin request) throws Exception {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addNotNullOrEmpty(ParameterUtil.named("验证码已过期,请重新获取"), request.getUuid())
+                .addNotNullOrEmpty(ParameterUtil.named("验证码不允许为空"), request.getCode())
+                .addNotNullOrEmpty(ParameterUtil.named("用户名"), request.getUserName())
+                .addNotNullOrEmpty(ParameterUtil.named("密码"), request.getPassword())
+                .addNotNullOrEmpty(ParameterUtil.named("设备码"), request.getMachineCode());
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.adminLogin(request);
+    }
+    /**
+     * 获取登录设备ip地址
+     *
+     * @param request 获取登录设备ip地址
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @GetMapping("/getIpAddress")
+    @NonLogin
+    public ExecutedResult<String> getIpAddress(HttpServletRequest request) {
+        return ExecutedResult.success(IPUtils.getIpAddress(request));
+    }
+    /**
+     * 保存前端登录验证码
+     *
+     * @param uuid 请求参数
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @GetMapping("/generate")
+    @NonLogin
+    public ExecutedResult<String> generate(@RequestParam String uuid) {
+        //#endregion
+        return  service.generate(uuid);
+    }
+    /**
+     * 获取管理员权限列表
+     *
+     * @param userId 用户id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @GetMapping("getPower/{userId}")
+    public ExecutedResult<ResAdminPower> getPower(@PathVariable Long userId) {
+        return service.getPower(userId);
+    }
+
+    /**
+     * 修改密码
+     *
+     * @param request 请求参数
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @PostMapping("changePassword")
+    public ExecutedResult<String> changePassword(@RequestBody ReqChangePassword request) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addNotNullOrEmpty(ParameterUtil.named("旧密码"), request.getOldPassword())
+                .addNotNullOrEmpty(ParameterUtil.named("新密码"), request.getNewPassword())
+                .addLengthMax(ParameterUtil.named("新密码"), request.getNewPassword(), ConstantFactory.LENGTH_MAX50);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        LoginUserDTO user = super.getTokenUser();
+        return service.changePassword(user, request);
+    }
+
+    /**
+     * 重置管理员密码
+     *
+     * @param userId 用户id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping("resetPassword/{userId}")
+    public ExecutedResult<String> resetPassword(@PathVariable Long userId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("用户id"), userId, 0L);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.resetPassword(userId);
+    }
+
+    /**
+     * 停用管理员帐号
+     *
+     * @param userId 用户id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "stop/{userId}")
+    public ExecutedResult<String> stop(@PathVariable Long userId) {
+        return this.service.stop(userId);
+    }
+
+    /**
+     * 启用管理员帐号
+     *
+     * @param userId 用户id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping(value = "enable/{userId}")
+    public ExecutedResult<String> enable(@PathVariable Long userId) {
+        return this.service.enable(userId);
+    }
+
+    /**
+     * 删除管理员
+     *
+     * @param userId 用户id
+     * @author lin.liu
+     * @date 2023/02/17
+     */
+    @MustAdmin
+    @PostMapping("remove/{userId}")
+    public ExecutedResult<String> remove(@PathVariable Long userId) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addGreater(ParameterUtil.named("用户id"), userId, 0L);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return service.remove(userId);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/base/FileController.java b/src/main/java/com/nanjing/water/host/controller/base/FileController.java
new file mode 100644
index 0000000..1c33bcf
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/base/FileController.java
@@ -0,0 +1,188 @@
+package com.nanjing.water.host.controller.base;
+
+import com.google.gson.Gson;
+import com.nanjing.water.common.ConstantFactory;
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.config.SysConfig;
+import com.nanjing.water.common.enums.EContentType;
+import com.nanjing.water.common.util.FileUtil;
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.ParameterUtil;
+import com.nanjing.water.common.util.StringUtil;
+import com.nanjing.water.common.validator.EParameterValidateType;
+import com.nanjing.water.entity.dto.NameValueDTO;
+import com.nanjing.water.entity.dto.UploadResultVo;
+import com.nanjing.water.host.api.NonLogin;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 01.文件上传
+ * @author lin.liu
+ * @date 2021/11/26
+ * @order 01
+ */
+@NonLogin
+@RestController
+@RequestMapping("/file")
+public class FileController {
+    @Autowired
+    private ResourceLoader resourceLoader;
+
+    /**
+     * 上传文件
+     *
+     * @param requestMultipart 复杂请求对象
+     */
+    @PostMapping(value = "upload")
+    @NonLogin
+    public ExecutedResult<UploadResultVo> upload(MultipartHttpServletRequest requestMultipart, HttpServletRequest request) throws Exception {
+        UploadResultVo result = this.defaultResult();
+
+        Map<String, MultipartFile> mapFile = requestMultipart.getFileMap();
+        if (mapFile.isEmpty()) {
+            return ExecutedResult.failed("请求中没有找到文件。");
+        }
+        if (mapFile.size() > 1) {
+            return ExecutedResult.failed("仅支持单个文件上传。");
+        }
+        String fileId = requestMultipart.getParameter("fileId");
+        String toPath = requestMultipart.getParameter("path");
+        if (StringUtil.isNullOrEmpty(toPath)) {
+            return ExecutedResult.failed(ParameterUtil.named("path") + EParameterValidateType.NOT_NULLOREMPTY.getDesc());
+        }
+        Iterator<Map.Entry<String, MultipartFile>> iterator = mapFile.entrySet().iterator();
+        Map.Entry<String, MultipartFile> fileEntry = iterator.next();
+
+        MultipartFile file = fileEntry.getValue();
+        String contentType = file.getContentType();
+
+        InputStream fConfig = resourceLoader.getResource("classpath:upload_allow.json").getInputStream();
+        String allowStr = FileUtil.readFileContent(fConfig);
+        Map<String, String> map = new Gson().fromJson(allowStr, Map.class);
+        List<NameValueDTO<String>> listConfig = map.entrySet().stream().map(c -> new NameValueDTO<>(c.getKey(), c.getValue()))
+                .collect(Collectors.toList());
+        NameValueDTO<String> findConfig = listConfig.stream().filter(c -> c.getName().equals(contentType))
+                .findAny().orElse(null);
+        if (Objects.isNull(findConfig)) {
+            return ExecutedResult.failed(file.getOriginalFilename() + ", 不支持的文件类型。" + file.getContentType());
+        }
+        if (null != file.getOriginalFilename() && !file.getOriginalFilename().contains(findConfig.getValue())) {
+            return ExecutedResult.failed(file.getOriginalFilename() + ", 不支持的文件类型。" + file.getContentType());
+        }
+
+        EContentType type = EContentType.getByValue(file.getContentType());
+        String filePath = "/" + toPath + "/files/";
+        boolean isMultimedia = false;
+        long size = file.getSize() / ConstantFactory.FILE_UNIT;
+        if (null != type) {
+            switch (type) {
+                case GIF:
+                case JPG:
+                case PNG:
+                case JPEG:
+                    filePath = "/" + toPath + "/images/";
+                    if (size > ConstantFactory.FILE_SIZE_20M) {
+                        return ExecutedResult.failed("图片不能超过20M!");
+                    }
+                    break;
+                case GZ:
+                case RAR:
+                case X7Z:
+                case ZIP:
+                    if (size > ConstantFactory.FILE_SIZE_20M) {
+                        return ExecutedResult.failed("压缩文件不能超过20M!");
+                    }
+                    break;
+
+                case MP3:
+                    isMultimedia = true;
+                    if (size > ConstantFactory.FILE_SIZE_20M) {
+                        return ExecutedResult.failed("音频文件不能超过20M!");
+                    }
+                    break;
+                case MP4:
+                    isMultimedia = true;
+                    if (size > ConstantFactory.FILE_SIZE_20M) {
+                        return ExecutedResult.failed("视频文件不能超过20M!");
+                    }
+                    break;
+                default:
+                    break;
+            }
+        }
+        filePath += LocalDateTimeUtil.toFormatString(LocalDateTimeUtil.todayFirst(), "yyyyMMdd") + "/";
+        InputStream fsIn = file.getInputStream();
+
+        String fileSuffix = "." + findConfig.getValue();
+        File directory = new File(SysConfig.fileUploadBasic() + filePath);
+        //如果路径不存在,新建
+        if (!directory.exists() && !directory.isDirectory()) {
+            directory.mkdirs();
+        }
+
+        String newFileName = filePath + StringUtil.md5(file.getOriginalFilename() + LocalDateTimeUtil.nowDateTimeFullStr() + SysConfig.fileDisturbStr()) + fileSuffix;
+        File newFile = new File(SysConfig.fileUploadBasic() + newFileName);
+        if (!newFile.exists()) {
+            //每次写入1MB
+            byte[] buffer = new byte[ConstantFactory.FILE_UNIT * ConstantFactory.FILE_SIZE_1M];
+            int len;
+            FileOutputStream fsOut = null;
+            try {
+                fsOut = new FileOutputStream(newFile);
+                while ((len = fsIn.read(buffer)) != -1) {
+                    fsOut.write(buffer, 0, len);
+                    fsOut.flush();
+                }
+            } finally {
+                if (Objects.nonNull(fsOut)) {
+                    fsOut.close();
+                }
+            }
+        }
+        if (Objects.nonNull(fsIn)) {
+            fsIn.close();
+        }
+
+        result.setFileId(fileId);
+        result.setName(file.getOriginalFilename());
+        result.setNewFileName(newFileName);
+        result.setSize(size);
+        result.setFileType(findConfig.getValue());
+        result.setContentType(findConfig.getName());
+        result.setNewFileView(SysConfig.fileViewBasic() + newFileName);
+
+        file = null;
+        newFile = null;
+
+        return ExecutedResult.success(result);
+    }
+
+
+    private UploadResultVo defaultResult() {
+        UploadResultVo result = new UploadResultVo();
+        result.setFileId("");
+        result.setName("");
+        result.setNewFileName("");
+        result.setNewFileView("");
+        result.setFileType("");
+        result.setContentType("");
+        result.setSize(0L);
+        return result;
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/base/SysDictDataController.java b/src/main/java/com/nanjing/water/host/controller/base/SysDictDataController.java
new file mode 100644
index 0000000..cdddfce
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/base/SysDictDataController.java
@@ -0,0 +1,145 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.host.controller.base;
+
+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.entity.request.sysdictdata.ReqCreateSysDictData;
+import com.nanjing.water.entity.request.sysdictdata.ReqModifySysDictData;
+import com.nanjing.water.entity.search.SearchSysDictData;
+import com.nanjing.water.host.BasicController;
+import com.nanjing.water.repository.vo.SysDictDataVO;
+import com.nanjing.water.service.SysDictDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 04.字典数据
+ * @author lin.liu
+ * @description 字典数据
+ * @order 04
+ */
+@RestController
+@RequestMapping(value = "sysDictData")
+public class SysDictDataController extends BasicController {
+    @Autowired
+    private SysDictDataService service;
+
+    /**
+     * 创建[字典数据表]
+     * @author lin.liu
+     * @description 创建[字典数据表]
+     */
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateSysDictData 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 this.service.create(request, super.getTokenUser());
+    }
+
+    /**
+     * 编辑[字典数据表]
+     * @author lin.liu
+     * @description 编辑[字典数据表]
+     */
+    @PostMapping(value = "modify")
+    public ExecutedResult<String> modify(@RequestBody ReqModifySysDictData 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, super.getTokenUser());
+    }
+
+    /**
+     * 获取[字典数据表]
+     * @author lin.liu
+     */
+    @GetMapping(value = "get/{id}")
+    public ExecutedResult<SysDictDataVO> get(@PathVariable Long id) {
+        return this.service.get(id);
+    }
+
+    /**
+     * 根据id删除[字典数据表]
+     * @author zr
+     * @description 根据id删除[字典数据表]
+     */
+    @PostMapping(value = "remove/{id}")
+    public ExecutedResult<String> remove(@PathVariable Long id){
+        return this.service.remove(id);
+    }
+
+    /**
+     * 根据id批量删除字典数据
+     * @author zr
+     */
+    @PostMapping(value = "removeList")
+    public ExecutedResult<String> removeList(@RequestBody ReqListId reqListId){
+        return this.service.removeList(reqListId.getListId());
+    }
+
+    /**
+     * 根据类型获取[字典数据表]
+     * @author zr
+     */
+    @GetMapping(value = "getListByType/{type}")
+    public ExecutedResult<List<SysDictDataVO>> getListByType(@PathVariable String type) {
+        return this.service.getListByType(type);
+    }
+
+    /**
+     * 查询[字典数据表]
+     * @author lin.liu
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<SysDictDataVO>> search(@RequestBody SearchSysDictData request) {
+        return this.service.search(request);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/base/SysDictTypeController.java b/src/main/java/com/nanjing/water/host/controller/base/SysDictTypeController.java
new file mode 100644
index 0000000..2ae58c8
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/base/SysDictTypeController.java
@@ -0,0 +1,143 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.host.controller.base;
+
+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.entity.request.sysdicttype.ReqCreateSysDictType;
+import com.nanjing.water.entity.request.sysdicttype.ReqModifySysDictType;
+import com.nanjing.water.entity.search.SearchSysDictType;
+import com.nanjing.water.host.BasicController;
+import com.nanjing.water.repository.vo.SysDictTypeVO;
+import com.nanjing.water.service.SysDictTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 03.字典类型
+ * @author lin.liu
+ * @order 03
+ */
+@RestController
+@RequestMapping(value = "sysDictType")
+public class SysDictTypeController extends BasicController {
+    @Autowired
+    private SysDictTypeService service;
+
+    /**
+     * 创建[字典类型表]
+     * @author lin.liu
+     */
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateSysDictType 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 this.service.create(request);
+    }
+
+    /**
+     * 编辑[字典类型表]
+     * @author lin.liu
+     */
+    @PostMapping(value = "modify")
+    public ExecutedResult<String> modify(@RequestBody ReqModifySysDictType 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
+     */
+    @GetMapping(value = "get/{id}")
+    public ExecutedResult<SysDictTypeVO> get(@PathVariable Long id) {
+        return this.service.get(id);
+    }
+
+    /**
+     * 根据id删除[字典类型表]
+     * @author zr
+     * @description 根据id删除[字典类型表]
+     */
+    @PostMapping(value = "remove/{id}")
+    ExecutedResult<String> remove(@PathVariable Long id){
+        return this.service.remove(id);
+    }
+
+    /**
+     * 根据id批量删除字典类型
+     */
+    @PostMapping(value = "removeList")
+    public ExecutedResult<String> removeList(@RequestBody ReqListId request) {
+        return service.removeList(request.getListId());
+    }
+
+    /**
+     * 根据id批量获取[字典类型表]
+     * @author zr
+     * @description 根据id批量获取[字典类型表]
+     */
+    @PostMapping(value = "getList")
+    public ExecutedResult<List<SysDictTypeVO>> getList(@RequestBody ReqListId request) {
+        return this.service.getList(request.getListId());
+    }
+
+    /**
+     * 查询[字典类型表]
+     * @author lin.liu
+     * @description 查询[字典类型表]
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<SysDictTypeVO>> search(@RequestBody SearchSysDictType request) {
+        return this.service.search(request);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/controller/base/SysRegionController.java b/src/main/java/com/nanjing/water/host/controller/base/SysRegionController.java
new file mode 100644
index 0000000..efadbed
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/controller/base/SysRegionController.java
@@ -0,0 +1,160 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.host.controller.base;
+
+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.entity.request.sysregion.ReqCreateSysRegion;
+import com.nanjing.water.entity.request.sysregion.ReqModifySysRegion;
+import com.nanjing.water.entity.response.region.ResRegionTree;
+import com.nanjing.water.entity.search.SearchSysRegion;
+import com.nanjing.water.host.BasicController;
+import com.nanjing.water.host.api.NonLogin;
+import com.nanjing.water.repository.vo.SysRegionVO;
+import com.nanjing.water.service.SysRegionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 06.系统行政地区
+ * @author lin.liu
+ * @order 06
+ */
+@RestController
+@RequestMapping(value = "sysRegion")
+public class SysRegionController extends BasicController {
+    @Autowired
+    private SysRegionService service;
+
+    /**
+     * 创建[系统行政地区]
+     * @author lin.liu
+     * @description 创建[系统行政地区]
+     */
+    @PostMapping(value = "create")
+    public ExecutedResult<Long> create(@RequestBody ReqCreateSysRegion 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 this.service.create(request);
+    }
+
+    /**
+     * 编辑[系统行政地区]
+     * @author lin.liu
+     * @description 编辑[系统行政地区]
+     */
+    @PostMapping(value = "modify")
+    public ExecutedResult<String> modify(@RequestBody ReqModifySysRegion 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/{code}")
+    public ExecutedResult<SysRegionVO> get(@PathVariable String code) {
+        return this.service.get(code);
+    }
+    /**
+     * 根据id批量获取[系统行政地区]
+     * @author lin.liu
+     * @description 根据id批量获取[系统行政地区]
+     */
+    @PostMapping(value = "getList")
+    public ExecutedResult<List<SysRegionVO>> getList(@RequestBody ReqListId request) {
+        return this.service.getList(request.getListId());
+    }
+
+    /**
+     * 获取指定区域的子级区域
+     *
+     * @param code 区域编号,不传获取所有一级区域
+     * @author lin.liu
+     * @date 2024/05/13
+     */
+    @GetMapping(value = "getListChild")
+    public ExecutedResult<List<ResRegionTree>> getListChild(@RequestParam String code) {
+        return this.service.getListChild(code);
+    }
+    /**
+     * 查询[系统行政地区]
+     * @author lin.liu
+     * @description 查询[系统行政地区]
+     */
+    @PostMapping(value = "search")
+    public ExecutedResult<PagerResult<SysRegionVO>> search(@RequestBody SearchSysRegion request) {
+        return this.service.search(request);
+    }
+    /**
+     * 获取指定区域的子级区域(包含自身)
+     *
+     * @param code 区域编号
+     * @author lin.liu
+     * @date 2024/05/13
+     */
+    @NonLogin
+    @GetMapping(value = "currAndTree/{code}")
+    public ExecutedResult<ResRegionTree> currAndTree(@PathVariable String code) {
+        //#region 参数验证
+        ParameterValidator validator = new ParameterValidator()
+                .addNotNullOrEmpty(ParameterUtil.named("区域编号"), code);
+        ParameterValidateResult result = validator.validate();
+        if (result.getIsFiled()) {
+            return ExecutedResult.failed(result.getErrorMsg());
+        }
+        //#endregion
+        return this.service.currAndTree(code);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/mqtt/MQTTConnect.java b/src/main/java/com/nanjing/water/host/mqtt/MQTTConnect.java
new file mode 100644
index 0000000..c2df6bb
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/mqtt/MQTTConnect.java
@@ -0,0 +1,36 @@
+package com.nanjing.water.host.mqtt;
+
+import com.nanjing.water.common.config.MqttConfig;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+@Component
+@Order(20)
+public class MQTTConnect {
+    @Autowired
+    private MqttConfig mqttConfig;
+
+    //生成配置对象,用户名,密码等
+    public MqttConnectOptions getOptions() {
+        MqttConnectOptions options = new MqttConnectOptions();
+        options.setCleanSession(false);
+        options.setUserName(mqttConfig.getUser());
+        options.setPassword(mqttConfig.getPassword().toCharArray());
+        options.setConnectionTimeout(mqttConfig.getConnectionTimeout());
+        //设置心跳
+        options.setKeepAliveInterval(mqttConfig.getKeepAliveInterval());
+        return options;
+    }
+
+    public MqttConnectOptions getOptions(MqttConnectOptions options) {
+        options.setCleanSession(false);
+        options.setUserName(mqttConfig.getUser());
+        options.setPassword(mqttConfig.getPassword().toCharArray());
+        options.setConnectionTimeout(mqttConfig.getConnectionTimeout());
+        //设置心跳
+        options.setKeepAliveInterval(mqttConfig.getKeepAliveInterval());
+        return options;
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/mqtt/MQTTServer.java b/src/main/java/com/nanjing/water/host/mqtt/MQTTServer.java
new file mode 100644
index 0000000..12a628f
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/mqtt/MQTTServer.java
@@ -0,0 +1,94 @@
+package com.nanjing.water.host.mqtt;
+
+import com.nanjing.water.common.config.MqttConfig;
+import com.nanjing.water.common.enums.ELogger;
+import org.eclipse.paho.client.mqttv3.*;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.util.Objects;
+
+/**
+ * 发布端
+ * Title:Server
+ * Description: 服务器向多个客户端推送主题,即不同客户端可向服务器订阅相同主题
+ */
+@Component
+@Order(7)
+public class MQTTServer implements InitializingBean {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ELogger.DEBUG.getLogFileName());
+    @Autowired
+    private MqttConfig mqttConfig;
+    @Autowired
+    private MQTTConnect mqttConnect;
+    static MqttClient client;
+
+    private void connect() throws MqttException {
+        //防止重复创建MQTTClient实例
+        if (client == null) {
+            //就是这里的clientId,服务器用来区分用户的,不能重复
+            String host = "tcp://" + mqttConfig.getHost() + ":" + mqttConfig.getPort();
+            client = new MqttClient(host, mqttConfig.getServerClientId(), new MemoryPersistence());// MemoryPersistence设置clientid的保存形式,默认为以内存保存
+            //client.setCallback(new PushCallback());
+        }
+        MqttConnectOptions options = mqttConnect.getOptions();
+        //判断拦截状态,这里注意一下,如果没有这个判断,是非常坑的
+        if (!client.isConnected()) {
+            client.connect(options);
+            LOGGER.info("---------------------mqtt连接成功");
+        } else {//这里的逻辑是如果连接成功就重新连接
+            client.disconnect();
+            client.connect(mqttConnect.getOptions(options));
+            LOGGER.info("---------------------mqtt连接成功");
+        }
+    }
+
+
+    public boolean publish(MqttTopic topic , MqttMessage message) throws MqttException {
+        MqttDeliveryToken token = topic.publish(message);
+        token.waitForCompletion();
+        LOGGER.debug("消息发送成功! " + token.isComplete());
+        return token.isComplete();
+    }
+
+    /**
+     * mqtt发送消息
+     * @param topic 发布消息的主题
+     * @param data 消息内容
+     */
+    public boolean send(String topic, String data) throws MqttException {
+        MqttConnectOptions options = mqttConnect.getOptions();
+        try {
+            client.connect(mqttConnect.getOptions(options));
+        } catch (Exception e) {}
+        MqttTopic mqttTopic = client.getTopic(topic);
+
+        MqttMessage message = new MqttMessage();
+        //消息等级
+        //level 0:最多一次的传输
+        //level 1:至少一次的传输,(鸡肋)
+        //level 2: 只有一次的传输
+        message.setQos(0);
+        //如果重复消费,则把值改为true,然后发送一条空的消息,之前的消息就会覆盖,然后在改为false
+        message.setRetained(false);
+
+        message.setPayload(data.getBytes());
+
+        return this.publish(mqttTopic, message);
+    }
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        // MemoryPersistence设置clientid的保存形式,默认为以内存保存
+//        client = new MqttClient(HOST, clientid, new MemoryPersistence());
+        if (Objects.equals(mqttConfig.getEnable(), Boolean.FALSE)) {
+            return;
+        }
+        this.connect();
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/mqtt/MQTTStart.java b/src/main/java/com/nanjing/water/host/mqtt/MQTTStart.java
new file mode 100644
index 0000000..2bd8f6d
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/mqtt/MQTTStart.java
@@ -0,0 +1,26 @@
+package com.nanjing.water.host.mqtt;
+
+import com.nanjing.water.common.config.MqttConfig;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.util.Objects;
+
+@Component
+@Order(40)
+public class MQTTStart implements InitializingBean {
+    @Autowired
+    private MQTTSubsribe mqttSubsribe;
+    @Autowired
+    private MqttConfig mqttConfig;
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        if (Objects.equals(mqttConfig.getEnable(), Boolean.FALSE)) {
+            return;
+        }
+        mqttSubsribe.init();
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/mqtt/MQTTSubsribe.java b/src/main/java/com/nanjing/water/host/mqtt/MQTTSubsribe.java
new file mode 100644
index 0000000..ad5b5cc
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/mqtt/MQTTSubsribe.java
@@ -0,0 +1,100 @@
+package com.nanjing.water.host.mqtt;
+
+import com.nanjing.water.common.config.MqttConfig;
+import com.nanjing.water.common.enums.ELogger;
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+/**
+ * 订阅端
+ */
+@Component
+@Order(30)
+public class MQTTSubsribe {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ELogger.DEBUG.getLogFileName());
+    @Autowired
+    private MqttConfig mqttConfig;
+    @Autowired
+    private MQTTConnect mqttConnect;
+
+    /**
+     * 测试和正式环境不要使用同样的clientId 和主题
+     * 如果和正式环境一样,正式环境启动后,本地再次启动会频繁断开重连,订阅的主题一样的话,测试的数据正式环境也会消费这些数据
+     */
+      //private static final String clientid = "测试clients";//测试
+//    private String topic = "lunhan";
+
+    public MqttClient client;
+
+    //方法实现说明 断线重连方法,如果是持久订阅,重连是不需要再次订阅,如果是非持久订阅,重连是需要重新订阅主题 取决于options.setCleanSession(true);
+    // true为非持久订阅
+    public void connect() throws MqttException {
+        //防止重复创建MQTTClient实例
+        if (client == null) {
+            //就是这里的clientId,服务器用来区分用户的,不能重复,clientId不能和发布的clientId一样,否则会出现频繁断开连接和重连的问题
+            //不仅不能和发布的clientId一样,而且也不能和其他订阅的clientId一样,如果想要接收之前的离线数据,这就需要将client的 setCleanSession
+            // 设置为false,这样服务器才能保留它的session,再次建立连接的时候,它就会继续使用这个session了。 这时此连接clientId 是不能更改的。
+            //但是其实还有一个问题,就是使用热部署的时候还是会出现频繁断开连接和重连的问题,可能是因为刚启动时的连接没断开,然后热部署的时候又进行了重连,重启一下就可以了
+            //+ System.currentTimeMillis()
+            String host = "tcp://" + mqttConfig.getHost() + ":" + mqttConfig.getPort();
+            client = new MqttClient(host, mqttConfig.getClientId(), new MemoryPersistence());// MemoryPersistence设置clientid的保存形式,默认为以内存保存
+            //如果是订阅者则添加回调类,发布不需要
+            client.setCallback(new PushCallback(MQTTSubsribe.this));
+//            client.setCallback(new PushCallback());
+        }
+        MqttConnectOptions options = mqttConnect.getOptions();
+        //判断拦截状态,这里注意一下,如果没有这个判断,是非常坑的
+        if (!client.isConnected()) {
+            client.connect(options);
+            LOGGER.info("----------mqtt连接成功");
+        } else {//这里的逻辑是如果连接成功就重新连接
+            client.disconnect();
+            client.connect(mqttConnect.getOptions(options));
+            LOGGER.info("----------mqtt连接成功");
+        }
+    }
+
+    public void init() {
+        try {
+            this.connect();
+            LOGGER.info("----------mqtt执行");
+            this.subscribe(mqttConfig.getTopic());
+            LOGGER.info("----------mqtt执行订阅");
+        } catch (MqttException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 订阅某个主题,qos默认为0
+     *
+     * @param topic .
+     */
+    public void subscribe(String topic) {
+        subscribe(topic,2);
+    }
+
+    /**
+     * 订阅某个主题
+     *
+     * @param topic .
+     * @param qos .
+     */
+    public void subscribe(String topic, int qos) {
+
+        try {
+            client.subscribe(topic,qos);
+            //MQTT 协议中订阅关系是持久化的,因此如果不需要订阅某些 Topic,需要调用 unsubscribe 方法取消订阅关系。
+//            client.unsubscribe("需要解除订阅关系的主题");
+        } catch (MqttException e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/mqtt/PushCallback.java b/src/main/java/com/nanjing/water/host/mqtt/PushCallback.java
new file mode 100644
index 0000000..ad4b9aa
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/mqtt/PushCallback.java
@@ -0,0 +1,85 @@
+package com.nanjing.water.host.mqtt;
+
+import com.nanjing.water.common.enums.ELogger;
+import com.nanjing.water.common.util.LoggerUtil;
+import com.nanjing.water.common.util.SpringUtil;
+import com.nanjing.water.common.util.ThreadPoolUtil;;
+import com.nanjing.water.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 java.nio.charset.StandardCharsets;
+
+/**
+ * 发布消息的回调类
+ * <p>
+ * 必须实现MqttCallback的接口并实现对应的相关接口方法CallBack 类将实现 MqttCallBack。
+ * 每个客户机标识都需要一个回调实例。在此示例中,构造函数传递客户机标识以另存为实例数据。
+ * 在回调中,将它用来标识已经启动了该回调的哪个实例。
+ * 必须在回调类中实现三个方法:
+ * <p>
+ * public void messageArrived(MqttTopic topic, MqttMessage message)接收已经预订的发布。
+ * <p>
+ * public void connectionLost(Throwable cause)在断开连接时调用。
+ * <p>
+ * public void deliveryComplete(MqttDeliveryToken token))
+ * 接收到已经发布的 QoS 1 或 QoS 2 消息的传递令牌时调用。
+ * 由 MqttClient.connect 激活此回调。
+ */
+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);
+
+    private static DataUploadRecordService dataUploadService = SpringUtil.getBean(DataUploadRecordService.class);
+
+    private MQTTSubsribe mqttSubsribe;
+
+    public PushCallback(MQTTSubsribe mqttSubsribe) {
+        this.mqttSubsribe = mqttSubsribe;
+    }
+
+    public void connectionLost(Throwable cause) {
+        // 连接丢失后,一般在这里面进行重连
+        LOGGER_DEBUG.info("---------------------mqtt连接断开");
+
+        while (true) {
+            try {//如果没有发生异常说明连接成功,如果发生异常,则死循环
+                mqttSubsribe.init();
+                LOGGER_DEBUG.info("---------------------mqtt重连成功");
+                break;
+            } catch (Exception e) {
+                LOGGER_ERROR.error("mqtt连接丢失", e);
+                continue;
+            } finally {
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException e) {
+                    // 重新设置中断状态
+                    Thread.currentThread().interrupt();
+                }
+            }
+        }
+    }
+
+    public void deliveryComplete(IMqttDeliveryToken token) {
+        LOGGER_DEBUG.info("deliveryComplete---------" + token.isComplete());
+    }
+
+    public void messageArrived(String topic, MqttMessage message) {
+        // subscribe后得到的消息会执行到这里面
+        String msg = new String(message.getPayload(), StandardCharsets.UTF_8);
+
+        LOGGER_DEBUG.info("收到mqtt消息,主题: " + topic + ", Qos: " + message.getQos() + ", 消息内容: " + msg);
+        //这里可以针对收到的消息做处理
+        ThreadPoolUtil.getDefaultPool().execute(() -> {
+            try {
+                //调用方法
+                dataUploadService.mqttReceived(topic, msg);
+            } catch (Exception e) {
+                LOGGER_ERROR.error("messageArrived", e);
+            }
+        });
+    }
+}
diff --git a/src/main/java/com/nanjing/water/host/mqtt/WebSocket.java b/src/main/java/com/nanjing/water/host/mqtt/WebSocket.java
new file mode 100644
index 0000000..09ce82b
--- /dev/null
+++ b/src/main/java/com/nanjing/water/host/mqtt/WebSocket.java
@@ -0,0 +1,54 @@
+package com.nanjing.water.host.mqtt;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.ServerEndpoint;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Component
+@ServerEndpoint("/webSocket")
+@Order(3)
+public class WebSocket {
+    private static final Logger log = LoggerFactory.getLogger(WebSocket.class);
+
+    private Session session;
+
+    private static CopyOnWriteArraySet<WebSocket> webSocketSet=new CopyOnWriteArraySet<>();
+
+    @OnOpen
+    public void onOpen(Session session){
+        this.session=session;
+        webSocketSet.add(this);
+        log.info("【websocket消息】 有新的连接,总数:{}",webSocketSet.size());
+    }
+
+    @OnClose
+    public void onClose(){
+        webSocketSet.remove(this);
+        log.info("【websocket消息】 连接断开,总数:{}",webSocketSet.size());
+    }
+
+    @OnMessage
+    public void onMessage(String message){
+        log.info("【websocket消息】 收到客户端发来的消息:{}",message);
+    }
+
+    public static void sendMessage(String message){
+        for(WebSocket webSocket:webSocketSet){
+            log.info("【websocket消息】 广播消息,message={}",message);
+            try {
+                webSocket.session.getBasicRemote().sendText(message);
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/nanjing/water/repository/impl/AdminMenuMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/AdminMenuMapperImpl.java
new file mode 100644
index 0000000..dbf2b01
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/AdminMenuMapperImpl.java
@@ -0,0 +1,130 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.util.ListUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.common.util.StringUtil;
+import com.nanjing.water.entity.dto.OrderByDTO;
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import com.nanjing.water.entity.enums.EOrderBy;
+import com.nanjing.water.entity.enums.EState;
+import com.nanjing.water.entity.search.SearchAdminMenu;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.AdminMenuMapper;
+import com.nanjing.water.repository.po.AdminMenuPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 后台菜单
+ * @author lin.liu
+ * @description 后台菜单
+ */
+@Repository
+public class AdminMenuMapperImpl extends BasicMapperImpl<AdminMenuPO, AdminMenuMapper> {
+	public AdminMenuMapper mapper;
+	AdminMenuMapperImpl(AdminMenuMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<AdminMenuPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchAdminMenu search = (SearchAdminMenu)request;
+		// 查询条件
+		LambdaQueryWrapper<AdminMenuPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(AdminMenuPO::getStatus, EState.NORMAL.getValue());
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, AdminMenuPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, AdminMenuPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+			queryWrapper.and(q ->
+				q.like(AdminMenuPO::getName, search.getKeywords())
+				.or().like(AdminMenuPO::getTitle, 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(AdminMenuPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(AdminMenuPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(AdminMenuPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(AdminMenuPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(AdminMenuPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(AdminMenuPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(AdminMenuPO::getId);
+		}
+		Page<AdminMenuPO> pageResult = DB.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	/**
+	 * 根据父级菜单获取子菜单列表
+	 * @param parentId 父级菜单id
+	 */
+	public List<AdminMenuPO> list4Parent(Long parentId) {
+		// 查询条件
+		LambdaQueryWrapper<AdminMenuPO> queryWrapper = this.query();
+		queryWrapper.eq(AdminMenuPO::getParentId, parentId);
+		return DB.selectList(queryWrapper);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/AdminMenusMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/AdminMenusMapperImpl.java
new file mode 100644
index 0000000..e1e2ce2
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/AdminMenusMapperImpl.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.entity.search.SearchAdminMenus;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.AdminMenusMapper;
+import com.nanjing.water.repository.po.AdminMenusPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 菜单信息
+ * @author lin.liu
+ */
+@Repository
+public class AdminMenusMapperImpl extends BasicMapperImpl<AdminMenusPO, AdminMenusMapper> {
+	AdminMenusMapperImpl(AdminMenusMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<AdminMenusPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchAdminMenus search = (SearchAdminMenus)request;
+		// 查询条件
+		LambdaQueryWrapper<AdminMenusPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(AdminMenusPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, AdminMenusPO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), AdminMenusPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, AdminMenusPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, AdminMenusPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		//if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+		//	queryWrapper.and(q ->
+		//		q.like(AdminMenusPO::getName, search.getKeywords())
+		//		.or().like(AdminMenusPO::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(AdminMenusPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(AdminMenusPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(AdminMenusPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(AdminMenusPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(AdminMenusPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(AdminMenusPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(AdminMenusPO::getId);
+		}
+		Page<AdminMenusPO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(AdminMenusPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public Boolean addNotIncrement(AdminMenusPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public AdminMenusPO getById(Long id) {
+		return super.get(id);
+	}
+
+	public List<AdminMenusPO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/AdminPermissionMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/AdminPermissionMapperImpl.java
new file mode 100644
index 0000000..e79b637
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/AdminPermissionMapperImpl.java
@@ -0,0 +1,141 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.ListUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.common.util.StringUtil;
+import com.nanjing.water.entity.dto.OrderByDTO;
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import com.nanjing.water.entity.enums.EOrderBy;
+import com.nanjing.water.entity.search.SearchAdminPermission;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.AdminPermissionMapper;
+import com.nanjing.water.repository.po.AdminPermissionPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 后台用户权限表
+ * @author lin.liu
+ * @description 后台用户权限表
+ */
+@Repository
+public class AdminPermissionMapperImpl extends BasicMapperImpl<AdminPermissionPO, AdminPermissionMapper> {
+	AdminPermissionMapperImpl(AdminPermissionMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<AdminPermissionPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchAdminPermission search = (SearchAdminPermission)request;
+		// 查询条件
+		LambdaQueryWrapper<AdminPermissionPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(AdminPermissionPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, AdminPermissionPO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), AdminPermissionPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, AdminPermissionPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, AdminPermissionPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+			queryWrapper.and(q ->
+				q.like(AdminPermissionPO::getName, search.getKeywords())
+				.or().like(AdminPermissionPO::getMenuUrl, 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(AdminPermissionPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(AdminPermissionPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(AdminPermissionPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(AdminPermissionPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(AdminPermissionPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(AdminPermissionPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(AdminPermissionPO::getId);
+		}
+		Page<AdminPermissionPO> pageResult = DB.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	/**
+	 * 根据菜单id获取权限列表
+	 * @param listMenuId 菜单id
+	 */
+	public List<AdminPermissionPO> list4MenuId(List<Long> listMenuId) {
+		// 查询条件
+		LambdaQueryWrapper<AdminPermissionPO> queryWrapper = this.query();
+		queryWrapper.in(AdminPermissionPO::getMenuId, listMenuId);
+		return DB.selectList(queryWrapper);
+	}
+
+	public AdminPermissionPO get4Sn(String sn) {
+		// 查询条件
+		LambdaQueryWrapper<AdminPermissionPO> queryWrapper = this.query();
+		queryWrapper.eq(AdminPermissionPO::getSn, sn);
+		return DB.selectOne(queryWrapper);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/AdminRoleMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/AdminRoleMapperImpl.java
new file mode 100644
index 0000000..6103494
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/AdminRoleMapperImpl.java
@@ -0,0 +1,117 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.entity.search.SearchAdminRole;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.AdminRoleMapper;
+import com.nanjing.water.repository.po.AdminRolePO;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 后台用户角色表
+ * @author lin.liu
+ * @description 后台用户角色表
+ */
+@Repository
+public class AdminRoleMapperImpl extends BasicMapperImpl<AdminRolePO, AdminRoleMapper> {
+	AdminRoleMapperImpl(AdminRoleMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<AdminRolePO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchAdminRole search = (SearchAdminRole)request;
+		// 查询条件
+		LambdaQueryWrapper<AdminRolePO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(AdminRolePO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, AdminRolePO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), AdminRolePO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, AdminRolePO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, AdminRolePO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+			queryWrapper.and(q ->
+				q.like(AdminRolePO::getName, search.getKeywords())
+				.or().like(AdminRolePO::getDescription, 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(AdminRolePO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(AdminRolePO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(AdminRolePO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(AdminRolePO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(AdminRolePO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(AdminRolePO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(AdminRolePO::getId);
+		}
+		Page<AdminRolePO> pageResult = DB.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}}
diff --git a/src/main/java/com/nanjing/water/repository/impl/AdminRoleMenuRelationMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/AdminRoleMenuRelationMapperImpl.java
new file mode 100644
index 0000000..8be1d8d
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/AdminRoleMenuRelationMapperImpl.java
@@ -0,0 +1,144 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.ListUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.entity.dto.OrderByDTO;
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import com.nanjing.water.entity.enums.EOrderBy;
+import com.nanjing.water.entity.search.SearchAdminRoleMenuRelation;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.AdminRoleMenuRelationMapper;
+import com.nanjing.water.repository.po.AdminRoleMenuRelationPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 后台角色菜单关系表
+ * @author lin.liu
+ * @description 后台角色菜单关系表
+ */
+@Repository
+public class AdminRoleMenuRelationMapperImpl extends BasicMapperImpl<AdminRoleMenuRelationPO, AdminRoleMenuRelationMapper> {
+	AdminRoleMenuRelationMapperImpl(AdminRoleMenuRelationMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<AdminRoleMenuRelationPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchAdminRoleMenuRelation search = (SearchAdminRoleMenuRelation)request;
+		// 查询条件
+		LambdaQueryWrapper<AdminRoleMenuRelationPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(AdminRoleMenuRelationPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, AdminRoleMenuRelationPO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), AdminRoleMenuRelationPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, AdminRoleMenuRelationPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, AdminRoleMenuRelationPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		//if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+		//	queryWrapper.and(q ->
+		//		q.like(AdminRoleMenuRelationPO::getName, search.getKeywords())
+		//		.or().like(AdminRoleMenuRelationPO::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(AdminRoleMenuRelationPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(AdminRoleMenuRelationPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(AdminRoleMenuRelationPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(AdminRoleMenuRelationPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(AdminRoleMenuRelationPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(AdminRoleMenuRelationPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(AdminRoleMenuRelationPO::getId);
+		}
+		Page<AdminRoleMenuRelationPO> pageResult = DB.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	/**
+	 * 根据角色id获取角色拥有的菜单列表
+	 * @param roleId 角色id
+	 */
+	public List<AdminRoleMenuRelationPO> list4Role(Long roleId) {
+		// 查询条件
+		LambdaQueryWrapper<AdminRoleMenuRelationPO> queryWrapper = this.query();
+		queryWrapper.eq(AdminRoleMenuRelationPO::getRoleId, roleId);
+		return DB.selectList(queryWrapper);
+	}
+
+	/**
+	 * 根据角色id获取角色拥有的菜单列表
+	 * @param listRoleId 角色id列表
+	 */
+	public List<AdminRoleMenuRelationPO> list4Role(List<Long> listRoleId) {
+		// 查询条件
+		LambdaQueryWrapper<AdminRoleMenuRelationPO> queryWrapper = this.query();
+		queryWrapper.in(AdminRoleMenuRelationPO::getRoleId, listRoleId);
+		return DB.selectList(queryWrapper);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/AdminRolePermissionRelationMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/AdminRolePermissionRelationMapperImpl.java
new file mode 100644
index 0000000..faa52e5
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/AdminRolePermissionRelationMapperImpl.java
@@ -0,0 +1,144 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.ListUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.entity.dto.OrderByDTO;
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import com.nanjing.water.entity.enums.EOrderBy;
+import com.nanjing.water.entity.search.SearchAdminRolePermissionRelation;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.AdminRolePermissionRelationMapper;
+import com.nanjing.water.repository.po.AdminRolePermissionRelationPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 后台角色权限关系表
+ * @author lin.liu
+ * @description 后台角色权限关系表
+ */
+@Repository
+public class AdminRolePermissionRelationMapperImpl extends BasicMapperImpl<AdminRolePermissionRelationPO, AdminRolePermissionRelationMapper> {
+	AdminRolePermissionRelationMapperImpl(AdminRolePermissionRelationMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<AdminRolePermissionRelationPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchAdminRolePermissionRelation search = (SearchAdminRolePermissionRelation)request;
+		// 查询条件
+		LambdaQueryWrapper<AdminRolePermissionRelationPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(AdminRolePermissionRelationPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, AdminRolePermissionRelationPO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), AdminRolePermissionRelationPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, AdminRolePermissionRelationPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, AdminRolePermissionRelationPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		//if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+		//	queryWrapper.and(q ->
+		//		q.like(AdminRolePermissionRelationPO::getName, search.getKeywords())
+		//		.or().like(AdminRolePermissionRelationPO::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(AdminRolePermissionRelationPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(AdminRolePermissionRelationPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(AdminRolePermissionRelationPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(AdminRolePermissionRelationPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(AdminRolePermissionRelationPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(AdminRolePermissionRelationPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(AdminRolePermissionRelationPO::getId);
+		}
+		Page<AdminRolePermissionRelationPO> pageResult = DB.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	/**
+	 * 根据角色获取拥有的权限列表
+	 * @param roleId 角色id
+	 */
+	public List<AdminRolePermissionRelationPO> list4Role(Long roleId) {
+		// 查询条件
+		LambdaQueryWrapper<AdminRolePermissionRelationPO> queryWrapper = this.query();
+		queryWrapper.eq(AdminRolePermissionRelationPO::getRoleId, roleId);
+		return DB.selectList(queryWrapper);
+	}
+
+	/**
+	 * 根据角色获取拥有的权限列表
+	 * @param listRoleId 角色id列表
+	 */
+	public List<AdminRolePermissionRelationPO> list4Role(List<Long> listRoleId) {
+		// 查询条件
+		LambdaQueryWrapper<AdminRolePermissionRelationPO> queryWrapper = this.query();
+		queryWrapper.in(AdminRolePermissionRelationPO::getRoleId, listRoleId);
+		return DB.selectList(queryWrapper);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/AdminRoleRelationMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/AdminRoleRelationMapperImpl.java
new file mode 100644
index 0000000..8077514
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/AdminRoleRelationMapperImpl.java
@@ -0,0 +1,144 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.ListUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.entity.dto.OrderByDTO;
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import com.nanjing.water.entity.enums.EOrderBy;
+import com.nanjing.water.entity.search.SearchAdminRoleRelation;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.AdminRoleRelationMapper;
+import com.nanjing.water.repository.po.AdminRoleRelationPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 后台用户和角色关系表
+ * @author lin.liu
+ * @description 后台用户和角色关系表
+ */
+@Repository
+public class AdminRoleRelationMapperImpl extends BasicMapperImpl<AdminRoleRelationPO, AdminRoleRelationMapper> {
+	AdminRoleRelationMapperImpl(AdminRoleRelationMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<AdminRoleRelationPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchAdminRoleRelation search = (SearchAdminRoleRelation)request;
+		// 查询条件
+		LambdaQueryWrapper<AdminRoleRelationPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(AdminRoleRelationPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, AdminRoleRelationPO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), AdminRoleRelationPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, AdminRoleRelationPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, AdminRoleRelationPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		//if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+		//	queryWrapper.and(q ->
+		//		q.like(AdminRoleRelationPO::getName, search.getKeywords())
+		//		.or().like(AdminRoleRelationPO::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(AdminRoleRelationPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(AdminRoleRelationPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(AdminRoleRelationPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(AdminRoleRelationPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(AdminRoleRelationPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(AdminRoleRelationPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(AdminRoleRelationPO::getId);
+		}
+		Page<AdminRoleRelationPO> pageResult = DB.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	/**
+	 * 根据管理员获取拥有的角色列表
+	 * @param adminId 管理员id
+	 */
+	public List<AdminRoleRelationPO> list4Admin(Long adminId) {
+		// 查询条件
+		LambdaQueryWrapper<AdminRoleRelationPO> queryWrapper = this.query();
+		queryWrapper.eq(AdminRoleRelationPO::getAdminId, adminId);
+		return DB.selectList(queryWrapper);
+	}
+
+	/**
+	 * 根据管理员获取拥有的角色列表
+	 * @param listAdminId 管理员id列表
+	 */
+	public List<AdminRoleRelationPO> list4Admin(List<Long> listAdminId) {
+		// 查询条件
+		LambdaQueryWrapper<AdminRoleRelationPO> queryWrapper = this.query();
+		queryWrapper.in(AdminRoleRelationPO::getAdminId, listAdminId);
+		return DB.selectList(queryWrapper);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/AdminUserMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/AdminUserMapperImpl.java
new file mode 100644
index 0000000..4e31575
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/AdminUserMapperImpl.java
@@ -0,0 +1,134 @@
+/**
+ * #                                                    __----~~~~~~~~~~~------___
+ * #                                   .  .   ~~//====......          __--~ ~~
+ * #                   -.            \_|//     |||\\  ~~~~~~::::... /~
+ * #                ___-==_       _-~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.ListUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.common.util.StringUtil;
+import com.nanjing.water.entity.dto.OrderByDTO;
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import com.nanjing.water.entity.enums.EOrderBy;
+import com.nanjing.water.entity.search.SearchAdminUser;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.AdminUserMapper;
+import com.nanjing.water.repository.po.AdminUserPO;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 管理员帐号
+ * @author lin.liu
+ * @description 管理员帐号
+ */
+@Repository
+public class AdminUserMapperImpl extends BasicMapperImpl<AdminUserPO, AdminUserMapper> {
+    AdminUserMapperImpl(AdminUserMapper mapper) {
+        super(mapper);
+    }
+
+    @Override
+    public PagerResult<AdminUserPO> search(SearchBasicDTO request) {
+        // 还原查询条件真实类型
+        SearchAdminUser search = (SearchAdminUser) request;
+        // 查询条件
+        LambdaQueryWrapper<AdminUserPO> queryWrapper = this.query();
+        // 非逻辑删除
+        queryWrapper.eq(AdminUserPO::getIsDelete, EYesOrNo.NO.getValue());
+        // 状态
+        //queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, AdminUserPO::getStatus, search.getStatus());
+        // 状态列表
+        //queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), AdminUserPO::getStatus, search.getListStatus());
+
+        // 数据创建时间-起始
+        queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, AdminUserPO::getCreateTime, search.getCreateTimeStart());
+        // 数据创建时间-截止
+        queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, AdminUserPO::getCreateTime, search.getCreateTimeEnd());
+        // 关键字
+        if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+        	queryWrapper.and(q ->
+        		q.like(AdminUserPO::getUserName, search.getKeywords())
+        		.or().like(AdminUserPO::getNickName, search.getKeywords())
+                        .or().like(AdminUserPO::getContact, search.getKeywords())
+                        .or().like(AdminUserPO::getEmail, 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(AdminUserPO::getId);
+                            break;
+                        // 数据创建时间
+                        case CREATE_TIME:
+                            queryWrapper.orderByAsc(AdminUserPO::getCreateTime);
+                            break;
+                        // 最后更新时间
+                        case UPDATE_TIME:
+                            queryWrapper.orderByAsc(AdminUserPO::getUpdateTime);
+                            break;
+                    }
+                } else {
+                    // 倒叙排序
+                    switch (orderBy) {
+                        // 主键
+                        case ID:
+                            queryWrapper.orderByDesc(AdminUserPO::getId);
+                            break;
+                        // 数据创建时间
+                        case CREATE_TIME:
+                            queryWrapper.orderByDesc(AdminUserPO::getCreateTime);
+                            break;
+                        // 最后更新时间
+                        case UPDATE_TIME:
+                            queryWrapper.orderByDesc(AdminUserPO::getUpdateTime);
+                            break;
+                    }
+                }
+            }
+        } else {
+            queryWrapper.orderByDesc(AdminUserPO::getId);
+        }
+        Page<AdminUserPO> pageResult = DB.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+        return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+    }
+
+	/**
+	 * 根据用户名获取管理端用户
+	 * @param userName 用户名
+	 */
+	public AdminUserPO get4Name(String userName) {
+        // 查询条件
+        LambdaQueryWrapper<AdminUserPO> queryWrapper = this.query();
+        queryWrapper.eq(AdminUserPO::getUserName, userName);
+        return DB.selectOne(queryWrapper);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/AlarmHistoryMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/AlarmHistoryMapperImpl.java
new file mode 100644
index 0000000..3958153
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/AlarmHistoryMapperImpl.java
@@ -0,0 +1,152 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.entity.search.SearchAlarmHistory;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.AlarmHistoryMapper;
+import com.nanjing.water.repository.po.AlarmHistoryPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 报警信息
+ * @author lin.liu
+ */
+@Repository
+public class AlarmHistoryMapperImpl extends BasicMapperImpl<AlarmHistoryPO, AlarmHistoryMapper> {
+	AlarmHistoryMapperImpl(AlarmHistoryMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<AlarmHistoryPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchAlarmHistory search = (SearchAlarmHistory)request;
+		// 查询条件
+		LambdaQueryWrapper<AlarmHistoryPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(AlarmHistoryPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, AlarmHistoryPO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), AlarmHistoryPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, AlarmHistoryPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, AlarmHistoryPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		//if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+		//	queryWrapper.and(q ->
+		//		q.like(AlarmHistoryPO::getName, search.getKeywords())
+		//		.or().like(AlarmHistoryPO::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(AlarmHistoryPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(AlarmHistoryPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(AlarmHistoryPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(AlarmHistoryPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(AlarmHistoryPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(AlarmHistoryPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(AlarmHistoryPO::getId);
+		}
+		Page<AlarmHistoryPO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(AlarmHistoryPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public Boolean addNotIncrement(AlarmHistoryPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public AlarmHistoryPO getById(Long id) {
+		return super.get(id);
+	}
+
+	public List<AlarmHistoryPO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+
+
+	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/AlarmSchemeMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/AlarmSchemeMapperImpl.java
new file mode 100644
index 0000000..cbe25cf
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/AlarmSchemeMapperImpl.java
@@ -0,0 +1,144 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.entity.search.SearchAlarmScheme;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.AlarmSchemeMapper;
+import com.nanjing.water.repository.po.AlarmSchemePO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 报警方案设置
+ * @author lin.liu
+ */
+@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 AlarmSchemePO getByFacilityId(Long facilityId,String code) {
+		LambdaQueryWrapper<AlarmSchemePO> queryWrapper = this.query();
+		queryWrapper.eq(AlarmSchemePO::getFacilityId,facilityId);
+		queryWrapper.eq(AlarmSchemePO::getColumnsCode,code);
+		return super.selectOne(queryWrapper);
+	}
+
+	public List<AlarmSchemePO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/CommonParametersMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/CommonParametersMapperImpl.java
new file mode 100644
index 0000000..cac862c
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/CommonParametersMapperImpl.java
@@ -0,0 +1,156 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.entity.search.SearchCommonParameters;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.CommonParametersMapper;
+import com.nanjing.water.repository.po.CommonParametersPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 公共参数
+ * @author lin.liu
+ */
+@Repository
+public class CommonParametersMapperImpl extends BasicMapperImpl<CommonParametersPO, CommonParametersMapper> {
+	CommonParametersMapperImpl(CommonParametersMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<CommonParametersPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchCommonParameters search = (SearchCommonParameters)request;
+		// 查询条件
+		LambdaQueryWrapper<CommonParametersPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(CommonParametersPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, CommonParametersPO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), CommonParametersPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, CommonParametersPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, CommonParametersPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+			queryWrapper.and(q ->
+					q.like(CommonParametersPO::getName, search.getKeywords())
+							.or().like(CommonParametersPO::getUnit, search.getKeywords())
+			);
+		}
+
+		// 排序处理
+		if (ListUtil.isNotNullOrEmpty(search.getOrderBy())) {
+			for (OrderByDTO item : search.getOrderBy()) {
+				ESortOrderBy orderBy = ESortOrderBy.getByValue(item.getOrderBy());
+				// 顺序排序
+				if (item.getIsAsc()) {
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByAsc(CommonParametersPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(CommonParametersPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(CommonParametersPO::getUpdateTime);
+							break;
+						// 最后更新时间
+						case SORT:
+							queryWrapper.orderByAsc(CommonParametersPO::getSort);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(CommonParametersPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(CommonParametersPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(CommonParametersPO::getUpdateTime);
+							break;
+						// 最后更新时间
+						case SORT:
+							queryWrapper.orderByDesc(CommonParametersPO::getSort);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(CommonParametersPO::getSort);
+		}
+		Page<CommonParametersPO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(CommonParametersPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public CommonParametersPO getByMark(String mark){
+		LambdaQueryWrapper<CommonParametersPO> queryWrapper = this.query();
+		queryWrapper.eq(CommonParametersPO::getMark, mark);
+		return super.selectOne(queryWrapper);
+	}
+	public Boolean addNotIncrement(CommonParametersPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public CommonParametersPO getById(Long id) {
+		return super.get(id);
+	}
+
+	public List<CommonParametersPO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+
+	public List<CommonParametersPO> list4Mark(List<String> listMark) {
+		LambdaQueryWrapper<CommonParametersPO> queryWrapper = this.query();
+		queryWrapper.in(CommonParametersPO::getMark, listMark);
+		return super.selectList(queryWrapper);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/SysDictDataMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/SysDictDataMapperImpl.java
new file mode 100644
index 0000000..4f1474e
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/SysDictDataMapperImpl.java
@@ -0,0 +1,187 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.util.ListUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.common.util.StringUtil;
+import com.nanjing.water.entity.dto.OrderByDTO;
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import com.nanjing.water.entity.enums.EOrderBy;
+import com.nanjing.water.entity.search.SearchSysDictData;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.SysDictDataMapper;
+import com.nanjing.water.repository.po.SysDictDataPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 字典数据表
+ * @author lin.liu
+ * @description 字典数据表
+ */
+@Repository
+public class SysDictDataMapperImpl extends BasicMapperImpl<SysDictDataPO, SysDictDataMapper> {
+	SysDictDataMapperImpl(SysDictDataMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<SysDictDataPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchSysDictData search = (SearchSysDictData)request;
+		// 查询条件
+		LambdaQueryWrapper<SysDictDataPO> queryWrapper = this.query();
+		// 状态
+		queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, SysDictDataPO::getStatus, search.getStatus());
+		// 状态列表
+		queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), SysDictDataPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, SysDictDataPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, SysDictDataPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+			queryWrapper.like(SysDictDataPO::getDictLabel, 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(SysDictDataPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(SysDictDataPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(SysDictDataPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(SysDictDataPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(SysDictDataPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(SysDictDataPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(SysDictDataPO::getId);
+		}
+		Page<SysDictDataPO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(SysDictDataPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+	/**
+	 * 根据type获取数据列表
+	 * @param type 类型
+	 */
+	public List<SysDictDataPO> getListByType(String type) {
+		LambdaQueryWrapper<SysDictDataPO> queryWrapper = this.query();
+         queryWrapper.eq(SysDictDataPO::getDictType, type);
+         return DB.selectList(queryWrapper);
+	}
+	public Long count4Type(String type) {
+		LambdaQueryWrapper<SysDictDataPO> queryWrapper = this.query();
+		queryWrapper.eq(SysDictDataPO::getDictType, type);
+		return DB.getCount(queryWrapper);
+	}
+	public List<String> findExists4Type(List<String> listType) {
+		LambdaQueryWrapper<SysDictDataPO> queryWrapper = this.query();
+		queryWrapper.select(SysDictDataPO.class, c -> c.getColumn().equals("dict_type"));
+		queryWrapper.in(SysDictDataPO::getDictType, listType);
+		List<Map<String, Object>> result = DB.selectMaps(queryWrapper);
+		return result.stream().map(c -> c.get("dict_type").toString()).distinct().collect(Collectors.toList());
+	}
+
+	public Boolean addNotIncrement(SysDictDataPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public SysDictDataPO getById(Long id) {
+		return super.get(id);
+	}
+
+	public List<SysDictDataPO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+
+	public List<SysDictDataPO> listByType(List<String> listType) {
+		LambdaQueryWrapper<SysDictDataPO> queryWrapper = this.query();
+		queryWrapper.in(SysDictDataPO::getDictType, listType);
+		return DB.selectList(queryWrapper);
+	}
+
+	public Map<String, Map<String, String>> map4Type(List<String> listType) {
+		Map<String, Map<String, String>> result = new HashMap<>();
+
+		List<SysDictDataPO> listDictData = this.listByType(listType);
+		Map<String, List<SysDictDataPO>> map4Type = listDictData.stream().collect(Collectors.groupingBy(SysDictDataPO::getDictType));
+		for (Map.Entry<String, List<SysDictDataPO>> entry : map4Type.entrySet()) {
+			Map<String, String> mapData = entry.getValue().stream().collect(
+					Collectors.toMap(SysDictDataPO::getDictValue, SysDictDataPO::getDictLabel)
+			);
+			result.put(entry.getKey(), mapData);
+		}
+		return result;
+	}
+
+	public Map<String, SysDictDataPO> map4Type(String type) {
+		List<SysDictDataPO> listDictData = this.getListByType(type);
+		if (ListUtil.isNullOrEmpty(listDictData)) {
+			return new HashMap<>();
+		}
+		return listDictData.stream().collect(Collectors.toMap(SysDictDataPO::getDictValue, c -> c));
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/SysDictTypeMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/SysDictTypeMapperImpl.java
new file mode 100644
index 0000000..8c91771
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/SysDictTypeMapperImpl.java
@@ -0,0 +1,150 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.util.ListUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.common.util.StringUtil;
+import com.nanjing.water.entity.dto.OrderByDTO;
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import com.nanjing.water.entity.enums.EOrderBy;
+import com.nanjing.water.entity.search.SearchSysDictType;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.SysDictTypeMapper;
+import com.nanjing.water.repository.po.SysDictTypePO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 字典类型表
+ * @author lin.liu
+ * @description 字典类型表
+ */
+@Repository
+public class SysDictTypeMapperImpl extends BasicMapperImpl<SysDictTypePO, SysDictTypeMapper> {
+	SysDictTypeMapperImpl(SysDictTypeMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<SysDictTypePO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchSysDictType search = (SearchSysDictType)request;
+		// 查询条件
+		LambdaQueryWrapper<SysDictTypePO> queryWrapper = this.query();
+		// 状态
+		queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, SysDictTypePO::getStatus, search.getStatus());
+		// 状态列表
+		queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), SysDictTypePO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, SysDictTypePO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, SysDictTypePO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+			queryWrapper.and(q ->
+				q.like(SysDictTypePO::getDictType, search.getKeywords())
+				.or().like(SysDictTypePO::getDictName, 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(SysDictTypePO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(SysDictTypePO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(SysDictTypePO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(SysDictTypePO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(SysDictTypePO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(SysDictTypePO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(SysDictTypePO::getId);
+		}
+		Page<SysDictTypePO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(SysDictTypePO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public Boolean addNotIncrement(SysDictTypePO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public SysDictTypePO getById(Long id) {
+		return super.get(id);
+	}
+
+	public List<SysDictTypePO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+
+    public SysDictTypePO get4Type(String type) {
+		LambdaQueryWrapper<SysDictTypePO> queryWrapper = this.query();
+		queryWrapper.eq(SysDictTypePO::getDictType, type);
+		return DB.selectOne(queryWrapper);
+    }
+
+	public List<SysDictTypePO> get4Type(List<String> listType) {
+		LambdaQueryWrapper<SysDictTypePO> queryWrapper = this.query();
+		queryWrapper.in(SysDictTypePO::getDictType, listType);
+		return DB.selectList(queryWrapper);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/SysRegionMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/SysRegionMapperImpl.java
new file mode 100644
index 0000000..f6af1ec
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/SysRegionMapperImpl.java
@@ -0,0 +1,162 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.entity.search.SearchSysRegion;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.SysRegionMapper;
+import com.nanjing.water.repository.po.SysRegionPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 系统行政地区
+ * @author lin.liu
+ */
+@Repository
+public class SysRegionMapperImpl extends BasicMapperImpl<SysRegionPO, SysRegionMapper> {
+	SysRegionMapperImpl(SysRegionMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<SysRegionPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchSysRegion search = (SearchSysRegion)request;
+		// 查询条件
+		LambdaQueryWrapper<SysRegionPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(SysRegionPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, SysRegionPO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), SysRegionPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, SysRegionPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, SysRegionPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		//if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+		//	queryWrapper.and(q ->
+		//		q.like(SysRegionPO::getName, search.getKeywords())
+		//		.or().like(SysRegionPO::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(SysRegionPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(SysRegionPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(SysRegionPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(SysRegionPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(SysRegionPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(SysRegionPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(SysRegionPO::getId);
+		}
+		Page<SysRegionPO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(SysRegionPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+	public List<SysRegionPO> getList4Parent(String code) {
+		LambdaQueryWrapper<SysRegionPO> queryWrapper = this.query();
+		queryWrapper.eq(SysRegionPO::getParentCode,code);
+		return DB.selectList(queryWrapper);
+	}
+	public SysRegionPO get4Code(String code) {
+		LambdaQueryWrapper<SysRegionPO> queryWrapper = this.query();
+		queryWrapper.eq(SysRegionPO::getCode,code);
+		return DB.selectOne(queryWrapper);
+	}
+	public List<SysRegionPO> getList4LevelChild(Integer level) {
+		LambdaQueryWrapper<SysRegionPO> queryWrapper = this.query();
+		queryWrapper.gt(SysRegionPO::getLevel,level);
+		return DB.selectList(queryWrapper);
+	}
+	public List<SysRegionPO> getList4Level(Integer level) {
+		LambdaQueryWrapper<SysRegionPO> queryWrapper = this.query();
+		queryWrapper.eq(SysRegionPO::getLevel,level);
+		return DB.selectList(queryWrapper);
+	}
+	public Boolean addNotIncrement(SysRegionPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public SysRegionPO getById(Long id) {
+		return super.get(id);
+	}
+
+	public List<SysRegionPO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+
+	public List<SysRegionPO> list4Code(List<String> listCode) {
+		LambdaQueryWrapper<SysRegionPO> queryWrapper = this.query();
+		queryWrapper.in(SysRegionPO::getCode, listCode);
+		return DB.selectList(queryWrapper);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/WaterFacilityMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/WaterFacilityMapperImpl.java
new file mode 100644
index 0000000..81a64ba
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/WaterFacilityMapperImpl.java
@@ -0,0 +1,156 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.ListUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.common.util.StringUtil;
+import com.nanjing.water.entity.dto.OrderByDTO;
+import com.nanjing.water.entity.dto.SearchBasicDTO;
+import com.nanjing.water.entity.enums.EOrderBy;
+import com.nanjing.water.entity.search.SearchWaterFacility;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.WaterFacilityMapper;
+import com.nanjing.water.repository.po.WaterFacilityPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 设备信息
+ * @author lin.liu
+ */
+@Repository
+public class WaterFacilityMapperImpl extends BasicMapperImpl<WaterFacilityPO, WaterFacilityMapper> {
+	WaterFacilityMapperImpl(WaterFacilityMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<WaterFacilityPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchWaterFacility search = (SearchWaterFacility)request;
+		// 查询条件
+		LambdaQueryWrapper<WaterFacilityPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(WaterFacilityPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, WaterFacilityPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, WaterFacilityPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+			queryWrapper.and(q ->
+					q.like(WaterFacilityPO::getFacilityName, search.getKeywords())
+							.or().like(WaterFacilityPO::getFacilityCode, 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(WaterFacilityPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(WaterFacilityPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(WaterFacilityPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(WaterFacilityPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(WaterFacilityPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(WaterFacilityPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(WaterFacilityPO::getId);
+		}
+		Page<WaterFacilityPO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(WaterFacilityPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public Boolean addNotIncrement(WaterFacilityPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+	public List<WaterFacilityPO> getListByCode(List<String> listCode) {
+		LambdaQueryWrapper<WaterFacilityPO> queryWrapper = this.query();
+		queryWrapper.in(WaterFacilityPO::getFacilityCode,listCode);
+		return super.selectList(queryWrapper);
+	}
+	public WaterFacilityPO getByCode(String code) {
+		LambdaQueryWrapper<WaterFacilityPO> queryWrapper = this.query();
+		queryWrapper.eq(WaterFacilityPO::getFacilityCode,code);
+		return super.selectOne(queryWrapper);
+	}
+
+	public List<WaterFacilityPO> getListByPointId(Long pointId) {
+		LambdaQueryWrapper<WaterFacilityPO> queryWrapper = this.query();
+		queryWrapper.eq(WaterFacilityPO::getPointId,pointId);
+		return super.selectList(queryWrapper);
+	}
+//	public List<WaterFacilityPO> getListByPointTypeId(Long pointTypeId) {
+//		LambdaQueryWrapper<WaterFacilityPO> queryWrapper = this.query();
+//		queryWrapper.eq(WaterFacilityPO::getPointTypeId,pointTypeId);
+//		return super.selectList(queryWrapper);
+//	}
+	public WaterFacilityPO getById(Long id) {
+		return super.get(id);
+	}
+
+	public List<WaterFacilityPO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/WaterFacilityParameterMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/WaterFacilityParameterMapperImpl.java
new file mode 100644
index 0000000..7e8a0d1
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/WaterFacilityParameterMapperImpl.java
@@ -0,0 +1,151 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.entity.search.SearchWaterFacilityParameter;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.WaterFacilityParameterMapper;
+import com.nanjing.water.repository.po.WaterFacilityParameterPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 设备设定参数
+ * @author lin.liu
+ */
+@Repository
+public class WaterFacilityParameterMapperImpl extends BasicMapperImpl<WaterFacilityParameterPO, WaterFacilityParameterMapper> {
+	WaterFacilityParameterMapperImpl(WaterFacilityParameterMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<WaterFacilityParameterPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchWaterFacilityParameter search = (SearchWaterFacilityParameter)request;
+		// 查询条件
+		LambdaQueryWrapper<WaterFacilityParameterPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(WaterFacilityParameterPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, WaterFacilityParameterPO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), WaterFacilityParameterPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, WaterFacilityParameterPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, WaterFacilityParameterPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+			queryWrapper.and(q ->
+					q.like(WaterFacilityParameterPO::getFacilityCode, 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(WaterFacilityParameterPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(WaterFacilityParameterPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(WaterFacilityParameterPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(WaterFacilityParameterPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(WaterFacilityParameterPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(WaterFacilityParameterPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(WaterFacilityParameterPO::getId);
+		}
+		Page<WaterFacilityParameterPO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(WaterFacilityParameterPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+	public List<WaterFacilityParameterPO> getCodeList(List<String> codeList) {
+		LambdaQueryWrapper<WaterFacilityParameterPO> queryWrapper = this.query();
+		queryWrapper.in(WaterFacilityParameterPO::getFacilityCode,codeList);
+		return super.selectList(queryWrapper);
+	}
+	public Boolean addNotIncrement(WaterFacilityParameterPO item) {
+		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);
+	}
+
+	public List<WaterFacilityParameterPO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+
+	public List<WaterFacilityParameterPO> getListByFacilityId(List<Long> facilityId) {
+		LambdaQueryWrapper<WaterFacilityParameterPO> queryWrapper = this.query();
+		queryWrapper.in(WaterFacilityParameterPO::getFacilityId, facilityId);
+		return DB.selectList(queryWrapper);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/WaterFacilityTypeMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/WaterFacilityTypeMapperImpl.java
new file mode 100644
index 0000000..88d2de8
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/WaterFacilityTypeMapperImpl.java
@@ -0,0 +1,142 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.entity.search.SearchWaterFacilityType;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.WaterFacilityTypeMapper;
+import com.nanjing.water.repository.po.WaterFacilityTypePO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 设备类型
+ * @author lin.liu
+ */
+@Repository
+public class WaterFacilityTypeMapperImpl extends BasicMapperImpl<WaterFacilityTypePO, WaterFacilityTypeMapper> {
+	WaterFacilityTypeMapperImpl(WaterFacilityTypeMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<WaterFacilityTypePO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchWaterFacilityType search = (SearchWaterFacilityType)request;
+		// 查询条件
+		LambdaQueryWrapper<WaterFacilityTypePO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(WaterFacilityTypePO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, WaterFacilityTypePO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), WaterFacilityTypePO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, WaterFacilityTypePO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, WaterFacilityTypePO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		//if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+		//	queryWrapper.and(q ->
+		//		q.like(WaterFacilityTypePO::getName, search.getKeywords())
+		//		.or().like(WaterFacilityTypePO::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(WaterFacilityTypePO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(WaterFacilityTypePO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(WaterFacilityTypePO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(WaterFacilityTypePO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(WaterFacilityTypePO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(WaterFacilityTypePO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(WaterFacilityTypePO::getId);
+		}
+		Page<WaterFacilityTypePO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(WaterFacilityTypePO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public Boolean addNotIncrement(WaterFacilityTypePO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public WaterFacilityTypePO getById(Long id) {
+		return super.get(id);
+	}
+
+	public WaterFacilityTypePO getByCode(String code) {
+		LambdaQueryWrapper<WaterFacilityTypePO> queryWrapper = this.query();
+		queryWrapper.eq(WaterFacilityTypePO::getCode,code);
+		return  super.selectOne(queryWrapper);
+	}
+	public List<WaterFacilityTypePO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/impl/WaterMonitoryPointMapperImpl.java b/src/main/java/com/nanjing/water/repository/impl/WaterMonitoryPointMapperImpl.java
new file mode 100644
index 0000000..724c1b2
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/impl/WaterMonitoryPointMapperImpl.java
@@ -0,0 +1,152 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~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.entity.search.SearchWaterMonitoryPoint;
+import com.nanjing.water.repository.BasicMapperImpl;
+import com.nanjing.water.repository.mapper.WaterMonitoryPointMapper;
+import com.nanjing.water.repository.po.WaterMonitoryPointPO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 监控点
+ * @author lin.liu
+ */
+@Repository
+public class WaterMonitoryPointMapperImpl extends BasicMapperImpl<WaterMonitoryPointPO, WaterMonitoryPointMapper> {
+	WaterMonitoryPointMapperImpl(WaterMonitoryPointMapper mapper) {
+		super(mapper);
+	}
+
+	@Override
+	public PagerResult<WaterMonitoryPointPO> search(SearchBasicDTO request) {
+		// 还原查询条件真实类型
+		SearchWaterMonitoryPoint search = (SearchWaterMonitoryPoint)request;
+		// 查询条件
+		LambdaQueryWrapper<WaterMonitoryPointPO> queryWrapper = this.query();
+		// 非逻辑删除
+		queryWrapper.eq(WaterMonitoryPointPO::getIsDelete, EYesOrNo.NO.getValue());
+		// 状态
+		//queryWrapper.eq(NumericUtil.tryParseInt(search.getStatus()).compareTo(0) > 0, WaterMonitoryPointPO::getStatus, search.getStatus());
+		// 状态列表
+		//queryWrapper.in(ListUtil.isNotNullOrEmpty(search.getListStatus()), WaterMonitoryPointPO::getStatus, search.getListStatus());
+
+		// 数据创建时间-起始
+		queryWrapper.ge(NumericUtil.tryParseLong(search.getCreateTimeStart()).compareTo(0L) > 0, WaterMonitoryPointPO::getCreateTime, search.getCreateTimeStart());
+		// 数据创建时间-截止
+		queryWrapper.le(NumericUtil.tryParseLong(search.getCreateTimeEnd()).compareTo(0L) > 0, WaterMonitoryPointPO::getCreateTime, search.getCreateTimeEnd());
+		// 关键字
+		if (StringUtil.isNotNullOrEmpty(search.getKeywords())) {
+			queryWrapper.and(q ->
+					q.like(WaterMonitoryPointPO::getPointName, 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(WaterMonitoryPointPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByAsc(WaterMonitoryPointPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByAsc(WaterMonitoryPointPO::getUpdateTime);
+							break;
+					}
+				} else {
+					// 倒叙排序
+					switch (orderBy) {
+						// 主键
+						case ID:
+							queryWrapper.orderByDesc(WaterMonitoryPointPO::getId);
+							break;
+						// 数据创建时间
+						case CREATE_TIME:
+							queryWrapper.orderByDesc(WaterMonitoryPointPO::getCreateTime);
+							break;
+						// 最后更新时间
+						case UPDATE_TIME:
+							queryWrapper.orderByDesc(WaterMonitoryPointPO::getUpdateTime);
+							break;
+					}
+				}
+			}
+		} else {
+			queryWrapper.orderByDesc(WaterMonitoryPointPO::getId);
+		}
+		Page<WaterMonitoryPointPO> pageResult = super.selectPage(new Page<>(search.getPage(), search.getLimit()), queryWrapper);
+		return new PagerResult<>(pageResult.getSize(), pageResult.getCurrent(), pageResult.getTotal(), pageResult.getRecords());
+	}
+
+	public Boolean add(WaterMonitoryPointPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public Boolean addNotIncrement(WaterMonitoryPointPO item) {
+		int rowCount = super.insert(item);
+		return rowCount == 1;
+	}
+
+	public WaterMonitoryPointPO getById(Long id) {
+		return super.get(id);
+	}
+
+	public WaterMonitoryPointPO getByCode(String code) {
+		LambdaQueryWrapper<WaterMonitoryPointPO> queryWrapper = this.query();
+		queryWrapper.eq(WaterMonitoryPointPO::getPointCode,code);
+		return super.selectOne(queryWrapper);
+	}
+	public List<WaterMonitoryPointPO> getListById(List<Long> listId) {
+		return super.getList(listId);
+	}
+
+	public WaterMonitoryPointPO likeCode(String code) {
+		LambdaQueryWrapper<WaterMonitoryPointPO> queryWrapper = this.query();
+		queryWrapper.like(WaterMonitoryPointPO::getPointCode, code);
+		return super.selectOne(queryWrapper);
+	}
+	public List<WaterMonitoryPointPO> getListByType(Integer type) {
+		LambdaQueryWrapper<WaterMonitoryPointPO> queryWrapper = this.query();
+		queryWrapper.eq(WaterMonitoryPointPO::getPointType,type);
+		return super.selectList(queryWrapper);
+	}
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/AdminMenuMapper.java b/src/main/java/com/nanjing/water/repository/mapper/AdminMenuMapper.java
new file mode 100644
index 0000000..c165ad7
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/AdminMenuMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.AdminMenuPO;
+
+/**
+ * 菜单 mapper
+ * @author lin.liu
+ */
+public interface AdminMenuMapper extends BasicMapper<AdminMenuPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/AdminMenusMapper.java b/src/main/java/com/nanjing/water/repository/mapper/AdminMenusMapper.java
new file mode 100644
index 0000000..dea04fc
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/AdminMenusMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.AdminMenusPO;
+
+/**
+ * 菜单信息 mapper
+ * @author lin.liu
+ */
+public interface AdminMenusMapper extends BasicMapper<AdminMenusPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/AdminPermissionMapper.java b/src/main/java/com/nanjing/water/repository/mapper/AdminPermissionMapper.java
new file mode 100644
index 0000000..98557a9
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/AdminPermissionMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.AdminPermissionPO;
+
+/**
+ * 权限 mapper
+ * @author lin.liu
+ */
+public interface AdminPermissionMapper extends BasicMapper<AdminPermissionPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/AdminRoleMapper.java b/src/main/java/com/nanjing/water/repository/mapper/AdminRoleMapper.java
new file mode 100644
index 0000000..c282df8
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/AdminRoleMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.AdminRolePO;
+
+/**
+ * 角色 mapper
+ * @author lin.liu
+ */
+public interface AdminRoleMapper extends BasicMapper<AdminRolePO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/AdminRoleMenuRelationMapper.java b/src/main/java/com/nanjing/water/repository/mapper/AdminRoleMenuRelationMapper.java
new file mode 100644
index 0000000..11da56f
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/AdminRoleMenuRelationMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.AdminRoleMenuRelationPO;
+
+/**
+ * 角色菜单关联关系 mapper
+ * @author lin.liu
+ */
+public interface AdminRoleMenuRelationMapper extends BasicMapper<AdminRoleMenuRelationPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/AdminRolePermissionRelationMapper.java b/src/main/java/com/nanjing/water/repository/mapper/AdminRolePermissionRelationMapper.java
new file mode 100644
index 0000000..ffbafdd
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/AdminRolePermissionRelationMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.AdminRolePermissionRelationPO;
+
+/**
+ * 角色权限关联关系 mapper
+ * @author lin.liu
+ */
+public interface AdminRolePermissionRelationMapper extends BasicMapper<AdminRolePermissionRelationPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/AdminRoleRelationMapper.java b/src/main/java/com/nanjing/water/repository/mapper/AdminRoleRelationMapper.java
new file mode 100644
index 0000000..2e527cf
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/AdminRoleRelationMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.AdminRoleRelationPO;
+
+/**
+ * 用户和角色关联关系 mapper
+ * @author lin.liu
+ */
+public interface AdminRoleRelationMapper extends BasicMapper<AdminRoleRelationPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/AdminUserMapper.java b/src/main/java/com/nanjing/water/repository/mapper/AdminUserMapper.java
new file mode 100644
index 0000000..9d92320
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/AdminUserMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.AdminUserPO;
+
+/**
+ * 管理员帐号 mapper
+ * @author lin.liu
+ */
+public interface AdminUserMapper extends BasicMapper<AdminUserPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/AlarmHistoryMapper.java b/src/main/java/com/nanjing/water/repository/mapper/AlarmHistoryMapper.java
new file mode 100644
index 0000000..bb0f0c2
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/AlarmHistoryMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.AlarmHistoryPO;
+
+/**
+ * 报警信息 mapper
+ * @author lin.liu
+ */
+public interface AlarmHistoryMapper extends BasicMapper<AlarmHistoryPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/AlarmSchemeMapper.java b/src/main/java/com/nanjing/water/repository/mapper/AlarmSchemeMapper.java
new file mode 100644
index 0000000..0002fb0
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/AlarmSchemeMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.AlarmSchemePO;
+
+/**
+ * 报警方案设置 mapper
+ * @author lin.liu
+ */
+public interface AlarmSchemeMapper extends BasicMapper<AlarmSchemePO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/CommonParametersMapper.java b/src/main/java/com/nanjing/water/repository/mapper/CommonParametersMapper.java
new file mode 100644
index 0000000..f6ec82a
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/CommonParametersMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.CommonParametersPO;
+
+/**
+ * 公共参数 mapper
+ * @author lin.liu
+ */
+public interface CommonParametersMapper extends BasicMapper<CommonParametersPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/SysDictDataMapper.java b/src/main/java/com/nanjing/water/repository/mapper/SysDictDataMapper.java
new file mode 100644
index 0000000..2dcadd2
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/SysDictDataMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.SysDictDataPO;
+
+/**
+ * 字典数据 mapper
+ * @author lin.liu
+ */
+public interface SysDictDataMapper extends BasicMapper<SysDictDataPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/SysDictTypeMapper.java b/src/main/java/com/nanjing/water/repository/mapper/SysDictTypeMapper.java
new file mode 100644
index 0000000..f029eea
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/SysDictTypeMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.SysDictTypePO;
+
+/**
+ * 字典类型 mapper
+ * @author lin.liu
+ */
+public interface SysDictTypeMapper extends BasicMapper<SysDictTypePO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/SysRegionMapper.java b/src/main/java/com/nanjing/water/repository/mapper/SysRegionMapper.java
new file mode 100644
index 0000000..5d38537
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/SysRegionMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.SysRegionPO;
+
+/**
+ * 系统行政地区 mapper
+ * @author lin.liu
+ */
+public interface SysRegionMapper extends BasicMapper<SysRegionPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/WaterFacilityMapper.java b/src/main/java/com/nanjing/water/repository/mapper/WaterFacilityMapper.java
new file mode 100644
index 0000000..36a3193
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/WaterFacilityMapper.java
@@ -0,0 +1,14 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.WaterFacilityPO;
+
+
+/**
+ * 设备信息 mapper
+ *
+ * @author lin.liu
+ */
+public interface WaterFacilityMapper extends BasicMapper<WaterFacilityPO> {
+
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/WaterFacilityParameterMapper.java b/src/main/java/com/nanjing/water/repository/mapper/WaterFacilityParameterMapper.java
new file mode 100644
index 0000000..25c40de
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/WaterFacilityParameterMapper.java
@@ -0,0 +1,12 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.WaterFacilityParameterPO;
+
+/**
+ * 设备设定参数 mapper
+ *
+ * @author lin.liu
+ */
+public interface WaterFacilityParameterMapper extends BasicMapper<WaterFacilityParameterPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/WaterFacilityTypeMapper.java b/src/main/java/com/nanjing/water/repository/mapper/WaterFacilityTypeMapper.java
new file mode 100644
index 0000000..8009a86
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/WaterFacilityTypeMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.WaterFacilityTypePO;
+
+/**
+ * 设备类型 mapper
+ * @author lin.liu
+ */
+public interface WaterFacilityTypeMapper extends BasicMapper<WaterFacilityTypePO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/mapper/WaterMonitoryPointMapper.java b/src/main/java/com/nanjing/water/repository/mapper/WaterMonitoryPointMapper.java
new file mode 100644
index 0000000..ade60fe
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/mapper/WaterMonitoryPointMapper.java
@@ -0,0 +1,11 @@
+package com.nanjing.water.repository.mapper;
+
+import com.nanjing.water.repository.BasicMapper;
+import com.nanjing.water.repository.po.WaterMonitoryPointPO;
+
+/**
+ * 监控点 mapper
+ * @author lin.liu
+ */
+public interface WaterMonitoryPointMapper extends BasicMapper<WaterMonitoryPointPO> {
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/AdminMenuPO.java b/src/main/java/com/nanjing/water/repository/po/AdminMenuPO.java
new file mode 100644
index 0000000..8dacf69
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/AdminMenuPO.java
@@ -0,0 +1,105 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 菜单
+ * @author lin.liu
+ */
+@Data
+@TableName("admin_menu")
+public class AdminMenuPO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 父级ID
+	 */
+	@TableField(value = "parent_id")
+	private Long parentId;
+	/**
+	 * 类型 EMenuType
+	 */
+	@TableField(value = "type")
+	private Integer type;
+	/**
+	 * 菜单名称
+	 */
+	@TableField(value = "name")
+	private String name;
+	/**
+	 * 菜单标题
+	 */
+	@TableField(value = "title")
+	private String title;
+	/**
+	 * 前端资源路径
+	 */
+	@TableField(value = "url")
+	private String url;
+	/**
+	 * 菜单层级
+	 */
+	@TableField(value = "level")
+	private Integer level;
+	/**
+	 * 排序值
+	 */
+	@TableField(value = "sort")
+	private Integer sort;
+	/**
+	 * 图标
+	 */
+	@TableField(value = "icon")
+	private String icon;
+	/**
+	 * 状态 EState
+	 */
+	@TableField(value = "status")
+	private Integer status;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/AdminMenusPO.java b/src/main/java/com/nanjing/water/repository/po/AdminMenusPO.java
new file mode 100644
index 0000000..ff7d418
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/AdminMenusPO.java
@@ -0,0 +1,100 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 菜单信息
+ * @author lin.liu
+ */
+@Data
+@TableName("admin_menus")
+public class AdminMenusPO implements Serializable {
+	/**
+	 * 主键id
+	 */
+	private Long id;
+	/**
+	 * 父级id
+	 */
+	@TableField(value = "parent_id")
+	private Long parentId;
+	/**
+	 * 菜单名称
+	 */
+	@TableField(value = "name")
+	private String name;
+	/**
+	 * 菜单标题
+	 */
+	@TableField(value = "title")
+	private String title;
+	/**
+	 * 前端资源路径
+	 */
+	@TableField(value = "uri")
+	private String uri;
+	/**
+	 * 菜单层级
+	 */
+	@TableField(value = "level")
+	private Integer level;
+	/**
+	 * 排序值
+	 */
+	@TableField(value = "sort")
+	private Integer sort;
+	/**
+	 * 图标
+	 */
+	@TableField(value = "icon")
+	private String icon;
+	/**
+	 * 状态 EState
+	 */
+	@TableField(value = "status")
+	private Integer status;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/AdminPermissionPO.java b/src/main/java/com/nanjing/water/repository/po/AdminPermissionPO.java
new file mode 100644
index 0000000..84ac543
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/AdminPermissionPO.java
@@ -0,0 +1,95 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 权限
+ * @author lin.liu
+ */
+@Data
+@TableName("admin_permission")
+public class AdminPermissionPO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 权限值
+	 */
+	@TableField(value = "sn")
+	private String sn;
+	/**
+	 * 菜单id
+	 */
+	@TableField(value = "menu_id")
+	private Long menuId;
+	/**
+	 * 前端资源url
+	 */
+	@TableField(value = "menu_url")
+	private String menuUrl;
+	/**
+	 * 名称
+	 */
+	@TableField(value = "name")
+	private String name;
+	/**
+	 * 图标
+	 */
+	@TableField(value = "icon")
+	private String icon;
+	/**
+	 * 权限类型 EOperation
+	 */
+	@TableField(value = "type")
+	private String type;
+	/**
+	 * 状态 EStatus
+	 */
+	@TableField(value = "status")
+	private Integer status;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/AdminRoleMenuRelationPO.java b/src/main/java/com/nanjing/water/repository/po/AdminRoleMenuRelationPO.java
new file mode 100644
index 0000000..ef60955
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/AdminRoleMenuRelationPO.java
@@ -0,0 +1,70 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 角色菜单关联关系
+ * @author lin.liu
+ */
+@Data
+@TableName("admin_role_menu_relation")
+public class AdminRoleMenuRelationPO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 角色id
+	 */
+	@TableField(value = "role_id")
+	private Long roleId;
+	/**
+	 * 菜单id
+	 */
+	@TableField(value = "menu_id")
+	private Long menuId;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/AdminRolePO.java b/src/main/java/com/nanjing/water/repository/po/AdminRolePO.java
new file mode 100644
index 0000000..7e91b15
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/AdminRolePO.java
@@ -0,0 +1,80 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 角色
+ * @author lin.liu
+ */
+@Data
+@TableName("admin_role")
+public class AdminRolePO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 角色名称
+	 */
+	@TableField(value = "name")
+	private String name;
+	/**
+	 * 描述
+	 */
+	@TableField(value = "description")
+	private String description;
+	/**
+	 * 状态 EState
+	 */
+	@TableField(value = "status")
+	private Integer status;
+	/**
+	 * 排序值
+	 */
+	@TableField(value = "sort")
+	private Integer sort;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/AdminRolePermissionRelationPO.java b/src/main/java/com/nanjing/water/repository/po/AdminRolePermissionRelationPO.java
new file mode 100644
index 0000000..3578b53
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/AdminRolePermissionRelationPO.java
@@ -0,0 +1,70 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 角色权限关联关系
+ * @author lin.liu
+ */
+@Data
+@TableName("admin_role_permission_relation")
+public class AdminRolePermissionRelationPO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 角色id
+	 */
+	@TableField(value = "role_id")
+	private Long roleId;
+	/**
+	 * 权限id
+	 */
+	@TableField(value = "permission_id")
+	private Long permissionId;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/AdminRoleRelationPO.java b/src/main/java/com/nanjing/water/repository/po/AdminRoleRelationPO.java
new file mode 100644
index 0000000..e69b710
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/AdminRoleRelationPO.java
@@ -0,0 +1,70 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 用户和角色关联关系
+ * @author lin.liu
+ */
+@Data
+@TableName("admin_role_relation")
+public class AdminRoleRelationPO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 管理员id
+	 */
+	@TableField(value = "admin_id")
+	private Long adminId;
+	/**
+	 * 角色id
+	 */
+	@TableField(value = "role_id")
+	private Long roleId;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/AdminUserPO.java b/src/main/java/com/nanjing/water/repository/po/AdminUserPO.java
new file mode 100644
index 0000000..18b5ce0
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/AdminUserPO.java
@@ -0,0 +1,105 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 管理员帐号
+ * @author lin.liu
+ */
+@Data
+@TableName("admin_user")
+public class AdminUserPO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 用户类型 EUserType
+	 */
+	@TableField(value = "user_type")
+	private Integer userType;
+	/**
+	 * 用户关联id,和“user_type”对应,如:客户id等
+	 */
+	@TableField(value = "user_rel_id")
+	private Long userRelId;
+	/**
+	 * 用户名
+	 */
+	@TableField(value = "user_name")
+	private String userName;
+	/**
+	 * 密码
+	 */
+	@TableField(value = "password")
+	private String password;
+	/**
+	 * 昵称
+	 */
+	@TableField(value = "nick_name")
+	private String nickName;
+	/**
+	 * 头像
+	 */
+	@TableField(value = "head_img")
+	private String headImg;
+	/**
+	 * 联系方式
+	 */
+	@TableField(value = "contact")
+	private String contact;
+	/**
+	 * 联系邮箱
+	 */
+	@TableField(value = "email")
+	private String email;
+	/**
+	 * 状态 EState
+	 */
+	@TableField(value = "status")
+	private Integer status;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/AlarmHistoryPO.java b/src/main/java/com/nanjing/water/repository/po/AlarmHistoryPO.java
new file mode 100644
index 0000000..53cc88b
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/AlarmHistoryPO.java
@@ -0,0 +1,105 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 报警信息
+ * @author lin.liu
+ */
+@Data
+@TableName("alarm_history")
+public class AlarmHistoryPO implements Serializable {
+	/**
+	 * 主键id
+	 */
+	private Long id;
+	/**
+	 * 设备id
+	 */
+	@TableField(value = "facility_id")
+	private Long facilityId;
+	/**
+	 * 设备名称
+	 */
+	@TableField(value = "facility_name")
+	private String facilityName;
+	/**
+	 * 报警参数
+	 */
+	@TableField(value = "code")
+	private Integer code;
+	/**
+	 * 报警描述
+	 */
+	@TableField(value = "description")
+	private String description;
+	/**
+	 * 备注
+	 */
+	@TableField(value = "comment")
+	private String comment;
+	/**
+	 * 是否处理
+	 */
+	@TableField(value = "is_solve")
+	private Integer isSolve;
+	/**
+	 * 是否确认(10误报 20已证实,200已处理)
+	 */
+	@TableField(value = "is_confirm")
+	private Integer isConfirm;
+	/**
+	 * 是否删除
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+	/**
+	 * 创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 修改时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 最后报警时间
+	 */
+	@TableField(value = "last_time")
+	private Long lastTime;
+	/**
+	 * 报警次数
+	 */
+	@TableField(value = "total_count")
+	private Integer totalCount;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/AlarmSchemePO.java b/src/main/java/com/nanjing/water/repository/po/AlarmSchemePO.java
new file mode 100644
index 0000000..6cf9c37
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/AlarmSchemePO.java
@@ -0,0 +1,91 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+
+/**
+ * 报警方案设置
+ * @author lin.liu
+ */
+@Data
+@TableName("alarm_scheme")
+public class AlarmSchemePO implements Serializable {
+	/**
+	 * 主键id
+	 */
+	private Long id;
+	/**
+	 * 设备id
+	 */
+	@TableField(value = "facility_id")
+	private Long facilityId;
+	/**
+	 * 设备参数
+	 */
+	@TableField(value = "columns_code")
+	private String columnsCode;
+	/**
+	 * 方案名称
+	 */
+	@TableField(value = "scheme_name")
+	private String schemeName;
+	/**
+	 * 低报警值
+	 */
+	@TableField(value = "low_alarm")
+	private BigDecimal lowAlarm;
+	/**
+	 * 高报警值
+	 */
+	@TableField(value = "tall_alarm")
+	private BigDecimal tallAlarm;
+	/**
+	 * 备注
+	 */
+	@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/nanjing/water/repository/po/CommonParametersPO.java b/src/main/java/com/nanjing/water/repository/po/CommonParametersPO.java
new file mode 100644
index 0000000..bba05cd
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/CommonParametersPO.java
@@ -0,0 +1,80 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 公共参数
+ * @author lin.liu
+ */
+@Data
+@TableName("common_parameters")
+public class CommonParametersPO implements Serializable {
+	/**
+	 * 参数管理id,主键自增
+	 */
+	private Long id;
+	/**
+	 * 参数名称,与前端对接的名称
+	 */
+	@TableField(value = "name")
+	private String name;
+	/**
+	 * 参数标识,与硬件对接的名称
+	 */
+	@TableField(value = "mark")
+	private String mark;
+	/**
+	 * 单位
+	 */
+	@TableField(value = "unit")
+	private String unit;
+	/**
+	 * 排序值
+	 */
+	@TableField(value = "sort")
+	private Integer sort;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/SysDictDataPO.java b/src/main/java/com/nanjing/water/repository/po/SysDictDataPO.java
new file mode 100644
index 0000000..b193ebe
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/SysDictDataPO.java
@@ -0,0 +1,85 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 字典数据
+ * @author lin.liu
+ */
+@Data
+@TableName("sys_dict_data")
+public class SysDictDataPO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 字典标题
+	 */
+	@TableField(value = "dict_label")
+	private String dictLabel;
+	/**
+	 * 字典键值
+	 */
+	@TableField(value = "dict_value")
+	private String dictValue;
+	/**
+	 * 字典类型
+	 */
+	@TableField(value = "dict_type")
+	private String dictType;
+	/**
+	 * 状态
+	 */
+	@TableField(value = "status")
+	private Integer status;
+	/**
+	 * 备注
+	 */
+	@TableField(value = "remark")
+	private String remark;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/SysDictTypePO.java b/src/main/java/com/nanjing/water/repository/po/SysDictTypePO.java
new file mode 100644
index 0000000..51d8d1e
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/SysDictTypePO.java
@@ -0,0 +1,80 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 字典类型
+ * @author lin.liu
+ */
+@Data
+@TableName("sys_dict_type")
+public class SysDictTypePO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 字典名称
+	 */
+	@TableField(value = "dict_name")
+	private String dictName;
+	/**
+	 * 字典类型
+	 */
+	@TableField(value = "dict_type")
+	private String dictType;
+	/**
+	 * 状态
+	 */
+	@TableField(value = "status")
+	private Integer status;
+	/**
+	 * 备注
+	 */
+	@TableField(value = "remark")
+	private String remark;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/SysRegionPO.java b/src/main/java/com/nanjing/water/repository/po/SysRegionPO.java
new file mode 100644
index 0000000..1d7c33c
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/SysRegionPO.java
@@ -0,0 +1,126 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+
+/**
+ * 系统行政地区
+ * @author lin.liu
+ */
+@Data
+@TableName("sys_region")
+public class SysRegionPO implements Serializable {
+	/**
+	 * 主键Id
+	 */
+	private Long id;
+	/**
+	 * 行政代码
+	 */
+	@TableField(value = "code")
+	private String code;
+	/**
+	 * 上级行政代码
+	 */
+	@TableField(value = "parent_code")
+	private String parentCode;
+	/**
+	 * 名称
+	 */
+	@TableField(value = "name")
+	private String name;
+	/**
+	 * 简称
+	 */
+	@TableField(value = "short_name")
+	private String shortName;
+	/**
+	 * 邮政编码
+	 */
+	@TableField(value = "zip_code")
+	private String zipCode;
+	/**
+	 * 区号
+	 */
+	@TableField(value = "city_code")
+	private String cityCode;
+	/**
+	 * 层级
+	 */
+	@TableField(value = "level")
+	private Integer level;
+	/**
+	 * 拼音
+	 */
+	@TableField(value = "pin_yin")
+	private String pinYin;
+	/**
+	 * 拼音简写
+	 */
+	@TableField(value = "pin_yin_short")
+	private String pinYinShort;
+	/**
+	 * 经度
+	 */
+	@TableField(value = "lng")
+	private BigDecimal lng;
+	/**
+	 * 维度
+	 */
+	@TableField(value = "lat")
+	private BigDecimal lat;
+	/**
+	 * 排序
+	 */
+	@TableField(value = "sort")
+	private Integer sort;
+	/**
+	 * 备注
+	 */
+	@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/nanjing/water/repository/po/WaterFacilityPO.java b/src/main/java/com/nanjing/water/repository/po/WaterFacilityPO.java
new file mode 100644
index 0000000..e083ece
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/WaterFacilityPO.java
@@ -0,0 +1,143 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+
+/**
+ * 设备信息
+ * @author lin.liu
+ */
+@Data
+@TableName("water_facility")
+public class WaterFacilityPO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 设备名称
+	 */
+	@TableField(value = "facility_name")
+	private String facilityName;
+	/**
+	 * 设备编号
+	 */
+	@TableField(value = "facility_code")
+	private String facilityCode;
+	/**
+	 * 设备类型
+	 */
+	@TableField(value = "facility_type")
+	private Long facilityType;
+	/**
+	 * 监控点id
+	 */
+	@TableField(value = "point_id")
+	private Long pointId;
+	/**
+	 * 1:在线 0:下线
+	 */
+	@TableField(value = "is_online")
+	private Integer isOnline;
+
+	/**
+	 * 地址
+	 */
+	@TableField(value = "address")
+	private String address;
+	/**
+	 * 备注
+	 */
+	@TableField(value = "remark")
+	private String remark;
+	/**
+	 * 设备图片
+	 */
+	@TableField(value = "facility_url")
+	private String facilityUrl;
+	/**
+	 * 安装日期
+	 */
+	@TableField(value = "install_date")
+	private String installDate;
+	/**
+	 * 最新数据上报时间间隔(单位分钟)
+	 */
+	@TableField(value = "new_interval_time")
+	private Integer newIntervalTime;
+	/**
+	 * 历史数据上报时间间隔(单位分钟)
+	 */
+	@TableField(value = "history_interval_time")
+	private Integer historyIntervalTime;
+	/**
+	 * 水位采集时间间隔(单位分钟)
+	 */
+	@TableField(value = "gather_interval_time")
+	private Integer gatherIntervalTime;
+	/**
+	 * 量程设置
+	 */
+	@TableField(value = "range")
+	private BigDecimal range;
+	/**
+	 * 高程设置
+	 */
+	@TableField(value = "elevation")
+	private BigDecimal elevation;
+	/**
+	 * 投放角度
+	 */
+	@TableField(value = "put_angle")
+	private BigDecimal putAngle;
+	/**
+	 * 低水位下限
+	 */
+	@TableField(value = "low_water_level")
+	private BigDecimal lowWaterLevel;
+
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/WaterFacilityParameterPO.java b/src/main/java/com/nanjing/water/repository/po/WaterFacilityParameterPO.java
new file mode 100644
index 0000000..9eecc71
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/WaterFacilityParameterPO.java
@@ -0,0 +1,95 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 设备设定参数
+ * @author lin.liu
+ */
+@Data
+@TableName("water_facility_parameter")
+public class WaterFacilityParameterPO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 设备id
+	 */
+	@TableField(value = "facility_id")
+	private Long facilityId;
+	/**
+	 * 设备code
+	 */
+	@TableField(value = "facility_code")
+	private String facilityCode;
+	/**
+	 * 参数编码
+	 */
+	@TableField(value = "columns_code")
+	private String columnsCode;
+	/**
+	 * 参数名称
+	 */
+	@TableField(value = "columns_show")
+	private String columnsShow;
+	/**
+	 * 锟斤拷位
+	 */
+	@TableField(value = "columns_units")
+	private String columnsUnits;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+	/**
+	 * 参数值
+	 */
+	@TableField(value = "column_value")
+	private String columnValue;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "last_time")
+	private String lastTime;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/WaterFacilityTypePO.java b/src/main/java/com/nanjing/water/repository/po/WaterFacilityTypePO.java
new file mode 100644
index 0000000..2aa8f88
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/WaterFacilityTypePO.java
@@ -0,0 +1,70 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 设备类型
+ * @author lin.liu
+ */
+@Data
+@TableName("water_facility_type")
+public class WaterFacilityTypePO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 编码
+	 */
+	@TableField(value = "code")
+	private String code;
+	/**
+	 * 名称
+	 */
+	@TableField(value = "name")
+	private String name;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 编辑时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/po/WaterMonitoryPointPO.java b/src/main/java/com/nanjing/water/repository/po/WaterMonitoryPointPO.java
new file mode 100644
index 0000000..1af6710
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/po/WaterMonitoryPointPO.java
@@ -0,0 +1,96 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 监控点
+ * @author lin.liu
+ */
+@Data
+@TableName("water_monitory_point")
+public class WaterMonitoryPointPO implements Serializable {
+	/**
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 上级监控点id
+	 */
+	@TableField(value = "parent_id")
+	private Long parentId;
+	/**
+	 * 监控点类型
+	 */
+	@TableField(value = "point_type")
+	private Integer pointType;
+	/**
+	 * 监控点编号
+	 */
+	@TableField(value = "point_code")
+	private String pointCode;
+	/**
+	 * 监控点名称
+	 */
+	@TableField(value = "point_name")
+	private String pointName;
+	/**
+	 * 详细地址
+	 */
+	@TableField(value = "address")
+	private String address;
+	/**
+	 * 备注
+	 */
+	@TableField(value = "remark")
+	private String remark;
+
+	/**
+	 * 监控点图片
+	 */
+	@TableField(value = "image_rul")
+	private String imageUrl;
+	/**
+	 * 数据创建时间
+	 */
+	@TableField(value = "create_time")
+	private Long createTime;
+	/**
+	 * 最后更新时间
+	 */
+	@TableField(value = "update_time")
+	private Timestamp updateTime;
+	/**
+	 * 是否删除(逻辑删除)
+	 */
+	@TableLogic
+	@TableField(value = "is_delete")
+	private Integer isDelete;
+}
diff --git a/src/main/java/com/nanjing/water/repository/vo/AdminMenuVO.java b/src/main/java/com/nanjing/water/repository/vo/AdminMenuVO.java
new file mode 100644
index 0000000..85d6ec1
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/AdminMenuVO.java
@@ -0,0 +1,54 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.AdminMenuPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 后台菜单
+ * @author lin.liu
+ */
+@Data
+public class AdminMenuVO extends AdminMenuPO 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/AdminPermissionVO.java b/src/main/java/com/nanjing/water/repository/vo/AdminPermissionVO.java
new file mode 100644
index 0000000..67b4b42
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/AdminPermissionVO.java
@@ -0,0 +1,54 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.AdminPermissionPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 后台用户权限表
+ * @author lin.liu
+ */
+@Data
+public class AdminPermissionVO extends AdminPermissionPO 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/AdminRoleMenuRelationVO.java b/src/main/java/com/nanjing/water/repository/vo/AdminRoleMenuRelationVO.java
new file mode 100644
index 0000000..ec1e8af
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/AdminRoleMenuRelationVO.java
@@ -0,0 +1,54 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.AdminRoleMenuRelationPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 后台角色菜单关系表
+ * @author lin.liu
+ */
+@Data
+public class AdminRoleMenuRelationVO extends AdminRoleMenuRelationPO 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/AdminRolePermissionRelationVO.java b/src/main/java/com/nanjing/water/repository/vo/AdminRolePermissionRelationVO.java
new file mode 100644
index 0000000..707a534
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/AdminRolePermissionRelationVO.java
@@ -0,0 +1,54 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.AdminRolePermissionRelationPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 后台角色权限关系表
+ * @author lin.liu
+ */
+@Data
+public class AdminRolePermissionRelationVO extends AdminRolePermissionRelationPO 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/AdminRoleRelationVO.java b/src/main/java/com/nanjing/water/repository/vo/AdminRoleRelationVO.java
new file mode 100644
index 0000000..f4d04bf
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/AdminRoleRelationVO.java
@@ -0,0 +1,54 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.AdminRoleRelationPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 后台用户和角色关系表
+ * @author lin.liu
+ */
+@Data
+public class AdminRoleRelationVO extends AdminRoleRelationPO 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/AdminRoleVO.java b/src/main/java/com/nanjing/water/repository/vo/AdminRoleVO.java
new file mode 100644
index 0000000..4bf4441
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/AdminRoleVO.java
@@ -0,0 +1,53 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.AdminRolePO;
+
+import java.util.Objects;
+
+/**
+ * 后台用户角色表
+ * @author lin.liu
+ */
+
+public class AdminRoleVO extends AdminRolePO 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/AdminUserVO.java b/src/main/java/com/nanjing/water/repository/vo/AdminUserVO.java
new file mode 100644
index 0000000..3554aba
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/AdminUserVO.java
@@ -0,0 +1,54 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.AdminUserPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 管理员帐号
+ * @author lin.liu
+ */
+@Data
+public class AdminUserVO extends AdminUserPO 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/AlarmHistoryVO.java b/src/main/java/com/nanjing/water/repository/vo/AlarmHistoryVO.java
new file mode 100644
index 0000000..f5b5b11
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/AlarmHistoryVO.java
@@ -0,0 +1,61 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.AlarmHistoryPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 报警信息
+ * @author lin.liu
+ */
+@Data
+public class AlarmHistoryVO extends AlarmHistoryPO 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());
+    }
+
+    public String getLastTimeView() {
+        if (NumericUtil.tryParseLong(this.getLastTime()).compareTo(0L) > 0) {
+            return LocalDateTimeUtil.toFormatString(this.getLastTime());
+        }
+        return "";
+    }
+}
diff --git a/src/main/java/com/nanjing/water/repository/vo/AlarmSchemeVO.java b/src/main/java/com/nanjing/water/repository/vo/AlarmSchemeVO.java
new file mode 100644
index 0000000..669e014
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/AlarmSchemeVO.java
@@ -0,0 +1,56 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.AlarmSchemePO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 报警方案设置
+ * @author lin.liu
+ */
+@Data
+public class AlarmSchemeVO extends AlarmSchemePO implements BasicVO {
+    private String facilityName;
+    private String columnsName;
+
+    @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/CommonParametersVO.java b/src/main/java/com/nanjing/water/repository/vo/CommonParametersVO.java
new file mode 100644
index 0000000..69a07dc
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/CommonParametersVO.java
@@ -0,0 +1,54 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.CommonParametersPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 公共参数
+ * @author lin.liu
+ */
+@Data
+public class CommonParametersVO extends CommonParametersPO 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/SysDictDataVO.java b/src/main/java/com/nanjing/water/repository/vo/SysDictDataVO.java
new file mode 100644
index 0000000..94e6ad7
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/SysDictDataVO.java
@@ -0,0 +1,58 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.SysDictDataPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 字典数据表
+ * @author lin.liu
+ */
+@Data
+public class SysDictDataVO extends SysDictDataPO implements BasicVO {
+    /**
+     * 字典类型名称
+     */
+    public String dictTypeTxt;
+
+    @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/SysDictTypeVO.java b/src/main/java/com/nanjing/water/repository/vo/SysDictTypeVO.java
new file mode 100644
index 0000000..944a417
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/SysDictTypeVO.java
@@ -0,0 +1,54 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.SysDictTypePO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 字典类型表
+ * @author lin.liu
+ */
+@Data
+public class SysDictTypeVO extends SysDictTypePO 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/SysRegionVO.java b/src/main/java/com/nanjing/water/repository/vo/SysRegionVO.java
new file mode 100644
index 0000000..48c025f
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/SysRegionVO.java
@@ -0,0 +1,54 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.SysRegionPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 系统行政地区
+ * @author lin.liu
+ */
+@Data
+public class SysRegionVO extends SysRegionPO 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/WaterFacilityParameterVO.java b/src/main/java/com/nanjing/water/repository/vo/WaterFacilityParameterVO.java
new file mode 100644
index 0000000..5ef6f00
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/WaterFacilityParameterVO.java
@@ -0,0 +1,55 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.WaterFacilityParameterPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 设备设定参数
+ * @author lin.liu
+ */
+@Data
+public class WaterFacilityParameterVO extends WaterFacilityParameterPO implements BasicVO {
+    private String facilityName;
+
+    @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/WaterFacilityTypeVO.java b/src/main/java/com/nanjing/water/repository/vo/WaterFacilityTypeVO.java
new file mode 100644
index 0000000..7d02260
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/WaterFacilityTypeVO.java
@@ -0,0 +1,56 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.WaterFacilityPO;
+import com.nanjing.water.repository.po.WaterFacilityTypePO;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 设备类型
+ * @author lin.liu
+ */
+@Data
+public class WaterFacilityTypeVO extends WaterFacilityTypePO implements BasicVO {
+  private List<WaterFacilityPO> facilityPOList;
+    @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
new file mode 100644
index 0000000..1d0ce24
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/WaterFacilityVO.java
@@ -0,0 +1,56 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.WaterFacilityPO;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 设备信息
+ * @author lin.liu
+ */
+@Data
+public class WaterFacilityVO extends WaterFacilityPO implements BasicVO {
+    private String pointName;
+    private String facilityTypeName;
+
+    @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/WaterMonitoryPointVO.java b/src/main/java/com/nanjing/water/repository/vo/WaterMonitoryPointVO.java
new file mode 100644
index 0000000..98db8e2
--- /dev/null
+++ b/src/main/java/com/nanjing/water/repository/vo/WaterMonitoryPointVO.java
@@ -0,0 +1,58 @@
+/**
+ * #                                                    __----~~~~~~~~~~~------___
+ * #                                   .  .   ~~//====......          __--~ ~~
+ * #                   -.            \_|//     |||\\  ~~~~~~::::... /~
+ * #                ___-==_       _-~o~  \/    |||  \\            _/~~-
+ * #        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+ * #    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+ * #  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+ * # /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+ * # |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+ * #          '         ~-|      /|    |-~\~~       __--~~
+ * #                      |-~~-_/ |    |   ~\_   _-~            /\
+ * #                           /  \     \__   \/~                \__
+ * #                       _--~ _/ | .-~~____--~-/                  ~~==.
+ * #                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+ * #                                 -_     ~\      ~~---l__i__i__i--~~_/
+ * #                                 _-~-__   ~)  \--______________--~~
+ * #                               //.-~~~-~_--~- |-------~~~~~~~~
+ * #                                      //.-~~~--\
+ * #                  神兽保佑
+ * #                  永无BUG!
+ */
+package com.nanjing.water.repository.vo;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.WaterMonitoryPointPO;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 监控点
+ * @author lin.liu
+ */
+@Data
+public class WaterMonitoryPointVO extends WaterMonitoryPointPO implements BasicVO {
+    private List<WaterMonitoryPointVO> childrenList=new ArrayList<>();
+    private String pointTypeName;
+
+    @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/service/AdminPowerService.java b/src/main/java/com/nanjing/water/service/AdminPowerService.java
new file mode 100644
index 0000000..a0b30b6
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/AdminPowerService.java
@@ -0,0 +1,869 @@
+package com.nanjing.water.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.model.Tuple;
+import com.nanjing.water.common.util.*;
+import com.nanjing.water.entity.enums.EState;
+import com.nanjing.water.entity.request.ReqListSetSort;
+import com.nanjing.water.entity.request.ReqSetSort;
+import com.nanjing.water.entity.request.adminmenu.ReqCreateAdminMenu;
+import com.nanjing.water.entity.request.adminmenu.ReqModifyAdminMenu;
+import com.nanjing.water.entity.request.adminpermission.ReqCreateAdminPermission;
+import com.nanjing.water.entity.request.adminpermission.ReqModifyAdminPermission;
+import com.nanjing.water.entity.request.adminrole.ReqCreateAdminRole;
+import com.nanjing.water.entity.request.adminrole.ReqModifyAdminRole;
+import com.nanjing.water.entity.request.adminrolemenurelation.ReqSetListMenu4Role;
+import com.nanjing.water.entity.response.admin.ResAdminMenuTreeAndPermission;
+import com.nanjing.water.entity.response.admin.ResAdminPermission;
+import com.nanjing.water.entity.response.admin.ResAdminPower;
+import com.nanjing.water.entity.search.SearchAdminMenu;
+import com.nanjing.water.entity.search.SearchAdminPermission;
+import com.nanjing.water.entity.search.SearchAdminRole;
+import com.nanjing.water.repository.impl.*;
+import com.nanjing.water.repository.po.*;
+import com.nanjing.water.repository.vo.AdminMenuVO;
+import com.nanjing.water.repository.vo.AdminRoleVO;
+import com.nanjing.water.service.cache.AdminMenuService;
+import com.nanjing.water.service.cache.AdminPermissionService;
+import com.nanjing.water.service.convert.AdminMenuConvert;
+import com.nanjing.water.service.convert.AdminPermissionConvert;
+import com.nanjing.water.service.convert.AdminRoleConvert;
+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;
+
+@Service
+public class AdminPowerService extends BaseService {
+    @Autowired
+    private AdminMenuMapperImpl menusDao;
+    @Autowired
+    private AdminPermissionMapperImpl permissionDao;
+    @Autowired
+    private AdminRoleMapperImpl roleDao;
+    @Autowired
+    private AdminRoleMenuRelationMapperImpl roleMenuRelationDao;
+    @Autowired
+    private AdminRolePermissionRelationMapperImpl rolePermissionRelationDao;
+    @Autowired
+    private AdminRoleRelationMapperImpl adminRoleRelationDao;
+
+    @Autowired
+    private AdminMenuService menusService;
+    @Autowired
+    private AdminPermissionService permissionService;
+
+
+
+    // 创建菜单
+    public ExecutedResult<Long> createMenu(ReqCreateAdminMenu request) {
+        AdminMenuPO item = AdminMenuConvert.INSTANCE.toCreate(request);
+        item.setParentId(NumericUtil.tryParseLong(request.getParentId(), 0L));
+        item.setTitle(ParameterUtil.dealNullStr(request.getTitle()));
+        item.setLevel(1);
+        item.setSort(NumericUtil.tryParseInt(request.getSort(), 0));
+        item.setStatus(EState.NORMAL.getValue());
+        item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
+        if (item.getParentId().compareTo(0L) > 0) {
+            ExecutedResult<AdminMenuPO> check = this.checkMenuId(request.getParentId());
+            if (check.isFailed()) {
+                return ExecutedResult.failed("父级菜单不存在: " + request.getParentId());
+            }
+            item.setLevel(check.getData().getLevel() + 1);
+        }
+        int rowCount = menusDao.insert(item);
+        if (rowCount == 1) {
+            // 删除菜单缓存
+            menusService.removeListAllCache();
+            // 删除所有权限缓存
+            permissionService.removeListAllCache();
+            // 删除所有用户的菜单和权限缓存
+            this.removePowerAllUser();
+
+            // 给新增的菜单添加默认权限
+            permissionService.createDefaultPermission(item);
+            return ExecutedResult.success(item.getId());
+        }
+        return ExecutedResult.failed("创建[菜单]失败。");
+    }
+    private ExecutedResult<AdminMenuPO> checkMenuId(Long id) {
+        AdminMenuPO item = menusDao.get(id);
+        if (Objects.isNull(item)) {
+            return ExecutedResult.failed("[菜单]不存在: " + id);
+        }
+        return ExecutedResult.success(item);
+    }
+    protected ExecutedResult<List<AdminMenuPO>> checkMenuId(List<Long> listId) {
+        // 从数据库查找测试信息
+        List<AdminMenuPO> list = menusDao.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[菜单]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(AdminMenuPO::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);
+    }
+
+    // 编辑菜单
+    public ExecutedResult<String> modifyMenu(ReqModifyAdminMenu request) {
+        ExecutedResult<AdminMenuPO> checkExists = this.checkMenuId(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AdminMenuPO item = AdminMenuConvert.INSTANCE.toModify(request);
+        item.setTitle(ParameterUtil.dealNullStr(request.getTitle()));
+        item.setParentId(NumericUtil.tryParseLong(request.getParentId(), 0L));
+        item.setLevel(1);
+        item.setSort(NumericUtil.tryParseInt(request.getSort(), 0));
+        if (item.getParentId().compareTo(0L) > 0) {
+            ExecutedResult<AdminMenuPO> check = this.checkMenuId(request.getParentId());
+            if (check.isFailed()) {
+                return ExecutedResult.failed("父级菜单不存在: " + request.getParentId());
+            }
+            item.setLevel(check.getData().getLevel() + 1);
+        }
+        int rowCount = menusDao.updateById(item);
+        if (rowCount == 1) {
+            // 删除菜单缓存
+            menusService.removeListAllCache();
+            // 删除所有权限缓存
+            permissionService.removeListAllCache();
+            // 删除所有用户的菜单和权限缓存
+            this.removePowerAllUser();
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("编辑[菜单]失败。");
+    }
+
+    public ExecutedResult<String> removeMenu(Long id) {
+        // 验证记录是否存在
+        ExecutedResult<AdminMenuPO> checkExists = this.checkMenuId(id);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+
+        Boolean result = menusDao.deleteLogic(id);
+        if (result) {
+            // 删除菜单缓存
+            menusService.removeListAllCache();
+            // 删除所有权限缓存
+            permissionService.removeListAllCache();
+            // 删除所有用户的菜单和权限缓存
+            this.removePowerAllUser();
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("删除[菜单]失败。");
+    }
+
+    public ExecutedResult<String> removeMenuList(List<Long> listId) {
+        // 验证记录是否存在
+        ExecutedResult<List<AdminMenuPO>> checkExists = this.checkMenuId(listId);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+
+        Boolean result = menusDao.deleteLogic(listId);
+        if (result) {
+            // 删除菜单缓存
+            menusService.removeListAllCache();
+            // 删除所有权限缓存
+            permissionService.removeListAllCache();
+            // 删除所有用户的菜单和权限缓存
+            this.removePowerAllUser();
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("删除[菜单]失败。");
+    }
+
+    // 变更菜单状态
+    public ExecutedResult<String> changeMenuStatus(Long id, EState status) {
+        ExecutedResult<AdminMenuPO> checkExists = this.checkMenuId(id);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AdminMenuPO upd = new AdminMenuPO();
+        upd.setId(id);
+        upd.setStatus(status.getValue());
+        int rowCount = menusDao.updateById(upd);
+        if (rowCount == 1) {
+            // 删除菜单缓存
+            menusService.removeListAllCache();
+            // 删除所有权限缓存
+            permissionService.removeListAllCache();
+            // 删除所有用户的菜单和权限缓存
+            this.removePowerAllUser();
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("修改[菜单]状态失败。");
+    }
+
+    // 获取所有层级菜单
+    public ExecutedResult<List<ResAdminMenuTreeAndPermission>> getListTreeMenu() {
+        List<ResAdminMenuTreeAndPermission> result = new ArrayList<>();
+        LambdaQueryWrapper<AdminMenuPO> where = menusDao.query();
+        where.in(AdminMenuPO::getStatus, Arrays.asList(
+                EState.NORMAL.getValue()
+        ));
+        List<AdminMenuPO> list = menusDao.selectList(where);
+
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.success(result);
+        }
+        List<AdminMenuPO> listRoot = list.stream().filter(c -> Objects.equals(c.getLevel(), 1)).collect(Collectors.toList());
+        listRoot = listRoot.stream()
+                .sorted(Comparator.comparing(AdminMenuPO::getSort))
+                .collect(Collectors.toList());
+        if (ListUtil.isNullOrEmpty(listRoot)) {
+            return ExecutedResult.success(result);
+        }
+
+        List<Long> listMenuId = list.stream()
+                .map(AdminMenuPO::getId)
+                .collect(Collectors.toList());
+        List<AdminPermissionPO> listPermission = permissionDao.list4MenuId(listMenuId);
+        Map<Long, List<AdminPermissionPO>> mapPermission = listPermission.stream()
+                .collect(Collectors.groupingBy(AdminPermissionPO::getMenuId));
+
+        for (AdminMenuPO item : listRoot) {
+            ResAdminMenuTreeAndPermission view = AdminMenuConvert.INSTANCE.toTreeVo(item);
+            this.fillChildMenu(view, list, mapPermission);
+            this.fillPermission4Menu(view, mapPermission);
+            result.add(view);
+        }
+        return ExecutedResult.success(result);
+    }
+    public void fillPermission4Menu(ResAdminMenuTreeAndPermission view, Map<Long, List<AdminPermissionPO>> mapPermission) {
+        view.setPermissions(new ArrayList<>());
+        if (BooleanUtils.isFalse(mapPermission.containsKey(view.getId()))) {
+            return;
+        }
+        List<AdminPermissionPO> list = mapPermission.get(view.getId());
+        view.setPermissions(AdminPermissionConvert.INSTANCE.toDetail(list));
+    }
+    public void fillChildMenu(ResAdminMenuTreeAndPermission view, List<AdminMenuPO> list, Map<Long, List<AdminPermissionPO>> mapPermission) {
+        List<AdminMenuPO> listChild = list.stream()
+                .filter(c -> c.getParentId().equals(view.getId()))
+                .collect(Collectors.toList());
+        view.setChildren(new ArrayList<>());
+        if (ListUtil.isNullOrEmpty(listChild)) {
+            return;
+        }
+        listChild = listChild.stream()
+                .sorted(Comparator.comparing(AdminMenuPO::getSort).reversed())
+                .collect(Collectors.toList());
+        for (AdminMenuPO child : listChild) {
+            ResAdminMenuTreeAndPermission viewChild = AdminMenuConvert.INSTANCE.toTreeVo(child);
+            this.fillChildMenu(viewChild, list, mapPermission);
+            this.fillPermission4Menu(viewChild, mapPermission);
+            view.getChildren().add(viewChild);
+        }
+    }
+
+    // 获取指定菜单的子级菜单
+    public ExecutedResult<List<AdminMenuVO>> getListChildMenu(Long parentId) {
+        List<AdminMenuPO> list = menusDao.list4Parent(parentId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.success(new ArrayList<>());
+        }
+        return ExecutedResult.success(AdminMenuConvert.INSTANCE.toVo(list));
+    }
+
+    // 分页查询菜单
+    public ExecutedResult<PagerResult<AdminMenuVO>> searchMenu(SearchAdminMenu request) {
+        List<AdminMenuVO> result = new ArrayList<>();
+
+        super.dealPager(request);
+        request.setLastRowNo((request.getPage() - 1) * NumericUtil.tryParseLong(request.getLimit()));
+        // 处理时间范围
+        Tuple<String, String> createTimeRange = ParameterUtil.getTimeRange(request.getCreateTimeRange());
+        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) {
+            request.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime());
+        }
+        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) {
+            request.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime());
+        }
+        if (NumericUtil.tryParseInt(request.getStatus(), 0).compareTo(0) < 1 && ListUtil.isNullOrEmpty(request.getListStatus())) {
+            request.setListStatus(Arrays.asList(EState.NORMAL.getValue(), EState.DISABLED.getValue()));
+        }
+
+        PagerResult<AdminMenuPO> pagerResult = menusDao.search(request);
+
+        if (NumericUtil.tryParseLong(pagerResult.getTotal()).compareTo(0L) < 1) {
+            return ExecutedResult.success(
+                    new PagerResult<>(request.getLimit(), request.getPage(), 0L, new ArrayList<>())
+            );
+        }
+        List<AdminMenuPO> list = pagerResult.getList();
+        Long lastId = 0L;
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            lastId = list.stream().map(AdminMenuPO::getId).min(Comparator.comparing(c -> c)).get();
+            result = AdminMenuConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<AdminMenuVO> view = new PagerResult<>(request.getLimit(), request.getPage(), pagerResult.getTotal(), result);
+        view.setLastId(lastId);
+        return ExecutedResult.success(view);
+    }
+
+    // 创建权限
+    public ExecutedResult<Long> createPermission(ReqCreateAdminPermission request) {
+        String sn = request.getSn();
+        AdminPermissionPO find = permissionDao.get4Sn(sn);
+        if (Objects.nonNull(find) && find.getId().compareTo(0L) > 0) {
+            return ExecutedResult.failed("权限编码已存在。" + sn);
+        }
+        ExecutedResult<AdminMenuPO> checkExists = this.checkMenuId(request.getMenuId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+
+        AdminPermissionPO item = new AdminPermissionPO();
+        item.setName(request.getName());
+        item.setSn(request.getSn());
+        item.setMenuId(request.getMenuId());
+        item.setMenuId(request.getMenuId());
+        item.setStatus(EState.NORMAL.getValue());
+        item.setMenuUrl(ParameterUtil.dealNullStr(request.getMenuUrl()));
+        item.setIcon(ParameterUtil.dealNullStr(request.getIcon()));
+        item.setType(ParameterUtil.dealNullStr(request.getType()));
+        item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
+        int rowCount = permissionDao.insert(item);
+        if (rowCount == 1) {
+            // 删除权限缓存
+            permissionService.removeListAllCache();
+            return ExecutedResult.success(item.getId());
+        }
+        return ExecutedResult.failed("创建[权限]失败。");
+    }
+
+    // 编辑权限
+    public ExecutedResult<String> modifyPermission(ReqModifyAdminPermission request) {
+        Long id = request.getId();
+        String sn = request.getSn();
+        ExecutedResult<AdminPermissionPO> checkExists = this.checkPermissionId(id);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AdminPermissionPO findBySn = permissionDao.get4Sn(sn);
+        if (Objects.nonNull(findBySn) && !Objects.equals(id, findBySn.getId())) {
+            return ExecutedResult.failed("权限编码已存在。" + sn);
+        }
+        ExecutedResult<AdminMenuPO> check = this.checkMenuId(request.getMenuId());
+        if (check.isFailed()) {
+            return ExecutedResult.failed(check.getMsg());
+        }
+
+        AdminPermissionPO item = new AdminPermissionPO();
+        item.setId(id);
+        item.setSn(request.getSn());
+        item.setMenuId(request.getMenuId());
+        item.setName(request.getName());
+        int rowCount = permissionDao.updateById(item);
+        if (rowCount == 1) {
+            // 删除权限缓存
+            permissionService.removeListAllCache();
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("编辑[权限]失败。");
+    }
+    private ExecutedResult<AdminPermissionPO> checkPermissionId(Long id) {
+        AdminPermissionPO item = permissionDao.get(id);
+        if (Objects.isNull(item)) {
+            return ExecutedResult.failed("[权限]不存在: " + id);
+        }
+        return ExecutedResult.success(item);
+    }
+
+    // 删除权限
+    public ExecutedResult<String> removePermission(Long id) {
+        AdminPermissionPO find = permissionDao.get(id);
+        if (null == find) {
+            return ExecutedResult.failed("[权限]记录未找到。" + id);
+        }
+        Boolean remove = permissionDao.remove(id);
+        if (remove) {
+            // 删除权限缓存
+            permissionService.removeListAllCache();
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("删除[权限]失败");
+    }
+
+    // 分页查询权限
+    public ExecutedResult<PagerResult<ResAdminPermission>> searchPermission(SearchAdminPermission request) {
+        List<ResAdminPermission> result = new ArrayList<>();
+
+        super.dealPager(request);
+        request.setLastRowNo((request.getPage() - 1) * NumericUtil.tryParseLong(request.getLimit()));
+        // 处理时间范围
+        Tuple<String, String> createTimeRange = ParameterUtil.getTimeRange(request.getCreateTimeRange());
+        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) {
+            request.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime());
+        }
+        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) {
+            request.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime());
+        }
+        if (NumericUtil.tryParseInt(request.getStatus(), 0).compareTo(0) < 1 && ListUtil.isNullOrEmpty(request.getListStatus())) {
+            request.setListStatus(Arrays.asList(EState.NORMAL.getValue(), EState.DISABLED.getValue()));
+        }
+        PagerResult<AdminPermissionPO> pagerResult = permissionDao.search(request);
+
+        if (NumericUtil.tryParseLong(pagerResult.getTotal()).compareTo(0L) < 1) {
+            return ExecutedResult.success(
+                    new PagerResult<>(request.getLimit(), request.getPage(), 0L, new ArrayList<>())
+            );
+        }
+        List<AdminPermissionPO> list = pagerResult.getList();
+        Long lastId = 0L;
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            lastId = list.stream().map(AdminPermissionPO::getId).min(Comparator.comparing(c -> c)).get();
+            result = AdminPermissionConvert.INSTANCE.toDetail(list);
+        }
+        PagerResult<ResAdminPermission> view = new PagerResult<>(request.getLimit(), request.getPage(), pagerResult.getTotal(), result);
+        view.setLastId(lastId);
+        return ExecutedResult.success(view);
+    }
+
+    // 创建角色
+    public ExecutedResult<Long> createRole(ReqCreateAdminRole request) {
+        AdminRolePO item = AdminRoleConvert.INSTANCE.toCreate(request);
+        item.setDescription(ParameterUtil.dealNullStr(request.getDescription()));
+        item.setStatus(EState.NORMAL.getValue());
+        item.setSort(NumericUtil.tryParseInt(request.getSort(), 0));
+        item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
+        int rowCount = roleDao.insert(item);
+        if (rowCount == 1) {
+            return ExecutedResult.success(item.getId());
+        }
+        return ExecutedResult.failed("创建[角色]失败。");
+    }
+
+    // 编辑角色
+    public ExecutedResult<String> modifyRole(ReqModifyAdminRole request) {
+        ExecutedResult<AdminRolePO> checkExists = this.checkRoleId(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AdminRolePO item = AdminRoleConvert.INSTANCE.toModify(request);
+        item.setSort(NumericUtil.tryParseInt(request.getSort(), 0));
+        item.setDescription(ParameterUtil.dealNullStr(request.getDescription()));
+        int rowCount = roleDao.updateById(item);
+        if (rowCount == 1) {
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("编辑[角色]失败。");
+    }
+
+    // 修改角色状态
+    public ExecutedResult<String> changeRoleStatus(Long id, EState status) {
+        ExecutedResult<AdminRolePO> checkExists = this.checkRoleId(id);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AdminRolePO upd = new AdminRolePO();
+        upd.setId(id);
+        upd.setStatus(status.getValue());
+        int rowCount = roleDao.updateById(upd);
+        if (rowCount == 1) {
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("修改[角色]状态失败。");
+    }
+    private ExecutedResult<AdminRolePO> checkRoleId(Long id) {
+        AdminRolePO item = roleDao.selectById(id);
+        if (Objects.isNull(item)) {
+            return ExecutedResult.failed("[角色]不存在: " + id);
+        }
+        return ExecutedResult.success(item);
+    }
+    private ExecutedResult<List<AdminRolePO>> checkRoleId(List<Long> listId) {
+        // 从数据库查找测试信息
+        List<AdminRolePO> list = roleDao.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[角色]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(AdminRolePO::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);
+    }
+
+    public ExecutedResult<String> removeRole(Long id) {
+        // 验证记录是否存在
+        ExecutedResult<AdminRolePO> checkExists = this.checkRoleId(id);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+
+        Boolean result = roleDao.deleteLogic(id);
+        if (BooleanUtils.isFalse(result)) {
+            return ExecutedResult.failed("删除[角色]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<String> removeRoleList(List<Long> listId) {
+        // 验证记录是否存在
+        ExecutedResult<List<AdminRolePO>> checkExists = this.checkRoleId(listId);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+
+        Boolean result = roleDao.deleteLogic(listId);
+        if (BooleanUtils.isFalse(result)) {
+            return ExecutedResult.failed("删除[角色]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    // 分页查询角色
+    public ExecutedResult<PagerResult<AdminRoleVO>> searchRole(SearchAdminRole request) {
+        List<AdminRoleVO> result = new ArrayList<>();
+
+        super.dealPager(request);
+        request.setLastRowNo((request.getPage() - 1) * NumericUtil.tryParseLong(request.getLimit()));
+        // 处理时间范围
+        Tuple<String, String> createTimeRange = ParameterUtil.getTimeRange(request.getCreateTimeRange());
+        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) {
+            request.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime());
+        }
+        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) {
+            request.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime());
+        }
+        if (NumericUtil.tryParseInt(request.getStatus(), 0).compareTo(0) < 1 && ListUtil.isNullOrEmpty(request.getListStatus())) {
+            request.setListStatus(Arrays.asList(EState.NORMAL.getValue(), EState.DISABLED.getValue()));
+        }
+
+        PagerResult<AdminRolePO> pagerResult = roleDao.search(request);
+
+        if (NumericUtil.tryParseLong(pagerResult.getTotal()).compareTo(0L) < 1) {
+            return ExecutedResult.success(
+                    new PagerResult<>(request.getLimit(), request.getPage(), 0L, new ArrayList<>())
+            );
+        }
+        List<AdminRolePO> list = pagerResult.getList();
+        Long lastId = 0L;
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            lastId = list.stream().map(AdminRolePO::getId).min(Comparator.comparing(c -> c)).get();
+            result = AdminRoleConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<AdminRoleVO> view = new PagerResult<>(request.getLimit(), request.getPage(), pagerResult.getTotal(), result);
+        view.setLastId(lastId);
+        return ExecutedResult.success(view);
+    }
+
+    // 设置角色菜单权限列表
+    public ExecutedResult<String> setListMenu4Role(ReqSetListMenu4Role request) {
+        Long roleId = request.getId();
+        ExecutedResult<AdminRolePO> checkExists = this.checkRoleId(roleId);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AdminRolePO find = checkExists.getData();
+        Long now = LocalDateTimeUtil.nowTimeStamp();
+
+        //找到角色已有的菜单列表
+        List<AdminRoleMenuRelationPO> listOld = roleMenuRelationDao.list4Role(roleId);
+        listOld = ParameterUtil.dealNull(listOld);
+        List<Long> listOldMenuId = listOld.stream()
+                .map(AdminRoleMenuRelationPO::getMenuId)
+                .collect(Collectors.toList());
+
+        //现在设置的菜单id列表
+        List<Long> listMenuId = ParameterUtil.dealNull(request.getListMenu());
+
+        //找到所有菜单
+        List<Long> listAllId = new ArrayList<>(listOldMenuId);
+        listAllId.addAll(listMenuId);
+        ListUtil.repeat(listAllId);
+        List<AdminMenuPO> listMenu = menusDao.getList(listAllId);
+        Map<Long, AdminMenuPO> mapMenu = listMenu.stream()
+                .collect(Collectors.toMap(AdminMenuPO::getId, c -> c));
+
+        //找到新增菜单列表(新菜单列表的元素,不存在于已有的菜单列表中)
+        List<Long> listNew = listMenuId.stream()
+                .filter(c -> !listOldMenuId.contains(c))
+                .collect(Collectors.toList());
+        //找到删除菜单列表(已有菜单列表的元素,不存在于新菜单列表)
+        List<Long> listRemove = listOldMenuId.stream()
+                .filter(c -> !listMenuId.contains(c))
+                .collect(Collectors.toList());
+
+        //批量新增
+        if(BooleanUtils.isFalse(listNew.isEmpty())) {
+            List<AdminRoleMenuRelationPO> list = listNew.stream()
+                    .map(c -> {
+                        AdminRoleMenuRelationPO item = new AdminRoleMenuRelationPO();
+                        item.setRoleId(roleId);
+                        item.setMenuId(c);
+                        item.setCreateTime(now);
+                        return item;
+                    }).collect(Collectors.toList());
+            Boolean addList = roleMenuRelationDao.addList(list);
+            if(BooleanUtils.isFalse(addList)) {
+                return ExecutedResult.failed("给角色“" + roleId + "”新增菜单失败。" + listNew);
+            }
+        }
+        //批量删除
+        if(BooleanUtils.isFalse(listRemove.isEmpty())) {
+            List<Long> listId = listOld.stream()
+                    .filter(c -> listRemove.contains(c.getMenuId()))
+                    .map(AdminRoleMenuRelationPO::getId).collect(Collectors.toList());
+            Boolean removeList = roleMenuRelationDao.remove(listId);
+            if(BooleanUtils.isFalse(removeList)) {
+                return ExecutedResult.failed("删除角色“" + roleId + "”已有菜单失败。" + listRemove);
+            }
+        }
+
+
+
+        //找到角色已有的权限列表
+        List<AdminRolePermissionRelationPO> listOldPermission = rolePermissionRelationDao.list4Role(roleId);
+        listOldPermission = ParameterUtil.dealNull(listOldPermission);
+        List<Long> listOldPermissionId = listOldPermission.stream()
+                .map(AdminRolePermissionRelationPO::getPermissionId)
+                .collect(Collectors.toList());
+
+        //现在设置的权限id列表
+        List<Long> listPermissionId = ParameterUtil.dealNull(request.getListPermission());
+
+        //找到所有权限
+        List<Long> listAllPermissionId = new ArrayList<>(listOldPermissionId);
+        listAllPermissionId.addAll(listPermissionId);
+        ListUtil.repeat(listAllPermissionId);
+        List<AdminPermissionPO> listPermission = permissionDao.getList(listAllPermissionId);
+        Map<Long, AdminPermissionPO> mapPermission = listPermission.stream()
+                .collect(Collectors.toMap(AdminPermissionPO::getId, c -> c));
+
+        //找到新增权限列表(新权限列表的元素,不存在于已有的菜单列表中)
+        List<Long> listNewPermission = listPermissionId.stream()
+                .filter(c -> !listOldPermissionId.contains(c))
+                .collect(Collectors.toList());
+        //找到删除权限列表(已有权限列表的元素,不存在于新菜单列表)
+        List<Long> listRemovePermission = listOldPermissionId.stream()
+                .filter(c -> !listPermissionId.contains(c))
+                .collect(Collectors.toList());
+
+        //批量新增
+        if(BooleanUtils.isFalse(listNewPermission.isEmpty())) {
+            List<AdminRolePermissionRelationPO> list = listNewPermission.stream()
+                    .map(c -> {
+                        AdminRolePermissionRelationPO item = new AdminRolePermissionRelationPO();
+                        item.setRoleId(roleId);
+                        item.setPermissionId(c);
+                        item.setCreateTime(now);
+                        return item;
+                    }).collect(Collectors.toList());
+            Boolean addList = rolePermissionRelationDao.addList(list);
+            if(BooleanUtils.isFalse(addList)) {
+                return ExecutedResult.failed("给角色“" + roleId + "”新增权限失败。" + listNewPermission);
+            }
+        }
+        //批量删除
+        if(BooleanUtils.isFalse(listRemovePermission.isEmpty())) {
+            List<Long> listId = listOldPermission.stream()
+                    .filter(c -> listRemovePermission.contains(c.getPermissionId()))
+                    .map(AdminRolePermissionRelationPO::getId).collect(Collectors.toList());
+            Boolean removeList = rolePermissionRelationDao.remove(listId);
+            if(BooleanUtils.isFalse(removeList)) {
+                return ExecutedResult.failed("删除角色“" + roleId + "”已有权限失败。" + listRemovePermission);
+            }
+        }
+        return ExecutedResult.success();
+    }
+
+    // 获取角色菜单权限列表
+    public ExecutedResult<ResAdminPower> getListMenu4Role(Long roleId) {
+        ResAdminPower result = new ResAdminPower();
+        result.setMenus(new ArrayList<>());
+        result.setPermissions(new ArrayList<>());
+
+        ExecutedResult<AdminRolePO> checkExists = this.checkRoleId(roleId);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AdminRolePO find = checkExists.getData();
+        //找到角色已有的菜单列表
+        List<AdminRoleMenuRelationPO> listMenu4Role = roleMenuRelationDao.list4Role(roleId);
+        if (ListUtil.isNotNullOrEmpty(listMenu4Role)) {
+            List<Long> listOldMenuId = listMenu4Role.stream()
+                    .map(AdminRoleMenuRelationPO::getMenuId)
+                    .collect(Collectors.toList());
+            List<AdminMenuPO> listMenu = menusDao.getList(listOldMenuId);
+            if (ListUtil.isNotNullOrEmpty(listMenu)) {
+                result.setMenus(AdminMenuConvert.INSTANCE.toVo(listMenu));
+            }
+        }
+        //找到角色已有的权限列表
+        List<AdminRolePermissionRelationPO> listPermission4Role = rolePermissionRelationDao.list4Role(roleId);
+        if (ListUtil.isNotNullOrEmpty(listPermission4Role)) {
+            List<Long> listPermissionId = listPermission4Role.stream()
+                    .map(AdminRolePermissionRelationPO::getPermissionId)
+                    .collect(Collectors.toList());
+            List<AdminPermissionPO> listPermission = permissionDao.getList(listPermissionId);
+            if (ListUtil.isNotNullOrEmpty(listPermission)) {
+                result.setPermissions(AdminPermissionConvert.INSTANCE.toDetail(listPermission));
+            }
+        }
+        return ExecutedResult.success(result);
+    }
+
+    protected List<AdminPermissionPO> getListPermission4Role(List<Long> listRoleId) {
+        List<AdminRolePermissionRelationPO> listPermissionRel = rolePermissionRelationDao.list4Role(listRoleId);
+        if (ListUtil.isNullOrEmpty(listPermissionRel)) {
+            return new ArrayList<>();
+        }
+        List<AdminPermissionPO> listPermission = permissionService.listAllWithCache();
+        if (ListUtil.isNullOrEmpty(listPermission)) {
+            return new ArrayList<>();
+        }
+        // 筛选状态
+        listPermission = listPermission.stream()
+                .filter(c -> Objects.equals(c.getStatus(), EState.NORMAL.getValue()))
+                .collect(Collectors.toList());
+        List<Long> listPermissionId = listPermissionRel.stream()
+                .map(AdminRolePermissionRelationPO::getPermissionId)
+                .collect(Collectors.toList());
+        return listPermission.stream()
+                .filter(c -> listPermissionId.contains(c.getId()))
+                .collect(Collectors.toList());
+    }
+
+    protected List<AdminMenuPO> getListMenu4Role(List<Long> listRoleId) {
+        List<AdminRoleMenuRelationPO> listRoleMenu = roleMenuRelationDao.list4Role(listRoleId);
+        if (ListUtil.isNullOrEmpty(listRoleMenu)) {
+            return new ArrayList<>();
+        }
+        List<AdminMenuPO> listMenu = menusService.listAllWithCache();
+        if (ListUtil.isNullOrEmpty(listMenu)) {
+            return new ArrayList<>();
+        }
+        // 筛选状态
+        listMenu = listMenu.stream()
+                .filter(c -> Objects.equals(c.getStatus(), EState.NORMAL.getValue()))
+                .collect(Collectors.toList());
+        List<Long> listMenuId = listRoleMenu.stream().map(AdminRoleMenuRelationPO::getMenuId)
+                .collect(Collectors.toList());
+        return listMenu.stream()
+                .filter(c -> listMenuId.contains(c.getId()))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 删除指定用户的菜单和权限缓存
+     * @param userId 用户id
+     */
+    protected void removePower4User(Long userId) {
+        menusService.removeUserMenuCache(userId);
+        permissionService.removeUserCache(userId);
+    }
+    /**
+     * 删除所有用户的菜单和权限缓存
+     */
+    protected void removePowerAllUser() {
+        menusService.removeAllUserMenuCache();
+        permissionService.removeAllUserCache();
+    }
+
+    public ExecutedResult<String> setMenuSort(ReqSetSort request) {
+        // 验证记录是否存在
+        ExecutedResult<AdminMenuPO> checkExists = this.checkMenuId(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+
+        AdminMenuPO item = new AdminMenuPO();
+        item.setId(request.getId());
+        item.setSort(request.getSort());
+
+        int rowCount = menusDao.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("[测试信息]设置排序值失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<String> listSetMenuSort(ReqListSetSort request) {
+        // id列表
+        List<Long> listId = request.getList().stream().map(ReqSetSort::getId).collect(Collectors.toList());
+        // 验证记录是否存在
+        ExecutedResult<List<AdminMenuPO>> checkExists = this.checkMenuId(listId);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+
+        List<AdminMenuPO> listUpdate = request.getList().stream()
+                .map(c -> {
+                    AdminMenuPO item = new AdminMenuPO();
+                    item.setId(c.getId());
+                    item.setSort(c.getSort());
+                    return item;
+                })
+                .collect(Collectors.toList());
+        Boolean result = menusDao.modifyList(listUpdate);
+        if (result) {
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("[测试信息]设置排序值失败");
+    }
+
+    public ExecutedResult<String> setRoleSort(ReqSetSort request) {
+        // 验证记录是否存在
+        ExecutedResult<AdminRolePO> checkExists = this.checkRoleId(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+
+        AdminRolePO item = new AdminRolePO();
+        item.setId(request.getId());
+        item.setSort(request.getSort());
+
+        int rowCount = roleDao.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("[角色]设置排序值失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<String> listSetRoleSort(ReqListSetSort request) {
+        // id列表
+        List<Long> listId = request.getList().stream().map(ReqSetSort::getId).collect(Collectors.toList());
+        // 验证记录是否存在
+        ExecutedResult<List<AdminRolePO>> checkExists = this.checkRoleId(listId);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+
+        List<AdminRolePO> listUpdate = request.getList().stream()
+                .map(c -> {
+                    AdminRolePO item = new AdminRolePO();
+                    item.setId(c.getId());
+                    item.setSort(c.getSort());
+                    return item;
+                })
+                .collect(Collectors.toList());
+        Boolean result = roleDao.modifyList(listUpdate);
+        if (result) {
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("[角色]设置排序值失败");
+    }
+}
diff --git a/src/main/java/com/nanjing/water/service/AdminRoleMenuRelationService.java b/src/main/java/com/nanjing/water/service/AdminRoleMenuRelationService.java
new file mode 100644
index 0000000..985446f
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/AdminRoleMenuRelationService.java
@@ -0,0 +1,246 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+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.entity.request.adminrolemenurelation.ReqCreateAdminRoleMenuRelation;
+import com.nanjing.water.entity.request.adminrolemenurelation.ReqModifyAdminRoleMenuRelation;
+import com.nanjing.water.entity.search.SearchAdminRoleMenuRelation;
+import com.nanjing.water.repository.impl.AdminRoleMenuRelationMapperImpl;
+import com.nanjing.water.repository.po.AdminRoleMenuRelationPO;
+import com.nanjing.water.repository.vo.AdminRoleMenuRelationVO;
+import com.nanjing.water.service.convert.AdminRoleMenuRelationConvert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 角色菜单关联关系
+ * @author lin.liu
+ */
+@Service
+public class AdminRoleMenuRelationService extends BaseService {
+    @Autowired
+    private AdminRoleMenuRelationMapperImpl mapper;
+
+    public ExecutedResult<Long> create(ReqCreateAdminRoleMenuRelation request) {
+        // 转换po
+        AdminRoleMenuRelationPO item = AdminRoleMenuRelationConvert.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(ReqModifyAdminRoleMenuRelation request) {
+        // 验证记录是否存在
+        ExecutedResult<AdminRoleMenuRelationPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        AdminRoleMenuRelationPO item = AdminRoleMenuRelationConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[角色菜单关联关系]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<AdminRoleMenuRelationVO> get(Long id) {
+        AdminRoleMenuRelationVO result = new AdminRoleMenuRelationVO();
+
+        AdminRoleMenuRelationPO find = mapper.get(id);
+        if (null != find) {
+            // 转换vo
+            result = AdminRoleMenuRelationConvert.INSTANCE.toVo(find);
+        }
+        return ExecutedResult.success(result);
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<AdminRoleMenuRelationPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRoleMenuRelationPO item = new AdminRoleMenuRelationPO();
+//        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<AdminRoleMenuRelationPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRoleMenuRelationPO item = new AdminRoleMenuRelationPO();
+//        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<AdminRoleMenuRelationPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRoleMenuRelationPO item = new AdminRoleMenuRelationPO();
+//        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<AdminRoleMenuRelationPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<AdminRoleMenuRelationPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    AdminRoleMenuRelationPO item = new AdminRoleMenuRelationPO();
+//                    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<AdminRoleMenuRelationVO>> getList(List<Long> listId) {
+        List<AdminRoleMenuRelationVO> result = new ArrayList<>();
+
+        List<AdminRoleMenuRelationPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 转换vo
+            result = AdminRoleMenuRelationConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<AdminRoleMenuRelationVO>> search(SearchAdminRoleMenuRelation 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<AdminRoleMenuRelationPO> pageList = mapper.search(search);
+        List<AdminRoleMenuRelationVO> listVo = new ArrayList<>();
+        List<AdminRoleMenuRelationPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = AdminRoleMenuRelationConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<AdminRoleMenuRelationVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<AdminRoleMenuRelationPO> check4Id(Long id) {
+        AdminRoleMenuRelationPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[角色菜单关联关系]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<AdminRoleMenuRelationPO>> check4Id(List<Long> listId) {
+        // 从数据库查找角色菜单关联关系
+        List<AdminRoleMenuRelationPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[角色菜单关联关系]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(AdminRoleMenuRelationPO::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/nanjing/water/service/AdminRolePermissionRelationService.java b/src/main/java/com/nanjing/water/service/AdminRolePermissionRelationService.java
new file mode 100644
index 0000000..03c9387
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/AdminRolePermissionRelationService.java
@@ -0,0 +1,246 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+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.entity.request.adminrolepermissionrelation.ReqCreateAdminRolePermissionRelation;
+import com.nanjing.water.entity.request.adminrolepermissionrelation.ReqModifyAdminRolePermissionRelation;
+import com.nanjing.water.entity.search.SearchAdminRolePermissionRelation;
+import com.nanjing.water.repository.impl.AdminRolePermissionRelationMapperImpl;
+import com.nanjing.water.repository.po.AdminRolePermissionRelationPO;
+import com.nanjing.water.repository.vo.AdminRolePermissionRelationVO;
+import com.nanjing.water.service.convert.AdminRolePermissionRelationConvert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 角色权限关联关系
+ * @author lin.liu
+ */
+@Service
+public class AdminRolePermissionRelationService extends BaseService {
+    @Autowired
+    private AdminRolePermissionRelationMapperImpl mapper;
+
+    public ExecutedResult<Long> create(ReqCreateAdminRolePermissionRelation request) {
+        // 转换po
+        AdminRolePermissionRelationPO item = AdminRolePermissionRelationConvert.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(ReqModifyAdminRolePermissionRelation request) {
+        // 验证记录是否存在
+        ExecutedResult<AdminRolePermissionRelationPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        AdminRolePermissionRelationPO item = AdminRolePermissionRelationConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[角色权限关联关系]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<AdminRolePermissionRelationVO> get(Long id) {
+        AdminRolePermissionRelationVO result = new AdminRolePermissionRelationVO();
+
+        AdminRolePermissionRelationPO find = mapper.get(id);
+        if (null != find) {
+            // 转换vo
+            result = AdminRolePermissionRelationConvert.INSTANCE.toVo(find);
+        }
+        return ExecutedResult.success(result);
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<AdminRolePermissionRelationPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRolePermissionRelationPO item = new AdminRolePermissionRelationPO();
+//        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<AdminRolePermissionRelationPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRolePermissionRelationPO item = new AdminRolePermissionRelationPO();
+//        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<AdminRolePermissionRelationPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRolePermissionRelationPO item = new AdminRolePermissionRelationPO();
+//        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<AdminRolePermissionRelationPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<AdminRolePermissionRelationPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    AdminRolePermissionRelationPO item = new AdminRolePermissionRelationPO();
+//                    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<AdminRolePermissionRelationVO>> getList(List<Long> listId) {
+        List<AdminRolePermissionRelationVO> result = new ArrayList<>();
+
+        List<AdminRolePermissionRelationPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 转换vo
+            result = AdminRolePermissionRelationConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<AdminRolePermissionRelationVO>> search(SearchAdminRolePermissionRelation 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<AdminRolePermissionRelationPO> pageList = mapper.search(search);
+        List<AdminRolePermissionRelationVO> listVo = new ArrayList<>();
+        List<AdminRolePermissionRelationPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = AdminRolePermissionRelationConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<AdminRolePermissionRelationVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<AdminRolePermissionRelationPO> check4Id(Long id) {
+        AdminRolePermissionRelationPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[角色权限关联关系]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<AdminRolePermissionRelationPO>> check4Id(List<Long> listId) {
+        // 从数据库查找角色权限关联关系
+        List<AdminRolePermissionRelationPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[角色权限关联关系]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(AdminRolePermissionRelationPO::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/nanjing/water/service/AdminRoleRelationService.java b/src/main/java/com/nanjing/water/service/AdminRoleRelationService.java
new file mode 100644
index 0000000..f87f911
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/AdminRoleRelationService.java
@@ -0,0 +1,246 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+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.entity.request.adminrolerelation.ReqCreateAdminRoleRelation;
+import com.nanjing.water.entity.request.adminrolerelation.ReqModifyAdminRoleRelation;
+import com.nanjing.water.entity.search.SearchAdminRoleRelation;
+import com.nanjing.water.repository.impl.AdminRoleRelationMapperImpl;
+import com.nanjing.water.repository.po.AdminRoleRelationPO;
+import com.nanjing.water.repository.vo.AdminRoleRelationVO;
+import com.nanjing.water.service.convert.AdminRoleRelationConvert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 用户和角色关联关系
+ * @author lin.liu
+ */
+@Service
+public class AdminRoleRelationService extends BaseService {
+    @Autowired
+    private AdminRoleRelationMapperImpl mapper;
+
+    public ExecutedResult<Long> create(ReqCreateAdminRoleRelation request) {
+        // 转换po
+        AdminRoleRelationPO item = AdminRoleRelationConvert.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(ReqModifyAdminRoleRelation request) {
+        // 验证记录是否存在
+        ExecutedResult<AdminRoleRelationPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        AdminRoleRelationPO item = AdminRoleRelationConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[用户和角色关联关系]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<AdminRoleRelationVO> get(Long id) {
+        AdminRoleRelationVO result = new AdminRoleRelationVO();
+
+        AdminRoleRelationPO find = mapper.get(id);
+        if (null != find) {
+            // 转换vo
+            result = AdminRoleRelationConvert.INSTANCE.toVo(find);
+        }
+        return ExecutedResult.success(result);
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<AdminRoleRelationPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRoleRelationPO item = new AdminRoleRelationPO();
+//        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<AdminRoleRelationPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRoleRelationPO item = new AdminRoleRelationPO();
+//        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<AdminRoleRelationPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRoleRelationPO item = new AdminRoleRelationPO();
+//        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<AdminRoleRelationPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<AdminRoleRelationPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    AdminRoleRelationPO item = new AdminRoleRelationPO();
+//                    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<AdminRoleRelationVO>> getList(List<Long> listId) {
+        List<AdminRoleRelationVO> result = new ArrayList<>();
+
+        List<AdminRoleRelationPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 转换vo
+            result = AdminRoleRelationConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<AdminRoleRelationVO>> search(SearchAdminRoleRelation 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<AdminRoleRelationPO> pageList = mapper.search(search);
+        List<AdminRoleRelationVO> listVo = new ArrayList<>();
+        List<AdminRoleRelationPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = AdminRoleRelationConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<AdminRoleRelationVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<AdminRoleRelationPO> check4Id(Long id) {
+        AdminRoleRelationPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[用户和角色关联关系]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<AdminRoleRelationPO>> check4Id(List<Long> listId) {
+        // 从数据库查找用户和角色关联关系
+        List<AdminRoleRelationPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[用户和角色关联关系]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(AdminRoleRelationPO::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/nanjing/water/service/AdminRoleService.java b/src/main/java/com/nanjing/water/service/AdminRoleService.java
new file mode 100644
index 0000000..9de0d80
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/AdminRoleService.java
@@ -0,0 +1,246 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+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.entity.request.adminrole.ReqCreateAdminRole;
+import com.nanjing.water.entity.request.adminrole.ReqModifyAdminRole;
+import com.nanjing.water.entity.search.SearchAdminRole;
+import com.nanjing.water.repository.impl.AdminRoleMapperImpl;
+import com.nanjing.water.repository.po.AdminRolePO;
+import com.nanjing.water.repository.vo.AdminRoleVO;
+import com.nanjing.water.service.convert.AdminRoleConvert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 角色
+ * @author lin.liu
+ */
+@Service
+public class AdminRoleService extends BaseService {
+    @Autowired
+    private AdminRoleMapperImpl mapper;
+
+    public ExecutedResult<Long> create(ReqCreateAdminRole request) {
+        // 转换po
+        AdminRolePO item = AdminRoleConvert.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(ReqModifyAdminRole request) {
+        // 验证记录是否存在
+        ExecutedResult<AdminRolePO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        AdminRolePO item = AdminRoleConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[角色]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<AdminRoleVO> get(Long id) {
+        AdminRoleVO result = new AdminRoleVO();
+
+        AdminRolePO find = mapper.get(id);
+        if (null != find) {
+            // 转换vo
+            result = AdminRoleConvert.INSTANCE.toVo(find);
+        }
+        return ExecutedResult.success(result);
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<AdminRolePO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRolePO item = new AdminRolePO();
+//        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<AdminRolePO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRolePO item = new AdminRolePO();
+//        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<AdminRolePO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminRolePO item = new AdminRolePO();
+//        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<AdminRolePO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<AdminRolePO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    AdminRolePO item = new AdminRolePO();
+//                    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<AdminRoleVO>> getList(List<Long> listId) {
+        List<AdminRoleVO> result = new ArrayList<>();
+
+        List<AdminRolePO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 转换vo
+            result = AdminRoleConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<AdminRoleVO>> search(SearchAdminRole 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<AdminRolePO> pageList = mapper.search(search);
+        List<AdminRoleVO> listVo = new ArrayList<>();
+        List<AdminRolePO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = AdminRoleConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<AdminRoleVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<AdminRolePO> check4Id(Long id) {
+        AdminRolePO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[角色]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<AdminRolePO>> check4Id(List<Long> listId) {
+        // 从数据库查找角色
+        List<AdminRolePO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[角色]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(AdminRolePO::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/nanjing/water/service/AdminService.java b/src/main/java/com/nanjing/water/service/AdminService.java
new file mode 100644
index 0000000..abbba56
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/AdminService.java
@@ -0,0 +1,544 @@
+package com.nanjing.water.service;
+
+import com.nanjing.water.common.ConstantFactory;
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.jwt.JWTUtil;
+import com.nanjing.water.common.jwt.LoginUserDTO;
+import com.nanjing.water.common.model.Tuple;
+import com.nanjing.water.common.security.MD5Util;
+import com.nanjing.water.common.util.*;
+import com.nanjing.water.entity.enums.EState;
+import com.nanjing.water.entity.enums.EUserType;
+import com.nanjing.water.entity.request.ReqChangePassword;
+import com.nanjing.water.entity.request.adminuser.ReqAdminLogin;
+import com.nanjing.water.entity.request.adminuser.ReqCreateAdminUser;
+import com.nanjing.water.entity.request.adminuser.ReqModifyAdminUser;
+import com.nanjing.water.entity.request.adminuser.ReqSetListRole4Admin;
+import com.nanjing.water.entity.response.admin.ResAdminLogin;
+import com.nanjing.water.entity.response.admin.ResAdminMenuTreeAndPermission;
+import com.nanjing.water.entity.response.admin.ResAdminPower;
+import com.nanjing.water.entity.search.SearchAdminUser;
+import com.nanjing.water.repository.impl.*;
+import com.nanjing.water.repository.po.*;
+import com.nanjing.water.repository.vo.AdminRoleVO;
+import com.nanjing.water.repository.vo.AdminUserVO;
+import com.nanjing.water.service.cache.AdminMenuService;
+import com.nanjing.water.service.cache.AdminPermissionService;
+import com.nanjing.water.service.convert.AdminMenuConvert;
+import com.nanjing.water.service.convert.AdminPermissionConvert;
+import com.nanjing.water.service.convert.AdminRoleConvert;
+import com.nanjing.water.service.convert.AdminUserConvert;
+import com.nanjing.water.service.dto.ResAdminDetail;
+import com.wf.captcha.SpecCaptcha;
+import org.apache.commons.lang3.BooleanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+@Service
+public class AdminService extends BaseService {
+    private static final List<Integer> LIST_ADMIN_TYPE = Arrays.asList(
+            EUserType.ADMIN.getValue(),
+            EUserType.ADMIN_USER.getValue()
+    );
+
+    @Autowired
+    private AdminUserMapperImpl dao;
+    @Autowired
+    private AdminMenuMapperImpl menusDao;
+    @Autowired
+    private AdminPermissionMapperImpl permissionDao;
+    @Autowired
+    private AdminRoleMapperImpl roleDao;
+    @Autowired
+    private AdminRoleMenuRelationMapperImpl roleMenuRelationDao;
+    @Autowired
+    private AdminRolePermissionRelationMapperImpl rolePermissionRelationDao;
+    @Autowired
+    private AdminRoleRelationMapperImpl adminRoleRelationDao;
+
+    @Autowired
+    private AdminMenuService menusService;
+    @Autowired
+    private AdminPermissionService permissionService;
+    @Autowired
+    private AdminPowerService adminPowerService;
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+
+
+    // 添加后台管理员
+    public ExecutedResult<Long> createAdmin(ReqCreateAdminUser request) {
+        AdminUserPO find = dao.get4Name(request.getUserName());
+        if (Objects.nonNull(find)) {
+            return ExecutedResult.failed("管理员帐号已存在。" + request.getUserName());
+        }
+        AdminUserPO item = AdminUserConvert.INSTANCE.toCreate(request);
+        item.setUserRelId(0L);
+        item.setNickName(ParameterUtil.dealNullStr(request.getNickName()));
+        item.setHeadImg(ParameterUtil.dealNullStr(request.getHeadImg()));
+        item.setEmail(ParameterUtil.dealNullStr(request.getEmail()));
+        item.setContact(ParameterUtil.dealNullStr(request.getContact()));
+        // 密码加密
+        item.setPassword(MD5Util.encrypt(request.getPassword() + ConstantFactory.KEY_PASSWORD));
+        item.setStatus(EState.NORMAL.getValue());
+        item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
+        int rowCount = dao.insert(item);
+        if (rowCount == 1) {
+            return ExecutedResult.success(item.getId());
+        }
+        return ExecutedResult.failed("添加[管理员]失败。");
+    }
+
+    // 修改后台管理员
+    public ExecutedResult<String> modify(ReqModifyAdminUser request) {
+        ExecutedResult<AdminUserPO> check = this.check4Id(request.getId());
+        if (check.isFailed()) {
+            return ExecutedResult.failed(check.getMsg(), check.getMsgCode());
+        }
+
+        AdminUserPO item = new AdminUserPO();
+        item.setId(request.getId());
+        item.setNickName(ParameterUtil.dealNullStr(request.getNickName()));
+        item.setHeadImg(ParameterUtil.dealNullStr(request.getHeadImg()));
+        item.setContact(ParameterUtil.dealNullStr(request.getContact()));
+        item.setEmail(ParameterUtil.dealNullStr(request.getEmail()));
+        item.setStatus(request.getStatus());
+        int rowCount = dao.updateById(item);
+        if (rowCount == 1) {
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("编辑[管理员]失败。");
+    }
+
+    // 获取指定管理员详情
+    public ExecutedResult<ResAdminDetail> detail(Long adminId) {
+        ExecutedResult<AdminUserPO> check = this.check4Id(adminId);
+        if (check.isFailed()) {
+            return ExecutedResult.failed(check.getMsg(), check.getMsgCode());
+        }
+        ResAdminDetail result = AdminUserConvert.INSTANCE.toDetail(check.getData());
+
+        result.setListRole(new ArrayList<>());
+        //找到角色已有的菜单列表
+        List<AdminRoleRelationPO> listRoleRel = adminRoleRelationDao.list4Admin(adminId);
+        if (ListUtil.isNotNullOrEmpty(listRoleRel)) {
+            List<Long> listRoleId = listRoleRel.stream()
+                    .map(AdminRoleRelationPO::getRoleId)
+                    .collect(Collectors.toList());
+            List<AdminRolePO> listRole = roleDao.getList(listRoleId);
+            result.setListRole(AdminRoleConvert.INSTANCE.toVo(listRole));
+        }
+        return ExecutedResult.success(result);
+    }
+
+    // 管理员登录
+    public ExecutedResult<ResAdminLogin> adminLogin(ReqAdminLogin request) throws Exception {
+        Integer maxNumber = 3;
+        AdminUserPO user = dao.get4Name(request.getUserName());
+        //获取缓存中的验证码
+        String realCode = redisTemplate.opsForValue().get(request.getUuid());
+        if (realCode == null) {
+            return ExecutedResult.failed("验证码已失效,请重新获取~");
+        }
+        // 验证码校验
+        if (!request.getCode().equalsIgnoreCase(realCode)) {
+            return ExecutedResult.failed("验证码错误");
+        }
+        //获取缓存中设备码
+        String machineCode = redisTemplate.opsForValue().get(request.getMachineCode());
+        if (StringUtil.isNotNullOrEmpty(machineCode) && Integer.valueOf(machineCode) >= maxNumber) {
+            return ExecutedResult.failed("登录次数限制,请10分钟后重新登录!");
+        }
+        if (checkPassword(user, request.getPassword())) {
+            // 构建登录用户
+            LoginUserDTO loginUser = new LoginUserDTO();
+            loginUser.setUserId(user.getId().toString());
+            loginUser.setUserType(user.getUserType());
+            loginUser.setNickName(user.getNickName());
+            loginUser.setPhone(user.getContact());
+            // 保存用户信息到jwt
+            String token = JWTUtil.getToken(loginUser);
+            ResAdminLogin result = this.getListPower4Admin(user);
+            result.setName(user.getNickName());
+            result.setToken(token);
+            return ExecutedResult.success(result);
+        } else {
+            Integer newAttempts = StringUtil.isNullOrEmpty(machineCode) ? 1 : Integer.valueOf(machineCode) + 1;
+            redisTemplate.opsForValue().set(request.getMachineCode(), newAttempts.toString());
+            redisTemplate.expire(request.getMachineCode(), 10, TimeUnit.MINUTES);
+        }
+
+
+        return ExecutedResult.failed("账号或密码错误!");
+    }
+
+    private static boolean checkPassword(AdminUserPO user, String passWord) throws Exception {
+        if (Objects.isNull(user)) {
+            return false;
+        }
+        if (BooleanUtils.isFalse(Objects.equals(user.getStatus(), EState.NORMAL.getValue()))) {
+            return false;
+        }
+        if (BooleanUtils.isFalse(MD5Util.encrypt(passWord + ConstantFactory.KEY_PASSWORD).equals(user.getPassword()))) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 生成验证码图片并返回其 Base64 编码字符串
+     *
+     * @param uuid 用于标识验证码的唯一标识符
+     * @return 包含验证码图片 Base64 编码的响应结果
+     */
+    public ExecutedResult<String> generate(String uuid) {
+        SpecCaptcha specCaptcha = new SpecCaptcha(100, 30, 4);
+        // captcha.setCharType(Captcha.TYPE_DEFAULT);
+        String code = specCaptcha.text().toLowerCase();
+        // 缓存验证码
+        redisTemplate.opsForValue().set(uuid, code);
+        // 设置验证码3分钟后过期
+        redisTemplate.expire(uuid, 3, TimeUnit.MINUTES);
+        return ExecutedResult.success(specCaptcha.toBase64());
+    }
+
+    // 获取管理员权限列表
+    public ExecutedResult<ResAdminPower> getPower(Long adminId) {
+        ResAdminPower result = new ResAdminPower();
+        result.setMenus(new ArrayList<>());
+
+        ExecutedResult<AdminUserPO> check = this.check4Id(adminId);
+        if (check.isFailed()) {
+            return ExecutedResult.success(result);
+        }
+        AdminUserPO user = check.getData();
+
+        List<AdminMenuPO> listMenu;
+        List<AdminPermissionPO> listPermission = null;
+        // 超级管理员有所有权限
+        if (Objects.equals(user.getUserType(), EUserType.ADMIN.getValue())) {
+            listMenu = menusService.listAllWithCache();
+            listPermission = permissionService.listAllWithCache();
+        } else {
+            //找到角色已有的菜单列表
+            List<AdminRoleRelationPO> listRole = adminRoleRelationDao.list4Admin(adminId);
+            if (ListUtil.isNullOrEmpty(listRole)) {
+                return ExecutedResult.success(result);
+            }
+            List<Long> listRoleId = listRole.stream()
+                    .map(AdminRoleRelationPO::getRoleId)
+                    .collect(Collectors.toList());
+
+            listMenu = menusService.listUserAllWithCache(adminId, listRoleId, adminPowerService::getListMenu4Role);
+            listPermission = permissionService.listUserAllWithCache(adminId, listRoleId, adminPowerService::getListPermission4Role);
+        }
+        if (ListUtil.isNotNullOrEmpty(listMenu)) {
+            // 筛选状态
+            listMenu = listMenu.stream()
+                    .filter(c -> Objects.equals(c.getStatus(), EState.NORMAL.getValue()))
+                    .collect(Collectors.toList());
+            result.setMenus(AdminMenuConvert.INSTANCE.toVo(listMenu));
+        }
+        if (ListUtil.isNotNullOrEmpty(listPermission)) {
+            // 筛选状态
+            listPermission = listPermission.stream()
+                    .filter(c -> Objects.equals(c.getStatus(), EState.NORMAL.getValue()))
+                    .collect(Collectors.toList());
+            result.setPermissions(AdminPermissionConvert.INSTANCE.toDetail(listPermission));
+        }
+        return ExecutedResult.success(result);
+    }
+
+    // 修改密码
+    public ExecutedResult<String> changePassword(LoginUserDTO user, ReqChangePassword request) {
+        Long adminId = NumericUtil.tryParseLong(user.getUserId(), 0L);
+        ExecutedResult<AdminUserPO> check = this.check4Id(adminId);
+        if (check.isFailed()) {
+            return ExecutedResult.failed(check.getMsg(), check.getMsgCode());
+        }
+        String oldPass = MD5Util.encrypt(request.getOldPassword() + ConstantFactory.KEY_PASSWORD);
+        if (BooleanUtils.isFalse(oldPass.equals(check.getData().getPassword()))) {
+            return ExecutedResult.failed("密码校验失败。");
+        }
+        return this.changePasswordDo(adminId, request.getNewPassword());
+    }
+
+    private ExecutedResult<String> changePasswordDo(Long adminId, String password) {
+        AdminUserPO item = new AdminUserPO();
+        item.setId(adminId);
+        // 密码加密
+        item.setPassword(MD5Util.encrypt(password + ConstantFactory.KEY_PASSWORD));
+        int rowCount = dao.updateById(item);
+        if (rowCount == 1) {
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("密码修改失败。");
+    }
+
+    // 重置密码
+    public ExecutedResult<String> resetPassword(Long adminId) {
+        ExecutedResult<AdminUserPO> check = this.check4Id(adminId);
+        if (check.isFailed()) {
+            return ExecutedResult.failed(check.getMsg(), check.getMsgCode());
+        }
+        String pass = RandVerifyCode.complexCode(8);
+        ExecutedResult<String> changePasswordDo = this.changePasswordDo(adminId, pass);
+        if (changePasswordDo.isFailed()) {
+            return changePasswordDo;
+        }
+        return ExecutedResult.success(pass);
+    }
+
+    // 分页查询所有管理员
+    public ExecutedResult<PagerResult<AdminUserVO>> search(SearchAdminUser request) {
+        List<AdminUserVO> result = new ArrayList<>();
+
+        super.dealPager(request);
+        request.setLastRowNo((request.getPage() - 1) * NumericUtil.tryParseLong(request.getLimit()));
+        // 处理时间范围
+        Tuple<String, String> createTimeRange = ParameterUtil.getTimeRange(request.getCreateTimeRange());
+        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) {
+            request.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime());
+        }
+        if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) {
+            request.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime());
+        }
+
+        PagerResult<AdminUserPO> pagerResult = dao.search(request);
+
+        if (NumericUtil.tryParseLong(pagerResult.getTotal()).compareTo(0L) < 1) {
+            return ExecutedResult.success(
+                    new PagerResult<>(request.getLimit(), request.getPage(), 0L, new ArrayList<>())
+            );
+        }
+        List<AdminUserPO> list = pagerResult.getList();
+        Long lastId = 0L;
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            lastId = list.stream().map(AdminUserPO::getId).min(Comparator.comparing(c -> c)).get();
+
+            list.forEach(item -> {
+                AdminUserVO vo = AdminUserConvert.INSTANCE.toVo(item);
+                result.add(vo);
+            });
+        }
+        PagerResult<AdminUserVO> view = new PagerResult<>(request.getLimit(), request.getPage(), pagerResult.getTotal(), result);
+        view.setLastId(lastId);
+        return ExecutedResult.success(view);
+    }
+
+    public ExecutedResult<String> stop(Long id) {
+        // 验证记录是否存在
+        ExecutedResult<AdminUserPO> checkExists = this.check4Id(id);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AdminUserPO item = new AdminUserPO();
+        item.setId(id);
+        item.setStatus(EState.DISABLED.getValue());
+
+        int rowCount = this.dao.updateById(item);
+        if (rowCount == 1) {
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("停用[管理员]失败。");
+    }
+
+    public ExecutedResult<String> enable(Long id) {
+        // 验证记录是否存在
+        ExecutedResult<AdminUserPO> checkExists = this.check4Id(id);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AdminUserPO item = new AdminUserPO();
+        item.setId(id);
+        item.setStatus(EState.NORMAL.getValue());
+
+        int rowCount = this.dao.updateById(item);
+        if (rowCount == 1) {
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("启用[管理员]失败。");
+    }
+
+    public ExecutedResult<String> remove(Long adminId) {
+        ExecutedResult<AdminUserPO> check = this.check4Id(adminId);
+        if (check.isFailed()) {
+            return ExecutedResult.failed(check.getMsg(), check.getMsgCode());
+        }
+        Boolean remove = dao.remove(adminId);
+        if (remove) {
+            return ExecutedResult.success();
+        }
+        return ExecutedResult.failed("删除[管理员]失败");
+    }
+
+    public ExecutedResult<AdminUserPO> check4Id(Long id) {
+        AdminUserPO item = dao.get(id);
+        if (Objects.isNull(item)) {
+            return ExecutedResult.failed("[管理员]不存在: " + id);
+        }
+        return ExecutedResult.success(item);
+    }
+
+    // 设置管理员的角色列表
+    public ExecutedResult<String> setListRole4Admin(ReqSetListRole4Admin request) {
+        Long adminId = request.getId();
+        ExecutedResult<AdminUserPO> checkExists = this.check4Id(adminId);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AdminUserPO find = checkExists.getData();
+        //找到管理员已有的角色列表
+        List<AdminRoleRelationPO> listOld = adminRoleRelationDao.list4Admin(adminId);
+        listOld = ParameterUtil.dealNull(listOld);
+
+        //现在设置的角色id列表
+        List<Long> listRoleId = ParameterUtil.dealNull(request.getListRole());
+
+        //批量新增
+        if (BooleanUtils.isFalse(listRoleId.isEmpty())) {
+            List<AdminRoleRelationPO> list = listRoleId.stream()
+                    .map(c -> {
+                        AdminRoleRelationPO item = new AdminRoleRelationPO();
+                        item.setAdminId(adminId);
+                        item.setRoleId(c);
+                        item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
+                        return item;
+                    }).collect(Collectors.toList());
+            Boolean addList = adminRoleRelationDao.addList(list);
+            if (BooleanUtils.isFalse(addList)) {
+                return ExecutedResult.failed("给管理员“" + adminId + "”新增角色失败。" + listRoleId);
+            }
+        }
+        //批量删除
+        if (BooleanUtils.isFalse(listOld.isEmpty())) {
+            List<Long> listId = listOld.stream()
+                    .map(AdminRoleRelationPO::getId).collect(Collectors.toList());
+            Boolean removeList = adminRoleRelationDao.remove(listId);
+            if (BooleanUtils.isFalse(removeList)) {
+                return ExecutedResult.failed("删除管理员“" + adminId + "”已有角色失败。" + listId);
+            }
+        }
+        // 删除指定用户的菜单和权限缓存
+        adminPowerService.removePower4User(adminId);
+        return ExecutedResult.success();
+    }
+
+    // 获取管理员的角色列表
+    public ExecutedResult<List<AdminRoleVO>> getListRole4Admin(Long id) {
+        List<AdminRoleVO> result = new ArrayList<>();
+
+        ExecutedResult<AdminUserPO> checkExists = this.check4Id(id);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AdminUserPO find = checkExists.getData();
+        List<AdminRolePO> list;
+        if (Objects.equals(find.getUserType(), EUserType.ADMIN.getValue())) {
+            list = roleDao.getList();
+        } else {
+            //找到角色已有的菜单列表
+            List<AdminRoleRelationPO> listRole = adminRoleRelationDao.list4Admin(id);
+            listRole = ParameterUtil.dealNull(listRole);
+            if (ListUtil.isNullOrEmpty(listRole)) {
+                return ExecutedResult.success(result);
+            }
+            List<Long> listRoleId = listRole.stream()
+                    .map(AdminRoleRelationPO::getRoleId)
+                    .collect(Collectors.toList());
+            list = roleDao.getList(listRoleId);
+        }
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 筛选状态
+            list = list.stream()
+                    .filter(c -> Objects.equals(c.getStatus(), EState.NORMAL.getValue()))
+                    .collect(Collectors.toList());
+            result = AdminRoleConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    /**
+     * 获取指定用户的菜单和权限
+     *
+     * @param user 用户
+     */
+    public ResAdminLogin getListPower4Admin(AdminUserPO user) {
+        Long adminId = user.getId();
+
+        ResAdminLogin result = new ResAdminLogin();
+        result.setId(user.getId());
+        result.setUserType(user.getUserType());
+        result.setMenus(new ArrayList<>());
+
+        List<AdminMenuPO> listMenu;
+        List<AdminPermissionPO> listPermission = null;
+
+        // 管理员从缓存中取有所有权限(普通管理员剔除系统管理部分菜单)
+        if (LIST_ADMIN_TYPE.contains(user.getUserType())) {
+            listMenu = menusService.listAllWithCache();
+
+            if (Objects.equals(EUserType.ADMIN_USER.getValue(), user.getUserType())) {
+                List<Long> listNot = Arrays.asList(10101L, 10102L, 10103L);
+                listMenu = listMenu.stream().filter(c -> !listNot.contains(c.getId())).collect(Collectors.toList());
+            }
+
+            listPermission = permissionService.listAllWithCache();
+        } else {
+            //找到角色已有的菜单列表
+            List<AdminRoleRelationPO> listRole = adminRoleRelationDao.list4Admin(adminId);
+            if (ListUtil.isNullOrEmpty(listRole)) {
+                return result;
+            }
+            List<Long> listRoleId = listRole.stream()
+                    .map(AdminRoleRelationPO::getRoleId)
+                    .collect(Collectors.toList());
+
+            listMenu = menusService.listUserAllWithCache(user.getId(), listRoleId, adminPowerService::getListMenu4Role);
+            listPermission = permissionService.listUserAllWithCache(user.getId(), listRoleId, adminPowerService::getListPermission4Role);
+        }
+        if (ListUtil.isNotNullOrEmpty(listMenu)) {
+            // 筛选状态
+            listMenu = listMenu.stream()
+                    .filter(c -> Objects.equals(c.getStatus(), EState.NORMAL.getValue()))
+                    .collect(Collectors.toList());
+            Map<Long, List<AdminPermissionPO>> mapPermission = new HashMap<>();
+            // 筛选权限状态
+            if (ListUtil.isNotNullOrEmpty(listPermission)) {
+                // 筛选状态
+                mapPermission = listPermission.stream()
+                        .filter(c -> Objects.equals(c.getStatus(), EState.NORMAL.getValue()))
+                        .collect(Collectors.groupingBy(AdminPermissionPO::getMenuId));
+            }
+
+            List<AdminMenuPO> listRoot = listMenu.stream().filter(c -> Objects.equals(c.getLevel(), 1)).collect(Collectors.toList());
+            listRoot = listRoot.stream()
+                    .sorted(Comparator.comparing(AdminMenuPO::getSort).reversed())
+                    .collect(Collectors.toList());
+            if (ListUtil.isNotNullOrEmpty(listRoot)) {
+                for (AdminMenuPO item : listRoot) {
+                    ResAdminMenuTreeAndPermission view = AdminMenuConvert.INSTANCE.toTreeVo(item);
+                    adminPowerService.fillChildMenu(view, listMenu, mapPermission);
+                    adminPowerService.fillPermission4Menu(view, mapPermission);
+                    result.getMenus().add(view);
+                }
+            }
+        }
+        if (ListUtil.isNotNullOrEmpty(listPermission)) {
+            // 筛选状态
+            List<String> listPermissionSn = listPermission.stream()
+                    .filter(c -> Objects.equals(c.getStatus(), EState.NORMAL.getValue()))
+                    .sorted(Comparator.comparing(AdminPermissionPO::getMenuId))
+                    .map(AdminPermissionPO::getSn)
+                    .collect(Collectors.toList());
+            result.setListPermission(listPermissionSn);
+        }
+        return result;
+    }
+}
diff --git a/src/main/java/com/nanjing/water/service/AdminUserService.java b/src/main/java/com/nanjing/water/service/AdminUserService.java
new file mode 100644
index 0000000..8da4a30
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/AdminUserService.java
@@ -0,0 +1,246 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+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.entity.request.adminuser.ReqCreateAdminUser;
+import com.nanjing.water.entity.request.adminuser.ReqModifyAdminUser;
+import com.nanjing.water.entity.search.SearchAdminUser;
+import com.nanjing.water.repository.impl.AdminUserMapperImpl;
+import com.nanjing.water.repository.po.AdminUserPO;
+import com.nanjing.water.repository.vo.AdminUserVO;
+import com.nanjing.water.service.convert.AdminUserConvert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 管理员帐号
+ * @author lin.liu
+ */
+@Service
+public class AdminUserService extends BaseService {
+    @Autowired
+    private AdminUserMapperImpl mapper;
+
+    public ExecutedResult<Long> create(ReqCreateAdminUser request) {
+        // 转换po
+        AdminUserPO item = AdminUserConvert.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(ReqModifyAdminUser request) {
+        // 验证记录是否存在
+        ExecutedResult<AdminUserPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        AdminUserPO item = AdminUserConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[管理员帐号]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<AdminUserVO> get(Long id) {
+        AdminUserVO result = new AdminUserVO();
+
+        AdminUserPO find = mapper.get(id);
+        if (null != find) {
+            // 转换vo
+            result = AdminUserConvert.INSTANCE.toVo(find);
+        }
+        return ExecutedResult.success(result);
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<AdminUserPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminUserPO item = new AdminUserPO();
+//        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<AdminUserPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminUserPO item = new AdminUserPO();
+//        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<AdminUserPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AdminUserPO item = new AdminUserPO();
+//        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<AdminUserPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<AdminUserPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    AdminUserPO item = new AdminUserPO();
+//                    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<AdminUserVO>> getList(List<Long> listId) {
+        List<AdminUserVO> result = new ArrayList<>();
+
+        List<AdminUserPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 转换vo
+            result = AdminUserConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<AdminUserVO>> search(SearchAdminUser 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<AdminUserPO> pageList = mapper.search(search);
+        List<AdminUserVO> listVo = new ArrayList<>();
+        List<AdminUserPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = AdminUserConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<AdminUserVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<AdminUserPO> check4Id(Long id) {
+        AdminUserPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[管理员帐号]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<AdminUserPO>> check4Id(List<Long> listId) {
+        // 从数据库查找管理员帐号
+        List<AdminUserPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[管理员帐号]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(AdminUserPO::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/nanjing/water/service/AlarmHistoryService.java b/src/main/java/com/nanjing/water/service/AlarmHistoryService.java
new file mode 100644
index 0000000..5a74497
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/AlarmHistoryService.java
@@ -0,0 +1,275 @@
+/**
+ * #                                                    __----~~~~~~~~~~~------___
+ * #                                   .  .   ~~//====......          __--~ ~~
+ * #                   -.            \_|//     |||\\  ~~~~~~::::... /~
+ * #                ___-==_       _-~o~  \/    |||  \\            _/~~-
+ * #        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+ * #    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+ * #  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+ * # /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+ * # |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+ * #          '         ~-|      /|    |-~\~~       __--~~
+ * #                      |-~~-_/ |    |   ~\_   _-~            /\
+ * #                           /  \     \__   \/~                \__
+ * #                       _--~ _/ | .-~~____--~-/                  ~~==.
+ * #                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+ * #                                 -_     ~\      ~~---l__i__i__i--~~_/
+ * #                                 _-~-__   ~)  \--______________--~~
+ * #                               //.-~~~-~_--~- |-------~~~~~~~~
+ * #                                      //.-~~~--\
+ * #                  神兽保佑
+ * #                  永无BUG!
+ */
+package com.nanjing.water.service;
+
+
+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.entity.request.alarmhistory.ReqCreateAlarmHistory;
+import com.nanjing.water.entity.request.alarmhistory.ReqModifyAlarmHistory;
+import com.nanjing.water.entity.search.SearchAlarmHistory;
+import com.nanjing.water.repository.impl.AlarmHistoryMapperImpl;
+import com.nanjing.water.repository.po.AlarmHistoryPO;
+import com.nanjing.water.repository.vo.AlarmHistoryVO;
+import com.nanjing.water.service.convert.AlarmHistoryConvert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 报警信息
+ * @author lin.liu
+ */
+@Service
+public class AlarmHistoryService extends BaseService {
+    @Autowired
+    private AlarmHistoryMapperImpl mapper;
+
+    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);
+            // 设置记录创建时间
+            item.setCreateTime(LocalDateTimeUtil.nowTimeStamp());
+            // 是否删除(逻辑删除)初始值
+            item.setIsDelete(EYesOrNo.NO.getValue());
+
+            int rowCount = mapper.insert(item);
+            if (rowCount != 1) {
+                return ExecutedResult.failed("创建[报警信息]失败。");
+            }
+        }
+
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<String> modify(ReqModifyAlarmHistory request) {
+        // 验证记录是否存在
+        ExecutedResult<AlarmHistoryPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        AlarmHistoryPO item = AlarmHistoryConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[报警信息]失败。");
+        }
+        return ExecutedResult.success();
+    }
+    public ExecutedResult<String> editConfirm(Long id,Integer status){
+        // 验证记录是否存在
+        ExecutedResult<AlarmHistoryPO> checkExists = this.check4Id(id);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        AlarmHistoryPO data = checkExists.getData();
+        data.setIsConfirm(status);
+        int i = mapper.updateById(data);
+        if(i!=1){
+            return ExecutedResult.failed("编辑[报警信息]失败。");
+        }
+        return ExecutedResult.success();
+    }
+    public ExecutedResult<AlarmHistoryVO> get(Long id) {
+        AlarmHistoryVO result = new AlarmHistoryVO();
+
+        AlarmHistoryPO find = mapper.get(id);
+        if (null != find) {
+            // 转换vo
+            result = AlarmHistoryConvert.INSTANCE.toVo(find);
+        }
+        return ExecutedResult.success(result);
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<AlarmHistoryPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AlarmHistoryPO item = new AlarmHistoryPO();
+//        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<AlarmHistoryPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AlarmHistoryPO item = new AlarmHistoryPO();
+//        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<AlarmHistoryPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        AlarmHistoryPO item = new AlarmHistoryPO();
+//        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<AlarmHistoryPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<AlarmHistoryPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    AlarmHistoryPO item = new AlarmHistoryPO();
+//                    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<AlarmHistoryVO>> getList(List<Long> listId) {
+        List<AlarmHistoryVO> result = new ArrayList<>();
+
+        List<AlarmHistoryPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 转换vo
+            result = AlarmHistoryConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<AlarmHistoryVO>> search(SearchAlarmHistory 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<AlarmHistoryPO> pageList = mapper.search(search);
+        List<AlarmHistoryVO> listVo = new ArrayList<>();
+        List<AlarmHistoryPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = CopierUtil.mapTo(list, AlarmHistoryVO.class);
+        }
+        PagerResult<AlarmHistoryVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<AlarmHistoryPO> check4Id(Long id) {
+        AlarmHistoryPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[报警信息]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+
+    protected ExecutedResult<List<AlarmHistoryPO>> check4Id(List<Long> listId) {
+        // 从数据库查找报警信息
+        List<AlarmHistoryPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[报警信息]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(AlarmHistoryPO::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/nanjing/water/service/AlarmSchemeService.java b/src/main/java/com/nanjing/water/service/AlarmSchemeService.java
new file mode 100644
index 0000000..3322774
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/AlarmSchemeService.java
@@ -0,0 +1,275 @@
+/**
+ * #                                                    __----~~~~~~~~~~~------___
+ * #                                   .  .   ~~//====......          __--~ ~~
+ * #                   -.            \_|//     |||\\  ~~~~~~::::... /~
+ * #                ___-==_       _-~o~  \/    |||  \\            _/~~-
+ * #        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+ * #    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+ * #  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+ * # /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+ * # |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+ * #          '         ~-|      /|    |-~\~~       __--~~
+ * #                      |-~~-_/ |    |   ~\_   _-~            /\
+ * #                           /  \     \__   \/~                \__
+ * #                       _--~ _/ | .-~~____--~-/                  ~~==.
+ * #                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+ * #                                 -_     ~\      ~~---l__i__i__i--~~_/
+ * #                                 _-~-__   ~)  \--______________--~~
+ * #                               //.-~~~-~_--~- |-------~~~~~~~~
+ * #                                      //.-~~~--\
+ * #                  神兽保佑
+ * #                  永无BUG!
+ */
+package com.nanjing.water.service;
+
+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.entity.request.alarmscheme.ReqCreateAlarmScheme;
+import com.nanjing.water.entity.request.alarmscheme.ReqModifyAlarmScheme;
+import com.nanjing.water.entity.search.SearchAlarmScheme;
+import com.nanjing.water.repository.impl.AlarmSchemeMapperImpl;
+import com.nanjing.water.repository.impl.CommonParametersMapperImpl;
+import com.nanjing.water.repository.impl.WaterFacilityMapperImpl;
+import com.nanjing.water.repository.po.AlarmSchemePO;
+import com.nanjing.water.repository.po.CommonParametersPO;
+import com.nanjing.water.repository.po.WaterFacilityPO;
+import com.nanjing.water.repository.vo.AlarmSchemeVO;
+import com.nanjing.water.service.convert.AlarmSchemeConvert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 报警方案设置
+ *
+ * @author lin.liu
+ */
+@Service
+public class AlarmSchemeService extends BaseService {
+    @Autowired
+    private AlarmSchemeMapperImpl mapper;
+    @Autowired
+    private WaterFacilityMapperImpl waterFacilityMapper;
+    @Autowired
+    private CommonParametersMapperImpl commonParametersMapper;
+
+    public ExecutedResult<Long> create(ReqCreateAlarmScheme request) {
+        //查询是否存着报警方案
+        AlarmSchemePO alarmSchemePO = mapper.getByFacilityId(request.getFacilityId(), request.getColumnsCode());
+        if(Objects.nonNull(alarmSchemePO)){
+            return ExecutedResult.failed("设备报警方案已存在!");
+        }
+        // 转换po
+        AlarmSchemePO item = AlarmSchemeConvert.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(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) {
+        int result = mapper.deleteById(id);
+        if (result<1) {
+            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);
+            if (ListUtil.isNotNullOrEmpty(listVo)) {
+                List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
+                List<CommonParametersPO> parametersPOList = commonParametersMapper.getList();
+                for (AlarmSchemeVO schemeVO : listVo) {
+                    WaterFacilityPO facilityPO = facilityPOList.stream().filter(item -> item.getId().equals(schemeVO.getFacilityId())).findFirst().orElse(null);
+                    CommonParametersPO parametersPO = parametersPOList.stream().filter(item -> item.getMark().equals(schemeVO.getColumnsCode())).findFirst().orElse(null);
+                    if (Objects.nonNull(facilityPO))
+                        schemeVO.setFacilityName(facilityPO.getFacilityName());
+
+                    if (Objects.nonNull(parametersPO))
+                        schemeVO.setColumnsName(parametersPO.getName());
+                }
+            }
+        }
+        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/nanjing/water/service/CommonParametersService.java b/src/main/java/com/nanjing/water/service/CommonParametersService.java
new file mode 100644
index 0000000..9b7741d
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/CommonParametersService.java
@@ -0,0 +1,290 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.enums.EYesOrNo;
+import com.nanjing.water.common.model.Tuple;
+import com.nanjing.water.common.util.*;
+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.repository.impl.CommonParametersMapperImpl;
+import com.nanjing.water.repository.impl.WaterFacilityParameterMapperImpl;
+import com.nanjing.water.repository.po.CommonParametersPO;
+import com.nanjing.water.repository.po.WaterFacilityParameterPO;
+import com.nanjing.water.repository.vo.CommonParametersVO;
+import org.apache.commons.lang3.BooleanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 公共参数
+ * @author lin.liu
+ */
+@Service
+public class CommonParametersService extends BaseService {
+    @Autowired
+    private CommonParametersMapperImpl mapper;
+    @Autowired
+    private WaterFacilityParameterMapperImpl facilityParameterMapper;
+
+    public ExecutedResult<Long> create(ReqCreateCommonParameters request) {
+        if(StringUtil.isNotNullOrEmpty(request.getMark())){
+            CommonParametersPO byMark = mapper.getByMark(request.getMark());
+            if(Objects.nonNull(byMark)){
+                return ExecutedResult.failed("参数:"+request.getMark()+"标记已存在。");
+            }
+        }
+        // 转换po
+        CommonParametersPO item = CopierUtil.mapTo(request, CommonParametersPO.class);
+        item.setUnit(ParameterUtil.dealNull(request.getUnit()));
+        item.setSort(NumericUtil.tryParseInt(request.getSort(), 0));
+        // 设置状态
+        //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(ReqModifyCommonParameters request) {
+        // 验证记录是否存在
+        ExecutedResult<CommonParametersPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        CommonParametersPO item = CopierUtil.mapTo(request, CommonParametersPO.class);
+        item.setUnit(ParameterUtil.dealNull(request.getUnit()));
+        item.setSort(NumericUtil.tryParseInt(request.getSort(), 0));
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[公共参数]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<CommonParametersVO> get(Long id) {
+        CommonParametersVO result = new CommonParametersVO();
+
+        CommonParametersPO find = mapper.get(id);
+        if (null != find) {
+            result = CopierUtil.mapTo(find, CommonParametersVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    //    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<CommonParametersPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        CommonParametersPO item = new CommonParametersPO();
+//        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<CommonParametersPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        CommonParametersPO item = new CommonParametersPO();
+//        item.setId(id);
+//        item.setStatus(EState.NORMAL.getValue());
+//
+//        int rowCount = mapper.updateById(item);\n" +
+//        if (rowCount != 1) {
+//            return ExecutedResult.failed("启用[公共参数]失败。");
+//        }
+//        return ExecutedResult.success();
+//    }
+//
+//    public ExecutedResult<String> setSort(ReqSetSort request) {
+//        // 验证记录是否存在
+//        ExecutedResult<CommonParametersPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        CommonParametersPO item = new CommonParametersPO();
+//        item.setId(request.getId());
+//        item.setSort(request.getSort());
+//
+//        int rowCount = mapper.updateById(item);\n" +
+//        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<CommonParametersPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<CommonParametersPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    CommonParametersPO item = new CommonParametersPO();
+//                    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) {
+        CommonParametersPO parametersPO = mapper.get(id);
+        if(Objects.isNull(parametersPO)){
+            return ExecutedResult.failed("要删除的[公共参数]不存在。");
+        }
+        LambdaQueryWrapper<WaterFacilityParameterPO> queryWrapper =new LambdaQueryWrapper<>();
+        queryWrapper.eq(WaterFacilityParameterPO::getColumnsCode,parametersPO.getMark());
+        queryWrapper.eq(WaterFacilityParameterPO::getIsDelete,EYesOrNo.NO.getValue());
+        List<WaterFacilityParameterPO> list = facilityParameterMapper.selectList(queryWrapper);
+        if(ListUtil.isNotNullOrEmpty(list)){
+            return ExecutedResult.failed("请先解除绑定此参数的设备");
+        }
+        Boolean result = mapper.remove(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<CommonParametersVO>> getList(List<Long> listId) {
+        List<CommonParametersVO> result = new ArrayList<>();
+
+        List<CommonParametersPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            result = CopierUtil.mapTo(list, CommonParametersVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<CommonParametersVO>> search(SearchCommonParameters 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<CommonParametersPO> pageList = mapper.search(search);
+        List<CommonParametersVO> listVo = new ArrayList<>();
+        List<CommonParametersPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = CopierUtil.mapTo(list, CommonParametersVO.class);
+        }
+        PagerResult<CommonParametersVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<CommonParametersPO> check4Id(Long id) {
+        CommonParametersPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[公共参数]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<CommonParametersPO>> check4Id(List<Long> listId) {
+        // 从数据库查找公共参数
+        List<CommonParametersPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[公共参数]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(CommonParametersPO::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);
+    }
+    protected ExecutedResult<List<CommonParametersPO>> check4Mark(List<String> listMark) {
+        // 从数据库查找公共参数
+        List<CommonParametersPO> list = mapper.list4Mark(listMark);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("参数不存在." + listMark);
+        }
+        // 数据库找到的id列表
+        List<String> listIdFind = list.stream().map(CommonParametersPO::getMark).collect(Collectors.toList());
+        // 数量不一致
+        if (listMark.size() != listIdFind.size()) {
+            // 筛选数据库不存在的公共参数
+            List<String> listIdNotFound = listMark.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/nanjing/water/service/QuartzTaskErrorService.java b/src/main/java/com/nanjing/water/service/QuartzTaskErrorService.java
new file mode 100644
index 0000000..2bfcf03
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/QuartzTaskErrorService.java
@@ -0,0 +1,246 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+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.entity.request.quartztaskerror.ReqCreateQuartzTaskError;
+import com.nanjing.water.entity.request.quartztaskerror.ReqModifyQuartzTaskError;
+import com.nanjing.water.entity.search.SearchQuartzTaskError;
+import com.nanjing.water.repository.impl.QuartzTaskErrorMapperImpl;
+import com.nanjing.water.repository.po.QuartzTaskErrorPO;
+import com.nanjing.water.repository.vo.QuartzTaskErrorVO;
+import com.nanjing.water.service.convert.QuartzTaskErrorConvert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 定时任务错误信息
+ * @author lin.liu
+ */
+@Service
+public class QuartzTaskErrorService extends BaseService {
+    @Autowired
+    private QuartzTaskErrorMapperImpl mapper;
+
+    public ExecutedResult<Long> create(ReqCreateQuartzTaskError request) {
+        // 转换po
+        QuartzTaskErrorPO item = QuartzTaskErrorConvert.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(ReqModifyQuartzTaskError request) {
+        // 验证记录是否存在
+        ExecutedResult<QuartzTaskErrorPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        QuartzTaskErrorPO item = QuartzTaskErrorConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[定时任务错误信息]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<QuartzTaskErrorVO> get(Long id) {
+        QuartzTaskErrorVO result = new QuartzTaskErrorVO();
+
+        QuartzTaskErrorPO find = mapper.get(id);
+        if (null != find) {
+            // 转换vo
+            result = QuartzTaskErrorConvert.INSTANCE.toVo(find);
+        }
+        return ExecutedResult.success(result);
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<QuartzTaskErrorPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        QuartzTaskErrorPO item = new QuartzTaskErrorPO();
+//        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<QuartzTaskErrorPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        QuartzTaskErrorPO item = new QuartzTaskErrorPO();
+//        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<QuartzTaskErrorPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        QuartzTaskErrorPO item = new QuartzTaskErrorPO();
+//        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<QuartzTaskErrorPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<QuartzTaskErrorPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    QuartzTaskErrorPO item = new QuartzTaskErrorPO();
+//                    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<QuartzTaskErrorVO>> getList(List<Long> listId) {
+        List<QuartzTaskErrorVO> result = new ArrayList<>();
+
+        List<QuartzTaskErrorPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 转换vo
+            result = QuartzTaskErrorConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<QuartzTaskErrorVO>> search(SearchQuartzTaskError 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<QuartzTaskErrorPO> pageList = mapper.search(search);
+        List<QuartzTaskErrorVO> listVo = new ArrayList<>();
+        List<QuartzTaskErrorPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = QuartzTaskErrorConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<QuartzTaskErrorVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<QuartzTaskErrorPO> check4Id(Long id) {
+        QuartzTaskErrorPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[定时任务错误信息]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<QuartzTaskErrorPO>> check4Id(List<Long> listId) {
+        // 从数据库查找定时任务错误信息
+        List<QuartzTaskErrorPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[定时任务错误信息]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(QuartzTaskErrorPO::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/nanjing/water/service/QuartzTaskInfoService.java b/src/main/java/com/nanjing/water/service/QuartzTaskInfoService.java
new file mode 100644
index 0000000..e407b9e
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/QuartzTaskInfoService.java
@@ -0,0 +1,246 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+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.entity.request.quartztaskinfo.ReqCreateQuartzTaskInfo;
+import com.nanjing.water.entity.request.quartztaskinfo.ReqModifyQuartzTaskInfo;
+import com.nanjing.water.entity.search.SearchQuartzTaskInfo;
+import com.nanjing.water.repository.impl.QuartzTaskInfoMapperImpl;
+import com.nanjing.water.repository.po.QuartzTaskInfoPO;
+import com.nanjing.water.repository.vo.QuartzTaskInfoVO;
+import com.nanjing.water.service.convert.QuartzTaskInfoConvert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 定时任务信息
+ * @author lin.liu
+ */
+@Service
+public class QuartzTaskInfoService extends BaseService {
+    @Autowired
+    private QuartzTaskInfoMapperImpl mapper;
+
+    public ExecutedResult<Long> create(ReqCreateQuartzTaskInfo request) {
+        // 转换po
+        QuartzTaskInfoPO item = QuartzTaskInfoConvert.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(ReqModifyQuartzTaskInfo request) {
+        // 验证记录是否存在
+        ExecutedResult<QuartzTaskInfoPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        QuartzTaskInfoPO item = QuartzTaskInfoConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[定时任务信息]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<QuartzTaskInfoVO> get(Long id) {
+        QuartzTaskInfoVO result = new QuartzTaskInfoVO();
+
+        QuartzTaskInfoPO find = mapper.get(id);
+        if (null != find) {
+            // 转换vo
+            result = QuartzTaskInfoConvert.INSTANCE.toVo(find);
+        }
+        return ExecutedResult.success(result);
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<QuartzTaskInfoPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        QuartzTaskInfoPO item = new QuartzTaskInfoPO();
+//        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<QuartzTaskInfoPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        QuartzTaskInfoPO item = new QuartzTaskInfoPO();
+//        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<QuartzTaskInfoPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        QuartzTaskInfoPO item = new QuartzTaskInfoPO();
+//        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<QuartzTaskInfoPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<QuartzTaskInfoPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    QuartzTaskInfoPO item = new QuartzTaskInfoPO();
+//                    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<QuartzTaskInfoVO>> getList(List<Long> listId) {
+        List<QuartzTaskInfoVO> result = new ArrayList<>();
+
+        List<QuartzTaskInfoPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 转换vo
+            result = QuartzTaskInfoConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<QuartzTaskInfoVO>> search(SearchQuartzTaskInfo 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<QuartzTaskInfoPO> pageList = mapper.search(search);
+        List<QuartzTaskInfoVO> listVo = new ArrayList<>();
+        List<QuartzTaskInfoPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = QuartzTaskInfoConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<QuartzTaskInfoVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<QuartzTaskInfoPO> check4Id(Long id) {
+        QuartzTaskInfoPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[定时任务信息]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<QuartzTaskInfoPO>> check4Id(List<Long> listId) {
+        // 从数据库查找定时任务信息
+        List<QuartzTaskInfoPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[定时任务信息]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(QuartzTaskInfoPO::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/nanjing/water/service/QuartzTaskRecordService.java b/src/main/java/com/nanjing/water/service/QuartzTaskRecordService.java
new file mode 100644
index 0000000..c9c9d2d
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/QuartzTaskRecordService.java
@@ -0,0 +1,246 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+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.entity.request.quartztaskrecord.ReqCreateQuartzTaskRecord;
+import com.nanjing.water.entity.request.quartztaskrecord.ReqModifyQuartzTaskRecord;
+import com.nanjing.water.entity.search.SearchQuartzTaskRecord;
+import com.nanjing.water.repository.impl.QuartzTaskRecordMapperImpl;
+import com.nanjing.water.repository.po.QuartzTaskRecordPO;
+import com.nanjing.water.repository.vo.QuartzTaskRecordVO;
+import com.nanjing.water.service.convert.QuartzTaskRecordConvert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 定时任务执行记录
+ * @author lin.liu
+ */
+@Service
+public class QuartzTaskRecordService extends BaseService {
+    @Autowired
+    private QuartzTaskRecordMapperImpl mapper;
+
+    public ExecutedResult<Long> create(ReqCreateQuartzTaskRecord request) {
+        // 转换po
+        QuartzTaskRecordPO item = QuartzTaskRecordConvert.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(ReqModifyQuartzTaskRecord request) {
+        // 验证记录是否存在
+        ExecutedResult<QuartzTaskRecordPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        QuartzTaskRecordPO item = QuartzTaskRecordConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[定时任务执行记录]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<QuartzTaskRecordVO> get(Long id) {
+        QuartzTaskRecordVO result = new QuartzTaskRecordVO();
+
+        QuartzTaskRecordPO find = mapper.get(id);
+        if (null != find) {
+            // 转换vo
+            result = QuartzTaskRecordConvert.INSTANCE.toVo(find);
+        }
+        return ExecutedResult.success(result);
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<QuartzTaskRecordPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        QuartzTaskRecordPO item = new QuartzTaskRecordPO();
+//        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<QuartzTaskRecordPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        QuartzTaskRecordPO item = new QuartzTaskRecordPO();
+//        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<QuartzTaskRecordPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        QuartzTaskRecordPO item = new QuartzTaskRecordPO();
+//        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<QuartzTaskRecordPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<QuartzTaskRecordPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    QuartzTaskRecordPO item = new QuartzTaskRecordPO();
+//                    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<QuartzTaskRecordVO>> getList(List<Long> listId) {
+        List<QuartzTaskRecordVO> result = new ArrayList<>();
+
+        List<QuartzTaskRecordPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            // 转换vo
+            result = QuartzTaskRecordConvert.INSTANCE.toVo(list);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<QuartzTaskRecordVO>> search(SearchQuartzTaskRecord 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<QuartzTaskRecordPO> pageList = mapper.search(search);
+        List<QuartzTaskRecordVO> listVo = new ArrayList<>();
+        List<QuartzTaskRecordPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = QuartzTaskRecordConvert.INSTANCE.toVo(list);
+        }
+        PagerResult<QuartzTaskRecordVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<QuartzTaskRecordPO> check4Id(Long id) {
+        QuartzTaskRecordPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[定时任务执行记录]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<QuartzTaskRecordPO>> check4Id(List<Long> listId) {
+        // 从数据库查找定时任务执行记录
+        List<QuartzTaskRecordPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[定时任务执行记录]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(QuartzTaskRecordPO::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/nanjing/water/service/SysDictDataService.java b/src/main/java/com/nanjing/water/service/SysDictDataService.java
new file mode 100644
index 0000000..698dd2e
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/SysDictDataService.java
@@ -0,0 +1,390 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.enums.EYesOrNo;
+import com.nanjing.water.common.jwt.LoginUserDTO;
+import com.nanjing.water.common.model.Tuple;
+import com.nanjing.water.common.util.ListUtil;
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.ParameterUtil;
+import com.nanjing.water.common.util.StringUtil;
+import com.nanjing.water.entity.enums.EState;
+import com.nanjing.water.entity.request.sysdictdata.ReqCreateSysDictData;
+import com.nanjing.water.entity.request.sysdictdata.ReqModifySysDictData;
+import com.nanjing.water.entity.search.SearchSysDictData;
+import com.nanjing.water.repository.impl.SysDictDataMapperImpl;
+import com.nanjing.water.repository.impl.SysDictTypeMapperImpl;
+import com.nanjing.water.repository.po.SysDictDataPO;
+import com.nanjing.water.repository.po.SysDictTypePO;
+import com.nanjing.water.repository.vo.SysDictDataVO;
+import com.nanjing.water.service.convert.SysDictDataConvert;
+import org.apache.commons.lang3.BooleanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 字典数据表
+ * @author lin.liu
+ * @description 字典数据表
+ */
+@Service
+public class SysDictDataService extends BaseService {
+    @Autowired
+    private SysDictDataMapperImpl mapper;
+    @Autowired
+    private SysDictTypeMapperImpl dictTypeMapper;
+
+    @Autowired
+    private SysDictTypeService dictTypeService;
+
+
+    public ExecutedResult<Long> create(ReqCreateSysDictData request, LoginUserDTO loginUser) {
+        // 校验类型
+        dictTypeService.check4TypeExc(request.getDictType());
+
+        // 转换po
+        SysDictDataPO item = SysDictDataConvert.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("创建[字典数据表]失败。");
+        }
+        // 删除所有缓存
+        this.removeAllTypeCache();
+        return ExecutedResult.success(item.getId());
+    }
+
+    public ExecutedResult<String> modify(ReqModifySysDictData request, LoginUserDTO loginUser) {
+        // 验证记录是否存在
+        ExecutedResult<SysDictDataPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        SysDictDataPO item = SysDictDataConvert.INSTANCE.toModify(request);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[字典数据表]失败。");
+        }
+        // 删除所有缓存
+        this.removeAllTypeCache();
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<SysDictDataVO> get(Long id) {
+        SysDictDataVO result = new SysDictDataVO();
+
+        SysDictDataPO find = mapper.get(id);
+        if (null != find) {
+            // 转换po
+            result = SysDictDataConvert.INSTANCE.toVo(find);
+            // 赋值类型名称
+            result.setDictTypeTxt("");
+
+            SysDictTypePO type = dictTypeMapper.get4Type(find.getDictType());
+            if (Objects.nonNull(type)) {
+                result.setDictTypeTxt(type.getDictName());
+            }
+        }
+        return ExecutedResult.success(result);
+    }
+
+    //    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<SysDictDataPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        SysDictDataPO item = new SysDictDataPO();
+//        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<SysDictDataPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        SysDictDataPO item = new SysDictDataPO();
+//        item.setId(id);
+//        item.setStatus(EState.NORMAL.getValue());
+//
+//        int rowCount = mapper.updateById(item);\n" +
+//        if (rowCount != 1) {
+//            return ExecutedResult.failed("启用[字典数据表]失败。");
+//        }
+//        return ExecutedResult.success();
+//    }
+//
+//    public ExecutedResult<String> setSort(ReqSetSort request) {
+//        // 验证记录是否存在
+//        ExecutedResult<SysDictDataPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        SysDictDataPO item = new SysDictDataPO();
+//        item.setId(request.getId());
+//        item.setSort(request.getSort());
+//
+//        int rowCount = mapper.updateById(item);\n" +
+//        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<SysDictDataPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<SysDictDataPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    SysDictDataPO item = new SysDictDataPO();
+//                    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.remove(id);
+        if (BooleanUtils.isFalse(result)) {
+            return ExecutedResult.failed("删除[字典数据表]失败。");
+        }
+        // 删除所有缓存
+        this.removeAllTypeCache();
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<String> removeList(List<Long> ids) {
+        Boolean result = mapper.remove(ids);
+        if (BooleanUtils.isFalse(result)) {
+            return ExecutedResult.failed("删除[字典数据表]失败。");
+        }
+        // 删除所有缓存
+        this.removeAllTypeCache();
+        return ExecutedResult.success();
+    }
+
+    /**
+     * 根据类型查询数据
+     * @param type 字典类型
+     */
+    public ExecutedResult<List<SysDictDataVO>> getListByType(String type) {
+        List<SysDictDataVO> result = new ArrayList<>();
+
+        List<SysDictDataPO> list = this.mapper.getListByType(type);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            List<SysDictTypePO> listType = dictTypeMapper.get4Type(
+                    list.stream()
+                            .map(SysDictDataPO::getDictType)
+                            .distinct()
+                            .collect(Collectors.toList())
+            );
+            Map<Object, SysDictTypePO> map4Type = listType.stream().collect(Collectors.toMap(SysDictTypePO::getId, c -> c));
+
+            for (SysDictDataPO item : list) {
+                // 转化vo
+                SysDictDataVO vo = SysDictDataConvert.INSTANCE.toVo(item);
+                // 赋值类型名称
+                vo.setDictTypeTxt("");
+
+                if (map4Type.containsKey(item.getDictType())) {
+                    vo.setDictTypeTxt(map4Type.get(item.getDictType()).getDictName());
+                }
+
+                result.add(vo);
+            }
+        }
+        return ExecutedResult.success(result);
+    }
+
+    /**
+     * 根据类型查询数据
+     * @param listId 字典数据id列表
+     */
+    public ExecutedResult<List<SysDictDataVO>> getList(List<Long> listId) {
+        List<SysDictDataVO> result = new ArrayList<>();
+
+        List<SysDictDataPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            List<SysDictTypePO> listType = dictTypeMapper.get4Type(
+                    list.stream()
+                            .map(SysDictDataPO::getDictType)
+                            .distinct()
+                            .collect(Collectors.toList())
+            );
+            Map<Object, SysDictTypePO> map4Type = listType.stream().collect(Collectors.toMap(SysDictTypePO::getId, c -> c));
+
+            for (SysDictDataPO item : list) {
+                // 转化vo
+                SysDictDataVO vo = SysDictDataConvert.INSTANCE.toVo(item);
+                // 赋值类型名称
+                vo.setDictTypeTxt("");
+
+                if (map4Type.containsKey(item.getDictType())) {
+                    vo.setDictTypeTxt(map4Type.get(item.getDictType()).getDictName());
+                }
+
+                result.add(vo);
+            }
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<SysDictDataVO>> search(SearchSysDictData 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<SysDictDataPO> pageList = mapper.search(search);
+        List<SysDictDataVO> listVo = new ArrayList<>();
+        List<SysDictDataPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            List<SysDictTypePO> listType = dictTypeMapper.get4Type(
+                    list.stream()
+                            .map(SysDictDataPO::getDictType)
+                            .distinct()
+                            .collect(Collectors.toList())
+            );
+            Map<Object, SysDictTypePO> map4Type = listType.stream().collect(Collectors.toMap(SysDictTypePO::getId, c -> c));
+
+            for (SysDictDataPO item : list) {
+                // 转化vo
+                SysDictDataVO vo = SysDictDataConvert.INSTANCE.toVo(item);
+                // 赋值类型名称
+                vo.setDictTypeTxt("");
+
+                if (map4Type.containsKey(item.getDictType())) {
+                    vo.setDictTypeTxt(map4Type.get(item.getDictType()).getDictName());
+                }
+
+                listVo.add(vo);
+            }
+        }
+        PagerResult<SysDictDataVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<SysDictDataPO> check4Id(Long id) {
+        SysDictDataPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[字典数据表]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+
+    protected ExecutedResult<List<SysDictDataPO>> check4Id(List<Long> listId) {
+        // 从数据库查找字典数据表
+        List<SysDictDataPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[字典数据表]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(SysDictDataPO::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);
+    }
+
+
+    /**
+     * 获取指定类型下的字典列表(缓存)
+     */
+    @Cacheable(cacheManager = "json4RedisCacheManager", value = "dictDataCache4Type", key = "#type")
+    private List<SysDictDataVO> list4TypeWithCache(String type, Function<String, List<SysDictDataVO>> funcList4Type) {
+        return funcList4Type.apply(type);
+    }
+    // 根据类型删除字典列表缓存
+    @CacheEvict(cacheNames = "dictDataCache4Type", key = "#type")
+    private void removeList4TypeCache(String type) {
+    }
+    // 删除所有用户拥有的菜单缓存
+    @CacheEvict(cacheNames = "dictDataCache4Type", allEntries = true)
+    public void removeAllTypeCache() {
+    }
+
+    public List<SysDictDataVO> list4TypeWithCache(String type) {
+        return this.list4TypeWithCache(type, (t) -> this.getListByType(t).getData());
+    }
+
+    public Map<String, SysDictDataVO> map4TypeWithCache(String type) {
+        List<SysDictDataVO> list = this.list4TypeWithCache(type);
+        return list.stream().collect(Collectors.toMap(SysDictDataVO::getDictValue, c -> c));
+    }
+
+    public Map<String, SysDictDataVO> mapLabel4TypeWithCache(String type) {
+        List<SysDictDataVO> list = this.list4TypeWithCache(type);
+        return list.stream().collect(Collectors.toMap(SysDictDataVO::getDictLabel, c -> c));
+    }
+}
diff --git a/src/main/java/com/nanjing/water/service/SysDictTypeService.java b/src/main/java/com/nanjing/water/service/SysDictTypeService.java
new file mode 100644
index 0000000..7ac910d
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/SysDictTypeService.java
@@ -0,0 +1,323 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.enums.EResultCode;
+import com.nanjing.water.common.enums.EYesOrNo;
+import com.nanjing.water.common.exceptions.BusinessException;
+import com.nanjing.water.common.model.Tuple;
+import com.nanjing.water.common.util.*;
+import com.nanjing.water.entity.enums.EState;
+import com.nanjing.water.entity.request.sysdicttype.ReqCreateSysDictType;
+import com.nanjing.water.entity.request.sysdicttype.ReqModifySysDictType;
+import com.nanjing.water.entity.search.SearchSysDictType;
+import com.nanjing.water.repository.impl.SysDictDataMapperImpl;
+import com.nanjing.water.repository.impl.SysDictTypeMapperImpl;
+import com.nanjing.water.repository.po.SysDictTypePO;
+import com.nanjing.water.repository.vo.SysDictTypeVO;
+import org.apache.commons.lang3.BooleanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 字典类型表
+ * @author lin.liu
+ * @description 字典类型表
+ */
+@Service
+public class SysDictTypeService extends BaseService {
+    @Autowired
+    private SysDictTypeMapperImpl mapper;
+    @Autowired
+    private SysDictDataMapperImpl sysDictDataMapper;
+
+    public ExecutedResult<Long> create(ReqCreateSysDictType request) {
+        // 转换po
+        SysDictTypePO item = CopierUtil.mapTo(request, SysDictTypePO.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(ReqModifySysDictType request) {
+        // 验证记录是否存在
+        ExecutedResult<SysDictTypePO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        SysDictTypePO item = CopierUtil.mapTo(request, SysDictTypePO.class);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[字典类型表]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<SysDictTypeVO> get(Long id) {
+        SysDictTypeVO result = new SysDictTypeVO();
+
+        SysDictTypePO find = mapper.get(id);
+        if (null != find) {
+            result = CopierUtil.mapTo(find, SysDictTypeVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+    public ExecutedResult<String> remove(Long id) {
+        // 验证记录是否存在
+        ExecutedResult<SysDictTypePO> checkExists = this.check4Id(id);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+
+        Long exitCount = sysDictDataMapper.count4Type(checkExists.getData().getDictType());
+        if(exitCount.compareTo(0L) > 0){
+            return ExecutedResult.failed("此类型有关联的字典数据,不能删除");
+        }
+        Boolean result = this.mapper.remove(id);
+
+        if (BooleanUtils.isFalse(result)) {
+            return ExecutedResult.failed("删除[字典类型表]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<String> removeList(List<Long> ids) {
+        // 验证记录是否存在
+        ExecutedResult<List<SysDictTypePO>> checkExists = this.check4Id(ids);
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+
+        List<String> listExitDataType = sysDictDataMapper.findExists4Type(
+                checkExists.getData().stream()
+                    .map(SysDictTypePO::getDictType)
+                    .collect(Collectors.toList())
+        );
+        if (ListUtil.isNotNullOrEmpty(listExitDataType)) {
+            return ExecutedResult.failed("以下类型有关联的字典数据,不能删除." + listExitDataType);
+        }
+
+        Boolean result = mapper.remove(ids);
+        if (BooleanUtils.isFalse(result)) {
+            return ExecutedResult.failed("删除[字典类型表]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<SysDictTypePO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        SysDictTypePO item = new SysDictTypePO();
+//        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<SysDictTypePO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        SysDictTypePO item = new SysDictTypePO();
+//        item.setId(id);
+//        item.setStatus(EState.NORMAL.getValue());
+//
+//        int rowCount = mapper.updateById(item);\n" +
+//        if (rowCount != 1) {
+//            return ExecutedResult.failed("启用[字典类型表]失败。");
+//        }
+//        return ExecutedResult.success();
+//    }
+//
+//    public ExecutedResult<String> setSort(ReqSetSort request) {
+//        // 验证记录是否存在
+//        ExecutedResult<SysDictTypePO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        SysDictTypePO item = new SysDictTypePO();
+//        item.setId(request.getId());
+//        item.setSort(request.getSort());
+//
+//        int rowCount = mapper.updateById(item);\n" +
+//        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<SysDictTypePO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<SysDictTypePO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    SysDictTypePO item = new SysDictTypePO();
+//                    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<SysDictTypeVO>> getList(List<Long> listId) {
+        List<SysDictTypeVO> result = new ArrayList<>();
+
+        List<SysDictTypePO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            result = CopierUtil.mapTo(list, SysDictTypeVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<SysDictTypeVO>> search(SearchSysDictType 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<SysDictTypePO> pageList = mapper.search(search);
+        List<SysDictTypeVO> listVo = new ArrayList<>();
+        List<SysDictTypePO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = CopierUtil.mapTo(list, SysDictTypeVO.class);
+        }
+        PagerResult<SysDictTypeVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<SysDictTypePO> check4Id(Long id) {
+        SysDictTypePO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[字典类型]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected SysDictTypePO check4IdExc(Long id) {
+        ExecutedResult<SysDictTypePO> check = this.check4Id(id);
+        if (check.isFailed()) {
+            throw new BusinessException(EResultCode.NOT_FOUND, check.getMsg());
+        }
+        return check.getData();
+    }
+    protected ExecutedResult<List<SysDictTypePO>> check4Id(List<Long> listId) {
+        // 从数据库查找字典类型表
+        List<SysDictTypePO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[字典类型]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(SysDictTypePO::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);
+    }
+    protected List<SysDictTypePO> check4IdExc(List<Long> listId) {
+        ExecutedResult<List<SysDictTypePO>> check = this.check4Id(listId);
+        if (check.isFailed()) {
+            throw new BusinessException(EResultCode.NOT_FOUND, check.getMsg());
+        }
+        return check.getData();
+    }
+
+    protected ExecutedResult<SysDictTypePO> check4Type(String type) {
+        SysDictTypePO exists = mapper.get4Type(type);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[字典类型]不存在:" + type);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected SysDictTypePO check4TypeExc(String type) {
+        ExecutedResult<SysDictTypePO> check = this.check4Type(type);
+        if (check.isFailed()) {
+            throw new BusinessException(EResultCode.NOT_FOUND, check.getMsg());
+        }
+        return check.getData();
+    }
+}
diff --git a/src/main/java/com/nanjing/water/service/SysRegionService.java b/src/main/java/com/nanjing/water/service/SysRegionService.java
new file mode 100644
index 0000000..c0a2f67
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/SysRegionService.java
@@ -0,0 +1,258 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+import com.nanjing.water.common.*;
+import com.nanjing.water.common.enums.*;
+import com.nanjing.water.common.exceptions.BusinessException;
+import com.nanjing.water.common.model.Tuple;
+import com.nanjing.water.common.util.*;
+import com.nanjing.water.entity.request.sysregion.ReqCreateSysRegion;
+import com.nanjing.water.entity.request.sysregion.ReqModifySysRegion;
+import com.nanjing.water.entity.response.region.ResRegionTree;
+import com.nanjing.water.entity.search.SearchSysRegion;
+import com.nanjing.water.repository.impl.SysRegionMapperImpl;
+import com.nanjing.water.repository.po.SysRegionPO;
+import com.nanjing.water.repository.vo.SysRegionVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 系统行政地区
+ * @author lin.liu
+ */
+@Service
+public class SysRegionService extends BaseService {
+    @Autowired
+    private SysRegionMapperImpl mapper;
+
+    public ExecutedResult<Long> create(ReqCreateSysRegion request) {
+        // 转换po
+        SysRegionPO item = CopierUtil.mapTo(request, SysRegionPO.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(ReqModifySysRegion request) {
+        // 验证记录是否存在
+        ExecutedResult<SysRegionPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        SysRegionPO item = CopierUtil.mapTo(request, SysRegionPO.class);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[系统行政地区]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<SysRegionVO> get(String code) {
+        SysRegionVO result = new SysRegionVO();
+
+        SysRegionPO find = mapper.get4Code(code);
+        if (null != find) {
+            result = CopierUtil.mapTo(find, SysRegionVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<List<SysRegionVO>> getList(List<Long> listId) {
+        List<SysRegionVO> result = new ArrayList<>();
+
+        List<SysRegionPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            result = CopierUtil.mapTo(list, SysRegionVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<List<ResRegionTree>> getListChild(String code) {
+        List<SysRegionPO> list = null;
+        if (StringUtil.isNullOrEmpty(code)) {
+            list = mapper.getList4Level(1);
+        } else {
+            list = mapper.getList4Parent(code);
+        }
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.success(new ArrayList<>());
+        }
+        return ExecutedResult.success(CopierUtil.mapTo(list, ResRegionTree.class));
+    }
+
+    public void fillChildMenu(ResRegionTree view, List<SysRegionPO> list) {
+        List<SysRegionPO> listChild = list.stream()
+                .filter(c -> c.getParentCode().equals(view.getCode()))
+                .collect(Collectors.toList());
+        view.setChildren(new ArrayList<>());
+        if (ListUtil.isNullOrEmpty(listChild)) {
+            return;
+        }
+        listChild = listChild.stream()
+                .sorted(Comparator.comparing(SysRegionPO::getSort))
+                .collect(Collectors.toList());
+        for (SysRegionPO child : listChild) {
+            ResRegionTree viewChild = CopierUtil.mapTo(child, ResRegionTree.class);
+            this.fillChildMenu(viewChild, list);
+            view.getChildren().add(viewChild);
+        }
+    }
+
+    public ExecutedResult<PagerResult<SysRegionVO>> search(SearchSysRegion 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<SysRegionPO> pageList = mapper.search(search);
+        List<SysRegionVO> listVo = new ArrayList<>();
+        List<SysRegionPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = CopierUtil.mapTo(list, SysRegionVO.class);
+        }
+        PagerResult<SysRegionVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<SysRegionPO> check4Id(Long id) {
+        SysRegionPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[系统行政地区]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+
+    protected ExecutedResult<List<SysRegionPO>> check4Id(List<Long> listId) {
+        // 从数据库查找系统行政地区
+        List<SysRegionPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[系统行政地区]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(SysRegionPO::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);
+    }
+
+    public void fillChild(ResRegionTree view, List<SysRegionPO> list) {
+        List<SysRegionPO> listChild = list.stream()
+                .filter(c -> c.getParentCode().equals(view.getCode()))
+                .collect(Collectors.toList());
+        view.setChildren(new ArrayList<>());
+        if (ListUtil.isNullOrEmpty(listChild)) {
+            return;
+        }
+        listChild = listChild.stream()
+                .sorted(Comparator.comparing(SysRegionPO::getSort))
+                .collect(Collectors.toList());
+        for (SysRegionPO child : listChild) {
+            ResRegionTree viewChild = CopierUtil.mapTo(child, ResRegionTree.class);
+            this.fillChild(viewChild, list);
+            view.getChildren().add(viewChild);
+        }
+    }
+
+    public ExecutedResult<SysRegionPO> check4Code(String code) {
+        SysRegionPO exists = mapper.get4Code(code);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[系统行政地区]不存在:" + code);
+        }
+        return ExecutedResult.success(exists);
+    }
+
+    protected ExecutedResult<List<SysRegionPO>> check4Code(List<String> listCode) {
+        // 从数据库查找系统行政地区
+        List<SysRegionPO> list = mapper.list4Code(listCode);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[系统行政地区]不存在." + listCode);
+        }
+        // 数据库找到的id列表
+        List<String> listIdFind = list.stream().map(SysRegionPO::getCode).collect(Collectors.toList());
+        // 数量不一致
+        if (listCode.size() != listIdFind.size()) {
+            // 筛选数据库不存在的系统行政地区
+            List<String> listIdNotFound = listCode.stream().filter(c -> !listIdFind.contains(c)).collect(Collectors.toList());
+            if (ListUtil.isNullOrEmpty(list)) {
+                return ExecutedResult.failed("[系统行政地区]不存在." + listIdNotFound);
+            }
+        }
+        return ExecutedResult.success(list);
+    }
+
+    public ExecutedResult<ResRegionTree> currAndTree(String code) {
+        // 校验区域信息
+        ExecutedResult<SysRegionPO> checkRegion = this.check4Code(code);
+        if (checkRegion.isFailed()) {
+            return ExecutedResult.failed(checkRegion.getMsg());
+        }
+        SysRegionPO curr = checkRegion.getData();
+        ResRegionTree result = CopierUtil.mapTo(curr, ResRegionTree.class);
+
+        List<SysRegionPO> list = mapper.getList4LevelChild(curr.getLevel());
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.success(result);
+        }
+        this.fillChild(result, list);
+        return ExecutedResult.success(result);
+    }
+
+    public List<SysRegionPO> check4CodeExc(List<String> listRegion) {
+        ExecutedResult<List<SysRegionPO>> check4Code = this.check4Code(listRegion);
+        if (check4Code.isFailed()) {
+            throw new BusinessException(check4Code.getMsg());
+        }
+        return check4Code.getData();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/nanjing/water/service/WaterFacilityParameterService.java b/src/main/java/com/nanjing/water/service/WaterFacilityParameterService.java
new file mode 100644
index 0000000..b95bd5c
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/WaterFacilityParameterService.java
@@ -0,0 +1,284 @@
+/**
+ * #                                                    __----~~~~~~~~~~~------___
+ * #                                   .  .   ~~//====......          __--~ ~~
+ * #                   -.            \_|//     |||\\  ~~~~~~::::... /~
+ * #                ___-==_       _-~o~  \/    |||  \\            _/~~-
+ * #        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+ * #    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+ * #  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+ * # /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+ * # |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+ * #          '         ~-|      /|    |-~\~~       __--~~
+ * #                      |-~~-_/ |    |   ~\_   _-~            /\
+ * #                           /  \     \__   \/~                \__
+ * #                       _--~ _/ | .-~~____--~-/                  ~~==.
+ * #                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+ * #                                 -_     ~\      ~~---l__i__i__i--~~_/
+ * #                                 _-~-__   ~)  \--______________--~~
+ * #                               //.-~~~-~_--~- |-------~~~~~~~~
+ * #                                      //.-~~~--\
+ * #                  神兽保佑
+ * #                  永无BUG!
+ */
+package com.nanjing.water.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.nanjing.water.common.*;
+import com.nanjing.water.common.model.Tuple;
+import com.nanjing.water.common.util.*;
+import com.nanjing.water.entity.request.waterfacilityparameter.ReqAddParameter;
+import com.nanjing.water.entity.request.waterfacilityparameter.ReqCreateWaterFacilityParameter;
+import com.nanjing.water.entity.request.waterfacilityparameter.ReqModifyWaterFacilityParameter;
+import com.nanjing.water.entity.search.SearchWaterFacilityParameter;
+import com.nanjing.water.repository.impl.WaterFacilityMapperImpl;
+import com.nanjing.water.repository.impl.WaterFacilityParameterMapperImpl;
+import com.nanjing.water.repository.impl.WaterMonitoryPointMapperImpl;
+import com.nanjing.water.repository.po.WaterFacilityPO;
+import com.nanjing.water.repository.po.WaterFacilityParameterPO;
+import com.nanjing.water.repository.vo.WaterFacilityParameterVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 设备设定参数
+ * @author lin.liu
+ */
+@Service
+public class WaterFacilityParameterService extends BaseService {
+    @Autowired
+    private WaterFacilityParameterMapperImpl mapper;
+    @Autowired
+    private WaterFacilityMapperImpl waterFacilityMapper;
+    @Autowired
+    private WaterMonitoryPointMapperImpl waterMonitoryPointMapper;
+
+    public ExecutedResult<String> create(ReqAddParameter request) {
+        WaterFacilityPO facilityPO = waterFacilityMapper.get(request.getFacilityId());
+        if (Objects.isNull(facilityPO)) {
+            return ExecutedResult.failed("所属设备[id=" + request.getFacilityId() + "]不存在。");
+        }
+        List<WaterFacilityParameterPO> list = mapper.getListByFacilityId(request.getFacilityId());
+        List<Long> ids = new ArrayList<Long>();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            list.forEach(x -> {
+                ids.add(x.getId());
+            });
+        }
+        if (ListUtil.isNotNullOrEmpty(ids)) {
+            mapper.remove(ids);
+        }
+        if (ListUtil.isNotNullOrEmpty(request.getParameterList())) {
+            for (ReqCreateWaterFacilityParameter x : request.getParameterList()) {
+                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) {
+        // 验证记录是否存在
+        ExecutedResult<WaterFacilityParameterPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        WaterFacilityParameterPO item = CopierUtil.mapTo(request, WaterFacilityParameterPO.class);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[设备设定参数]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<WaterFacilityParameterVO> get(Long id) {
+        WaterFacilityParameterVO result = new WaterFacilityParameterVO();
+
+        WaterFacilityParameterPO find = mapper.get(id);
+        if (null != find) {
+            result = CopierUtil.mapTo(find, WaterFacilityParameterVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<List<WaterFacilityParameterPO>> getListByFacilityId(Long facilityId) {
+        List<WaterFacilityParameterPO> list = new ArrayList<>();
+        LambdaQueryWrapper<WaterFacilityParameterPO> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(WaterFacilityParameterPO::getFacilityId, facilityId);
+        list = mapper.selectList(wrapper);
+        return ExecutedResult.success(list);
+    }
+//    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<WaterFacilityParameterPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        WaterFacilityParameterPO item = new WaterFacilityParameterPO();
+//        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<WaterFacilityParameterPO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        WaterFacilityParameterPO item = new WaterFacilityParameterPO();
+//        item.setId(id);
+//        item.setStatus(EState.NORMAL.getValue());
+//
+//        int rowCount = mapper.updateById(item);\n" +
+//        if (rowCount != 1) {
+//            return ExecutedResult.failed("启用[设备设定参数]失败。");
+//        }
+//        return ExecutedResult.success();
+//    }
+//
+//    public ExecutedResult<String> setSort(ReqSetSort request) {
+//        // 验证记录是否存在
+//        ExecutedResult<WaterFacilityParameterPO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        WaterFacilityParameterPO item = new WaterFacilityParameterPO();
+//        item.setId(request.getId());
+//        item.setSort(request.getSort());
+//
+//        int rowCount = mapper.updateById(item);\n" +
+//        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<WaterFacilityParameterPO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<WaterFacilityParameterPO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    WaterFacilityParameterPO item = new WaterFacilityParameterPO();
+//                    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<WaterFacilityParameterVO>> getList(List<Long> listId) {
+        List<WaterFacilityParameterVO> result = new ArrayList<>();
+
+        List<WaterFacilityParameterPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            result = CopierUtil.mapTo(list, WaterFacilityParameterVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<WaterFacilityParameterVO>> search(SearchWaterFacilityParameter 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<WaterFacilityParameterPO> pageList = mapper.search(search);
+        List<WaterFacilityParameterVO> listVo = new ArrayList<>();
+        List<WaterFacilityParameterPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = CopierUtil.mapTo(list, WaterFacilityParameterVO.class);
+            List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
+            for (WaterFacilityParameterVO vo : listVo) {
+                String facilityName = facilityPOList.stream().filter(x -> x.getId().equals(vo.getFacilityId())).map(WaterFacilityPO::getFacilityName).findFirst().orElse(null);
+                if (StringUtil.isNotNullOrEmpty(facilityName)) {
+                    vo.setFacilityName(facilityName);
+                }
+            }
+        }
+        PagerResult<WaterFacilityParameterVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<WaterFacilityParameterPO> check4Id(Long id) {
+        WaterFacilityParameterPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[设备设定参数]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+
+    protected ExecutedResult<List<WaterFacilityParameterPO>> check4Id(List<Long> listId) {
+        // 从数据库查找设备设定参数
+        List<WaterFacilityParameterPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[设备设定参数]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(WaterFacilityParameterPO::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/nanjing/water/service/WaterFacilityService.java b/src/main/java/com/nanjing/water/service/WaterFacilityService.java
new file mode 100644
index 0000000..5f761ed
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/WaterFacilityService.java
@@ -0,0 +1,238 @@
+/**
+ * #                                                    __----~~~~~~~~~~~------___
+ * #                                   .  .   ~~//====......          __--~ ~~
+ * #                   -.            \_|//     |||\\  ~~~~~~::::... /~
+ * #                ___-==_       _-~o~  \/    |||  \\            _/~~-
+ * #        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+ * #    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+ * #  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+ * # /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+ * # |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+ * #          '         ~-|      /|    |-~\~~       __--~~
+ * #                      |-~~-_/ |    |   ~\_   _-~            /\
+ * #                           /  \     \__   \/~                \__
+ * #                       _--~ _/ | .-~~____--~-/                  ~~==.
+ * #                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+ * #                                 -_     ~\      ~~---l__i__i__i--~~_/
+ * #                                 _-~-__   ~)  \--______________--~~
+ * #                               //.-~~~-~_--~- |-------~~~~~~~~
+ * #                                      //.-~~~--\
+ * #                  神兽保佑
+ * #                  永无BUG!
+ */
+package com.nanjing.water.service;
+
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.enums.EYesOrNo;
+import com.nanjing.water.common.model.Tuple;
+import com.nanjing.water.common.util.*;
+import com.nanjing.water.entity.request.waterfacility.ReqCreateWaterFacility;
+import com.nanjing.water.entity.request.waterfacility.ReqEditWaterFacility;
+import com.nanjing.water.entity.request.waterfacility.ReqModifyWaterFacility;
+import com.nanjing.water.entity.response.point.ResMonitoryPointDataFacility;
+import com.nanjing.water.entity.response.point.ResMonitoryPointDataFacilityParameter;
+import com.nanjing.water.entity.search.SearchWaterFacility;
+import com.nanjing.water.repository.impl.*;
+import com.nanjing.water.repository.po.*;
+import com.nanjing.water.repository.vo.WaterFacilityVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 设备信息
+ * @author lin.liu
+ */
+@Service
+public class WaterFacilityService extends BaseService {
+    @Autowired
+    private WaterFacilityMapperImpl mapper;
+    @Autowired
+    private WaterMonitoryPointMapperImpl waterMonitoryPointMapper;
+    @Autowired
+    private WaterFacilityParameterMapperImpl facilityParameterMapper;
+    @Autowired
+    private WaterFacilityTypeMapperImpl waterFacilityTypeMapper;
+
+
+    @Autowired
+    private WaterMonitoryPointService monitoryPointService;
+
+
+
+    public ExecutedResult<Long> create(ReqCreateWaterFacility request) {
+        // 转换po
+        WaterFacilityPO item = CopierUtil.mapTo(request, WaterFacilityPO.class);
+        WaterMonitoryPointPO pointPO = waterMonitoryPointMapper.getById(request.getPointId());
+        if (pointPO == null) {
+            return ExecutedResult.failed("所选监测点不存在。");
+        }
+
+        item.setAddress("");
+        item.setRemark(ParameterUtil.dealNull(request.getRemark()));
+        item.setFacilityUrl(ParameterUtil.dealNull(request.getFacilityUrl()));
+        // 设置记录创建时间
+        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(ReqModifyWaterFacility request) {
+        // 验证记录是否存在
+        ExecutedResult<WaterFacilityPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        WaterFacilityPO item = CopierUtil.mapTo(request, WaterFacilityPO.class);
+        item.setRemark(ParameterUtil.dealNull(request.getRemark()));
+        item.setFacilityUrl(ParameterUtil.dealNull(request.getFacilityUrl()));
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[设备]失败。");
+        }
+        return ExecutedResult.success();
+    }
+    public ExecutedResult<String> editIntervalTime(ReqEditWaterFacility request){
+        ExecutedResult<WaterFacilityPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        WaterFacilityPO facilityPO = CopierUtil.mapTo(request, WaterFacilityPO.class);
+        int rowCount = mapper.updateById(facilityPO);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑设备参数失败");
+        }
+        //修改定时任务时间
+        return ExecutedResult.success();
+    }
+    public ExecutedResult<WaterFacilityVO> get(Long id) {
+        WaterFacilityVO result = new WaterFacilityVO();
+
+        WaterFacilityPO find = mapper.get(id);
+        if (null != find) {
+            result = CopierUtil.mapTo(find, WaterFacilityVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<List<WaterFacilityVO>> getList(List<Long> listId) {
+        List<WaterFacilityVO> result = new ArrayList<>();
+
+        List<WaterFacilityPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            result = CopierUtil.mapTo(list, WaterFacilityVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<WaterFacilityVO>> search(SearchWaterFacility 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<WaterFacilityPO> pageList = mapper.search(search);
+        List<WaterFacilityVO> listVo = new ArrayList<>();
+        List<WaterFacilityPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = CopierUtil.mapTo(list, WaterFacilityVO.class);
+            List<WaterMonitoryPointPO> pointList = waterMonitoryPointMapper.getList();
+            List<WaterFacilityTypePO> typeList = waterFacilityTypeMapper.getList();
+            for (WaterFacilityVO vo : listVo) {
+                String pointName = pointList.stream().filter(x -> x.getId().equals(vo.getPointId())).map(WaterMonitoryPointPO::getPointName).findFirst().orElse(null);
+                if (StringUtil.isNotNullOrEmpty(pointName)) {
+                    vo.setPointName(pointName);
+                }
+                String typeName = typeList.stream().filter(o -> o.getId().equals(vo.getFacilityType())).map(WaterFacilityTypePO::getName).findFirst().orElse(null);
+                if (StringUtil.isNotNullOrEmpty(typeName)) {
+                    vo.setFacilityTypeName(typeName);
+                }
+
+            }
+        }
+        PagerResult<WaterFacilityVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<WaterFacilityPO> check4Id(Long id) {
+        WaterFacilityPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[设备表]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+
+    protected ExecutedResult<List<WaterFacilityPO>> check4Id(List<Long> listId) {
+        // 从数据库查找设备表
+        List<WaterFacilityPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[设备表]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(WaterFacilityPO::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);
+    }
+
+
+    public ExecutedResult<List<ResMonitoryPointDataFacility>> listData(Long pointId) {
+        List<ResMonitoryPointDataFacility> listVo = new ArrayList<>();
+
+        ExecutedResult<WaterMonitoryPointPO> checkPoint = monitoryPointService.check4Id(pointId);
+        if (checkPoint.isFailed()) {
+            return ExecutedResult.failed(checkPoint.getMsg());
+        }
+        List<WaterFacilityPO> listFacility = mapper.getListByPointId(pointId);
+
+        List<WaterFacilityParameterPO> listParameter = facilityParameterMapper.getList();
+        Map<Long, List<WaterFacilityParameterPO>> mapParameter = listParameter.stream().collect(Collectors.groupingBy(WaterFacilityParameterPO::getFacilityId));
+        for (WaterFacilityPO facility : listFacility) {
+            ResMonitoryPointDataFacility facilityVo = new ResMonitoryPointDataFacility();
+            facilityVo.setFacilityCode(facility.getFacilityCode());
+            facilityVo.setFacilityName(facility.getFacilityName());
+            facilityVo.setData(new ArrayList<>());
+            if (mapParameter.containsKey(facility.getId())) {
+                for (WaterFacilityParameterPO parameter : mapParameter.get(facility.getId())) {
+                    ResMonitoryPointDataFacilityParameter parameterVo = new ResMonitoryPointDataFacilityParameter();
+                    parameterVo.setMark(parameter.getColumnsCode());
+                    parameterVo.setName(parameter.getColumnsShow());
+                    parameterVo.setValue(parameter.getColumnValue());
+                    parameterVo.setUnit(parameter.getColumnsUnits());
+                    parameterVo.setLastTime(parameter.getLastTime());
+
+                    facilityVo.getData().add(parameterVo);
+                }
+            }
+            listVo.add(facilityVo);
+        }
+        return ExecutedResult.success(listVo);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/service/WaterFacilityTypeService.java b/src/main/java/com/nanjing/water/service/WaterFacilityTypeService.java
new file mode 100644
index 0000000..2841eab
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/WaterFacilityTypeService.java
@@ -0,0 +1,274 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+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.entity.request.waterfacilitytype.ReqCreateWaterFacilityType;
+import com.nanjing.water.entity.request.waterfacilitytype.ReqModifyWaterFacilityType;
+import com.nanjing.water.entity.search.SearchWaterFacilityType;
+import com.nanjing.water.repository.impl.WaterFacilityMapperImpl;
+import com.nanjing.water.repository.impl.WaterFacilityTypeMapperImpl;
+import com.nanjing.water.repository.impl.WaterMonitoryPointMapperImpl;
+import com.nanjing.water.repository.po.WaterFacilityPO;
+import com.nanjing.water.repository.po.WaterFacilityTypePO;
+import com.nanjing.water.repository.po.WaterMonitoryPointPO;
+import com.nanjing.water.repository.vo.WaterFacilityTypeVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 设备类型
+ * @author lin.liu
+ */
+@Service
+public class WaterFacilityTypeService extends BaseService {
+    @Autowired
+    private WaterFacilityTypeMapperImpl mapper;
+    @Autowired
+    private WaterFacilityMapperImpl waterFacilityMapper;
+    @Autowired
+    private WaterMonitoryPointMapperImpl waterMonitoryPointMapper;
+
+    public ExecutedResult<Long> create(ReqCreateWaterFacilityType request) {
+        // 转换po
+        WaterFacilityTypePO item = CopierUtil.mapTo(request, WaterFacilityTypePO.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(ReqModifyWaterFacilityType request) {
+        // 验证记录是否存在
+        ExecutedResult<WaterFacilityTypePO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        WaterFacilityTypePO item = CopierUtil.mapTo(request, WaterFacilityTypePO.class);
+
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[设备类型表]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<WaterFacilityTypeVO> get(Long id) {
+        WaterFacilityTypeVO result = new WaterFacilityTypeVO();
+
+        WaterFacilityTypePO find = mapper.get(id);
+        if (null != find) {
+            result = CopierUtil.mapTo(find, WaterFacilityTypeVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    //    public ExecutedResult<String> stop(Long id) {
+//        // 验证记录是否存在
+//        ExecutedResult<WaterFacilityTypePO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        WaterFacilityTypePO item = new WaterFacilityTypePO();
+//        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<WaterFacilityTypePO> checkExists = this.check4Id(id);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        WaterFacilityTypePO item = new WaterFacilityTypePO();
+//        item.setId(id);
+//        item.setStatus(EState.NORMAL.getValue());
+//
+//        int rowCount = mapper.updateById(item);\n" +
+//        if (rowCount != 1) {
+//            return ExecutedResult.failed("启用[设备类型表]失败。");
+//        }
+//        return ExecutedResult.success();
+//    }
+//
+//    public ExecutedResult<String> setSort(ReqSetSort request) {
+//        // 验证记录是否存在
+//        ExecutedResult<WaterFacilityTypePO> checkExists = this.check4Id(request.getId());
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//        WaterFacilityTypePO item = new WaterFacilityTypePO();
+//        item.setId(request.getId());
+//        item.setSort(request.getSort());
+//
+//        int rowCount = mapper.updateById(item);\n" +
+//        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<WaterFacilityTypePO>> checkExists = this.check4Id(listId);
+//        if (checkExists.isFailed()) {
+//            return ExecutedResult.failed(checkExists.getMsg());
+//        }
+//
+//        List<WaterFacilityTypePO> listUpdate = request.getList().stream()
+//                .map(c -> {
+//                    WaterFacilityTypePO item = new WaterFacilityTypePO();
+//                    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) {
+        int i = mapper.deleteById(id);
+        if (i<1) {
+            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<WaterFacilityTypeVO>> getList(List<Long> listId) {
+        List<WaterFacilityTypeVO> result = new ArrayList<>();
+
+        List<WaterFacilityTypePO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            result = CopierUtil.mapTo(list, WaterFacilityTypeVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<WaterFacilityTypeVO>> search(SearchWaterFacilityType 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<WaterFacilityTypePO> pageList = mapper.search(search);
+        List<WaterFacilityTypeVO> listVo = new ArrayList<>();
+        List<WaterFacilityTypePO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = CopierUtil.mapTo(list, WaterFacilityTypeVO.class);
+        }
+        PagerResult<WaterFacilityTypeVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<WaterFacilityTypePO> check4Id(Long id) {
+        WaterFacilityTypePO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[设备类型表]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<WaterFacilityTypePO>> check4Id(List<Long> listId) {
+        // 从数据库查找设备类型表
+        List<WaterFacilityTypePO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[设备类型表]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(WaterFacilityTypePO::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);
+    }
+
+    public ExecutedResult<List<WaterFacilityTypeVO>> getFacilityList(Integer type){
+        List<WaterFacilityTypeVO> result=new ArrayList<>();
+        List<WaterFacilityTypePO> list = mapper.getList();
+        //获取所有监测点
+        List<WaterMonitoryPointPO> pointPOList = waterMonitoryPointMapper.getListByType(type);
+        List<Long> collect = pointPOList.stream().map(WaterMonitoryPointPO::getId).collect(Collectors.toList());
+        //根据监测点获取所有设备信息
+        List<WaterFacilityPO> facilityPOList = waterFacilityMapper.getList();
+        List<WaterFacilityPO> facilityList = facilityPOList.stream().filter(x -> collect.contains(x.getPointId())).collect(Collectors.toList());
+        if(ListUtil.isNotNullOrEmpty(facilityList)){
+            List<Long> typeIdList = facilityList.stream().map(WaterFacilityPO::getFacilityType).distinct().collect(Collectors.toList());
+            List<WaterFacilityTypePO> collect1 = list.stream().filter(x -> typeIdList.contains(x.getId())).collect(Collectors.toList());
+            if(ListUtil.isNotNullOrEmpty(collect1)){
+                result=CopierUtil.mapTo(collect1, WaterFacilityTypeVO.class);
+                for(WaterFacilityTypeVO vo:result){
+                    vo.setFacilityPOList(facilityList.stream().filter(x->x.getFacilityType().equals(vo.getId())).collect(Collectors.toList()));
+                }
+            }
+        }
+        return ExecutedResult.success(result);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/service/WaterMonitoryPointService.java b/src/main/java/com/nanjing/water/service/WaterMonitoryPointService.java
new file mode 100644
index 0000000..07172d6
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/WaterMonitoryPointService.java
@@ -0,0 +1,261 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service;
+
+import com.nanjing.water.common.ExecutedResult;
+import com.nanjing.water.common.PagerResult;
+import com.nanjing.water.common.enums.EYesOrNo;
+import com.nanjing.water.common.model.Tuple;
+import com.nanjing.water.common.util.*;
+import com.nanjing.water.entity.request.watermonitorypoint.ReqCreateWaterMonitoryPoint;
+import com.nanjing.water.entity.request.watermonitorypoint.ReqModifyWaterMonitoryPoint;
+import com.nanjing.water.entity.response.point.ResMonitoryPointData;
+import com.nanjing.water.entity.response.point.ResMonitoryPointDataFacility;
+import com.nanjing.water.entity.response.point.ResMonitoryPointDataFacilityParameter;
+import com.nanjing.water.entity.search.SearchWaterMonitoryPoint;
+import com.nanjing.water.repository.impl.*;
+import com.nanjing.water.repository.po.*;
+import com.nanjing.water.repository.vo.WaterMonitoryPointVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 监控点
+ * @author lin.liu
+ */
+@Service
+public class WaterMonitoryPointService extends BaseService {
+    @Autowired
+    private WaterMonitoryPointMapperImpl mapper;
+    @Autowired
+    private WaterFacilityMapperImpl facilityMapper;
+    @Autowired
+    private WaterFacilityParameterMapperImpl facilityParameterMapper;
+    @Autowired
+    private SysRegionService regionService;
+
+    public ExecutedResult<Long> create(ReqCreateWaterMonitoryPoint request) {
+        // 转换po
+        WaterMonitoryPointPO item = CopierUtil.mapTo(request, WaterMonitoryPointPO.class);
+        item.setRemark(ParameterUtil.dealNull(request.getRemark()));
+        // 设置状态
+        //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(ReqModifyWaterMonitoryPoint request) {
+        // 验证记录是否存在
+        ExecutedResult<WaterMonitoryPointPO> checkExists = this.check4Id(request.getId());
+        if (checkExists.isFailed()) {
+            return ExecutedResult.failed(checkExists.getMsg());
+        }
+        // 转换po
+        WaterMonitoryPointPO item = CopierUtil.mapTo(request, WaterMonitoryPointPO.class);
+        item.setRemark(ParameterUtil.dealNull(request.getRemark()));
+        int rowCount = mapper.updateById(item);
+        if (rowCount != 1) {
+            return ExecutedResult.failed("编辑[监控点]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<WaterMonitoryPointVO> get(Long id) {
+        WaterMonitoryPointVO result = new WaterMonitoryPointVO();
+
+        WaterMonitoryPointPO find = mapper.get(id);
+        if (null != find) {
+            result = CopierUtil.mapTo(find, WaterMonitoryPointVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<String> remove(Long id) {
+        int result = mapper.deleteById(id);
+        if (result<1) {
+            return ExecutedResult.failed("删除[监控点]失败。");
+        }
+        return ExecutedResult.success();
+    }
+
+    public ExecutedResult<List<WaterMonitoryPointVO>> getList(List<Long> listId) {
+        List<WaterMonitoryPointVO> result = new ArrayList<>();
+
+        List<WaterMonitoryPointPO> list = mapper.getList(listId);
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            result = CopierUtil.mapTo(list, WaterMonitoryPointVO.class);
+        }
+        return ExecutedResult.success(result);
+    }
+
+    public ExecutedResult<PagerResult<WaterMonitoryPointVO>> search(SearchWaterMonitoryPoint 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<WaterMonitoryPointPO> pageList = mapper.search(search);
+        List<WaterMonitoryPointVO> listVo = new ArrayList<>();
+        List<WaterMonitoryPointPO> list = pageList.getList();
+        if (ListUtil.isNotNullOrEmpty(list)) {
+            pageList.setLastId(list.get(list.size() - 1).getId());
+            // 转换vo
+            listVo = CopierUtil.mapTo(list, WaterMonitoryPointVO.class);
+        }
+        PagerResult<WaterMonitoryPointVO> result = new PagerResult<>(pageList.getLimit(), pageList.getPage(), pageList.getTotal(), listVo);
+        result.setLastId(pageList.getLastId());
+        return ExecutedResult.success(result);
+    }
+
+    protected ExecutedResult<WaterMonitoryPointPO> check4Id(Long id) {
+        WaterMonitoryPointPO exists = mapper.get(id);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[监控点]不存在:" + id);
+        }
+        return ExecutedResult.success(exists);
+    }
+    protected ExecutedResult<List<WaterMonitoryPointPO>> check4Id(List<Long> listId) {
+        // 从数据库查找监控点
+        List<WaterMonitoryPointPO> list = mapper.getList(listId);
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.failed("[监控点]不存在." + listId);
+        }
+        // 数据库找到的id列表
+        List<Long> listIdFind = list.stream().map(WaterMonitoryPointPO::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);
+    }
+
+    public ExecutedResult<WaterMonitoryPointPO> check4Code(String code) {
+        WaterMonitoryPointPO exists = mapper.getByCode(code);
+        if (Objects.isNull(exists)) {
+            return ExecutedResult.failed("[监控点]不存在:" + code);
+        }
+        return ExecutedResult.success(exists);
+    }
+
+    public WaterMonitoryPointPO likeCode(String code) {
+        return mapper.likeCode(code);
+    }
+
+    public ExecutedResult<List<ResMonitoryPointData>> listData() {
+        List<ResMonitoryPointData> listVo = new ArrayList<>();
+
+        List<WaterMonitoryPointPO> list = mapper.getList();
+        if (ListUtil.isNullOrEmpty(list)) {
+            return ExecutedResult.success(listVo);
+        }
+        List<WaterFacilityPO> listFacility = facilityMapper.getList();
+        Map<Long, List<WaterFacilityPO>> mapFacility = listFacility.stream().collect(Collectors.groupingBy(WaterFacilityPO::getPointId));
+
+        List<WaterFacilityParameterPO> listParameter = facilityParameterMapper.getList();
+        Map<Long, List<WaterFacilityParameterPO>> mapParameter = listParameter.stream().collect(Collectors.groupingBy(WaterFacilityParameterPO::getFacilityId));
+        for (WaterMonitoryPointPO item : list) {
+            ResMonitoryPointData vo = new ResMonitoryPointData();
+            vo.setPointCode(item.getPointCode());
+            vo.setPointName(item.getPointName());
+            vo.setData(new ArrayList<>());
+            if (mapFacility.containsKey(item.getId())) {
+                for (WaterFacilityPO facility : mapFacility.get(item.getId())) {
+                    ResMonitoryPointDataFacility facilityVo = new ResMonitoryPointDataFacility();
+                    facilityVo.setFacilityCode(facility.getFacilityCode());
+                    facilityVo.setFacilityName(facility.getFacilityName());
+                    facilityVo.setData(new ArrayList<>());
+                    if (mapParameter.containsKey(facility.getId())) {
+                        for (WaterFacilityParameterPO parameter : mapParameter.get(facility.getId())) {
+                            ResMonitoryPointDataFacilityParameter parameterVo = new ResMonitoryPointDataFacilityParameter();
+                            parameterVo.setMark(parameter.getColumnsCode());
+                            parameterVo.setName(parameter.getColumnsShow());
+                            parameterVo.setValue(parameter.getColumnValue());
+                            parameterVo.setUnit(parameter.getColumnsUnits());
+                            parameterVo.setLastTime(parameter.getLastTime());
+
+                            facilityVo.getData().add(parameterVo);
+                        }
+                    }
+                    vo.getData().add(facilityVo);
+                }
+
+            }
+            listVo.add(vo);
+        }
+        return ExecutedResult.success(listVo);
+    }
+    public ExecutedResult<List<WaterMonitoryPointVO>> getPointList(Integer type){
+        List<WaterMonitoryPointVO> result = new ArrayList<>();
+        List<WaterMonitoryPointPO> pointPOList=new ArrayList<>();
+        if(Objects.isNull(type)){
+             pointPOList = mapper.getList();
+        }else {
+            pointPOList= mapper.getListByType(type);
+        }
+        if(ListUtil.isNotNullOrEmpty(pointPOList)){
+            result=CopierUtil.mapTo(pointPOList, WaterMonitoryPointVO.class);
+            //根据父id分组
+            Map<Long, List<WaterMonitoryPointVO>> map = result.stream().collect(Collectors.groupingBy(WaterMonitoryPointPO::getParentId));
+            //获取父id为0的列表
+            result= map.get(0L);
+            for(WaterMonitoryPointVO pointVO:result){
+                buildTree(map,pointVO);
+            }
+        }
+
+        return ExecutedResult.success(result);
+    }
+    public static void buildTree(Map<Long,List<WaterMonitoryPointVO>>map,WaterMonitoryPointVO pointVO){
+        //获取所有父id列表
+        List<WaterMonitoryPointVO> pointVOList = map.get(pointVO.getId());
+        if(map.get(pointVO.getId())==null){
+            return;
+        }
+        pointVO.setChildrenList(pointVOList);
+        for (WaterMonitoryPointVO pointVO1:pointVOList){
+            buildTree(map,pointVO1);
+        }
+    }
+}
diff --git a/src/main/java/com/nanjing/water/service/cache/AdminMenuService.java b/src/main/java/com/nanjing/water/service/cache/AdminMenuService.java
new file mode 100644
index 0000000..c90e5ff
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/cache/AdminMenuService.java
@@ -0,0 +1,74 @@
+package com.nanjing.water.service.cache;
+
+import com.nanjing.water.common.util.SerializeUtil;
+import com.nanjing.water.common.util.StringUtil;
+import com.nanjing.water.repository.impl.AdminMenuMapperImpl;
+import com.nanjing.water.repository.po.AdminMenuPO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Function;
+
+@Service
+public class AdminMenuService {
+    @Autowired
+    private AdminMenuMapperImpl dao;
+
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+
+    /**
+     * 获取所有菜单(缓存)
+     */
+    public List<AdminMenuPO> listAllWithCache() {
+        try {
+            if (redisTemplate.hasKey("adminMenusCache")) {
+                String json = redisTemplate.opsForValue().get("adminMenusCache");
+                if (StringUtil.isNotNullOrEmpty(json)) {
+                    return SerializeUtil.toListObject(json, AdminMenuPO.class);
+                }
+            }
+        } catch (Exception e) {
+            //
+        }
+        List<AdminMenuPO> list = dao.getList();
+        redisTemplate.opsForValue().set("adminMenusCache", SerializeUtil.toJson(list));
+        return list;
+    }
+
+    // 删除菜单缓存
+    public void removeListAllCache() {
+        redisTemplate.delete("adminMenusCache");
+    }
+
+
+    /**
+     * 获取用户拥有的菜单(缓存)
+     */
+    public List<AdminMenuPO> listUserAllWithCache(Long id, List<Long> listRoleId, Function<List<Long>, List<AdminMenuPO>> funcGetUserMenu) {
+        try {
+            if (redisTemplate.hasKey("userMenusCache")) {
+                Object json = redisTemplate.opsForHash().get("userMenusCache", id);
+                if (Objects.nonNull(json)) {
+                    return SerializeUtil.toListObject(json.toString(), AdminMenuPO.class);
+                }
+            }
+        } catch (Exception e) {
+            //
+        }
+        List<AdminMenuPO> list = funcGetUserMenu.apply(listRoleId);
+        redisTemplate.opsForHash().put("adminMenusCache", id, SerializeUtil.toJson(list));
+        return list;
+    }
+    // 删除指定用户拥有的菜单缓存
+    public void removeUserMenuCache(Long id) {
+        redisTemplate.opsForHash().delete("userMenusCache", id);
+    }
+    // 删除所有用户拥有的菜单缓存
+    public void removeAllUserMenuCache() {
+        redisTemplate.delete("userMenusCache");
+    }
+}
diff --git a/src/main/java/com/nanjing/water/service/cache/AdminPermissionService.java b/src/main/java/com/nanjing/water/service/cache/AdminPermissionService.java
new file mode 100644
index 0000000..01168ed
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/cache/AdminPermissionService.java
@@ -0,0 +1,142 @@
+package com.nanjing.water.service.cache;
+
+import com.nanjing.water.common.enums.EYesOrNo;
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.SerializeUtil;
+import com.nanjing.water.common.util.StringUtil;
+import com.nanjing.water.entity.enums.EMenuType;
+import com.nanjing.water.entity.enums.EOperation;
+import com.nanjing.water.entity.enums.EState;
+import com.nanjing.water.repository.impl.AdminPermissionMapperImpl;
+import com.nanjing.water.repository.po.AdminMenuPO;
+import com.nanjing.water.repository.po.AdminPermissionPO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Function;
+
+@Service
+public class AdminPermissionService {
+    @Autowired
+    private AdminPermissionMapperImpl dao;
+
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+
+    /**
+     * 获取所有权限(缓存)
+     */
+    public List<AdminPermissionPO> listAllWithCache() {
+        try {
+            if (redisTemplate.hasKey("adminPermissionCache")) {
+                String json = redisTemplate.opsForValue().get("adminPermissionCache");
+                if (StringUtil.isNotNullOrEmpty(json)) {
+                    return SerializeUtil.toListObject(json, AdminPermissionPO.class);
+                }
+            }
+        } catch (Exception e) {
+            //
+        }
+        List<AdminPermissionPO> list = dao.getList();
+        redisTemplate.opsForValue().set("adminPermissionCache", SerializeUtil.toJson(list));
+        return list;
+    }
+
+    // 删除权限缓存
+    public void removeListAllCache() {
+        redisTemplate.delete("adminPermissionCache");
+    }
+
+    /**
+     * 获取用户拥有的权限(缓存)
+     */
+    public List<AdminPermissionPO> listUserAllWithCache(Long id, List<Long> listRoleId, Function<List<Long>, List<AdminPermissionPO>> funcGetUserPermission) {
+        try {
+            if (redisTemplate.hasKey("userMenusCache")) {
+                Object json = redisTemplate.opsForHash().get("userPermissionCache", id);
+                if (Objects.nonNull(json)) {
+                    return SerializeUtil.toListObject(json.toString(), AdminPermissionPO.class);
+                }
+            }
+        } catch (Exception e) {
+            //
+        }
+        List<AdminPermissionPO> list = funcGetUserPermission.apply(listRoleId);
+        redisTemplate.opsForHash().put("userPermissionCache", id, list);
+        return list;
+    }
+    // 删除指定用户拥有的权限缓存
+    public void removeUserCache(Long id) {
+        redisTemplate.opsForHash().delete("userPermissionCache", id);
+    }
+    // 删除所有用户拥有的权限缓存
+    public void removeAllUserCache() {
+        redisTemplate.delete("userPermissionCache");
+    }
+
+    /**
+     * 给菜单添加默认权限
+     * @param menu 菜单信息
+     */
+    public void createDefaultPermission(AdminMenuPO menu) {
+        if (!Objects.equals(menu.getType(), EMenuType.PAGE.getValue())) {
+            return;
+        }
+        Long now = LocalDateTimeUtil.nowTimeStamp();
+        List<AdminPermissionPO> list = new ArrayList<>();
+
+        AdminPermissionPO item1 = new AdminPermissionPO();
+        item1.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.LIST.getValue());
+        item1.setMenuId(menu.getId());
+        item1.setMenuUrl(menu.getUrl());
+        item1.setName(menu.getName() + "." + EOperation.LIST.getDesc());
+        item1.setIcon("");
+        item1.setType(EOperation.LIST.getValue());
+        item1.setStatus(EState.NORMAL.getValue());
+        item1.setCreateTime(now);
+        item1.setIsDelete(EYesOrNo.NO.getValue());
+        list.add(item1);
+
+        AdminPermissionPO item2 = new AdminPermissionPO();
+        item2.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.ADD.getValue());
+        item2.setMenuId(menu.getId());
+        item2.setMenuUrl(menu.getUrl());
+        item2.setName(menu.getName() + "." + EOperation.ADD.getDesc());
+        item2.setIcon("");
+        item2.setType(EOperation.ADD.getValue());
+        item2.setStatus(EState.NORMAL.getValue());
+        item2.setCreateTime(now);
+        item2.setIsDelete(EYesOrNo.NO.getValue());
+        list.add(item2);
+
+        AdminPermissionPO item3 = new AdminPermissionPO();
+        item3.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.UPDATE.getValue());
+        item3.setMenuId(menu.getId());
+        item3.setMenuUrl(menu.getUrl());
+        item3.setName(menu.getName() + "." + EOperation.UPDATE.getDesc());
+        item3.setIcon("");
+        item3.setType(EOperation.UPDATE.getValue());
+        item3.setStatus(EState.NORMAL.getValue());
+        item3.setCreateTime(now);
+        item3.setIsDelete(EYesOrNo.NO.getValue());
+        list.add(item3);
+
+        AdminPermissionPO item4 = new AdminPermissionPO();
+        item4.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.DETAIL.getValue());
+        item4.setMenuId(menu.getId());
+        item4.setMenuUrl(menu.getUrl());
+        item4.setName(menu.getName() + "." + EOperation.DETAIL.getDesc());
+        item4.setIcon("");
+        item4.setType(EOperation.DETAIL.getValue());
+        item4.setStatus(EState.NORMAL.getValue());
+        item4.setCreateTime(now);
+        item4.setIsDelete(EYesOrNo.NO.getValue());
+        list.add(item4);
+
+        dao.insert(list);
+    }
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/AdminMenuConvert.java b/src/main/java/com/nanjing/water/service/convert/AdminMenuConvert.java
new file mode 100644
index 0000000..d290b85
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/AdminMenuConvert.java
@@ -0,0 +1,50 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.adminmenu.ReqCreateAdminMenu;
+import com.nanjing.water.entity.request.adminmenu.ReqModifyAdminMenu;
+import com.nanjing.water.entity.response.admin.ResAdminMenuTreeAndPermission;
+import com.nanjing.water.repository.po.AdminMenuPO;
+import com.nanjing.water.repository.vo.AdminMenuVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 后台菜单
+ * @author {#=author}
+ */
+@Mapper
+public interface AdminMenuConvert {
+    AdminMenuConvert INSTANCE = Mappers.getMapper(AdminMenuConvert.class);
+
+    AdminMenuPO toCreate(ReqCreateAdminMenu request);
+    AdminMenuPO toModify(ReqModifyAdminMenu request);
+
+    AdminMenuVO toVo(AdminMenuPO item);
+    List<AdminMenuVO> toVo(List<AdminMenuPO> list);
+
+    ResAdminMenuTreeAndPermission toTreeVo(AdminMenuPO item);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/AdminPermissionConvert.java b/src/main/java/com/nanjing/water/service/convert/AdminPermissionConvert.java
new file mode 100644
index 0000000..deaee96
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/AdminPermissionConvert.java
@@ -0,0 +1,50 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.adminpermission.ReqCreateAdminPermission;
+import com.nanjing.water.entity.request.adminpermission.ReqModifyAdminPermission;
+import com.nanjing.water.entity.response.admin.ResAdminPermission;
+import com.nanjing.water.repository.po.AdminPermissionPO;
+import com.nanjing.water.repository.vo.AdminPermissionVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 后台用户权限表
+ * @author {#=author}
+ */
+@Mapper
+public interface AdminPermissionConvert {
+    AdminPermissionConvert INSTANCE = Mappers.getMapper(AdminPermissionConvert.class);
+
+    AdminPermissionPO toCreate(ReqCreateAdminPermission request);
+    AdminPermissionPO toModify(ReqModifyAdminPermission request);
+
+    AdminPermissionVO toVo(AdminPermissionPO item);
+    List<AdminPermissionVO> toVo(List<AdminPermissionPO> list);
+
+    List<ResAdminPermission> toDetail(List<AdminPermissionPO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/AdminRoleConvert.java b/src/main/java/com/nanjing/water/service/convert/AdminRoleConvert.java
new file mode 100644
index 0000000..4702cef
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/AdminRoleConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.adminrole.ReqCreateAdminRole;
+import com.nanjing.water.entity.request.adminrole.ReqModifyAdminRole;
+import com.nanjing.water.repository.po.AdminRolePO;
+import com.nanjing.water.repository.vo.AdminRoleVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 后台用户角色表
+ * @author {#=author}
+ */
+@Mapper
+public interface AdminRoleConvert {
+    AdminRoleConvert INSTANCE = Mappers.getMapper(AdminRoleConvert.class);
+
+    AdminRolePO toCreate(ReqCreateAdminRole request);
+    AdminRolePO toModify(ReqModifyAdminRole request);
+
+    AdminRoleVO toVo(AdminRolePO item);
+    List<AdminRoleVO> toVo(List<AdminRolePO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/AdminRoleMenuRelationConvert.java b/src/main/java/com/nanjing/water/service/convert/AdminRoleMenuRelationConvert.java
new file mode 100644
index 0000000..141c662
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/AdminRoleMenuRelationConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.adminrolemenurelation.ReqCreateAdminRoleMenuRelation;
+import com.nanjing.water.entity.request.adminrolemenurelation.ReqModifyAdminRoleMenuRelation;
+import com.nanjing.water.repository.po.AdminRoleMenuRelationPO;
+import com.nanjing.water.repository.vo.AdminRoleMenuRelationVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 后台角色菜单关系表
+ * @author {#=author}
+ */
+@Mapper
+public interface AdminRoleMenuRelationConvert {
+    AdminRoleMenuRelationConvert INSTANCE = Mappers.getMapper(AdminRoleMenuRelationConvert.class);
+
+    AdminRoleMenuRelationPO toCreate(ReqCreateAdminRoleMenuRelation request);
+    AdminRoleMenuRelationPO toModify(ReqModifyAdminRoleMenuRelation request);
+
+    AdminRoleMenuRelationVO toVo(AdminRoleMenuRelationPO item);
+    List<AdminRoleMenuRelationVO> toVo(List<AdminRoleMenuRelationPO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/AdminRolePermissionRelationConvert.java b/src/main/java/com/nanjing/water/service/convert/AdminRolePermissionRelationConvert.java
new file mode 100644
index 0000000..5cc1e34
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/AdminRolePermissionRelationConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.adminrolepermissionrelation.ReqCreateAdminRolePermissionRelation;
+import com.nanjing.water.entity.request.adminrolepermissionrelation.ReqModifyAdminRolePermissionRelation;
+import com.nanjing.water.repository.po.AdminRolePermissionRelationPO;
+import com.nanjing.water.repository.vo.AdminRolePermissionRelationVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 后台角色权限关系表
+ * @author {#=author}
+ */
+@Mapper
+public interface AdminRolePermissionRelationConvert {
+    AdminRolePermissionRelationConvert INSTANCE = Mappers.getMapper(AdminRolePermissionRelationConvert.class);
+
+    AdminRolePermissionRelationPO toCreate(ReqCreateAdminRolePermissionRelation request);
+    AdminRolePermissionRelationPO toModify(ReqModifyAdminRolePermissionRelation request);
+
+    AdminRolePermissionRelationVO toVo(AdminRolePermissionRelationPO item);
+    List<AdminRolePermissionRelationVO> toVo(List<AdminRolePermissionRelationPO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/AdminRoleRelationConvert.java b/src/main/java/com/nanjing/water/service/convert/AdminRoleRelationConvert.java
new file mode 100644
index 0000000..0fede5a
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/AdminRoleRelationConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.adminrolerelation.ReqCreateAdminRoleRelation;
+import com.nanjing.water.entity.request.adminrolerelation.ReqModifyAdminRoleRelation;
+import com.nanjing.water.repository.po.AdminRoleRelationPO;
+import com.nanjing.water.repository.vo.AdminRoleRelationVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 后台用户和角色关系表
+ * @author {#=author}
+ */
+@Mapper
+public interface AdminRoleRelationConvert {
+    AdminRoleRelationConvert INSTANCE = Mappers.getMapper(AdminRoleRelationConvert.class);
+
+    AdminRoleRelationPO toCreate(ReqCreateAdminRoleRelation request);
+    AdminRoleRelationPO toModify(ReqModifyAdminRoleRelation request);
+
+    AdminRoleRelationVO toVo(AdminRoleRelationPO item);
+    List<AdminRoleRelationVO> toVo(List<AdminRoleRelationPO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/AdminUserConvert.java b/src/main/java/com/nanjing/water/service/convert/AdminUserConvert.java
new file mode 100644
index 0000000..27c29bc
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/AdminUserConvert.java
@@ -0,0 +1,50 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.adminuser.ReqCreateAdminUser;
+import com.nanjing.water.entity.request.adminuser.ReqModifyAdminUser;
+import com.nanjing.water.repository.po.AdminUserPO;
+import com.nanjing.water.repository.vo.AdminUserVO;
+import com.nanjing.water.service.dto.ResAdminDetail;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 管理员帐号
+ * @author {#=author}
+ */
+@Mapper
+public interface AdminUserConvert {
+    AdminUserConvert INSTANCE = Mappers.getMapper(AdminUserConvert.class);
+
+    AdminUserPO toCreate(ReqCreateAdminUser request);
+    AdminUserPO toModify(ReqModifyAdminUser request);
+
+    AdminUserVO toVo(AdminUserPO item);
+    List<AdminUserVO> toVo(List<AdminUserPO> list);
+
+    ResAdminDetail toDetail(AdminUserPO item);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/AlarmHistoryConvert.java b/src/main/java/com/nanjing/water/service/convert/AlarmHistoryConvert.java
new file mode 100644
index 0000000..c3e624c
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/AlarmHistoryConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.alarmhistory.ReqCreateAlarmHistory;
+import com.nanjing.water.entity.request.alarmhistory.ReqModifyAlarmHistory;
+import com.nanjing.water.repository.po.AlarmHistoryPO;
+import com.nanjing.water.repository.vo.AlarmHistoryVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 报警信息
+ * @author {#=author}
+ */
+@Mapper
+public interface AlarmHistoryConvert {
+    AlarmHistoryConvert INSTANCE = Mappers.getMapper(AlarmHistoryConvert.class);
+
+    AlarmHistoryPO toCreate(ReqCreateAlarmHistory request);
+    AlarmHistoryPO toModify(ReqModifyAlarmHistory request);
+
+    AlarmHistoryVO toVo(AlarmHistoryPO item);
+    List<AlarmHistoryVO> toVo(List<AlarmHistoryPO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/AlarmSchemeConvert.java b/src/main/java/com/nanjing/water/service/convert/AlarmSchemeConvert.java
new file mode 100644
index 0000000..2bdfa98
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/AlarmSchemeConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.alarmscheme.ReqCreateAlarmScheme;
+import com.nanjing.water.entity.request.alarmscheme.ReqModifyAlarmScheme;
+import com.nanjing.water.repository.po.AlarmSchemePO;
+import com.nanjing.water.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/java/com/nanjing/water/service/convert/CommonParametersConvert.java b/src/main/java/com/nanjing/water/service/convert/CommonParametersConvert.java
new file mode 100644
index 0000000..ba94150
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/CommonParametersConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.commonparameters.ReqCreateCommonParameters;
+import com.nanjing.water.entity.request.commonparameters.ReqModifyCommonParameters;
+import com.nanjing.water.repository.po.CommonParametersPO;
+import com.nanjing.water.repository.vo.CommonParametersVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 公共参数
+ * @author {#=author}
+ */
+@Mapper
+public interface CommonParametersConvert {
+    CommonParametersConvert INSTANCE = Mappers.getMapper(CommonParametersConvert.class);
+
+    CommonParametersPO toCreate(ReqCreateCommonParameters request);
+    CommonParametersPO toModify(ReqModifyCommonParameters request);
+
+    CommonParametersVO toVo(CommonParametersPO item);
+    List<CommonParametersVO> toVo(List<CommonParametersPO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/SysDictDataConvert.java b/src/main/java/com/nanjing/water/service/convert/SysDictDataConvert.java
new file mode 100644
index 0000000..2915842
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/SysDictDataConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.sysdictdata.ReqCreateSysDictData;
+import com.nanjing.water.entity.request.sysdictdata.ReqModifySysDictData;
+import com.nanjing.water.repository.po.SysDictDataPO;
+import com.nanjing.water.repository.vo.SysDictDataVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 字典数据表
+ * @author {#=author}
+ */
+@Mapper
+public interface SysDictDataConvert {
+    SysDictDataConvert INSTANCE = Mappers.getMapper(SysDictDataConvert.class);
+
+    SysDictDataPO toCreate(ReqCreateSysDictData request);
+    SysDictDataPO toModify(ReqModifySysDictData request);
+
+    SysDictDataVO toVo(SysDictDataPO item);
+    List<SysDictDataVO> toVo(List<SysDictDataPO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/SysDictTypeConvert.java b/src/main/java/com/nanjing/water/service/convert/SysDictTypeConvert.java
new file mode 100644
index 0000000..39e919e
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/SysDictTypeConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.sysdicttype.ReqCreateSysDictType;
+import com.nanjing.water.entity.request.sysdicttype.ReqModifySysDictType;
+import com.nanjing.water.repository.po.SysDictTypePO;
+import com.nanjing.water.repository.vo.SysDictTypeVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 字典类型表
+ * @author {#=author}
+ */
+@Mapper
+public interface SysDictTypeConvert {
+    SysDictTypeConvert INSTANCE = Mappers.getMapper(SysDictTypeConvert.class);
+
+    SysDictTypePO toCreate(ReqCreateSysDictType request);
+    SysDictTypePO toModify(ReqModifySysDictType request);
+
+    SysDictTypeVO toVo(SysDictTypePO item);
+    List<SysDictTypeVO> toVo(List<SysDictTypePO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/SysRegionConvert.java b/src/main/java/com/nanjing/water/service/convert/SysRegionConvert.java
new file mode 100644
index 0000000..cfe4998
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/SysRegionConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.sysregion.ReqCreateSysRegion;
+import com.nanjing.water.entity.request.sysregion.ReqModifySysRegion;
+import com.nanjing.water.repository.po.SysRegionPO;
+import com.nanjing.water.repository.vo.SysRegionVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 系统行政地区
+ * @author {#=author}
+ */
+@Mapper
+public interface SysRegionConvert {
+    SysRegionConvert INSTANCE = Mappers.getMapper(SysRegionConvert.class);
+
+    SysRegionPO toCreate(ReqCreateSysRegion request);
+    SysRegionPO toModify(ReqModifySysRegion request);
+
+    SysRegionVO toVo(SysRegionPO item);
+    List<SysRegionVO> toVo(List<SysRegionPO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/WaterFacilityConvert.java b/src/main/java/com/nanjing/water/service/convert/WaterFacilityConvert.java
new file mode 100644
index 0000000..0bdb507
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/WaterFacilityConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.waterfacility.ReqCreateWaterFacility;
+import com.nanjing.water.entity.request.waterfacility.ReqModifyWaterFacility;
+import com.nanjing.water.repository.po.WaterFacilityPO;
+import com.nanjing.water.repository.vo.WaterFacilityVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 设备信息
+ * @author {#=author}
+ */
+@Mapper
+public interface WaterFacilityConvert {
+    WaterFacilityConvert INSTANCE = Mappers.getMapper(WaterFacilityConvert.class);
+
+    WaterFacilityPO toCreate(ReqCreateWaterFacility request);
+    WaterFacilityPO toModify(ReqModifyWaterFacility request);
+
+    WaterFacilityVO toVo(WaterFacilityPO item);
+    List<WaterFacilityVO> toVo(List<WaterFacilityPO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/WaterFacilityParameterConvert.java b/src/main/java/com/nanjing/water/service/convert/WaterFacilityParameterConvert.java
new file mode 100644
index 0000000..288ade8
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/WaterFacilityParameterConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.waterfacilityparameter.ReqCreateWaterFacilityParameter;
+import com.nanjing.water.entity.request.waterfacilityparameter.ReqModifyWaterFacilityParameter;
+import com.nanjing.water.repository.po.WaterFacilityParameterPO;
+import com.nanjing.water.repository.vo.WaterFacilityParameterVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 设备设定参数
+ * @author {#=author}
+ */
+@Mapper
+public interface WaterFacilityParameterConvert {
+    WaterFacilityParameterConvert INSTANCE = Mappers.getMapper(WaterFacilityParameterConvert.class);
+
+    WaterFacilityParameterPO toCreate(ReqCreateWaterFacilityParameter request);
+    WaterFacilityParameterPO toModify(ReqModifyWaterFacilityParameter request);
+
+    WaterFacilityParameterVO toVo(WaterFacilityParameterPO item);
+    List<WaterFacilityParameterVO> toVo(List<WaterFacilityParameterPO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/WaterFacilityTypeConvert.java b/src/main/java/com/nanjing/water/service/convert/WaterFacilityTypeConvert.java
new file mode 100644
index 0000000..b8f5283
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/WaterFacilityTypeConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.waterfacilitytype.ReqCreateWaterFacilityType;
+import com.nanjing.water.entity.request.waterfacilitytype.ReqModifyWaterFacilityType;
+import com.nanjing.water.repository.po.WaterFacilityTypePO;
+import com.nanjing.water.repository.vo.WaterFacilityTypeVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 设备类型
+ * @author {#=author}
+ */
+@Mapper
+public interface WaterFacilityTypeConvert {
+    WaterFacilityTypeConvert INSTANCE = Mappers.getMapper(WaterFacilityTypeConvert.class);
+
+    WaterFacilityTypePO toCreate(ReqCreateWaterFacilityType request);
+    WaterFacilityTypePO toModify(ReqModifyWaterFacilityType request);
+
+    WaterFacilityTypeVO toVo(WaterFacilityTypePO item);
+    List<WaterFacilityTypeVO> toVo(List<WaterFacilityTypePO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/convert/WaterMonitoryPointConvert.java b/src/main/java/com/nanjing/water/service/convert/WaterMonitoryPointConvert.java
new file mode 100644
index 0000000..82c89c9
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/convert/WaterMonitoryPointConvert.java
@@ -0,0 +1,47 @@
+/**
+#                                                    __----~~~~~~~~~~~------___
+#                                   .  .   ~~//====......          __--~ ~~
+#                   -.            \_|//     |||\\  ~~~~~~::::... /~
+#                ___-==_       _-~o~  \/    |||  \\            _/~~-
+#        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
+#    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
+#  .~       .~       |   \\ -_    /  /-   /   ||      \   /
+# /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
+# |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
+#          '         ~-|      /|    |-~\~~       __--~~
+#                      |-~~-_/ |    |   ~\_   _-~            /\
+#                           /  \     \__   \/~                \__
+#                       _--~ _/ | .-~~____--~-/                  ~~==.
+#                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
+#                                 -_     ~\      ~~---l__i__i__i--~~_/
+#                                 _-~-__   ~)  \--______________--~~
+#                               //.-~~~-~_--~- |-------~~~~~~~~
+#                                      //.-~~~--\
+#                  神兽保佑
+#                  永无BUG!
+*/
+package com.nanjing.water.service.convert;
+
+import com.nanjing.water.entity.request.watermonitorypoint.ReqCreateWaterMonitoryPoint;
+import com.nanjing.water.entity.request.watermonitorypoint.ReqModifyWaterMonitoryPoint;
+import com.nanjing.water.repository.po.WaterMonitoryPointPO;
+import com.nanjing.water.repository.vo.WaterMonitoryPointVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 监控点
+ * @author {#=author}
+ */
+@Mapper
+public interface WaterMonitoryPointConvert {
+    WaterMonitoryPointConvert INSTANCE = Mappers.getMapper(WaterMonitoryPointConvert.class);
+
+    WaterMonitoryPointPO toCreate(ReqCreateWaterMonitoryPoint request);
+    WaterMonitoryPointPO toModify(ReqModifyWaterMonitoryPoint request);
+
+    WaterMonitoryPointVO toVo(WaterMonitoryPointPO item);
+    List<WaterMonitoryPointVO> toVo(List<WaterMonitoryPointPO> list);
+}
diff --git a/src/main/java/com/nanjing/water/service/dto/ResAdminDetail.java b/src/main/java/com/nanjing/water/service/dto/ResAdminDetail.java
new file mode 100644
index 0000000..c7bf301
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/dto/ResAdminDetail.java
@@ -0,0 +1,35 @@
+package com.nanjing.water.service.dto;
+
+import com.nanjing.water.common.util.LocalDateTimeUtil;
+import com.nanjing.water.common.util.NumericUtil;
+import com.nanjing.water.repository.po.AdminUserPO;
+import com.nanjing.water.repository.vo.AdminRoleVO;
+import com.nanjing.water.repository.vo.BasicVO;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Objects;
+
+@Data
+public class ResAdminDetail extends AdminUserPO implements BasicVO {
+    /**
+     * 角色列表
+     */
+    private List<AdminRoleVO> listRole;
+
+    @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/service/dto/StatisticsTodayDto.java b/src/main/java/com/nanjing/water/service/dto/StatisticsTodayDto.java
new file mode 100644
index 0000000..bf7fe2a
--- /dev/null
+++ b/src/main/java/com/nanjing/water/service/dto/StatisticsTodayDto.java
@@ -0,0 +1,60 @@
+package com.nanjing.water.service.dto;
+
+import com.nanjing.water.common.ConstantFactory;
+import com.nanjing.water.common.util.ListUtil;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Objects;
+
+@Data
+public class StatisticsTodayDto {
+    private String pointCode;
+    private String facilityCode;
+    private String parameterCode;
+    private List<BigDecimal> listValue;
+    /**
+     * 最小值
+     */
+    public BigDecimal getMinValue() {
+        if (ListUtil.isNullOrEmpty(listValue)) {
+            return BigDecimal.ZERO;
+        }
+        return listValue.stream().min(BigDecimal::compareTo).get();
+    }
+    /**
+     * 最大值
+     */
+    public BigDecimal getMaxValue() {
+        if (ListUtil.isNullOrEmpty(listValue)) {
+            return BigDecimal.ZERO;
+        }
+        return listValue.stream().max(BigDecimal::compareTo).get();
+    }
+    /**
+     * 平均值
+     */
+    public BigDecimal getAverageValue() {
+        if (ListUtil.isNullOrEmpty(listValue)) {
+            return BigDecimal.ZERO;
+        }
+        BigDecimal sum = listValue.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
+        if (Objects.equals(sum, BigDecimal.ZERO)) {
+            return BigDecimal.ZERO;
+        }
+        return sum.divide(new BigDecimal(String.valueOf(listValue.size())), ConstantFactory.NUM2, BigDecimal.ROUND_HALF_UP);
+    }
+    /**
+     * 统计次数
+     */
+    public Integer getDataCount() {
+        return this.listValue.size();
+    }
+    /**
+     * 合格次数
+     */
+    public Integer getPassCount() {
+        return this.listValue.size();
+    }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index c902c4c..7e1296f 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,6 +1,6 @@
 spring:
   application:
-    name: xxx-yyy
+    name: nanjing-station-service
   profiles:
     # 通过mvn打包传递参数,指定配置文件环境
     active: @package.environment@
@@ -21,7 +21,7 @@
 
 jwt:
   token_header: Token #JWT存储的请求头
-  secret: xxx-yyy-secret #hardware-lunhan-secret #JWT加解密密钥(所有硬件项目通用,公用一个用户中心登录,其他项目不写登录接口,直接用token)
+  secret: nanjing-station-secret #hardware-lunhan-secret #JWT加解密密钥(所有硬件项目通用,公用一个用户中心登录,其他项目不写登录接口,直接用token)
   expiration: 15811200 #JWT的超期限时间(60*60*24*183) 单位:秒
   head: 'Bearer '  #JWT负载中拿到开头
 
diff --git a/src/test/java/com/nanjing/water/GenCodeGauss.java b/src/test/java/com/nanjing/water/GenCodeGauss.java
index 31feb18..c60413a 100644
--- a/src/test/java/com/nanjing/water/GenCodeGauss.java
+++ b/src/test/java/com/nanjing/water/GenCodeGauss.java
@@ -21,7 +21,7 @@
     private static final String PORT = "57654";
     private static final String USER = "lunhan";
     private static final String PASSWORD = "lunhan.20240330";
-    private static final String DB_NAME = "water_basic";
+    private static final String DB_NAME = "nanjing_water_system";
     private static final String AUTHOR = "lin.liu";
 
     public static Connection CONN = null;
@@ -30,16 +30,16 @@
 
     //region 输出文件路径设置
     class OutSet {
-        public static final String PO = "./src/main/java/com/lunhan/xxx/repository/po/";
-        public static final String VO = "./src/main/java/com/lunhan/xxx/repository/vo/";
-        public static final String CONVERT_MAPPER = "./src/main/java/com/lunhan/xxx/service/convert/";
-        public static final String MAPPER_IMPL = "./src/main/java/com/lunhan/xxx/repository/impl/";
-        public static final String MAPPER = "./src/main/java/com/lunhan/xxx/repository/mapper/";
-        public static final String SERVICE = "./src/main/java/com/lunhan/xxx/service/";
-        public static final String Controller = "./src/main/java/com/lunhan/xxx/host/controller/";
-        public static final String SEARCH = "./src/main/java/com/lunhan/xxx/entity/search/";
-        public static final String RequestDTO = "./src/main/java/com/lunhan/xxx/entity/request/";
-        public static final String ResponseDTO = "./src/main/java/com/lunhan/xxx/entity/response/";
+        public static final String PO = "./src/main/java/com/nanjing/water/repository/po/";
+        public static final String VO = "./src/main/java/com/nanjing/water/repository/vo/";
+        public static final String CONVERT_MAPPER = "./src/main/java/com/nanjing/water/service/convert/";
+        public static final String MAPPER_IMPL = "./src/main/java/com/nanjing/water/repository/impl/";
+        public static final String MAPPER = "./src/main/java/com/nanjing/water/repository/mapper/";
+        public static final String SERVICE = "./src/main/java/com/nanjing/water/service/";
+        public static final String Controller = "./src/main/java/com/nanjing/water/host/controller/";
+        public static final String SEARCH = "./src/main/java/com/nanjing/water/entity/search/";
+        public static final String Request = "./src/main/java/com/nanjing/water/entity/request/";
+        public static final String Response = "./src/main/java/com/nanjing/water/entity/response/";
     }
     //endregion
 
@@ -244,7 +244,7 @@
      * 只生成以下配置的表
      */
     private static final List<String> ONLY_TABLES = Arrays.asList(
-
+     "data_upload_record"
     );
 
     public static void main(String[] args) {
@@ -792,10 +792,10 @@
         }
         content.append("}");
 
-        if (new File(GenCodeGauss.OutSet.RequestDTO + tableNamePackage + "/" + createDTOName + ".java").exists()) {
+        if (new File(GenCodeGauss.OutSet.Request + tableNamePackage + "/" + createDTOName + ".java").exists()) {
             return;
         }
-        writeFile(GenCodeGauss.OutSet.RequestDTO + tableNamePackage + "/", createDTOName + ".java", content.toString());
+        writeFile(GenCodeGauss.OutSet.Request + tableNamePackage + "/", createDTOName + ".java", content.toString());
     }
 
     private static void genModifyDto(List<Map<String, Object>> columns, String tabName, String tableDesc) {
@@ -885,10 +885,10 @@
         }
         content.append("}");
 
-        if (new File(GenCodeGauss.OutSet.RequestDTO + tableNamePackage + "/" + modifyDTOName + ".java").exists()) {
+        if (new File(GenCodeGauss.OutSet.Request + tableNamePackage + "/" + modifyDTOName + ".java").exists()) {
             return;
         }
-        writeFile(GenCodeGauss.OutSet.RequestDTO + tableNamePackage + "/", modifyDTOName + ".java", content.toString());
+        writeFile(GenCodeGauss.OutSet.Request + tableNamePackage + "/", modifyDTOName + ".java", content.toString());
     }
 
     private static void genConvertMapper(String tableName, String tableDesc) {
diff --git a/src/test/java/com/nanjing/water/GenCodeMysql.java b/src/test/java/com/nanjing/water/GenCodeMysql.java
index d57a60e..7d3db3a 100644
--- a/src/test/java/com/nanjing/water/GenCodeMysql.java
+++ b/src/test/java/com/nanjing/water/GenCodeMysql.java
@@ -47,17 +47,17 @@
 
     //region 架包路径设置
     class PackageSet {
-        public static final String PO = "com.lunhan.water.repository.po";
-        public static final String VO = "com.lunhan.water.repository.vo";
-        public static final String CONVERT_MAPPER = "com.lunhan.water.service.convert";
-        public static final String DAO = "com.lunhan.water.repository.dao";
-        public static final String COLUMNS_ENUM = "com.lunhan.water.repository.columns";
-        public static final String MAPPER = "com.lunhan.water.repository";
-        public static final String SERVICE = "com.lunhan.water.service";
-        public static final String Controller = "com.lunhan.water.host.controller";
-        public static final String SEARCH = "com.lunhan.water.entity.search";
-        public static final String Request = "com.lunhan.water.entity.request";
-        public static final String Response = "com.lunhan.water.entity.response";
+        public static final String PO = "com.nanjing.water.repository.po";
+        public static final String VO = "com.nanjing.water.repository.vo";
+        public static final String CONVERT_MAPPER = "com.nanjing.water.service.convert";
+        public static final String DAO = "com.nanjing.water.repository.dao";
+        public static final String COLUMNS_ENUM = "com.nanjing.water.repository.columns";
+        public static final String MAPPER = "com.nanjing.water.repository";
+        public static final String SERVICE = "com.nanjing.water.service";
+        public static final String Controller = "com.nanjing.water.host.controller";
+        public static final String SEARCH = "com.nanjing.water.entity.search";
+        public static final String Request = "com.nanjing.water.entity.request";
+        public static final String Response = "com.nanjing.water.entity.response";
     }
     //endregion
 
@@ -120,8 +120,8 @@
 
     //region vo类 import 内容设置
     private static final String[] SET_VO_IMPORT = new String[]{
-            "import com.lunhan.water.common.util.LocalDateTimeUtil;",
-            "import com.lunhan.water.common.util.NumericUtil;",
+            "import com.nanjing.water.common.util.LocalDateTimeUtil;",
+            "import com.nanjing.water.common.util.NumericUtil;",
             "import java.util.Objects;"
     };
     //endregion
@@ -137,7 +137,7 @@
 
     //region 字段名枚举类 import 内容设置
     private static final String[] SET_COLUMNS_ENUM_IMPORT = new String[]{
-            "import com.lunhan.water.common.orm2.enums.ColumnBasic;",
+            "import com.nanjing.water.common.orm2.enums.ColumnBasic;",
             "import java.util.Arrays;",
             "import java.util.Objects;"
     };
@@ -145,13 +145,13 @@
 
     //region dao类 import 内容设置
     private static final String[] SET_DAO_IMPORT = new String[]{
-            "import com.lunhan.water.common.ConstantFactory;",
-            "import com.lunhan.water.common.PagerResult;",
-            "import com.lunhan.water.common.orm2.SqlBuilder;",
-            "import com.lunhan.water.common.util.*;",
-            "import com.lunhan.water.entity.dto.OrderByDTO;",
-            "import com.lunhan.water.entity.enums.*;",
-            "import com.lunhan.water.repository.BasicDao;",
+            "import com.nanjing.water.common.ConstantFactory;",
+            "import com.nanjing.water.common.PagerResult;",
+            "import com.nanjing.water.common.orm2.SqlBuilder;",
+            "import com.nanjing.water.common.util.*;",
+            "import com.nanjing.water.entity.dto.OrderByDTO;",
+            "import com.nanjing.water.entity.enums.*;",
+            "import com.nanjing.water.repository.BasicDao;",
             "import org.springframework.stereotype.Repository;",
             "import java.util.*;",
             "import org.springframework.transaction.annotation.Transactional;"
@@ -160,9 +160,9 @@
 
     //region service类 import 内容设置
     private static final String[] SET_Service_IMPORT = new String[]{
-            "import com.lunhan.water.common.*;",
-            "import com.lunhan.water.common.model.Tuple;",
-            "import com.lunhan.water.common.util.*;",
+            "import com.nanjing.water.common.*;",
+            "import com.nanjing.water.common.model.Tuple;",
+            "import com.nanjing.water.common.util.*;",
             "import org.apache.commons.lang3.BooleanUtils;",
             "import org.springframework.beans.factory.annotation.Autowired;",
             "import org.springframework.stereotype.Service;",
@@ -174,13 +174,13 @@
 
     //region Controller类 import 内容设置
     private static final String[] SET_Controller_IMPORT = new String[]{
-            "import com.lunhan.water.common.ExecutedResult;",
-            "import com.lunhan.water.common.PagerResult;",
-            "import com.lunhan.water.common.util.ParameterUtil;",
-            "import com.lunhan.water.common.validator.ParameterValidateResult;",
-            "import com.lunhan.water.common.validator.ParameterValidator;",
-            "import com.lunhan.water.entity.request.ReqListId;",
-            "import com.lunhan.water.host.BasicController;",
+            "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;"

--
Gitblit v1.9.3